Трансформация данных AtlasMap
AtlasMap - инструмент для удобного преобразования данных в рамках интеграционной платформы Entaxy ION.
Интерфейс AtlasMap
-
Entaxy Transformation:
-
Import a catalog (.adm): Импортировать каталог (формат .adm).
-
Open a catalog from Entaxy registry (.adm): Открыть каталог из реестра схем Entaxy (формат .adm).
-
Export the current mappings and support files into a catalog (.adm): Экспортировать текущий маппинг и вспомогательные файлы в каталог (формат .adm).
-
Save the current mappings and support files into Entaxy registry (.adm): Сохранить текущий маппинг и вспомогательные файлы в реестр схем Entaxy (формат .adm).
-
Reset all mappings and clear all imported documents: Сбросить все маппинги и очистить данные импортированных документов.
-
Show Column Mapper: Показать маппинг в виде двух столбцов.
-
Show Mapping Table: Показать маппинг в виде таблицы.
-
Show Namespace Table: Показать таблицу пространств имен.
-
Show/Hide mapping Preview: Показать/скрыть предварительный просмотр маппинга.
-
Show/Hide types: Показать/скрыть тип полей.
-
Show/Hide mapped Fields: Показать/скрыть сопоставленные поля.
-
Show/Hide unmapped Fields: Показать/скрыть не сопоставленные поля.
-
Add a New mapping: Добавить новое сопоставление.
-
About AtlasMap: Информация об AtlasMap.
-
-
-
Source: Поле загрузки и отображения источника данных.
-
Import instance or schema file: Импортировать файл данных или схемы.
-
Open instance or schema file from Entaxy registry: Открыть файл данных или схемы из реестра схем Entaxy.
-
Properties: Используемые свойства.
-
Constants: Используемые константы.
-
-
Target: Поле загрузки и отображения цели данных.
-
Import instance or schema file: Импортировать файл данных или схему.
-
Open instance or schema file from Entaxy registry: Открыть файл данных или схему из реестра схем Entaxy.
-
Properties: Свойства.
-
Создание маппинга AtlasMap
После выбора входной точки маршрута добавьте маппинг AtlasMap в ваш маршрут.
В веб-консоли Entaxy перейдите в раздел 'Entaxy Transformation'.
Затем создайте новую конфигурацию AtlasMap или откройте существующую в зависимости от ваших потребностей.
В AtlasMap данные представлены в виде источника (Source) и цели (Target).
Источник содержит данные, полученные из вашей входной точки маршрута, а цель указывает, как будут представлены преобразованные данные.
Воспользуйтесь графическим интерфейсом AtlasMap для создания маппингов между полями и элементами данных источника и цели.
Для корректного маппинга в AtlasMap важно, чтобы структура данных в формате JSON была однородной в каждом элементе массива. |
Например, в следующем примере структура неоднородна, так как один из элементов массива содержит дополнительное поле 'phone':
{
"employees": [
{
"id": 123,
"address": {
"city": "Moscow"
},
"contact": {
"name": "Ivan"
}
},
{
"id": 123,
"address": {
"city": "St. Petersburg"
},
"contact": {
"name": "Maria"
},
"phone": {
"number": "123456789"
}
}
]
}
Следующая однородная структура данных позволит успешно использовать AtlasMap:
{
"employees": [
{
"id": 123,
"address": {
"city": "Moscow"
},
"contact": {
"name": "Ivan"
},
"phone": {
"number": "123456789"
}
},
{
"id": 123,
"address": {
"city": "St. Petersburg"
},
"contact": {
"name": "Maria"
},
"phone": {
"number": "123456789"
}
}
]
}
Если в структуре данных присутствует несколько элементов с одинаковым именем внутри одной группы, порядок обработки полей будет определяться первым элементом в этой группе. |
Пример:
<?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns="http://example.com/schema">
<Header>
<RequestID>12345</RequestID>
<TimeStamp>2024-08-23T10:00:00+03:00</TimeStamp>
</Header>
<Body>
<Order>
<Item>
<Quantity>1001</Quantity>
<ProductID>5</ProductID>
</Item>
<Item>
<ProductID>1002</ProductID>
<Quantity>3</Quantity>
</Item>
<Item>
<ProductID>1003</ProductID>
<Quantity>2</Quantity>
</Item>
</Order>
<Shipping>
<Address>
<Street>Main St</Street>
<City>Springfield</City>
</Address>
<Address>
<Street>Elm St</Street>
<City>Shelbyville</City>
</Address>
</Shipping>
</Body>
</Envelope>
Для определения преобразования данных и выполнения различных операций маппинга вы можете использовать функционал перетаскивания и связывания элементов данных в AtlasMap.
Сопоставление полей
Установите соответствие между полями и элементами данных источника и цели. Например, сопоставьте поле "name" из источника с полем "name" в цели. Поддерживается объединение нескольких полей в одном поле.
AtlasMap умеет выполнять следующие виды сопоставлений данных:
-
Одно к одному (One to one): Это означает, что вы можете установить соответствие между одним исходным полем и одним целевым полем.
-
Многие к одному (Many to one): Этот вид сопоставления позволяет связать несколько исходных полей с одним целевым полем. Вы определяете символ разделителя, который будет вставлен в целевое поле между данными, полученными из разных исходных полей. По умолчанию, это пробел.
-
Одно ко многим (One to many): В этом случае вы можете установить соответствие между одним исходным полем и несколькими целевыми полями. Вы указываете символ разделителя в исходном поле, и AtlasMap автоматически разбивает значение на части с использованием указанного разделителя, затем присваивает каждую часть выбранным целевым полям.
-
Для каждого (For each): Этот вид сопоставления позволяет итеративно устанавливать соответствие между каждым элементом коллекции данных в исходном поле и соответствующим элементом в целевом поле, которое также представляет собой коллекцию данных. Таким образом, каждый элемент коллекции в исходном поле будет связан с соответствующим элементом в целевом поле.
Коллекции поддерживают только один вид сопоставления - For each. Одному элементу в исходном поле может быть сопоставлен только один элемент в целевом поле.
Преобразование данных
Трансформация – значок с молнией
Вы можете применять функции и операции для преобразования данных, например, изменять формат даты, выполнять вычисления и т. д. Можно настраивать фильтры и правила обработки данных для исключения ненужных записей или выполнения дополнительных действий.
Описание доступных трансформаций AtlasMap.
Трансформация | Параметр (* = обязательный) | Описание |
---|---|---|
Append |
string |
Добавляет указанную строку в конец строки. По умолчанию ничего не добавляется. |
Capitalize |
- |
Приводит первую букву строки к верхнему регистру. |
Ends With |
string |
Возвращает true, если строка заканчивается на указанную строку, учитывая регистр. |
Equals |
value |
Возвращает true, если поле равно указанному значению, учитывая регистр. |
File Extension |
- |
Из строки, представляющей имя файла, возвращает расширение файла без точки. |
Index Of |
string |
Возвращает индекс первого вхождения указанной строки, начиная с 0. Возвращает -1, если строка не найдена. |
Is Null |
- |
Возвращает true, если поле равно null. |
Last Index Of |
string |
Возвращает индекс последнего вхождения указанной строки, начиная с 0. Возвращает -1, если строка не найдена. |
Length |
- |
Возвращает длину поля или -1, если поле равно null. |
Lowercase |
- |
Приводит строку к нижнему регистру. |
Normalize |
- |
Заменяет последовательные пробелы на одинарный пробел и удаляет пробелы в начале и в конце строки. |
Pad String Left |
padCharacter * |
Вставляет указанный символ padCharacter в начало строки. Повторяет это количество раз, указанное в padCount. |
Pad String Right |
padCharacter * |
Вставляет указанный символ padCharacter в конец строки. Повторяет это количество раз, указанное в padCount. |
Prepend |
string |
Добавляет префикс к началу строки. По умолчанию префикс не добавляется. |
Remove File Extension |
- |
Удаляет расширение файла из строки. |
Replace All |
match * |
В строке заменяет все вхождения указанной строки на предоставленную newString. По умолчанию newString является пустой строкой. |
Replace First |
match * |
В строке заменяет первое вхождения указанной строки на предоставленную newString. По умолчанию newString является пустой строкой. |
Separate By Dash |
- |
Заменяет каждое вхождение пробела, двоеточия (:), символа подчеркивания (_), знака плюса (+) и знака равенства (=) на дефис (-). |
Separate By Underscore |
- |
"Заменяет каждое вхождение пробела, двоеточия (:), дефиса (-), знака плюса (+) и знака равенства (=) на символ подчеркивания (_). |
Starts With |
string |
Возвращает true, если строка начинается с указанной строки (учитывая регистр). |
Sub String |
startIndex * |
Извлекает сегмент строки от указанного (включительно) startIndex до указанного endIndex. Оба индекса начинаются с нуля. Значение endIndex по умолчанию равно длине строки. |
Sub String After |
startIndex * |
Извлекает сегмент строки после указанной строки match, начиная с (включительно) startIndex и заканчивая endIndex. Оба индекса начинаются с нуля. Значение endIndex по умолчанию равно длине строки после указанной строки match. |
Sub String Before |
startIndex * |
Извлекает сегмент строки перед указанной строкой match, начиная с (включительно) startIndex и заканчивая endIndex. Оба индекса начинаются с нуля. Значение endIndex по умолчанию равно длине строки перед указанной строкой match. |
Trim |
- |
Удаляет пробелы в начале и конце строки. |
Trim Left |
- |
Удаляет пробелы в начале строки. |
Trim Right |
- |
Удаляет пробелы в конце строки. |
Uppercase |
- |
Приводит строку к верхнему регистру. |
Использование констант и свойств
В AtlasMap можно создавать константы для маппинга в поля, которых нет в исходных данных.
-
Создать Constant
В панели Source в разделе Constants нажмите на значок «+». Откроется диалоговое окно, где нужно ввести значение константы и выбрать её тип данных (например, строка, число и т.д.). После сохранения новая константа появится как доступное поле, которое можно сопоставить с целевым полем.
Пример: У вас есть целевое поле Layout, которое принимает значения только "HORIZONTAL" или "VERTICAL". В исходных данных такого поля нет, поэтому вы можете создать константу, например, со значением "HORIZONTAL". Далее вы просто маппите эту константу в поле Layout в целевой структуре.
AtlasMap позволяет определять свойства, которые могут быть использованы как источник данных для маппинга и конфигураций. Если на уровне выполнения имеется переменная окружения или системное свойство с таким же именем, оно может переопределить значение по умолчанию.
-
Создать Properties
В панели Source в разделе Properties нажмите на значок «+». Откроется диалоговое окно, где нужно ввести имя свойства, выбрать тип данных (например, строка, число и т.д.) и область видимости (scope). Доступные варианты для области видимости включают Current Message Header, Camel Exchange Property и другие. После сохранения новое свойство появится как доступное поле, которое можно сопоставить с целевым полем.
Маппинг между коллекциями и не коллекциями
-
Поведение по умолчанию при маппинге коллекций:
-
Коллекция → Не коллекция: При маппинге из коллекции в поле, которое не является коллекцией, по умолчанию маппится последнее значение из коллекции в целевое поле.
-
Не коллекция → Коллекция: При маппинге из поля, которое не является коллекцией, в коллекцию, значение будет помещено в первый (и единственный) элемент целевой коллекции. Работа со сложными коллекциями:
-
-
Отображение дочерних полей:
-
Если коллекция содержит сложные типы данных, в AtlasMap отображаются дочерние поля коллекции, что позволяет маппить конкретные поля внутри коллекции.
-
-
Одиночный примитивный тип:
-
Если коллекция содержит только один примитивный тип данных, дочерние поля не отображаются, и коллекция рассматривается как единое целое.
-
Трансформации для изменения поведения маппинга:
-
-
-
Трансформация Item At:
-
Чтобы изменить поведение по умолчанию и маппить определённый элемент коллекции (например, первый или элемент по индексу), можно использовать трансформацию Item At.
-
-
Трансформация Concatenate:
-
Для маппинга всех элементов коллекции в одно поле (например, строку), можно использовать трансформацию Concatenate, которая объединит значения с указанным разделителем.
-
-
Разделение данных в не коллекциях:
-
Если поле, не являющееся коллекцией, содержит строку с разделителями (например, список городов), можно использовать трансформацию Split для разбивки строки на отдельные элементы коллекции.
-
Добавление маппинга AtlasMap в маршрут
-
Сохранение конфигурации
По завершении процесса маппинга и настройки преобразований данных, сохраните конфигурацию AtlasMap в формате .adm. При выборе опции сохранения в реестре схем Entaxy, файл будет сохранен по следующему адресу: schemas:название_файла.adm. -
Интеграция в маршрут
Для интеграции вашей конфигурации AtlasMap с интеграционным маршрутом используйте следующий XML-тег:
<m:atlasmap resource="entaxy-resource://schemas/atlasmap-mapping.adm"></m:atlasmap>
Типы маппинга в AtlasMap
Многие к одному
Сопоставляет нескольких исходных полей с одним целевым полем. Вы указываете символ-разделитель, который AtlasMap вставляет в целевое поле между сопоставленными исходными полями. По умолчанию разделителем является пробел.
Поддерживаемые действия:
Действие | Описание | Пример и использование |
---|---|---|
Concatenate |
Конкатенирует значения из нескольких исходных полей в одно целевое поле, используя заданный разделитель. Каждое значение размещается последовательно, разделенное указанным символом. |
У вас есть набор данных с полями |
Contains |
Проверяет, присутствует ли заданное значение в указанном поле, и возвращает результат проверки. Если значение найдено, возвращает true; если не найдено — false. |
У вас есть набор данных с полем |
Count |
Подсчитывает количество элементов в наборе данных, возвращая числовое значение. Может использоваться для получения количества записей или данных в массиве для дальнейшей обработки. |
У вас есть набор данных с полем |
Format |
В поле |
У вас есть набор данных с полями |
ItemAt |
Извлекает элемент из массива данных по указанному индексу. |
У вас есть массив объектов клиентов, и вам нужно получить информацию о клиенте по его индексу. |
Одно ко многим
Сопоставляет одно исходное поле с несколькими целевыми полями. Вы указываете символ-разделитель, который присутствует в исходном поле. AtlasMap сопоставляет каждое значение, разделенное этим символом, с выбранным целевым полем.
Поддерживаемые действия:
Действие | Описание | Пример и использование |
---|---|---|
Split |
Делит входящие данные на несколько выходных сообщений на основе заданного разделителя или условия, позволяя разбить сложные сообщения на более мелкие части для дальнейшей обработки или маршрутизации. |
У вас есть JSON-схема, представляющая список товаров в поле |
CopyTo |
Копирует данные из источника в целевой массив на основе указанного индекса. Данные помещаются в элемент массива, соответствующий этому индексу. |
У вас есть JSON-схема, представляющая информацию о клиентах, где поле |
Repeat |
Создает несколько копий данных из одного поля, позволяя дублировать одно и то же значение для дальнейшей обработки или маршрутизации. Данные помещаются в целевой массив. |
У вас есть JSON-схема, представляющая информацию о товаре, где поле |
Для каждого
Итеративное сопоставление одного исходного поля коллекции с одним целевым полем коллекции.
Примеры преобразования данных
Пример 1. Тип маппинга: Многие к одному
Мы будем использовать AtlasMap для преобразования данных между JSON-схемой, представляющей данные из 1С, и XML-схемой, совместимой с CRM.
-
Определение JSON-схемы
Начнем с определения JSON-схемы, которая описывает структуру данных:
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "customer_id": { "type": "string", "pattern": "^[0-9]{5}$" }, "name": { "type": "string" }, "email": { "type": "string", "format": "email" }, "phone": { "type": "string", "pattern": "^[0-9]{3}-[0-9]{3}-[0-9]{4}$" }, "address": { "type": "string" } }, "required": ["customer_id", "name", "email"] }
Эта JSON-схема определяет объект с полями "customer_id", "name", "email", "phone" и "address", где "customer_id" ожидает 5 цифр, "email" должен соответствовать формату электронной почты, "phone" ожидает формат "123-456-7890", и "customer_id", "name" и "email" обязательны для заполнения.
-
Определение XML-схемы
Определяем XML-схему для XML-файла, который CRM ожидает для обработки данных:
<?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="customer"> <xs:complexType> <xs:sequence> <xs:element name="customer_info" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
Эта XML-схема определяет корневой элемент <customer>, который содержит единственный элемент <customer_info> с типом xs:string. Теперь мы можем использовать AtlasMap для сопоставления данных из JSON в одно поле XML <customer_info> и для применения трансформации, чтобы объединить эти данные в одну строку.
-
Создание Маппинга в AtlasMap
Теперь, когда у нас есть определенные JSON- и XML-схемы, мы можем использовать AtlasMap для создания маппинга данных между ними.
-
Запустите AtlasMap UI.
-
Настройте источник и цель:
-
Укажите источник данных, используя JSON-схему, представляющую данные из 1С.
-
Укажите целевые данные, используя XML-схему, совместимую с CRM.
-
-
Определите маппинги:
-
Создайте маппинги между полями источника и цели:
-
JSON customer_id, name, email, phone, и address → XML <customer_info>
Для объединения значений из нескольких полей JSON в одну строку XML с использованием AtlasMap, вы можете воспользоваться возможностью выбора разделителя и предварительного просмотра результата.
Вот как это делается:
-
-
Выбор разделителя:
В AtlasMap, после того как вы создали маппинг JSON → XML для объединения значений, выберите элемент XML, в который вы хотите вставить объединенное значение (например, <customer_info>).
В настройках этого маппинга, вы можете найти опцию для выбора разделителя (delimiter). Это поле, где вы указываете, какой разделитель должен быть использован для объединения значений. Например, вы можете выбрать запятую, пробел, точку с запятой или любой другой разделитель, который соответствует вашим потребностям.
-
Предварительный просмотр результата:
В AtlasMap есть возможность просматривать результат маппинга перед его сохранением (preview).
После настройки маппинга и выбора разделителя, вы можете перейти в режим превью, который позволяет вам увидеть, как будут выглядеть результаты маппинга перед их применением. В режиме превью, вы можете видеть, как JSON-значения будут объединены с выбранным разделителем и отображены в XML-элементе.
-
Проверьте и сохраните ваш маппинг в реестр схем Entaxy:
Entaxy Transformation → Save the current mappings and support files into Entaxy registry (.adm).Файл конфигурации будет размещен по адресу - schemas:название_файла.adm
-
Определение исходных данных JSON-файл
order.json
{ "customer_id": "66654", "name": "Oleg Pavlov", "email": "oleg@example.com", "phone": "911-456-5490", "address": "st. Krasnaya. 43" }
Запустите процесс маппинга, интегрировав .adm в маршрут, и AtlasMap преобразует данные из JSON-формата в XML, соблюдая структуру, определенную в XML-схеме.
Пример 2. Тип маппинга: Одно к одному
-
Определение JSON-схемы
Начнем с определения JSON-схемы, которая описывает структуру данных. Вот пример JSON-схемы:
{ "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "order_id": { "type": "string" }, "customer_id": { "type": "string" }, "total_amount": { "type": "number" }, "order_date": { "type": "string", "format": "date" } }, "required": ["order_id", "customer_id", "total_amount", "order_date"] }
Эта JSON-схема определяет структуру данных, которая описывает JSON-файл. Она включает в себя следующие элементы:
"order_id" - строка (идентификатор заказа). "customer_id" - строка (идентификатор клиента). "total_amount" - число (общая сумма заказа). "order_date" - строка с форматом даты (дата заказа).
Кроме того, указаны обязательные поля: "order_id", "customer_id", "total_amount" и "order_date". Это гарантирует, что JSON-файл, используемый в интеграции, будет соответствовать этой структуре данных.
-
Определение XML-instance
Определяем XML-instance для XML-файла, который CRM ожидает для обработки данных.
<?xml version="1.0" encoding="UTF-8"?> <order> <order_id>order_id</order_id> <customer_id>customer_id</customer_id> <total_amount>total_amount</total_amount> <order_date>order_date</order_date> </order>
В этом XML-instance:
<order> - корневой элемент, представляющий заказ. <order_id> - элемент, представляющий идентификатор заказа <customer_id> - элемент, представляющий идентификатор клиента <total_amount> - элемент, представляющий общую сумму заказа <order_date> - элемент, представляющий дату заказа. -
Создание Маппинга в AtlasMap
Теперь, когда у нас есть определенные JSON-схема и XML-instance, мы можем использовать AtlasMap для создания маппинга данных между ними.
-
Запустите AtlasMap UI.
-
Настройте источник и цель:
-
Укажите источник данных, используя JSON-схему, представляющую данные из 1С.
-
Укажите целевые данные, используя XML-файл, совместимый с CRM.
-
-
Определите маппинги:
-
Создайте маппинги между полями источника и цели:
-
JSON order_id → XML <order_id>
-
JSON customer_id → XML <customer_id>
-
JSON total_amount → XML <amount>
-
JSON order_date → XML <date>
-
-
Проверьте и сохраните ваш маппинг в реестр схем Entaxy:
Entaxy Transformation → Save the current mappings and support files into Entaxy registry (.adm).Файл конфигурации будет размещен по адресу - schemas:название_файла.adm
-
Определение исходных данных JSON-файл
order.json
{ "customer_id": "123456789", "order_date": "2023-11-20", "order_id": "ORD2023-00567", "total_amount": "500" }
Запустите процесс маппинга, интегрировав .adm в маршрут, и AtlasMap преобразует данные из JSON-формата в XML, соблюдая структуру, определенную в XML-instance.
Условные выражения в AtlasMap
AtlasMap предоставляет поддержку условных выражений, что позволяет логически обрабатывать данные при их отображении. Для этого используются функции IF() и ISEMPTY().
-
IF(boolean-expression, then, else):
Функция IF() возвращает одно значение, если логическое выражение (boolean-expression) истинно, и другое значение, если оно ложно. Обязательные аргументы: boolean-expression, then (возвращаемое значение, если true), else (возвращаемое значение, если false).Пример использования:
IF(ISEMPTY(lastName), firstName, lastName + '_' + firstName)
Если "lastName" пусто, то "customerName" будет равно только "firstName".
Если "lastName" не пусто, то "customerName" будет равно "lastName_firstName".Разделитель, используемый для объединения "lastName" и "firstName" можно изменить. Вместо подчеркивания ('_'), вы можете использовать любой другой символ или даже пустую строку в зависимости от ваших требований. При формировании выражения, учитывайте возможность трансформации значений. Например: IF(ISEMPTY(lastName), firstName, lastName + ',' + UPPERCASE(firstName)) .
UPPERCASE(value): Функция UPPERCASE() преобразует значение в верхний регистр.
ISEMPTY(source-field-name): Функция ISEMPTY() возвращает true, если указанное поле (source-field-name) пусто, и false в противном случае.
Пример использования:
ISEMPTY(firstName)
Возвращает true, если "firstName" пусто.
Возвращает false, если "firstName" содержит значение.
Поддерживаемые операторы
Эти операторы предоставляют инструменты для выполнения различных математических и логических операций при отображении и обработке данных в AtlasMap. Вы можете комбинировать их с условиями и функциями для более сложных манипуляций с данными.
Оператор | Описание |
---|---|
|
Сложение числовых значений или конкатенация строковых значений. |
|
Вычитание числового значения из другого числового значения. |
|
Умножение числовых значений. |
|
Деление числовых значений. |
|
Возвращает true, если и левый, и правый операнды являются true. Каждый операнд должен возвращать логическое значение. |
|| Или (Or) |
Возвращает true, если левый операнд true, или если правый операнд true, или если оба операнда true. Каждый операнд должен возвращать логическое значение. |
|
Логическое отрицание. Возвращает true, если операнд false, и наоборот. |
|
Возвращает true, если левый числовой операнд больше, чем правый числовой операнд. |
|
Возвращает true, если левый числовой операнд меньше, чем правый числовой операнд. |
|
Возвращает true, если левый операнд и правый операнд идентичны. |