Файл конфигурации импорта. Тег <...-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", у которых значение данного атрибута заполнено.
Тип: Строка. Необязательный.
Примеры
<!-- 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> запускаются после каждой строки, вне зависимости от того, создавались(изменялись) объекты или нет.
Пример
<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.
Тип: Строка. Обязательный.
Пример
<backtimer-customizer
attr="timeAllowanceTimer"
allowance-column="backTimer"
deadline-column="deadlineTime"
deadline-column-format="dd.MM.yyyy HH:mm:ss"/>