Creatio development guide
PDF
Это документация Creatio версии 7.16.0. Мы рекомендуем использовать новую версию документации.

Массив diff. Механизм псевдонимов Alias

Glossary Item Box

Общие сведения

Механизм псевдонимов Alias — механизм, обеспечивающий частичную обратную совместимость при изменении пользовательского интерфейса в новых версиях продукта. При разработке новых версий периодически возникает необходимость переместить элементы страницы в новые зоны. В ситуациях, когда пользователи проводили кастомизацию страницы редактирования, подобные изменения могут привести к непредсказуемым последствиям. Механизм псевдонимов Alias позволяет избежать этого, взаимодействуя с построителем diff —классом json-applier, осуществляющим слияние всех параметров базовой схемы и схем замещения пользователей.

Diff — массив объектов, отвечающий за отображение элементов схемы. Может содержать в себе контейнеры, элементы управления, модули и поля. Более подробно о массиве diff можно узнать из статьи "Массив diff".

Описание

Свойство alias содержит в себе информацию о предыдущем названии элемента. Эта информация учитывается при построении массива модификаций diff, сообщая о необходимости учитывать элементы не только с новым именем, но и с именем, указанным в alias. Фактически alias представляет собой конфигурационный объект, который связывает два разных элемента — новый и старый. При построении массива модификаций diff благодаря конфигурационному объекту alias можно исключить применение некоторых свойств и операций по отношению к элементу, в котором он объявлен. Объект alias может быть добавлен в любой элемент массива модификаций diff.

Структура объекта alias

Объект alias содержит в себе три настраиваемых свойства:

  • name — имя элемента, с которым связан новый элемент. По этому имени будут находиться элементы в замещенных схемах и связываться с новым элементом.

Значение cвойства name элемента массива модификаций diff не должно быть равным свойству alias.name.

  • excludeProperties — массив свойств объекта values элемента массива модификаций diff, которые не будут применяться при построении diff.
  • excludeOperations — массив операций, которые не должны применяться к данному элементу при построении массива модификаций diff.

Пример использования объекта alias:

// Массив diff.
diff: /**SCHEMA_DIFF*/ [
  {
    // Операция, совершаемая с элементом.
    "operation": "insert",
    // Новое имя элемента.
    "name": "NewElementName",
    // Значения элемента.
    "values": {
      // ...
    },
    // Конфигурационный объект alias.
    "alias": {
      // Предыдущее имя элемента.
      "name": "OldElementName",
      // Массив исключаемых свойств.
      "excludeProperties": [ "layout", "visible", "bindTo" ],
      // Массив игнорируемых операций.
      "excludeOperations": [ "remove", "move", "merge" ]
    }
  },
  ///...
]

Пример использования механизма Alias при многократном замещении схемы

Есть начальный элемент массива модификаций diff с именем "Name" и некоторым набором свойств. Элемент расположен в контейнере Header. Эта схема замещена несколько раз, при этом элемент с именем "Name" всячески модифицируется и перемещается.

Свойство diff базовой схемы:

diff: /**SCHEMA_DIFF*/ [
  {
    // Операция вставки.
    "operation": "insert",
    // Имя элемента-родителя, в который осуществляется вставка.
    "parentName": "Header",
    // Имя свойства элемента-родителя, с которым производится операция.
    "propertyName": "items",
    // Имя элемента.
    "name": "Name",
    // Объект значений свойств элемента.
    "values": {
      // Разметка.
      "layout": {
        // Номер колонки.
        "column": 0,
        // Номер строки.
        "row": 1,
        // Количество объединенных колонок.
        "colSpan": 24
      }
    }
  }
] /**SCHEMA_DIFF*/

Свойство diff после первого замещения базовой схемы:

diff: /**SCHEMA_DIFF*/ [
  {
    // Операция объединения свойств двух элементов.
    "operation": "merge",
    "name": "Name",
    "values": {
      "layout": {
        "column": 0,
        // Номер строки. Элемент перемещен.
        "row": 8,
        "colSpan": 24
      }
    }
  }
] /**SCHEMA_DIFF*/

Свойство diff после второго замещения базовой схемы:

diff: /**SCHEMA_DIFF*/ [
  {
    // Операция перемещения.
    "operation": "move",
    "name": "Name",
    // Имя элемента-родителя, в который осуществляется перемещение.
    "parentName": "SomeContainer"
  }
] /**SCHEMA_DIFF*/

В новой версии элемент с именем "Name" был перемещен из элемента SomeContainer в элемент ProfileContainer и должен там остаться несмотря на кастомизации клиента. Для этого элемент получает новое имя "NewName" и к нему добавляется конфигурационный объект alias.

diff: /**SCHEMA_DIFF*/ [
  {
    // Операция вставки.
    "operation": "insert",
    // Имя элемента-родителя, в который осуществляется вставка.
    "parentName": "ProfileContainer",
    // Имя свойства элемента-родителя, с которым производится операция.
    "propertyName": "items",
    // Новое имя элемента.
    "name": "NewName",
    // Объект значений свойств элемента.
    "values": {
      // Привязка к значению свойства или функции.
      "bindTo": "Name",
      // Разметка.
      "layout": {
        // Номер колонки.
        "column": 0,
        // Номер строки.
        "row": 0,
        // Количество объединенных колонок.
        "colSpan": 12
      }
    },

    // Конфигурационный объект alias.
    "alias": {
      // Старое имя элемента.
      "name": "Name",
      // Массив игнорируемых свойств пользовательского замещения.
      "excludeProperties": [ "layout" ],
      // Массив игнорируемых операций пользовательского замещения.
      "excludeOperations": [ "remove", "move" ]
    }
  }
] /**SCHEMA_DIFF*/

В новом элементе добавился alias, изменился родительский элемент и его расположение на странице редактирования. В свойстве excludeProperties хранится набор свойств, которые будут проигнорированы при применении разницы, а внутри excludeOperations хранится набор операций, которые не будут применяться к этому элементу из замещений.

В данном примере исключены свойства layout всех наследников для элемента с именем "Name", а также запрещены операции remove и move. Это говорит о том, что элемент с именем "NewName" будет содержать только корневое свойство layout и все свойства элемента "Name" из замещений, кроме Layout. Это же касается и операций.

Результат для построителя массива модификаций diff будет следующим:

diff: /**SCHEMA_DIFF*/ [
  {
    // Операция вставки.
    "operation": "insert",
    // Имя элемента-родителя, в который осуществится вставка.
    "parentName": "ProfileContainer",
    // Имя свойства элемента-родителя, с которым производится операция.
    "propertyName": "items",
    // Новое имя элемента.
    "name": "NewName",
    // Объект значений свойств элемента.
    "values": {
      // Привязка к значению свойства или функции.
      "bindTo": "Name",
      // Разметка.
      "layout": {
        // Номер колонки.
        "column": 0,
        // Номер строки.
        "row": 0,
        // Количество объединенных колонок.
        "colSpan": 12
      },
    }
  },
] /**SCHEMA_DIFF*/
© Terrasoft 2002-2020.

Был ли данный материал полезен?

Как можно улучшить эту статью?