Методы для обогащения данных в Semantic MDM
Для обогащения данных, в системе Semantic MDM предусмотрена возможность разработки постобработчиков для следующих событий:
• Создание позиции;
• Изменение статуса;
• Изменение значения атрибута.
Для реализации обогащения данных в постобработчиках, в системе предусмотрены следующие методы:
• Создание новой позиции;
• Удаление существующей позиции;
• Изменение статуса позиции и периода ее действия;
• Изменение одного или нескольких атрибутов позиции, включая исторические;
• Создания и удаления запроса на экспорт позиции во внешнюю систему
• Генерация уникальных номеров через счетчики.
С помощью данных методов формируются инструкции на изменение данных, которые будут выполнены после завершения работы Groovy-скрипта.
Создание и удаление позиции
Методы для создания и удаления позиции нужны, чтобы обеспечить возможность создания / удаления позиций во вспомогательных справочниках и записи ссылки на них в атрибуте связи типа Агрегация или Композиция. Например, если у контрагента имеется атрибут-связи Лица, имеющие право подписи типа "множественная композиция", в котором указываются ссылки на композируемые позиции из вспомогательного справочника Лица, имеющие право подписи, то для добавления новых композируемых позиций и удаления неактуальные позиций необходимы следующие методы:
-
String CreateItem(String nodeUid) – добавить инструкцию на создание новой позиции в указанной группе (nodeUid) и вернуть GUID позиции, которая будет создана. Формирование инструкций на запись новых значений атрибутов в новую позицию требуется выполнять через UpdateItemBuilder полученный через метод postOperation.updateItem(“GUID созданной позиции”);
-
void DeleteItem(String itemUid) – добавить инструкцию на удаление заданной позиции (itemUid).
Данные методы доступны в специальной переменной postOperation.
Чтобы созданную позицию записать в качестве композируемой в атрибут связи, требуется получить имеющиеся список GUID композируемых позиций с помощью конструкции @[Лица, имеющие право подписи], дополнить этот список GUID созданной позиции, после чего для каждого GUID композируемой позиции вызвать метод UpdateItemBuilder.Set(“GUID композируемой позиции”,@[Лица, имеющие право подписи].toId()). Предварительно UpdateItemBuilder должен быть получен через метод postOperation.updateItem() для позиции, в которой необходимо изменить атрибут связи Лица, имеющие право подписи.
Изменение атрибутов позиции
Для формирования инструкций на изменение атрибутов позиции, в специальной переменной скрипта postOperation предусмотрен метод:
-
UpdateItemBuilder UpdateItem(String itemUid) – получить формирователь инструкций UpdateItemBuilder на изменение данных в позиции с указанным GUID(itemUid);
С помощью данного (UpdateItemBuilder) формирователя инструкций на изменение атрибутов, можно сформировать инструкции на выполнение следующих изменений:
-
изменение статуса позиции и периода ее действия;
-
изменение одного или нескольких атрибутов позиции, включая исторические;
-
создания и удаления запроса на экспорт позиции во внешнюю систему.
Для формирования инструкций на изменение в UpdateItemBuilder предусмотрены следующие методы:
-
set(String value, Long propertyId) – добавить инструкцию на запись нового значения (value) атрибута в атрибут (propertyId). Получить идентификатор атрибута можно так: @[имя атрибута].toId(). Если в value будет передана пустая строка или null, то значение атрибута будет удалено, таким образом, данный вызов будет эквивалентен вызову функции clear(Long propertyId). В value требуется передать строковое представление значения атрибута:
-
-
целое число: строковое представление числа;
-
число с плав. запятой: строковое представление числа с плав. запятой и обозначением ЕИ при ее наличии. Примеры: “10 мм”, “10 – 20 кг”, 10(-0,05;0,06);
-
дата: строковое представление даты в формате: dd.MM.yyyy;
-
логический тип: “true”/”false”;
-
цвет: строковое представление int32, где первый, второй и третий байт кодируют цвет RGB;
-
агрегация/композиция: для атрибута-связи требуется указать GUID позиции;
-
setExpirableVal(LocalDate validThru, String value, Long propertyId) – добавить инструкцию на запись нового исторического значения (value) атрибута в атрибут (propertyId), действовавшего до даты(validThru). Получить идентификатор атрибута можно так: @[имя атрибута].toId(). Если в value будет передана пустая строка или null, то в качестве исторического значения на указанную дату (validThru) будет записано значение <пусто>. В value требуется передать строковое представление значения атрибута:
-
-
целое число: строковое представление числа;
-
число с плав. запятой: строковое представление числа с плав. запятой и обозначением ЕИ при ее наличии. Примеры: “10 мм”, “10 – 20 кг”, 10(-0,05;0,06);
-
дата: строковое представление даты в формате: dd.MM.yyyy;
-
логический тип: “true”/”false”;
-
цвет: строковое представление int32, где первый, второй и третий байт кодируют цвет RGB;
-
агрегация: для атрибута-связи требуется указать GUID позиции;
-
clear(Long propertyId) – добавить инструкцию на удаление значения заданного атрибута (propertyId);
-
clearExpirableVal(LocalDate validThru, Long propertyId) – добавить инструкцию на удаление исторического значения заданного атрибута (propertyId) на указанную дату (validThru). Если будет передана пустая дата (validThru == null), то будет добавлена инструкция на удаление всех исторических значений атрибута;
-
setStatus(ItemStatus value) – добавить инструкцию на изменение статуса (value) позиции. Возможные значения ItemStatus:
-
ItemStatus.Abnormal (Не нормализована);
-
ItemStatus.Standardized (Нормализована);
-
ItemStatus.Blocked (Заблокирована);
-
ItemStatus.Removed (Удалёна);
-
setItemExpirablePeriod(LocalDate validFrom, LocalDate validThru) – добавить инструкцию на запись периода действия позиции. Допускается в качестве даты передать null, в этом случае дата будет удалена из периода действия позиции.
-
createReplicaExportClaim(String systemid) – добавить инструкцию на добавление запроса на экспорт в указанную внешнюю систему(systemid).
-
deleteReplicaExportClaim(String systemid) – добавить инструкцию на удаление запроса на экспорт в указанную внешнюю систему(systemid).
При работе с множественными значениями, следует учитывать следующие особенности:
-
добавление инструкции на запись множественного значения в атрибут выполняется путем вызова метода UpdateItemBuilder.set() ровно столько раз, сколько значений нужно записать в указанный атрибут (propertyId);
-
добавление инструкции на запись множественного исторического значения в атрибут выполняется путем вызова метода UpdateItemBuilder.setExpirableVal() ровно столько раз, сколько значений нужно записать в указанный атрибут (propertyId) на указанную дату (validThru);
-
если для множественного атрибута была добавлена инструкция на запись хотя бы одного значения, то все имеющиеся значения множественного атрибута будут заменены на указанные в UpdateItemBuilder. При необходимости дополнить существующий список значений, требуется прочитать текущий список значений через конструкцию вида @[имя атрибута], дополнить этот список новыми значениями и затем для каждого значения вызвать метод UpdateItemBuilder.set() с указанием атрибута в который требуется записать это множественное значение;
-
если для множественного атрибута была добавлена инструкция на запись хотя бы одного исторического значения на заданную дату, то все имеющиеся значения на заданную дату будут заменены на указанные значения. При необходимости дополнить существующий список значений, требуется получить исторические значения для атрибута позиции с помощью метода support.getItemsExpirableValueList(), получить из этого списка всех исторических значений, список исторических значений на нужную дату, дополнить его новыми значениями и затем для каждого значения вызвать метод UpdateItemBuilder. setExpirableVal() с указанием атрибута в который требуется записать это множественное значение и даты, до которой данные значения валидны.
Использование счетчиков для генерации кодов
В системе реализована возможность работы со счетчиками, для генерации кодов номенклатурных объектов, групп и прочего. Счетчик генерирует последовательно числа для заданного наименования счетчика и дополняет полученный код нулями до указанного количества символов. Для этого в системе реализован метод String getNextSequence(String name, int digits) – получить следующее значение счетчика с именем name и дополнить его лидирующими нулями до указанного количества знаков в digits. Если счетчик с заданным наименованием name ранее отсутствовал, то будет автоматически создан, для которого будет сгенерирован нулевой номер.
Наличие данного метода позволяет организовать как сквозную нумерацию в рамках системы, путем использования одного единого наименования счетчика, так и локальную нумерацию в рамках любых классификационных групп, путем использования в качестве наименования счетчика, наименования или кода классификационной группы.