Example of using the alias mechanism for repeated schema replacement
The diff
array of modifications has an initial "Name" element with a set of properties. The element is located in the Header
container. This schema is replaced several times. The "Name" element is modified and moved freely.
- diff property of the base schema
- diff property after the first replacement of the base schema
- diff property after the second replacement of the base schema
diff: /**SCHEMA_DIFF*/ [
{
/* Insert operation. */
"operation": "insert",
/* The name of the parent element into which to insert the element. */
"parentName": "Header",
/* The name of the parent element property on which to operate. */
"propertyName": "items",
/* The name of the element. */
"name": "Name",
/* The object of element property values. */
"values": {
/* Layout. */
"layout": {
/* Column number. */
"column": 0,
/* The row number. */
"row": 1,
/* The number of combined columns. */
"colSpan": 24
}
}
}
] /**SCHEMA_DIFF*/
diff: /**SCHEMA_DIFF*/ [
{
/* The operation that combines the properties of two elements. */
"operation": "merge",
"name": "Name",
"values": {
"layout": {
"column": 0,
/* The row number. The element has been moved. */
"row": 8,
"colSpan": 24
}
}
}
] /**SCHEMA_DIFF*/
diff: /**SCHEMA_DIFF*/ [
{
/* Move operation. */
"operation": "move",
"name": "Name",
/* The name of the parent element where the move operation is done. */
"parentName": "SomeContainer"
}
] /**SCHEMA_DIFF*/
In the new version, the element named "Name" has been moved from the SomeContainer
element to the ProfileContainer
element and must remain there despite the client customization. To enforce this, the element gets a new name "NewName" and the alias
configuration object is added to it.
diff: /**SCHEMA_DIFF*/ [
{
/* Insert operation. */
"operation": "insert",
/* The name of the parent element into which to insert the element. */
"parentName": "ProfileContainer",
/* The name of the parent element property on which to operate. */
"propertyName": "items",
/* New name. */
"name": "NewName",
/* The object of element property values. */
"values": {
/* Bind to the property or function value. */
"bindTo": "Name",
/* Layout. */
"layout": {
/* Column number. */
"column": 0,
/* The row number. */
"row": 0,
/* The number of combined columns. */
"colSpan": 12
}
},
/* alias configuration object. */
"alias": {
/* The old name of the element. */
"name": "Name",
/* An array of custom replacing properties to ignore. */
"excludeProperties": "layout" ],
/* An array of custom replacing operations to ignore. */
"excludeOperations": [ "remove", "move" ]
}
}
] /**SCHEMA_DIFF*/
The new element now has alias
. The parent element changed, as is its location on the record page. The excludeProperties
property stores a set of properties that will be ignored when the delta is applied, while excludeOperations
stores a set of operations that will not be applied to this element from the replacements.
In this example, the layout
properties of all "Name" descendants are excluded, and the remove
and move
operations are also prohibited. This means that the "NewName" element will contain only the root layout
property and all properties of the "Name" element from the replacements except Layout
. The same applies to operations.
diff: /**SCHEMA_DIFF*/ [
{
/* Insert operation. */
"operation": "insert",
/* The name of the parent element into which to insert the element. */
"parentName": "ProfileContainer",
/* The name of parent element property on which to operate. */
"propertyName": "items",
/* New name. */
"name": "NewName",
/* The object of element property values. */
"values": {
/* Bind to the property or function value. */
"bindTo": "Name",
/* Layout. */
"layout": {
/* Column number. */
"column": 0,
/* The row number. */
"row": 0,
/*/ The number of combined columns. */
"colSpan": 12
},
}
},
] /**SCHEMA_DIFF*/