For certain content, it is necessary to prevent multiple users from editing the same content at the same time. This is exactly what this feature is about, namely to allow one user to gain exclusive access to some content so that it remains locked to other users until that access is released.
Exclusive access state
For content that is exclusive access related, you should see some indicator (icon or icon with text) in the content page or content item view. It's possible to have the following states:
- Disabled (Exclusive access unavailable) - Impossible to check out or release the content for exclusive access. This doesn't necessarily affect the lock status of the content, though;
- Not checked out - The object is locked but can be checked out, and it gets unlocked once the check out is accepted by the server;
- Checked out by me - The object is unlocked only to the current user because they have exclusive access to it;
- Checked out by others - The object is locked and can not be checked out, because another user has exclusive access to it.
The exclusive access aspect of a content object only contributes in the overall locking status (combined with other factors, e.g. User Rights using logic or). In other words, an object can still be locked when you have exclusive access to it. |
Exclusive access and MRO
An object can be exclusive access related and, in the mean time, an MRO object.
- When an exclusive access object is locked because e.g. it's not yet checked out, normally its child objects are not locked because of it, i.e. child objects do not inherit the exclusive access state from the parent object;
- However, if such an exclusive access object also happens to be an MRO task owner or work package, its locking state will be inherited by all its direct and indirect MRO child objects.
Check out and release
Two basic options are provided regarding exclusive access.
- Check out - Checks out the content so that you can exclusively edit it;
- Release - Gives back the exclusive access to the content so other users can request it.
Applied conditions
The check out and release options are only possible under the following conditions.
- The app is in Online sync mode;
- The content is exclusive access related and it's not disabled;
- There are no local changes on the content to be checked out or released; (It shouldn't be possible before checking out anyway.)
- (Only for check out) The content is not yet checked out by anyone;
- (Only for release) The content is already checked out by the current user. Here, the current user must be known and it's not enough to just be successfully logged in. The login must have a unique identifier, see login details.
Branch download and check out
When downloading a branch, there is now a second option to check out all downloaded content afterwards. Note that the previously mentioned conditions still apply, those that do not fulfill them will simply be skipped. For information on to customize it in Xaml check out this article about the BranchDownloadCommand.
XAML customizing
CheckOutContentCommand and ReleaseContentCommand are available on a ContentViewModel. Both accept different types of parameters.
- No parameter: The context object is assumed;
- A single instance of an object or ContentViewModel: That object or the context object of that ContentViewModel is to be checked out or released;
- A collection of objects or ContentViewModels: The given objects are to be checked out or released. This case is demonstrated in the example below, in which the current level of child objects are to be checked out.
Command="{Binding CheckOutContentCommand}"
CommandParameter="{Binding Children.Items}">
</Button>
It's possible to supply a filtered collection of objects as the parameter for these commands. |
Details of exclusive access related information of the context object are available in ContentViewModel.ExclusiveAccessInfo, and can be inspected using the developer mode.