Описание формата XLSX-файла¶
Общая информация¶
Файл Excel используется для экспорта записей в Excel и импорта записей из Excel в систему. Причем, для импорта можно либо скачать пустой шаблон, либо использовать результаты экспорта (доступного в пакетных операциях с записями).
Файл Excel может состоять из нескольких листов, каждый из которых содержит описание отдельного объекта. Тип объекта можно определить по первой букве в названии листа:
E – реестр/справочник (от entity). Является основным листом;
N – комплексный атрибут (от nested);
Количество листов комплексных атрибутов зависит от количества используемых в реестре вложенных объектов. Например, если у реестра есть два комплексных атрибута "с1" и "с2", которые используют один и тот же вложенный объект "nested1", то в xlsx-файле будут присутствовать два листа "N<nested1>1" и "N<nested1>2".
R – связь (от relation);
C – классификация (от classifier);
В названии листа указывается системное и отображаемое имя объекта (не более 31 символа). В названии листа комплексного атрибута указывается имя самого атрибута и имя вложенного объекта.
Примечание
В файле Excel все отметки о времени указываются в часовом поясе UTC+0, и могут отличаться от времени в интерфейсе пользователя. Например, в интерфейсе используется московский часовой пояс UTC+3, но при выгрузке записей в Excel время отображается в поясе UTC+0.
Совет
Рекомендуется изучать файл Excel на готовом примере. Например, выполнить пакетную операцию экспорта для любого реестра/справочника, либо, если данных нет, скачать шаблон для импорта
Особенности импорта¶
При импорте основной лист должен присутствовать в файле, даже если в нем нет записей.
При повторном импорте записей (редактировании существующих данных) при помощи ETALON_ID, вне зависимости от того, какая система-источник указана, записи будут загружаться от имени внутреннего (системного) источника. Для загрузки данных от имени других источников используйте EXTERNAL_ID.
Если импортируются только связи, то необходимо соблюдать условия для концов связей.
Левый конец связи:
ETALON_ID - запись уже должна быть в MDM. Указывается ETALON_ID существующей связи;
EXTERNAL_ID - запись, на которую указывает EXTERNAL_ID, должна импортироваться в этом же файле. Или уже быть в MDM и в этом случае иметь ту же систему-источник;
ID - запись, на которую указывает EXTERNAL_ID, должна импортироваться в этом же файле;
Правый конец связи:
ETALON_ID - запись уже должна быть в MDM. Или в случае связи Включение быть пустой;
EXTERNAL_ID - нужно выполнять одно из условий. Запись уже должна быть в MDM, имея ту же систему-источник. Или импортироваться в этом же файле в случае связей типа Ссылка и Многие-ко-многим, которые ссылаются на этот же реестр. Или в случае связи Включение EXTERNAL_ID может быть пустым и тогда будет сгенерирован автоматически.
Основной лист реестра/справочника¶
Столбец |
Описание |
При импорте |
При экспорте |
---|---|---|---|
ID |
Виртуальный ключ для задания соответствия объектов из разных листов. Значение ID не сохраняется в системе |
Значения ID считываются со всех листов файла. При совпадении ID запись реестра /справочника с указанным ID включает в себя объекты, имеющие совпавший ID. |
Не выгружается при экспорте |
ETALON_ID |
Системный идентификатор эталонной записи |
Необязательное. Может быть пустым. Если ETALON_ID указан, то при импорте запись с совпадающим идентификатором будет перезаписана (изменятся пустые или отредактированные атрибуты). При первичной загрузке данных ETALON_ID должен быть не заполнен. В противном случае записи будут отклонены. При редактировании существующих записей через ETALON_ID данные всегда будут загружаться от имени системного источника данных |
Выгружается при экспорте |
EXTERNAL_ID |
Внешний ключ записи (идентификатор записи в системе-источнике) |
При импорте EXTERNAL_ID указывается в паре с системой-источником, которая была указана на 1 шаге импорта записей. Это необходимо для идентификации новой записи. |
Не выгружается при экспорте |
Если указан ETALON_ID, то только он будет использован: - Если запись с таким ETALON_ID уже существует, то используется системный источник данных для вставки записи; - Если записи с таким ETALON_ID не существует, то появится ошибка. Если указан EXTERNAL_ID (при отсутствии ETALON_ID), то запись с таким EXTERNAL_ID создастся или обновится (в выбранной системе-источнике). Если не указаны ни ETALON_ID, ни EXTERNAL_ID, то запись будет вставлена и сгенерируется EXTERNAL_ID. |
|||
IS_ACTIVE |
Индикатор активности, который определяет, является ли период актуальности записи помеченным на удаление |
Необязательное. Должно быть указано одно из состояний: ИСТИНА или ЛОЖЬ, где ЛОЖЬ – период помечен на удаление. Если IS_ACTIVE пустой, то поведение аналогично параметру в состоянии ИСТИНА |
Выгружается при экспорте |
Для иерархических справочников - индикатор определяет, является ли запись помеченной на удаление |
Необязательное. Должно быть указано одно из состояний: ИСТИНА или ЛОЖЬ, где ЛОЖЬ – запись помечена на удаление. Если IS_ACTIVE пустой, то поведение аналогично параметру в состоянии ИСТИНА |
Выгружается при экспорте |
|
EXTERNAL_KEYS |
Список пар внешних ключей записи и систем-источников. Каждая пара ключ/источник записана через разделитель |
При импорте не используется |
Выгружается при экспорте |
Только для реестра и простого справочника |
|||
FROM |
Дата/время начала периода актуальности записи |
Необязательное. Может быть пустым. Дата указывается в формате DD.MM.YYYY, дата/время в формате DD.MM.YYYY hh:mm:ss |
Выгружается при экспорте, если имеет значение, отличное от "-∞" |
TO |
Дата/время окончания периода актуальности записи |
Необязательное. Может быть пустым. Дата указывается в формате DD.MM.YYYY, дата/время в формате DD.MM.YYYY hh:mm:ss |
Выгружается при экспорте, если имеет значение, отличное от "+∞" |
Отсутствие значения в поле FROM трактуется как "-∞", TO – как "+∞" Например, если указать текущую дату в качестве значения TO, а поле FROM оставить пустым, то запись будет актуальна до сегодняшнего дня включительно |
|||
Только для иерархического справочника |
|||
PARENT_ID |
Идентификатор родительского узла |
Необязательное. Может быть пустым - в таком случае импортированная запись присоединяется к корневому узлу |
Выгружается при экспорте |
PARENT_CODE |
Значение главного кодового атрибута родительской записи |
Необязательное. Может быть пустым - в таком случае импортированная запись присоединяется к корневому узлу |
Выгружается при экспорте |
В последующих столбцах располагаются основные атрибуты реестра/cправочника. Идентификатор каждого атрибута имеет вид "Имя_реестра/справочника"."Имя_атрибута". Например, COUNTRY.NAME для справочника COUNTRY и атрибута NAME. Также указывается подсказка. Например, Список стран >> Наименование.
Лист комплексных атрибутов¶
Заголовок листа комплексного атрибута отображается как
complex_attr_name>nested_name >> Комплексный атрибут: Имя комплексного атрибута > Имя вложенного объекта
, где ">" - разделитель, "complex_attr_name" и "nested_name" - системные имена комплексного атрибута и вложенного объекта соответственно.Системные имена в заголовке используются для правильной идентификации вложенного объекта и комплексного атрибута, которому он принадлежит. В импортируемом файле заголовки должны быть составлены также, в противном случае вложенный объект при импорте будет пропущен и не обновится (в записи будет старое значение комплексного атрибута) или не вставится (в записи будет пустым).
Файлы Excel, созданные в версии Юниверс MDM 6.8 и ниже, не поддерживаются. Чтобы их загрузить, необходимо исправить заголовок листа комплексных атрибутов в соответствии с новым форматом.
Обрабатываются вложенные объекты только первого уровня. Лист комплексных атрибутов может содержать описания нескольких вложенных объектов. Также один вложенный объект может использоваться несколькими комплексными атрибутами.
Столбец |
Описание |
При импорте |
При экспорте |
---|---|---|---|
ID |
Виртуальный ключ для задания соответствия объектов из разных листов. Значение ID не сохраняется в системе |
Используется только для привязки к периодам актуальности записи (строки таблицы) с основного листа и последующего поиска. Если на основном листе присутствует запись с соответствующими колонками ID, FROM, TO, то комплексный атрибут будет добавлен к найденной строке и будет использован для обновления соответствующего периода актуальности записи. Если запись на основном листе не найдена, то комплексный атрибут игнорируется |
Не выгружается при экспорте |
ETALON_ID |
Системный идентификатор эталонной записи |
Используется при импорте совместно с FROM, TO для привязки к периодам актуальности записи (строке таблицы). Если ключ задан, то будет осуществлен поиск среди строк основного листа (который содержит вставки данных). Если на основном листе присутствует запись с соответствующими колонками ETALON_ID, FROM, TO и незаполненной колонкой ID, то комплексный атрибут будет добавлен к найденной строке. Если запись на основном листе не найдена, то комплексный атрибут игнорируется |
Выгружается при экспорте |
EXTERNAL_ID |
Внешний ключ записи (идентификатор записи в системе-источнике) |
Используется при импорте совместно с FROM, TO для привязки к периодам актуальности записи (строке таблицы). Если ключ задан, то будет осуществлен поиск среди строк основного листа (который содержит вставки данных). Если на основном листе присутствует запись с соответствующими колонками EXTERNAL_ID, FROM, TO и незаполненными колонками ID и ETALON_ID, то комплексный атрибут будет добавлен к найденной строке. Если запись на основном листе не найдена, то комплексный атрибут игнорируется |
Не выгружается при экспорте |
Если ETALON_ID и EXTERNAL_ID импортируемого атрибута не соответствуют ETALON_ID и EXTERNAL_ID существующего атрибута, то загрузка атрибута завершится ошибкой |
|||
FROM |
Дата/время начала периода актуальности (записи, к которой добавляется комплексный атрибут) |
Необязательное. Может быть пустым (трактуется как "-∞"). Дата указывается в формате DD.MM.YYYY, дата/время в формате DD.MM.YYYY hh:mm:ss. Комплексные атрибуты импортируются при совпадении ID, FROM и TO с аналогичными полями в записи реестра/справочника на основном листе |
Выгружается при экспорте, если имеет значение, отличное от "-∞" |
TO |
Дата/время окончания периода актуальности (записи, к которой добавляется комплексный атрибут) |
Необязательное. Может быть пустым (трактуется как "+∞"). Дата указывается в формате DD.MM.YYYY, дата/время в формате DD.MM.YYYY hh:mm:ss. Комплексные атрибуты импортируются при совпадении ID, FROM и TO с аналогичными полями в записи реестра/справочника на основном листе |
Выгружается при экспорте, если запись имеет значение, отличное от "+∞" |
IS_ACTIVE |
Для комплексных атрибутов отсутствует |
||
EXTERNAL_KEYS |
Список пар внешних ключей записи и систем-источников. Каждая пара ключ/источник записана через разделитель |
Заполняется так же, как для основного листа |
Заполняется так же, как для основного листа |
Лист связей¶
Столбец |
Описание |
При импорте |
При экспорте |
---|---|---|---|
ID |
Виртуальный ключ для задания соответствия объектов из разных листов. Значение ID не сохраняется в системе |
Заполняется так же, как для комплексного атрибута |
Заполняется так же, как для комплексного атрибута |
ETALON_ID |
Системный идентификатор эталонной записи |
Заполняется так же, как для комплексного атрибута |
Заполняется так же, как для комплексного атрибута |
EXTERNAL_ID |
Внешний ключ записи (идентификатор записи в системе-источнике) |
Заполняется так же, как для комплексного атрибута |
Заполняется так же, как для комплексного атрибута |
Если ETALON_ID и EXTERNAL_ID импортируемой записи не соответствуют ETALON_ID и EXTERNAL_ID существующей записи, то загрузка записи завершится ошибкой. При этом, если указан только EXTERNAL_ID, то запись будет загружена как новая |
|||
FROM |
Дата/время начала периода актуальности связи (для основного листа) |
Необязательное. Может быть пустым. Дата указывается в формате DD.MM.YYYY, дата/время в формате DD.MM.YYYY hh:mm:ss |
Выгружается при экспорте, если имеет значение, отличное от "-∞" |
TO |
Дата/время окончания периода актуальности связи (для основного листа) |
Необязательное. Может быть пустым. Дата указывается в формате DD.MM.YYYY, дата/время в формате DD.MM.YYYY hh:mm:ss |
Выгружается при экспорте, если запись имеет значение, отличное от "+∞" |
Отсутствие значения в поле FROM трактуется как "-∞", TO – как "+∞" Например, если указать текущую дату в качестве значения TO, а поле FROM оставить пустым, то запись будет актуальна до сегодняшнего дня включительно |
|||
TO_ETALON_ID |
Эталонный ключ правого конца связи (ID записи, на которую указывает связь) |
При импорте используется для связывания записей |
Выгружается при экспорте |
IS_ACTIVE |
Для связей отсутствует |
||
TO_EXTERNAL_ID |
Внешний ключ записи правого конца связи |
При импорте используется для связывания записей |
Не выгружается при экспорте |
TO_DISPLAY_NAME |
Отображаемое имя записи, на которую указывает связь |
При импорте не используется |
Выгружается при экспорте |
Лист классификации¶
Классификация описывается построчно для каждого атрибута узла. Например, для описания узла с 3 атрибутами понадобится три строки. При этом столбцы EXTERNAL_ID, FROM, TO, CLASSIFIER_VERSION_ID, CLASSIFIER_IS_ACTIVE, CLASSIFIER_NODE_NAME будут одинаковы; отличаться будут только ATTRIBUTE_NAME и ATTRIBUTE_VALUE.
Если флаг Активная версия включен, то классификация выгружается только из активной версии классификатора.
Столбец |
Описание |
При импорте |
При экспорте |
---|---|---|---|
ID |
Виртуальный ключ для задания соответствия объектов из разных листов. Значение ID не сохраняется в системе |
Заполняется так же, как для комплексного атрибута |
Не выгружается при экспорте |
ETALON_ID |
Системный идентификатор эталонной записи, к которой привязан узел классификатора |
Заполняется так же, как для комплексного атрибута |
Выгружается при экспорте |
EXTERNAL_ID |
Внешний ключ записи (идентификатор записи в системе-источнике), к которой привязан узел классификатора |
Заполняется так же, как для комплексного атрибута |
Выгружается при экспорте |
FROM |
Дата/время начала периода актуальности (записи, к которой добавляется узел классификатора) |
Необязательное. Может быть пустым (трактуется как "-∞"). Дата указывается в формате DD.MM.YYYY, дата/время в формате DD.MM.YYYY hh:mm:ss. Комплексные атрибуты импортируются при совпадении ID, FROM и TO с аналогичными полями в записи реестра/справочника на основном листе |
Не выгружается при экспорте |
TO |
Дата/время окончания периода актуальности (записи, к которой добавляется узел классификатора) |
Необязательное. Может быть пустым (трактуется как "+∞"). Дата указывается в формате DD.MM.YYYY, дата/время в формате DD.MM.YYYY hh:mm:ss. Комплексные атрибуты импортируются при совпадении ID, FROM и TO с аналогичными полями в записи реестра/справочника на основном листе |
Не выгружается при экспорте |
CLASSIFIER_VERSION_ID |
Логическое имя классификатора |
Обязательно заполняется |
Выгружается при экспорте |
CLASSIFIER_NODE_NAME |
Имя узла классификатора (логическое имя узла версии классификатора) |
Обязательно заполняется |
Выгружается при экспорте |
CLASSIFIER_IS_ACTIVE |
Определяет, активен ли узел классификатора (не путать с флагом Активная версия в мастере экспорта записей) |
Обязательно заполняется. При импорте со значением false узел, до этого существовавший в записи, будет помечен на удаление. (Для редактирования записей путем импорта). Если у узла несколько атрибутов, то есть несколько строк, для удаления узла при импорте файла достаточно проставить false только в одной из них. |
Выгружается при экспорте. При экспорте существующей записи с классификацией используйте значение true. При экспорте логически удаленной записи с классификацией используйте значение false. Узлы классификатора, удаленные из существующей записи при редактировании, не экспортируются. |
ATTRIBUTE_NAME |
Логическое имя атрибута узла классификатора |
Обязательно заполняется, если атрибут существует |
Выгружается при экспорте если существует |
ATTRIBUTE_VALUE |
Значение атрибута узла классификатора |
Необходимо заполнять как минимум атрибуты, имеющие свойство "Обязательный" |
Выгружается при экспорте если существует |
Лист единиц измерения¶
Столбец MU.name - содержит системное имя единицы измерения.
Столбец MU.display.name - содержит отображаемое имя единицы измерения.
Примечания¶
Общая информация
Каждый лист имеет системные атрибуты (столбцы синим цветом) и основные атрибуты объекта.
Каждому атрибуту соответствует отдельный столбец.
Каждая новая строка соответствует отдельной записи с периодом актуальности (если запись содержит несколько периодов актуальности, то каждый период будет отдельной строкой).
ID, ETALON_ID и EXTERNAL_ID в листах атрибутов и связей служат для идентификации записи (периода актуальности), к которой они привязываются.
Идентификация происходит по содержимому основного листа. Если запись не найдена, то вставляемый объект (комплексный атрибут или связь) будет проигнорирован.
Пакетные операции не являются частью бизнес-процессов и запускаются напрямую.
Поиск записей по системным атрибутам
При заполнении шаблона необходимо учитывать возможные случаи содержания трех главных системных атрибутов записи: ID, ETALON_ID и EXTERNAL_ID. Кроме того, все объекты (связи, комплексные атрибуты) для привязки учитывают периоды актуальности (значения полей FROM и TO).
Приоритет колонок при идентификации: ID, ETALON_ID, затем EXTERNAL_ID.
Если в основном листе не задан ни один из ключей, она будет вставлена как новая. Привязать объекты к такой записи невозможно.
Если в основном листе ID Задан, ETALON_ID Пустой, EXTERNAL_ID Пустой: запись будет вставлена как новая. Только этот ключ будет использоваться для поиска между листами.
Если в основном листе ID Пустой, ETALON_ID Задан, EXTERNAL_ID Пустой: для поиска будет использован ETALON_ID. Только этот ключ будет использоваться для поиска между листами.
Если в основном листе ID Пустой, ETALON_ID Пустой, EXTERNAL_ID Задан: для поиска будет использован EXTERNAL_ID. Только этот ключ будет использоваться для поиска между листами.
Если в основном листе ID Задан, ETALON_ID Задан, EXTERNAL_ID Задан: для поиска будет использован ID. Только этот ключ будет использоваться для поиска между листами.
Если в основном листе ID Задан, ETALON_ID Задан, EXTERNAL_ID Пустой: для поиска будет использован ID. Только этот ключ будет использоваться для поиска между листами.
Если в основном листе ID Задан, ETALON_ID Пустой, EXTERNAL_ID Задан: для поиска будет использован ID. Только этот ключ будет использоваться для поиска между листами.
Рекомендуется заполнять один тип ключа для всех объектов соответствующей записи (для самого реестра/справочника, для комплексных атрибутов, связей).
Импорт записи с несколькими периодами актуальности
Несколько периодов одной записи загружаются только с помощью EXTERNAL_ID.
В файле .xlsx такая запись с несколькими периодами актуальности занимает несколько строк, где каждая из строк должна содержать собственные периоды актуальности (столбцы FROM и TO).
В случае обновления существующей записи ETALON_ID у всех строк одной записи должен быть одинаковым.
Период, который полностью перекрывается другим (входит в него), будет объединен с более крупным периодом.
Особенности импорта справочников (с помощью PARENT_ID и PARENT_CODE)
Вставка записей и обновление иерархии записей выполняются в рамках одной транзакции. Если выдается ошибка, например, из-за неразрешенного родительского кода, вся пакетная операция откатывается, изменения индекса очищаются. Такое поведение отличается от традиционной пакетной обработки сбоев, поскольку отдельный запрос не изолирован от других: успех обновления дочерних записей зависит от результата обновления родительского запроса.
В одном импорте xlsx поддерживается разрешение иерархии как на основе кода, так и на основе идентификатора. Если заполнено только одно из этих полей, оно используется. Если оба заполнены и указывают на разные записи, выдается ошибка. Если нет, то запись прикрепляется к корневому каталогу.
Значение первичного кода не идентифицирует запись, т.е. если etalon_id пуст, оно обрабатывается как новая запись и вызовет ошибку, если запись с тем же кодом существует.
Особенности экспорта связи "Включение"
При экспорте связи "Включение" с комплексным атрибутом появляется дополнительный лист.
На листе комплексного атрибута связи "Включение":
Можно указать ID или EXTERNAL_ID, которые привязываются к TO_EXTERNAL_ID связи;
Можно указать ETALON_ID, который привязывается к TO_ETALON_ID связи.