Методы для чтения данных из Semantic MDM
Основным способом чтения значений атрибутов текущей экспортируемой позиции, является чтение через конструкцию @[имя атрибута]. Для чтения значения вложенных в агрегации атрибутов, необходимо последовательно перечислить имена атрибутов, например:
-
@[имя атрибута связи][имя вложенного атрибута]
-
@[имя атрибута связи][имя вложенного атрибута связи][имя вложенного атрибута]
Перечисленные конструкции вернут одно значение атрибута, если все перечисленные в конструкции атрибуты хранят единичное значение. Если хотя бы один из перечисленных в конструкции атрибутов хранит массив значений, то данная конструкция вернет List значений. Для каждого из типов данных атрибутов, будет возвращен свой тип данных:
-
-
-
число с плав. запятой: объект класса
ValueDouble;
-
-
Double getValue() – получить центральное значение;
-
Double getMin() – получить нижнее отклонение, всегда отрицательное ;
-
Double getMax() – получить верхнее отклонение, всегда положительное;
-
String getEncodedString() – строковое кодированное значение, содержит значения 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”;
-
-
-
цвет: integer, где первый, второй и третий байт кодируют цвет RGB;
-
-
атрибут связи: String с guid позиции.
Методы чтения данных из Semantic MDM, описанные ниже, рекомендуется использовать в исключительных случаях, когда штатные средства настройки атрибутов обменных классов и использование ссылок на атрибуты (@[<наименование атрибута>]) в скриптах Groovy не позволяют прочитать необходимые данные из Semantic MDM для формирования сообщения экспорта.
|
|
Использование данных функций может значительно замедлить экспорт данных во внешние системы, в случае изменения позиции, участвующей в формировании большого количества сообщений экспорта. Например, такой позицией может быть единица измерения “штуки” или “килограмм”, которая используется в большинстве позиций справочника номенклатуры.
|
Чтение данных о позиции
-
ItemStatus getItemStatus(String itemUid) – получить статус позиции по GUID (
ItemUid) позиции. Функция вернет одно из следующих значений:
-
NULL - если позиция с переданным
itemUid не существует
-
ItemStatus.Abnormal – соответствует статусу “
Не нормализована”,
-
ItemStatus.Standardized – соответствует статусу “
Нормализована”,
-
ItemStatus.Blocked – соответствует статусу “
Заблокирована”,
-
ItemStatus.Removed – соответствует статусу “
Удалёна”,
-
I
temStatus.Duplicate – соответствует статусу “
Дубликат”.
-
String getMDMId(String sourceId, String systemId) – получить GUID позиции по идентификатору объекта (
sourceId) во внешней системе и идентификатору внешней системы (
systemId). Вернет
NULL если переходной ключ отсутствует.
-
String getSourceId(String itemUid, String systemId) – получить идентификатор объекта во внешней системе по GUID позиции (
itemUid) и идентификатору внешней системы (
systemId). Если переходной ключ отсутствует, то вернет
NULL.
-
String getItemNodeUid(String itemUid) – получить GUID группы, которой принадлежит позиция с указанным GUID (
itemUid). Если позиция с переданным GUID не существует, то будет возвращена ошибка.
Чтение значений атрибутов позиции
Основным способом чтения значений атрибутов текущей позиции, является чтение через конструкцию @[имя атрибута]. Для чтения значения вложенных в агрегации атрибутов, необходимо последовательно перечислить имена атрибутов, например:
-
@[имя атрибута связи][имя вложенного атрибута];
-
@[имя атрибута связи][имя вложенного атрибута связи][имя вложенного атрибута];
-
@[#composer][ имя вложенного атрибута];
-
@[#composer][имя вложенного атрибута связи][ имя вложенного атрибута].
Перечисленные конструкции вернут одно значение атрибута, если все перечисленные в конструкции атрибуты хранят единичное значение. Если хотя бы один из перечисленных в конструкции атрибутов хранит массив значений, то данная конструкция вернет List значений.
Кроме получения списка значений (List) для вложенного атрибута, есть возможность получить полный путь до этого значения через метод: getMapValues(), который вернет Map<String, Object>, где String будет содержать GUID агрегированной позиции, а Object будет содержать либо значение заданного атрибута, либо еще один Map<String, Object>, если путь к вложенному атрибуту состоит из более чем одного атрибута связи.
Примеры возвращаемых значений:
-
@[имя множественного атрибута связи][имя вложенного строкового атрибута].getMapValues() – данная конструкция вернет
Map<String, String>;
-
@[имя множественного атрибута связи] [имя единичного атрибута связи] [имя вложенного строкового атрибута].getMapValues() – данная конструкция вернет
Map<String, Map<String, String>>;
-
@[имя множественного атрибута связи] [имя единичного атрибута связи] [имя вложенного множественного строкового атрибута].getMapValues() – данная конструкция вернет
Map<String, Map<String, List<String>>>.
Для каждого из типов данных атрибутов, будет возвращен свой тип данных:
-
-
-
число с плав. запятой:
valueDouble - методы для работы с
ValueDouble
-
-
-
цвет: Long. – число в формате Blue, Green, Red, Alpha, где Blue – страший байт, а Alpha – младший байт. Пример красного цвета в шестнадцатиричном строковом представлении: “241CEDFF”, где: Blue=24, Green=1C, Red=ED, Alpha=FF.
-
Преобразование цвета из шестнадцатеричного строкового представления в число: Long.parseLong("241CEDFF",16);
-
Преобразование числа в строковое шестнадцатеричное представление: Long.toString(605875711,16);
-
-
атрибут связи: String - с guid позиции
Описанные ниже функции рекомендуется использовать в исключительных случаях, при невозможности изначально определить полный перечень экспортируемых атрибутов в обменном классе. Примером такого исключения, может быть интеграция с внешними системами по справочнику номенклатуры, в котором необходимо передать информацию по списку атрибутов справочника, который не может быть определен заранее и должен вычисляться динамически, в зависимости от различных условий. Например, выполнить экспорт значений только для тех атрибутов, которые входят в определенную категорию атрибутов и/или участвуют в вычислении полного наименования.
Метод
getItemPropertyValues возвращает список всех значений атрибутов для заданной позиции (
itemUid). Для чтения значений конкретного атрибута из полученного списка, необходимо знать идентификатор и тип данных атрибута, а также множественное у него значение или нет. Для получения этой информации в скрипте, необходимо использовать метод
getPropertyDeclarationsByNodeUid (
Чтение данных по атрибутам).
Ниже представлен пример чтения значений атрибутов.
Пример чтения значений атрибутов: “Наименование изделия”, “Диаметр”, “Материал->Марка материала”:
List<PropertyValueDto> itemValues = support.getItemPropertyValues("a1ddfe35-6fca-4f25-b874-604d082d9d3c");
//Получим значение атрибута "Наименование изделия"
PropertyValueDto attrValue = itemValues.find {element -> element. propertyId()==@[Наименование изделия].toId()};
if (attrValue!=null)
{String prodName = attrValue.stringValue}
//Получим значение атрибута "Диаметр" в миллиметрах
attrValue = itemValues.find {element -> element. propertyId()==@[Диаметр].toId()};
If (attrValue!=null)
//Получим диаметр в миллиметрах
{Double prodDiam = doubleValue.getValue().value/1000}
//Получим значение атрибута "Материал->Марка материала" в миллиметрах
attrValue = itemValues.find {element -> element. propertyId()==@[Материал].toId()};
if (attrValue!=null)
{
prodMatUid = attrValue.stringValue;
List<PropertyValueDto> MaterialValues = support.getItemPropertyValues(prodMatUid);
attrValue = itemValues.find {element -> element. propertyId()==@[Марка материала].toId()};
if (attrValue!=null)
{String prodMatMark = attrValue.stringValue}
}
Чтение данных по атрибутам из Semantic MDM
Данные методы рекомендуется использовать в исключительных случаях, когда кроме данных, во внешнюю систему необходимо передать информацию о метаданных. Использование данных методов может значительно снизить скорость репликации данных во внешние системы.
Чтение данных по группам из Semantic MDM