Руководство пользователя Semantic MDM
×
Меню
Индекс

Методы для чтения данных из Semantic MDM

 
Основным способом чтения значений атрибутов текущей экспортируемой позиции, является чтение через конструкцию @[имя атрибута]. Для чтения значения вложенных в агрегации атрибутов, необходимо последовательно перечислить имена атрибутов, например:
Перечисленные конструкции вернут одно значение атрибута, если все перечисленные в конструкции атрибуты хранят единичное значение. Если хотя бы один из перечисленных в конструкции атрибутов хранит массив значений, то данная конструкция вернет List значений. Для каждого из типов данных атрибутов, будет возвращен свой тип данных:
Методы чтения данных из Semantic MDM, описанные ниже, рекомендуется использовать в исключительных случаях, когда штатные средства настройки атрибутов обменных классов и использование ссылок на атрибуты (@[<наименование атрибута>]) в скриптах Groovy не позволяют прочитать необходимые данные из Semantic MDM для формирования сообщения экспорта.
 Использование данных функций может значительно замедлить экспорт данных во внешние системы, в случае изменения позиции, участвующей в формировании большого количества сообщений экспорта. Например, такой позицией может быть единица измерения “штуки” или “килограмм”, которая используется в большинстве позиций справочника номенклатуры.
 

Чтение данных о позиции

 

Чтение значений атрибутов позиции

Основным способом чтения значений атрибутов текущей позиции, является чтение через конструкцию @[имя атрибута]. Для чтения значения вложенных в агрегации атрибутов, необходимо последовательно перечислить имена атрибутов, например:
Перечисленные конструкции вернут одно значение атрибута, если все перечисленные в конструкции атрибуты хранят единичное значение. Если хотя бы один из перечисленных в конструкции атрибутов хранит массив значений, то данная конструкция вернет List значений.
Кроме получения списка значений (List) для вложенного атрибута, есть возможность получить полный путь до этого значения через метод: getMapValues(), который вернет Map<String, Object>,  где String будет содержать GUID агрегированной позиции, а  Object будет содержать либо значение заданного атрибута, либо еще один Map<String, Object>, если путь к вложенному атрибуту состоит из более чем одного атрибута связи.
Примеры возвращаемых значений:
Для каждого из типов данных атрибутов, будет возвращен свой тип данных:
Описанные ниже функции рекомендуется использовать в исключительных случаях, при невозможности изначально определить полный перечень экспортируемых атрибутов в обменном классе. Примером такого исключения, может быть интеграция с внешними системами по справочнику номенклатуры, в котором необходимо передать информацию по списку атрибутов справочника, который не может быть определен заранее и должен вычисляться динамически, в зависимости от различных условий. Например, выполнить экспорт значений только для  тех атрибутов, которые входят в определенную категорию атрибутов и/или участвуют в вычислении полного наименования.
Метод 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