Jump to: navigation, search

Data Replication (UBIK Client)


The UBIK® clients support data replication mechanism so that users can create and maintain data more efficiently. For example, a user can quickly replicate a local branch and create multiple copies of it in other parts of the hierarchy.

IC Hint square.pngThe feature is demonstrated below using UBIK.UWP. However, with some XAML customizings, it is also available in UBIK.Xamarin because of the shared XAML commands.

Copy & paste

UBIK WinX UI Copy Content.gif

On way to replicate data is through the copy & paste mechanism. A typical use case is as the following.

  • Navigates to the branch that should be replicated;
  • Brings up the bottom app bar and press Copy;
  • Navigates to the destination where the branch should be replicated;
  • Brings up the bottom app bar and press Paste.

In principal, the usage is comparable to the copy & paste mechanisms in any other apps out there. However, there are some unique UBIK® details worthing mentioning.

Regarding copy

When copying, an entire branch is involved. This includes

  • The branch root object and all its local children (direct or indirect);
  • Files of all (in)direct child documents. However, there are exceptions to this, namely
    • if a file download fails;
    • if the app is in offline mode.
  • The data of the above mentioned objects: Display strings, user rights, etc.;
  • The properties of the above mentioned objects: Their values, user rights, validations, etc.;
    • All data users can interact with (e.g. values, validations) will only be copied if the MetaProperty allows.

The Copy action is only available when the app initialization is complete and there is something to copy in the specified branch.

IC Hint square.pngValidity of a copy: After triggering a copy, users can paste the same branch as many time as they want until
  • either users log out;
  • or another copy is triggered, which overrides the old copy;
  • or the copied branch is no longer available (E.g. deleted)
UBIK WinX UI Paste Content.gif

Regarding paste

When pasting, an entirely independent copy of the specified branch is created and added as a child of the destination object. The Paste action is only available when

  • The user has triggered a copy and it is still valid (see Hint|Validity of a copy);
  • And the destination object allows modification. In other words, it is not locked due to user rights, MRO status or scan status;
  • And the destination object allows the root of the copied branch as a child object. Namely the creation of the branch root's MetaClass should be allowed in the destination MetaClass. (See step 8).
IC Attention.pngIt is possible that some children (directly/indirectly) under the branch root are not copied even though they are locally available. For example, if a branch root workpackage is configured in a way that clients are not allowed to create tasks underneath. The client cannot violate that rule and, therefore, will ignore these tasks during replication. A quick way to check whether that's the case on the client is to browse to e.g. that workpackage and see if it's possible to create a task.

Data templates

On top of the standard copy & paste mechanism, UBIK® also supports a certain type of objects, namely data templates to help organize and present what the users can replicate under different hierarchical contexts.

Selecting & Querying data templates

A major issue with the standard copy & paste mechanism is its relatively low efficiency when users need to copy & paste the same object instances to different locations in the hierarchy many times, especially when the total number of available source instances grows larger. The users would have to find the instance they want to replicate out of the many and repeat that process for every round of copy & paste.

To improve the usability in this case, UBIK® allows classifying objects in a way that they are queried against and presented when users want to see what they can copy & paste under a certain hierarchical context. More specifically, it works as the following.

  • The users browse to a certain context in the hierarchy where creating a certain type of objects (classified as templatable data) is allowed;
  • There is at least one offline query configured that queries against that type of objects;
  • The users click a button (in the top-right corner of the child area by default) to check what can be copied and pasted under the current context;
  • The result list is determined by the offline query (the one selected by the users if there are more than one). UBIK® will try to automatically fill out all query criteria by extracting relevant information from the context (those that cannot be found will simply be ignored/skipped);
  • The list is initially presented in a dialog. However, if the users do not find the data templates they are looking for, or there are still too many in the list, they can click the ... button to open the offline query page and manually query for results;
  • By default, all data templates displayed in the list can be expanded (otherwise known as the double level view feature) so that users get the chance to easily check what's underneath.
IC Hint square.pngSince the same queries are used every time users look for available data templates, their criteria are reset every time so that any criteria set manually by the users previously do not affect future querying. Nevertheless, the context information (if there is any) is still extracted and used automatically during each querying.

Replicating data templates

UBIK WinX UI Data Template As Data.gif
UBIK WinX UI Data Template As Template.gif

Essentially, replicating using data templates is nothing more than regular copying & pasting objects instances. They will carry the same information (property values, display strings, etc.) as the original data templates. However, according to whether the replicated instances appear in the selection list afterwards, the replication can be divided into two types.

As regular data

In this case, the replicated instances will not appear in the template selection list. This can be done by clicking/tapping the data template item in the list.

A typical user scenario of this is field workers generating a large number of work packages out of existing data templates.

As data templates

In this case, the replicated instances will appear in the template selection list. This can be done by clicking/tapping the additional button (at the right side by default) in each data template item.

A typical user scenario of this is administrators/work planners creating work package data templates from similar templates that already exist.

Demo Videos

XAML Commands

Show available data templates

The AddTemplatableDataCommand can be used for this. It support the following parameter.

  • Uid: Mandatory, specifies the Uid of the offline data template query;
  • FilterContext: Optional, specifies the Uid of the context object from which the filter criteria values should be extracted and used. If unspecified, the current parent/context object where the command is triggered is used;
  • EnableFilloutCriteria: Optional, whether the filter criteria of the offline data template query should be automatically filled out using the FilterContext. False if unspecified;
  • SkipDialog: Optional* (see attention below), whether the app should skip showing the compact dialog and jump right to the full query page for displaying results. False if unspecified.
IC Attention.pngSince UBIK.Xamarin presents most results in pages instead of dialogs due to device dimensions, SkipDialog should always be set to True there.

UWP

<Button
   ...
   xmlns:controls="using:UBIK.WinX.Controls"
   x:Name="SomeRandomButton"
   DataContext="{Binding}"
   Command="{Binding AddTemplatableDataCommand}">
    <Button.CommandParameter>
        <controls:KeyValueList>
            <controls:KeyValueParameter Key="Uid" Value="{Binding DataContext.OfflineTemplateQueries[0].UID, ElementName=SomeRandomButton}" />
            <controls:KeyValueParameter Key="FilterContext" Value="01475137-5028-400B-8E03-AB66C2444D30" />
            <controls:KeyValueParameter Key="EnableFillOutCriteria" Value="true" />
            <controls:KeyValueParameter Key="SkipDialog" Value="false" />
        </controls:KeyValueList>
    </Button.CommandParameter>
</Button>

Xamarin

<Button
   ...
   xmlns:classes="clr-namespace:UBIK.CPL.Classes;assembly=UBIK.CPL"
   x:Name="SomeRandomButton"
   BindingContext="{Binding}"
   Command="{Binding AddTemplatableDataCommand}">
    <Button.CommandParameter>
        <classes:KeyValueList>
            <classes:KeyValueParameter Key="Uid" Value="{Binding BindingContext.OfflineTemplateQueries[0].UID, Source={x:Reference SomeRandomButton}}" />
            <classes:KeyValueParameter Key="FilterContext" Value="01475137-5028-400B-8E03-AB66C2444D30" />
            <classes:KeyValueParameter Key="EnableFillOutCriteria" Value="true" />
            <classes:KeyValueParameter Key="SkipDialog" Value="true" />
        </classes:KeyValueList>
    </Button.CommandParameter>
</Button>

Replicating data templates

There are two commands for this.

  • ReplicateAsDataCommand
  • ReplicateAsTemplateCommand

Both replicate the current context object/branch and require no additional parameters. Their differences are explained above.

See also