Методы для работы с импортируемым объектом
Методы ProcessedRootObject(ProcessObject)
-
boolean IsDeleted() – получить состояние флага удаления объекта во внешней системе (true – объект удален, false – объект существует);
-
String getExchangeClassId() – получить идентификатор обменного класса, для импортируемого объекта;
-
String getExternalSystemId() – получить идентификатор внешней системы, для импортируемого объекта.
Методы ProcessObject
-
String getSourceId() – получить идентификатор импортируемого объекта во внешней системе. Идентификатор объекта во внешней системе есть всегда и является обязательным для загрузки сообщения импорта.
-
String getMdmId() – получить uuid позиции Semantic MDM, с которой требуется обеспечить наличие переходного ключа. Uuid позиции может быть передан внешней системой или записан через скрипт импорта Groovy. В большинстве случаев, внешняя система не присылает uuid позиции Semantic MDM и данное поле содержит
null.
-
void setMdmId(String uuid) – записать uuid позиции Semantic MDM, с которой требуется обеспечить наличие переходного ключа. Данный метод востребован, если позиция Semantic MDM была подобрана с помощью скрипта Groovy и требуется записать с ней сопоставление.
-
getMdmNodeId() – получить uuid группы, в которой будет создана позиция Semantic MDM, в случае отсутствия переходного ключа и отсутствия uuid позиции Semantic MDM в сообщении импорта (
getMdmId()). Uuid группы настраивается в обменном классе, через свойство “
Создавать новую позицию в группе”.
-
setMdmNodeId() – записать uuid группы, в которой будет создана позиция при отсутствии переходного ключа и отсутствия сопоставления с позицией Semantic MDM.
-
String getOriginalSourceId() – получить идентификатор объекта во внешней системе, который стал оригиналом для текущего импортируемого объекта дубликата. При выполнении импорта, позиция Semantic MDM связанная через переходной ключ с текущей импортируемой позицией (
getSourceId), будет признана дубликатом позиции Semantic MDM связанной идентификатором оригинала (
getOriginalSourceId). Дедубликация будет выполнена только при условии, что позиция дубликат Semantic MDM имеет статус отличный от статуса “
Нормализована”, в противном случае будет только удален переходной ключ дубликата в соответствии с опцией “
Режим удаления переходного ключа”, выбранной в обменном классе.
-
ItemStatus getStatus() – получить статус, который должен быть установлен для позиции Semantic MDM, после выполнения импорта. Если функция вернет
null, то статус не будет изменен, после выполнения импорта. Данный статус может быть либо передан в сообщении импорта из внешней системы, либо установлен программно в скрипте Groovy с помощью функции
setStatus. Возможные значения:
ItemStatus.Abnormal (Не нормализована),
ItemStatus.Standardized (Нормализована),
ItemStatus.Blocked (Заблокирована),
ItemStatus.Removed (Удалена);
-
setStatus(ItemStatus status) – записать статус, который должен быть установлен для позиции Semantic MDM, после выполнения импорта.
-
String getAutoNormalize() – получить флаг автоматической установки статуса
ItemStatus.Standardized (Нормализована), после выполнения импорта. Если после выполнения импорта, позиция не будет соответствовать хотя бы одному обязательному ограничению, то статус позиции будет сброшен на
ItemStatus.Abnormal (Не нормализована) и для сообщения импорта будет установлен статус “
Отклонена”.
-
setAutoNormalize(boolean autonorm) – записать флаг автоматической установки статуса
Standardized (Нормализована), после выполнения импорта.
-
List<ProcessedValue> getValues() – получить список атрибутов со значениями, которые были переданы внешней системой. Если значение для какого-либо атрибута обменного класса не передавалось внешней системой, то полученный список не будет содержать данный атрибут. Допускается редактирование полученного списка (
List<ProcessedValue>) через добавление нового или удаление существующего атрибута со значением.
Методы List<ProcessedValue>
Скриптовой язык Groovy, предоставляет возможность с помощью анонимных функций (Closure) выполнить поиск атрибута (
ProcessedValue) в списке (
List<ProcessedValue>) по любому его свойству с помощью метода
find(). Так, например, можно найти атрибут в списке как по наименованию атрибута для внешней системы (
getName()), так и по идентификатору атрибута Semantic MDM (
getPropertyId()). Подробнее о методах класса
ProcessedValue в разделе
Методы для чтения данных из Semantic MDM.
С помощью добавления/удаления атрибутов из списка, возвращаемого функцией getValues(), можно выполнять изменение состава атрибутов импортируемого объекта. Такая возможность необходима для того, чтобы привести состав атрибутов импортируемого объекта к составу атрибутов группы (ProcessedObject.getMdmNodeId) Semantic MDM, в которую будет выполняться импорт.
Получение атрибута из списка List<ProcessedValue>
Пример получения атрибута по наименованию для внешней системы:
ProcessedValue FindedVal = root.getValues().find {element -> element.getName()=="CA_TYPE"};
if (FindedVal != null)
{ /*... сделать что-то если атрибут нашли ...*/}
else
{ /*... сделать что-то если атрибут НЕ нашли ... */}
Пример получения атрибута по идентификатору атрибута Semantic MDM:
ProcessedValue FindedVal = root.getValues().find {element -> element. getPropertyId()==@[Тип контрагента].toId()};
if (FindedVal != null)
{ /*... сделать что-то если атрибут нашли ...*/ }
else
{ /*... сделать что-то если атрибут НЕ нашли ... */ }
Добавление атрибута в список List<ProcessedValue>
Пример добавления строкового атрибута “Тип контрагента” со значением “ЮЛ”:
List<ProcessedValue> Values = root.getValues();
ProcessedValue NewValue = new ProcessedValue(propertyId: @[Тип контрагента].toId(), stringValue: "ЮЛ");
root.getValues().add(NewValue);
Пример добавления атрибута “Сопроводительный документ” со ссылкой на позицию с известным UUID:
List<ProcessedValue> Values = root.getValues();
ProcessedValue NewValue = new ProcessedValue(propertyId: @[Сопроводительный документ].toId(), processObject: new ProcessObject(mdmId: "6f667c55-8629-11ea-9c9c-f079596e5df8"));
root.getValues().add(NewValue);
Пример добавления атрибута “Сопроводительный документ” со ссылкой на позицию с известным идентификатором объекта в текущей внешней системе, из которой выполняется импорт:
ProcessedValue NewValue = new ProcessedValue(propertyId: @[Сопроводительный документ].toId(), processObject: new ProcessObject(sourceId: "6f667c55-8629-11ea-9c9c-f079596e5df8"));
root.getValues().add(NewValue);
Удаление атрибута из списка List<ProcessedValue>
Пример удаления атрибута “Тип контрагента”:
//Найдем атрибут по идентификатору атрибута Semantic MDM
List<ProcessedValue> ListValues = root.getValues();
int FindedIdx = ListValues.findIndexOf {it.getName()=="CA_TYPE"};
if (FindedIdx >= 0) {
ListValues.remove(FindedIdx);
}
Пример удаления всех атрибутов у импортируемого объекта:
//Найдем атрибут по идентификатору атрибута Semantic MDM
root.getValues().clear();
Методы ProcessedValue
Чтение информации об атрибуте обменного класса из ProcessedValue
-
String getName() – получить наименование атрибута для внешней системы;
-
Long getPropertyId() – получить идентификатор атрибута Semantic MDM, с которым сопоставлен атрибут внешней системы;
-
ProcessObject getProcessObject() – получить обрабатываемый объект (
ProcessObject), которому принадлежит данное обрабатываемое значение атрибута (
ProcessValue);
-
Date getChangeDate() – получить дату и время изменения значения атрибута во внешней системе. Если внешняя система не прислала эту информацию, то будет записано время загрузки сообщения импорта в Semantic MDM, в случае, если это свойство изменилось относительно предыдущего сообщения импорта
.
Чтение/запись единичных значений в ProcessedValue
Предполагается, что при разработке скрипта разработчику известно к какому типу данных принадлежит значение, которое должно храниться в ProcessValue, и является оно множественным или единичным. Исходя из этой информации, разработчик должен использовать соответствующие методы для чтения и записи значений в атрибут.
-
String getStringValue() – получить строковое значение атрибута для строкового типа данных. Если тип данных “Число с плав. запятой”, то будет получено строковое представление переданного числа, например: “10”, “10 мм”, “10 - 50”, “10 - 50 мм”, “12(-0.01;0.05) мм”;
-
setStringValue(String value) – записать строковое значение в атрибут для строкового типа данных. Для типа данных: “Число с плав. запятой” позволяет записать строковое представление числа с плав. запятой, например: “10”, “10 мм”, “10 - 50”, “10 - 50 мм”, “12(-0.01;0.05) мм”. Если значение записано без указания ЕИ, то система будет считать что было передано значение в базовой единице измерения;
-
Date getDateValue() - получить значение атрибута типа "Дата";
-
setDateValue(Date value) – записать дату (в формате UNIXTIME) в значение атрибута. Для приведения строковой даты к формату UNIXTIME, следует использовать тип
SimpleDateFromat. Для этого требуется импортировать библиотеку:
import java.text.SimpleDateFormat. Пример записи даты в
ProcessValue PVal:
-
PVal.setDateValue(new SimpleDateFormat("yyyy-mm-dd").convert("2020-09-01"));
-
Boolean getBoolValue() – получить булево значение атрибута;
-
setBoolValue(Bool value) – записать булево значение в атрибут;
-
Integer getIntValue() - получить числовое значение атрибута;
-
setIntValue(Integer value) – записать числовое значение в атрибут;
-
ExchangeComplexDouble getComplexDoubleValue() – используется системой Semantic MDM для внутреннего обмена числом с плавающей запятой. Для интеграции с внешними системами рекомендуется использовать:
getStringValue/
setStringValue;
-
setComplexDoubleValue(List<ExchangeComplexDouble> value) – используется системой Semantic MDM для внутреннего обмена числом с плавающей запятой. Для интеграции с внешними системами рекомендуется использовать:
getStringValue/
setStringValue. Данный метод записывает новое значение числа с плав. запятой (
ExchangeComplexDouble) в атрибут;
-
ProcessObject getProcessObject() – получить вложенный объект из атрибута, который обладает всеми методами, описанными для класса
ProcessObject;
-
setProcessObject(ProcessObject value) – записать созданный объект (
ProcessObject) в атрибут;
-
SystemKeyTransfer getSystemKey() – получить значение переходного ключа, который прислали в атрибуте. Позволяет внешней системе передавать дополнительные идентификаторы на свои объекты во вспомогательных справочниках или сопоставление с объектами других систем. Получить идентификатор внешней системы и объекты можно с помощью методов:
-
String getSystemId – получить строковый идентификатор внешней системы, указанный в подсистеме импорта и репликации при регистрации внешней системы;
-
String getSourceId – получить строковый идентификатор объекта внешней системы
.
Чтение/запись множественных значений в ProcessedValue
-
List<String> getStringValues() – получить список строковых значений атрибута для строкового типа данных. Если тип данных “Число с плав. запятой”, то будет получен список строковых представлений переданных чисел.
-
s
etStringValues(List<String> values) – записать список строковых значений в атрибут для строкового типа данных. Для типа данных: “Число с плав. запятой” позволяет записать список строковых представлений чисел с плав. запятой.
-
List<Date> getDateValues() - получить список значений атрибута типа "Дата".
-
setDateValues(List<Date> values) – записать список значений типа дата в атрибут.
-
List<Integer> getIntValues() - получить список числовых значений атрибута.
-
setIntValues(List<Integer> values) – записать список числовых значений в атрибут.
-
List<ExchangeComplexDouble> getComplexDoubleValues() – получить список значений чисел с плав. запятой из атрибута.
-
setComplexDoubleValues(List<ExchangeComplexDouble> values) – записать список значений чисел с плав. запятой в в атрибут
-
List<ProcessObject> getProcessObjects() – получить список вложенных объектов из атрибута.
-
setProcessObjects(ProcessObject values) – записать список вложенных объектов в атрибут.
Методы ExchangeComplexDouble
-
String getMeasurementUnit – получить гуид единицы измерения Semantic MDM, в которой она должна отображаться в Semantic MDM;
-
ValueDoubleTransfer getValue – получить объект класса
ValueDoubleTransfer со следующими методами:
-
double value – содержит основное значение атрибута в базовой единице измерения, если из внешней системы передается простое число с плав. запятой или число с отклонениями. Отклонения для числа с плав. запятой будут храниться в min и max соответственно. Для диапазона, должно содержать центральное значение диапазона, к которому при прибавлении значения из min, получаем нижнюю границу отклонения, а при прибавлении значения из max, верхнее отклонение:
-
double min – получить значение нижнего отклонения;
-
double max – получить значение верхнего отклонения;
-
encodedString – строковое кодированное значение, содержит значения value, min и max в той ЕИ, в которой задал значение пользователь. Значение в
encodedString кодируется следующим образом:
value=<среднее число >;
min=<нижнее отклонение, всегда меньше нуля>;
max=<верхнее отклонение, всегда больше нуля>;
measure=<числовой идентификатор ЕИ>;
precision=<количество знаков после запятой для округления>;
type=<тип ЕИ: “NORMAL”, “RANGE”, “DEFLECTIONS”>. Примеры кодированной строки
encodedString:
-
200 мм: “value=200;min=0;max=0;measure=313;precision=5;type=NORMAL”
-
300 – 400 мм: “value=0;min=300;max=400;measure=313;precision=5;type=RANGE”
-
10(-0.1;0.15) мм: “value=10;min=-0.1;max=0.15;measure=313;precision=5;type=DEFLECTIONS”