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

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

 

Выполнение поиска позиций

Возможны различные сценарии обогащения данных, при которых необходимо выполнить поиск позиции по заданным атрибутам в справочнике Semantic MDM. Например, найти в классификаторе группу по коду или найти материал по марке и стандарту на материал и далее прописать ссылку на найденную позицию.
Для реализации этих сценариев, в скрипт Groovy добавлены функции выполнения поиска позиции в заданной группе или в заданном классификаторе:
Данные функции возвращают построитель критериев поиска (SearchParamsBuilder) в котором можно с помощью функций byValue(String value, String propertyId) и byStatus(ItemStatus status) добавить параметры поиска и далее выполнить поиск с помощью функции Invoke(), которая вернет список Uuid позиций(List<String>), найденных в Semantic MDM. Каждая из функций: byValue() и byStatus() возвращает построитель запросов SearchParamsBuilder, дополненный критерием по значению атрибута (byValue) или статуса (byStatus), что позволяет путем последовательного вызова этих функций сформировать требуемый поисковый запрос и выполнить его. Примеры вызова, ниже.
Пример поиска страны в классификаторе ОКСМ по наименованию и статусу “Нормализована” :
List<String> itemUids = support.findInNode("55805ab0-15cd-4523-9fc2-f926fcf3b376").byValue("РОССИЯ" , @[Наименование ОКСМ].toPath()).byStatus(ItemStatus.Standardized).invoke();
Пример поиска в справочнике материалов по марке материала, стандарту на материал и статусу “Нормализована”:
List<String> itemUids = support.findInNode("2003b902-7bee-49d5-9401-02fb79e1d6e9").byValue("Ст3кп", @[Марка материала].toPath()).byValue("ГОСТ 380-94", @[Стандарт на материал][Сокращенное наименование].toPath()).byStatus(ItemStatus.Standardized).invoke();
 
 

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

В сценариях обогащения данных, могут встречаться задачи получения текущего статуса позиции, получения идентификатора внешней системы или идентификатора Semantic MDM из переходного ключа, а также получения информации о группе.
В специальной переменной support предусмотрены следующие функции:
Пример получения идентификатора в системе 1С_ERP для обогащаемой позиции:
String itemUid = support.getSourceId(@[#itemUid], "1C_ERP")
 

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

Основным способом чтения значений атрибутов текущей позиции, является чтение через конструкцию @[имя атрибута]. Для чтения значения вложенных в агрегации атрибутов, необходимо последовательно перечислить имена атрибутов, например:
Перечисленные конструкции вернут одно значение атрибута, если все перечисленные в конструкции атрибуты хранят единичное значение. Если хотя бы один из перечисленных в конструкции атрибутов хранит массив значений, то данная конструкция вернет List значений.
Кроме получения списка значений (List) для вложенного атрибута, есть возможность получить полный путь до этого значения через метод: getMapValues(), который вернут Map<String, Object>,  где String будет содержать GUID агрегированной позиции, а  Object будет содержать либо значение заданного атрибута, либо еще один Map<String, Object>, если путь к вложенному атрибуту состоит из более чем одного атрибута связи.
Примеры возвращаемых значений:
Для каждого из типов данных атрибутов, будет возвращен свой тип данных:
Если основной способ чтения значений атрибутов текущей позиции по каким-либо причинам не позволяет организовать чтение требуемых данных или требуется прочитать значения атрибутов найденных позиций через поиск, то для чтения значений атрибутов позиций, в системе предусмотрены следующие методы:
Свойства PropertyValueDto:
Свойства ExchangeFile:
Свойства ExchangeComplexDouble:
Метод 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, false);
attrValue = itemValues.find {element -> element. propertyId()==@[Марка материала].toId()};
if (attrValue!=null)
{String prodMatMark = attrValue.stringValue}
}
 

Чтение данных по атрибутам

 

Чтение данных по группам