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

Механизм псевдонимов 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-2019.

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

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