Файл конфигурации импорта. Тег <...-customizer>

Описание

Тег <...-customizer> используется для дополнительной обработки значений и объектов во время импорта.

Вложен в <class>, располагается после описания импорта значений.

<remove-customizer>

Описание

Тег <remove-customizer> помещает в архив все объекты, которые не участвуют в импорте и иерархически находятся в объекте с указанным uuid.

Объекты, не участвующие в импорте — объекты системы, которым в рамках текущего импортируемого класса конфигурации не удалось найти соответствия среди объектов в источнике.

Кастомайзер работает для режимов UPDATE и EMPTY и игнорируется для режима CREATE.

Если тег <remove-customizer> указан, то в архив поместятся объекты системы, удовлетворяющие следующим условиям:

  • у них заполнен атрибут, указанный в качестве значения параметра "attr" (если параметр присутствует);
  • тип объектов соответствует метаклассу, указанному в качестве значения параметра "metaclass";
  • объекты иерархически находятся в объекте, UUID которого задан в качестве значения параметра "hierarchy-root";
  • объекты, не участвующие в текущем импорте класса конфигурации.

Параметры

  • hierarchy-root — UUID объекта, в иерархии которого необходимо произвести архивирование объектов, не участвующих в текущем импорте класса конфигурации. Для архивирования всех объектов указанного типа, не участвующих в текущем импорте, необходимо указать UUID объекта класса "Компания".

    Пример: класс "Сотрудник" (employee) вложен в класс "Отдел" (ou), если указываем hierarchy-root = 'ou$123', то в архив попадают только сотрудники отдела с UUID = 'ou$123', если указываем компанию, то в архив попадают сотрудники всех отделов.

    Если данный параметр не указан, то применяется значение по умолчанию, заданное в теге <parameter> (параметр importRootUUID). Если значение параметра importRootUUID не задано, то синхронизация не будет выполнена.

    Тип: Строка. Необязательный. По умолчанию ${metaClass}.

  • metaclass — метакласс объектов для архивации.

    Если данный параметр не указан, то применяется значение по умолчанию , заданное в теге <parameter> (параметр metaClass). Если значение параметра metaClass не задано, то синхронизация не будет выполнена.

    Тип: Строка. Необязательный.

  • attr — код атрибута, по значению которого проверяется что объект импортирован, а не создан вручную.

    Если параметр не указан, то в архив помещаются все объекты метакласса, указанного в параметре "metaclass", находящиеся в иерархии объекта, UUID которого указан в параметре "hierarchy-root" и не участвующие в текущем импорте класса конфигурации.

    Если параметр указан, то в архив будут помещены объекты метакласса, указанного в параметре "metaclass", находящиеся в иерархии объекта, UUID которого указан в параметре "hierarchy-root", у которых значение данного атрибута заполнено.

    Тип: Строка. Необязательный.

Примеры

Copy
<!-- UUID корневого отдела -->
<parameter name="importRootUUID">ou$01</parameter>
<!-- Метакласс импортируемых отделов -->
<parameter name="metaClass">employee</parameter>

В архив попадут объекты метакласса employee, заданного в теге <parameter>, отдела ou$01, заданного в теге <parameter>, у которых атрибут flag был заполнен (не пустой) и которые не участвуют в импорте:

<remove-customizer attr="flag" />

В архив попадут объекты метакласса employee, заданного в теге <parameter>, отдела ou$02, которые не участвовали в импорте:

<remove-customizer hierarchy-root="ou$02" />

В архив попадут объекты метакласса employee$contactPerson, отдела ou$01, заданного в теге <parameter>, которые не участвовали в импорте:

<remove-customizer metaclass="employee$contactPerson" />

В архив попадут объекты метакласса employee$contactPerson, отдела ou$02, заданного в теге <parameter>, у которых атрибут flag был заполнен (не пустой), и которые не участвуют в импорте:

<remove-customizer attr="flag" hierarchy-root="ou$02" metaclass="employee$contactPerson" />

Если включен режим Update, следующая строка вернет архивные объекты из архива, если такие объекты присутствуют в источнике импорта:

<attr name="removed" default-value="false"/>

Если включен режим Update, следующая строка переведет в архив все объекты метакласса ${employeeMetaClass}, находящиеся в ${importRootUUID}, которые не участвовали в импорте:

<remove-customizer hierarchy-root="${importRootUUID}" metaclass="${employeeMetaClass}" attr="${employeeIdHolder}"/->

Вложенные скриптовые обработчики

Вложенные скриптовые обработчики применяются, если необходимо задать исключение для архивации объектов:

  • skip-objects-script — указывает объекты, которые исключаются из архивирования.

    Скрипт выполняется один раз до начала работы remove-customizer.

    Скрипт возвращает список UUID объектов. Результирующий список UUID добавляется к списку UUID, участвующих в импорте и не подлежащих архивации.

    Глобальные переменные:

    • parent — объект, в иерархии которого необходимо произвести архивирование не проимпортированных объектов. Значение по умолчанию ${importRootUUID} или параметр hierarchy-root;
    • ctx — ImportContext: ctx.evaluate(expr) для получения значения выражений или ctx.getLogger().info('text') для логирования;
    • storage — значение, передаваемое из одного скрипта в другой в рамках конфигурации импорта, во всех скриптах кастомайзера;
    • parameters — параметры импорта.

    Пример. Исключить все вложенные в объект hierarchy-root объекты:

    Copy
    <skip-objects-script><![CDATA[
       return utils.find(parameters.metaClass, [ 'parent' : parent ])
     ]]>
    </skip-objects-script>
  • remove-condition-script — добавляет дополнительное условие архивации объекта и/или изменяет объект перед архивацией.

    Скрипт выполняется перед архивацией объекта. Если объект является исключением или не должен архивироваться исходя из условий, то скрипт не запускается.

    Глобальные переменные:

    • subject — объект, подлежащий архивации при работе remove-customizer;
    • ctx — ImportContext: ctx.evaluate(expr) для получения значения выражений или ctx.getLogger().info('text') для логирования;
    • storage — значение, передаваемое из одного скрипта в другой в рамках конфигурации импорта, во всех скриптах кастомайзера;
    • parameters — параметры импорта.

    Пример. Отменить архивацию объекта, если его название не testTitle:

    Copy
    <remove-condition-script><![CDATA[
       return subject.title == 'testTitle'
      ]]>
    </remove-condition-script>

<script-customizer>

Описание

Тег <script-customizer> позволяет производить преобразования по сложной логике, определенной в скрипте.

Скриптовая логика обработки указывается во вложенных тегах. Каждый из вложенных тегов соответствует какому-то из этапов импорта, соответственно и скрипт, указанный в теге, будет выполнятся на соответствующем этапе импорта.

Вложенные теги

  • <before-import> — содержит скрипт, который вызывается перед импортом объектов;
  • <before-process-item> — содержит скрипт, который вызывается перед созданием или изменением объекта в системе. Скрипт срабатывает в момент, когда обработана строка, но еще не сформированы значения атрибутов (properties) для создания или редактирования объекта.

    В скрипте доступны глобальные переменные:

    • item (для чтения /записи) — соответствует строке импортируемых данных;
    • subject (только для чтения) — соответствует проимпортированному объекту.
  • <before-process> — содержит скрипт, который вызывается перед созданием или изменением объекта в системе. Скрипт срабатывает в момент, когда обработана строка и сформированы значения атрибутов (properties) для создания или редактирования объекта.

    В скрипте доступны глобальные переменные:

    • item (только для чтения) — соответствует строке импортируемых данных;
    • subject (только для чтения) — соответствует проимпортированному объекту;
    • properties (только для чтения) — содержит свойства бизнес-процесса — итоговые значения атрибутов, которые будут использоваться в бизнес-процессе.
  • <after-process> — содержит скрипт, который вызывается после создания или изменения объекта в системе.

    В скрипте доступны глобальные переменные:

    • item (для чтения /записи) — соответствует строке импортируемых данных;
    • subject (только для чтения) — соответствует проимпортированному объекту.
  • <after-import> — содержит скрипт, который вызывается после импорта всех объектов.

Значение переменной item можно получить одним из способов:

  • item.properties.getProperty(имя столбца)

  • item.properties.имя_столбца

Скрипты из тегов <before-process> и <after-process> запускаются после каждой строки, вне зависимости от того, создавались(изменялись) объекты или нет.

Пример

Copy
<script-customizer>
   <before-import></before-import>
   <before-process-item>a+b</before-process-item>
   <before-process>a+b</before-process>
   <after-process>a+b</after-process>
   <after-import></after-import>
</script-customizer>

<timer-customizer>

Описание

Тег <timer-customizer> позволяет импортировать прямой счетчик времени.

Параметры

  • attr — код атрибута типа Timer.

    Тип: Строка. Обязательный.

  • column — название колонки, в которой хранится сколько уже отсчитал счетчик в мс.

    Тип: Строка. Обязательный.

Пример

<timer-customizer attr="totalTimeTimer" column="timer"/>

<backtimer-customizer>

Описание

Тег <backtimer-customizer> позволяет импортировать обратный счетчик времени.

Параметры

  • attr — код атрибута типа BackTimer.

    Тип: Строка. Обязательный.

  • allowance-column — название колонки, в которой хранится сколько осталось отсчитать счетчику в мс.

    Тип: Строка. Обязательный.

  • deadline-column — название колонки, в которой хранится deadline для данного счетчика в формате deadline-column-format.

    Тип: Строка. Обязательный

  • deadline-column-format — формат преобразования даты deadline, например, yyyy-MM-dd HH:mm:ss.

    Тип: Строка. Обязательный.

Пример

Copy
<backtimer-customizer
   attr="timeAllowanceTimer"
   allowance-column="backTimer"
   deadline-column="deadlineTime"
   deadline-column-format="dd.MM.yyyy HH:mm:ss"/>