Платформа 3V/DataManager/Маппинг справочников: различия между версиями
(не показано 39 промежуточных версий этого же участника) | |||
Строка 10: | Строка 10: | ||
"dictionaryIdent": "" | "dictionaryIdent": "" | ||
} | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Шаг 1. Настройка самого справочника-приемника === | ||
+ | |||
+ | Для начала следует создать справочник для загрузки. Чтобы корректно сработала задача загрузки, перед созданием справочника необходимо ознакомиться с атрибутами из источника и их типами данных. Например, модель источника данных выглядит так: | ||
+ | |||
+ | [[Файл:Атрибуты источника.png| 400px]] | ||
+ | |||
+ | Из этих данных необходимо, чтобы загружались атрибуты name (тип String), root_id (тип Integer), start_date (тип DateTime): | ||
+ | |||
+ | [[Файл:выбранные атрибуты источника.png|400px]] | ||
+ | |||
+ | Поэтому справочник следует настроить соответствующим образом: | ||
+ | |||
+ | [[Файл:Конструктор приемника.png|700px]] | ||
+ | |||
+ | === Шаг 2. Настройка полей === | ||
+ | Настройка полей выглядит следующим образом: | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "mapperOptions": [ | ||
+ | { | ||
+ | "propertyName": "name", | ||
+ | "filedName": "NAME", | ||
+ | "dataType": "String", | ||
+ | "isPrimary": false, | ||
+ | "discriminator": "MapperOption" | ||
+ | }, | ||
+ | { | ||
+ | "propertyName": "root_id", | ||
+ | "filedName": "root_id", | ||
+ | "dataType": "Int32", | ||
+ | "isPrimary": true, | ||
+ | "discriminator": "MapperOption" | ||
+ | }, | ||
+ | { | ||
+ | "propertyName": "start_date", | ||
+ | "filedName": "start_date", | ||
+ | "dataType": "DateTime", | ||
+ | "isPrimary": false, | ||
+ | "discriminator": "MapperOption" | ||
+ | } | ||
+ | ] | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | '''Откуда берется:''' | ||
+ | * '''propertyName''' - название атрибута из источника | ||
+ | * '''filedName''' - название атрибута из конструктора справочника | ||
+ | * '''dataType''' - тип данных, который должен совпадать в приемнике и источнике | ||
+ | * '''isPrimary''' - является ли данный атрибут первичным ключом (хотя бы один из атрибутов должен содержать настройку "isPrimary": true) | ||
+ | * '''discriminator''' - здесь всегда необходимо ставить "MapperOption" | ||
+ | |||
+ | ==== Типы данных, которые поддерживает DataManager ==== | ||
+ | {| class="wikitable" | ||
+ | |- | ||
+ | ! Тип !! Как записать в настройке !! Небольшой комментарий | ||
+ | |- | ||
+ | |Строка || String|| Если в источнике приходит тип guid или длинное число, то лучше записать в приемник в атрибут с типом "String" | ||
+ | |- | ||
+ | |Целое число (Integer)|| Int32 || Int64 не поддерживается | ||
+ | |- | ||
+ | |Вещественное число (Double)|| Double || Формат записи через запятую ("370,70") | ||
+ | |- | ||
+ | |Дата и время|| DateTime || Формат записи через запятую 01.01.2000 (даже, если приходят данные в формате "2020-01-01") | ||
+ | |- | ||
+ | |Логический тип|| Boolean|| - | ||
+ | |- | ||
+ | |Json|| "fieldDataType": "Json"|| Данные должны приходит в таком "кавычках", если необходимо атрибуты занести в формат json, то следует использовать выражение: "expression": "[атрибут]" и не прописывать в настройках "SaveMode" | ||
+ | |} | ||
+ | |||
+ | === Шаг 3. Завершение настройки === | ||
+ | Остается добавить только верный дискриминатор ('''DictionaryDataOptions'''), dictionaryIdent ('''код справочника-приемника'''), SaveMode | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | "Destination": { | ||
+ | "discriminator": "DictionaryDataOptions", | ||
+ | "SaveMode": "Postgres", | ||
+ | "mapperOptions": [ | ||
+ | { | ||
+ | "propertyName": "name", | ||
+ | "filedName": "NAME", | ||
+ | "dataType": "String", | ||
+ | "isPrimary": false, | ||
+ | "discriminator": "MapperOption" | ||
+ | }, | ||
+ | { | ||
+ | "propertyName": "root_id", | ||
+ | "filedName": "root_id", | ||
+ | "dataType": "Int32", | ||
+ | "isPrimary": true, | ||
+ | "discriminator": "MapperOption" | ||
+ | }, | ||
+ | { | ||
+ | "propertyName": "start_date", | ||
+ | "filedName": "start_date", | ||
+ | "dataType": "DateTime", | ||
+ | "isPrimary": false, | ||
+ | "discriminator": "MapperOption" | ||
+ | } | ||
+ | ], | ||
+ | "dictionaryIdent": "New_Dictionary_5535" | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Шаг 4. Результат работы === | ||
+ | '''ОБЯЗАТЕЛЬНО НЕ ЗАБЫВАЕМ ВСТАВИТЬ В НАСТРОЙКУ SOURCE И ПРОВЕРИТЬ ВСЮ НАСТРОЙКУ НА СИНТАКСИЧЕСКИЕ ОШИБКИ''' | ||
+ | |||
+ | Готовую настройку можно загрузить с помощью задач загрузки данных или сваггер, затем посмотреть результат | ||
+ | |||
+ | [[Файл:результат работы.png|1000px]] | ||
+ | |||
+ | В итоге, в справочник приемник выгрузились необходимые данные | ||
+ | |||
+ | [[Файл:сам справочник.png|700px]] | ||
+ | |||
+ | === Пример === | ||
+ | [https://3v.3v-group.net/navigator/#/?viewId=436077 Пример справочника-приемника (полезно обратить внимание на тип данных и на наименования атрибутов)] | ||
+ | |||
+ | '''Полная настройка:''' | ||
+ | <syntaxhighlight lang="JSON" line> | ||
+ | { | ||
+ | "Validation": "StopIfErrorRecordsExists", | ||
+ | "Source": { | ||
+ | "discriminator": "UrlDataManagerSource", | ||
+ | "Uri": "https://3v.3v-group.net/filestorage/api/File/c0ed6016-6423-4ac4-a6ff-9554d0697aad", | ||
+ | "Credentials":{ | ||
+ | "discriminator": "PasswordAuthenticationSettingsDto", | ||
+ | "TokenRequestUrl": "https://3v.3v-group.net/auth/realms/trivium/protocol/openid-connect/token", | ||
+ | "clientId": "corp-engine", | ||
+ | "UserName": "apiTestUser", | ||
+ | "Password": "apiTestUser" | ||
+ | }, | ||
+ | "Headers": { | ||
+ | "namespace": "develop" | ||
+ | } | ||
+ | }, | ||
+ | "Destination": { | ||
+ | "discriminator": "DictionaryDataOptions", | ||
+ | "SaveMode": "Postgres", | ||
+ | "mapperOptions": [ | ||
+ | { | ||
+ | "propertyName": "name", | ||
+ | "filedName": "NAME", | ||
+ | "dataType": "String", | ||
+ | "isPrimary": false, | ||
+ | "discriminator": "MapperOption" | ||
+ | }, | ||
+ | { | ||
+ | "propertyName": "root_id", | ||
+ | "filedName": "root_id", | ||
+ | "dataType": "Int32", | ||
+ | "isPrimary": true, | ||
+ | "discriminator": "MapperOption" | ||
+ | }, | ||
+ | { | ||
+ | "propertyName": "start_date", | ||
+ | "filedName": "start_date", | ||
+ | "dataType": "DateTime", | ||
+ | "isPrimary": false, | ||
+ | "discriminator": "MapperOption" | ||
+ | } | ||
+ | ], | ||
+ | "dictionaryIdent": "New_Dictionary_5535" | ||
+ | } | ||
+ | } | ||
</syntaxhighlight> | </syntaxhighlight> |
Текущая версия на 09:12, 12 декабря 2022
Если приемник данных - справочник, то настройка выглядит следующим образом:
1 "Destination": {
2 "discriminator": "DictionaryDataOptions",
3 "SaveMode": "Postgres",
4 "mapperOptions": [ {}, {}],
5 "expressions": [{}],
6 "clearData": false,
7 "dictionaryIdent": ""
8 }
Содержание
Шаг 1. Настройка самого справочника-приемника
Для начала следует создать справочник для загрузки. Чтобы корректно сработала задача загрузки, перед созданием справочника необходимо ознакомиться с атрибутами из источника и их типами данных. Например, модель источника данных выглядит так:
Из этих данных необходимо, чтобы загружались атрибуты name (тип String), root_id (тип Integer), start_date (тип DateTime):
Поэтому справочник следует настроить соответствующим образом:
Шаг 2. Настройка полей
Настройка полей выглядит следующим образом:
1 "mapperOptions": [
2 {
3 "propertyName": "name",
4 "filedName": "NAME",
5 "dataType": "String",
6 "isPrimary": false,
7 "discriminator": "MapperOption"
8 },
9 {
10 "propertyName": "root_id",
11 "filedName": "root_id",
12 "dataType": "Int32",
13 "isPrimary": true,
14 "discriminator": "MapperOption"
15 },
16 {
17 "propertyName": "start_date",
18 "filedName": "start_date",
19 "dataType": "DateTime",
20 "isPrimary": false,
21 "discriminator": "MapperOption"
22 }
23 ]
Откуда берется:
- propertyName - название атрибута из источника
- filedName - название атрибута из конструктора справочника
- dataType - тип данных, который должен совпадать в приемнике и источнике
- isPrimary - является ли данный атрибут первичным ключом (хотя бы один из атрибутов должен содержать настройку "isPrimary": true)
- discriminator - здесь всегда необходимо ставить "MapperOption"
Типы данных, которые поддерживает DataManager
Тип | Как записать в настройке | Небольшой комментарий |
---|---|---|
Строка | String | Если в источнике приходит тип guid или длинное число, то лучше записать в приемник в атрибут с типом "String" |
Целое число (Integer) | Int32 | Int64 не поддерживается |
Вещественное число (Double) | Double | Формат записи через запятую ("370,70") |
Дата и время | DateTime | Формат записи через запятую 01.01.2000 (даже, если приходят данные в формате "2020-01-01") |
Логический тип | Boolean | - |
Json | "fieldDataType": "Json" | Данные должны приходит в таком "кавычках", если необходимо атрибуты занести в формат json, то следует использовать выражение: "expression": "[атрибут]" и не прописывать в настройках "SaveMode" |
Шаг 3. Завершение настройки
Остается добавить только верный дискриминатор (DictionaryDataOptions), dictionaryIdent (код справочника-приемника), SaveMode
1 "Destination": {
2 "discriminator": "DictionaryDataOptions",
3 "SaveMode": "Postgres",
4 "mapperOptions": [
5 {
6 "propertyName": "name",
7 "filedName": "NAME",
8 "dataType": "String",
9 "isPrimary": false,
10 "discriminator": "MapperOption"
11 },
12 {
13 "propertyName": "root_id",
14 "filedName": "root_id",
15 "dataType": "Int32",
16 "isPrimary": true,
17 "discriminator": "MapperOption"
18 },
19 {
20 "propertyName": "start_date",
21 "filedName": "start_date",
22 "dataType": "DateTime",
23 "isPrimary": false,
24 "discriminator": "MapperOption"
25 }
26 ],
27 "dictionaryIdent": "New_Dictionary_5535"
28 }
Шаг 4. Результат работы
ОБЯЗАТЕЛЬНО НЕ ЗАБЫВАЕМ ВСТАВИТЬ В НАСТРОЙКУ SOURCE И ПРОВЕРИТЬ ВСЮ НАСТРОЙКУ НА СИНТАКСИЧЕСКИЕ ОШИБКИ
Готовую настройку можно загрузить с помощью задач загрузки данных или сваггер, затем посмотреть результат
В итоге, в справочник приемник выгрузились необходимые данные
Пример
Пример справочника-приемника (полезно обратить внимание на тип данных и на наименования атрибутов)
Полная настройка:
1 {
2 "Validation": "StopIfErrorRecordsExists",
3 "Source": {
4 "discriminator": "UrlDataManagerSource",
5 "Uri": "https://3v.3v-group.net/filestorage/api/File/c0ed6016-6423-4ac4-a6ff-9554d0697aad",
6 "Credentials":{
7 "discriminator": "PasswordAuthenticationSettingsDto",
8 "TokenRequestUrl": "https://3v.3v-group.net/auth/realms/trivium/protocol/openid-connect/token",
9 "clientId": "corp-engine",
10 "UserName": "apiTestUser",
11 "Password": "apiTestUser"
12 },
13 "Headers": {
14 "namespace": "develop"
15 }
16 },
17 "Destination": {
18 "discriminator": "DictionaryDataOptions",
19 "SaveMode": "Postgres",
20 "mapperOptions": [
21 {
22 "propertyName": "name",
23 "filedName": "NAME",
24 "dataType": "String",
25 "isPrimary": false,
26 "discriminator": "MapperOption"
27 },
28 {
29 "propertyName": "root_id",
30 "filedName": "root_id",
31 "dataType": "Int32",
32 "isPrimary": true,
33 "discriminator": "MapperOption"
34 },
35 {
36 "propertyName": "start_date",
37 "filedName": "start_date",
38 "dataType": "DateTime",
39 "isPrimary": false,
40 "discriminator": "MapperOption"
41 }
42 ],
43 "dictionaryIdent": "New_Dictionary_5535"
44 }
45 }