|
|
(не показано 9 промежуточных версий этого же участника) |
Строка 1: |
Строка 1: |
− | {{DISPLAYTITLE: Описание модели настроек DataManager}}
| |
− | Модель Json разделена на две части - '''Source''' (источник данных) и '''Destination''' (приёмник данных)
| |
| | | |
− | == Источник данных (Source) ==
| |
− | === Дискриминатор ===
| |
− | discriminator - дискриминатор (тип данных - string)
| |
− |
| |
− | * '''UrlDataManagerSource''' - в случае, если источник данных ''ссылка на ресурс''
| |
− | Если источник данных - ''ссылка'', то в SOURCE необходимо указать '''Uri, Credentials, Headers''':
| |
− | <syntaxhighlight lang="JSON" line>
| |
− | "Source": {
| |
− | "discriminator": "UrlDataManagerSource",
| |
− | "Uri": "",
| |
− | "Credentials": "",
| |
− | "Headers": ""
| |
− | },
| |
− | </syntaxhighlight>
| |
− | * '''ConstantDataManagerSource''' - если источник данных ''файл''
| |
− | Если источник данных - ''файл'', то в SOURCE достаточно прописать только дискриминатор:
| |
− | <syntaxhighlight lang="JSON" line>
| |
− | "Source": {
| |
− | "discriminator": "ConstantDataManagerSource"
| |
− | },
| |
− | </syntaxhighlight>
| |
− |
| |
− | === Унифицированный идентификатор ресурса ===
| |
− | Uri - унифицированный идентификатор ресурса
| |
− |
| |
− | DataManager поддерживает следующие источники:
| |
− | * Postgres
| |
− | * Любой get/post запрос
| |
− | ВАЖНО: необходимо, чтобы запрос, прописанный в Uri возвращал данные в '''формате json'''
| |
− |
| |
− | {| class="wikitable"
| |
− | |-
| |
− | ! Стенд !! Пример !! Пояснение
| |
− | |-
| |
− | | finance || <syntaxhighlight lang="JSON" line>
| |
− | "Source": {
| |
− | "discriminator": "UrlDataManagerSource",
| |
− | "Uri": "https://fmpcloud.io/api/v3/symbol/available-indexes?apikey=887f267b885bd2384c2b3ef0bfbee3c9"
| |
− | },
| |
− | </syntaxhighlight>
| |
− | || Если перейти по ссылке, то данные представляются в json-формате
| |
− | |-
| |
− | | double.dev || <syntaxhighlight lang="JSON" line>
| |
− | "Source": {
| |
− | "discriminator": "UrlDataManagerSource",
| |
− | "Uri": "http://filestorage/api/File/e0e88d78-339e-496c-baa8-d5fb18848692"
| |
− | },
| |
− | </syntaxhighlight>
| |
− | || Ссылка на get-запрос файлового хранилища
| |
− | ''(как получить ссылку на файл из файлового хранилища см ниже)''
| |
− | |-
| |
− | | corp-portal || <syntaxhighlight lang="JSON" line>
| |
− | "Source": {
| |
− | "discriminator": "UrlDataManagerSource",
| |
− | "Uri": "https://bs-extension.bright-soft.org/atlassian-adapter/Jira/Projects"
| |
− | },
| |
− | </syntaxhighlight>
| |
− | || Ссылка на get-запрос сервиса atlassian-adapter
| |
− | |}
| |
− |
| |
− | Для того, чтобы получить ссылку на файл, необходимо сделать следующее:
| |
− | # Получить идентификатор файла с помощью [[Платформа 3V/Справочник/Задание атрибутов в справочнике/Вычислимые значения файла|вычислимого атрибута]]
| |
− | # Перейти в файловое хранилище проекта (filestorage) и найти get-метод [https://3v.3v-group.net/filestorage/swagger/index.html#/File/File_GetFile File/{fileid}]
| |
− | # Заполнить параметр вызова "fileid" найденным в первом пункте значением (некоторые стенды дополнительно в качестве параметра запуска принимают тенант), запустить метод
| |
− | # После запуска метода скопировать Request URL, оставить строку в формате "http://filestorage/api/File/НАБОР_ЦИФР" (набор цифр, в данном случае - ''fileid'')
| |
− |
| |
− | ''В случае, если данные предоставляются не из файлового хранилища, Request URL следует оставить без изменений''
| |
− |
| |
− | === Параметры авторизации ===
| |
− | Credentials - параметры авторизации
| |
− | На данный момент, для DataManager включена авторизация, без авторизации сервис работать не будет
| |
− | Credentials содержит следующие настройки:
| |
− | {| class="wikitable"
| |
− | |-
| |
− | ! Поле !! Описание !! Тип
| |
− | |-
| |
− | | discriminator ||
| |
− | * ConfidentialClientAuthenticationSettingsDto - аутентификация конфиденциального клиента
| |
− | * PasswordAuthenticationSettingsDto - аутентификация с помощью логина и пароля
| |
− | || string (строка)
| |
− | |-
| |
− | | TokenRequestUrl || Ссылка из адресной строки перед авторизацией в приложении || string (строка)
| |
− | |-
| |
− | | ClientId || Идентификатор клиента, который берется из keycloakа || string (строка)
| |
− | |-
| |
− | | ClientSecret || Keycloak - realm - clients - раздел "Credentials" - поле "Secret" || string (строка)
| |
− | |-
| |
− | | UserName || Логин для авторизации на стенде ''(данное поле добавляется для дискриминатора '''"PasswordAuthenticationSettingsDto"''''') || string (строка)
| |
− | |-
| |
− | | Password || Пароль для авторизации на стенде''(данное поле добавляется для дискриминатора '''"PasswordAuthenticationSettingsDto"''''') || string (строка)
| |
− | |}
| |
− |
| |
− | ===== Discriminator =====
| |
− | Настройка для Credentials для авторизации по логину/паролю:
| |
− | <syntaxhighlight lang="JSON" line>
| |
− | "Credentials": {
| |
− | "discriminator": "PasswordAuthenticationSettingsDto",
| |
− | "TokenRequestUrl": "https://3v.3v-group.net/auth/realms/trivium/protocol/openid-connect/token",
| |
− | "clientId": "clientid",
| |
− | "clientSecret": "5gq428rz-wpx1-5751-b0r1-h4x5wb9m5210",
| |
− | "UserName": "username",
| |
− | "Password": "password"
| |
− | }
| |
− | </syntaxhighlight>
| |
− |
| |
− | Настройка для Credentials для аутентификации конфиденциального клиента:
| |
− | <syntaxhighlight lang="JSON" line>
| |
− | "Credentials": {
| |
− | "discriminator": "ConfidentialClientAuthenticationSettingsDto",
| |
− | "TokenRequestUrl": "https://smart-id-test.mos.ru/iam/auth/realms/dev/protocol/openid-connect/token",
| |
− | "clientId": "clientid",
| |
− | "clientSecret": "5gq428rz-wpx1-5751-b0r1-h4x5wb9m5210"
| |
− | }
| |
− | </syntaxhighlight>
| |
− |
| |
− | ===== TokenRequestUrl =====
| |
− | Для TokenRequestUrl ссылка берется из адресной строки перед авторизацией в приложении (для какого приложения необходим DataManager - из такого приложения и необходимо взять ссылку). '''Копируем ссылку из адресной строки до "openid-connect/" и добавляем "token"'''
| |
− |
| |
− | ''ПРИМЕР'':
| |
− | * Ссылка для корпоративного портала перед авторизацией пользователя выглядит следующим образом - "https://api.x-service.online/auth/realms/corp-portal/protocol/openid-connect/auth?response_type=code&client_id=corp-engine&state=WFl3MDBGeS52TXJjYkl5bmFDeFBoSi5QU1VYUm1EYm1-ckJOSXBPTnFiTVhD&redirect_uri=https%3A%2F%2Fcorp-portal.x-service.online%2Fapp%2F&scope=openid%20profile&code_challenge=A5_wW-7WsXwMBgHPXxUiJ5Wh6Cwvzs83bzOcW4fU8jQ&code_challenge_method=S256&ui_locales=ru"
| |
− | * Для TokenRequestUrl необходима только '''https://api.x-service.online/auth/realms/corp-portal/protocol/openid-connect/'''
| |
− | * К скопированной части ссылки "token"
| |
− | * Получаем необходимый запрос для авторизации для DataManager - '''https://api.x-service.online/auth/realms/corp-portal/protocol/openid-connect/token''')
| |
− |
| |
− | ===== clientId =====
| |
− | Чтобы получить clientId необходимо:
| |
− | * Перейти в keycloak
| |
− | * Выбрать проект (realm)
| |
− | * Перейти в раздел "clients"
| |
− | * Выбрать необходимого клиента (для DataManager может быть настроен клиент, который в название содержит "datamanager" - его можно использовать для дискриминатора "ConfidentialClientAuthenticationSettingsDto", так же можно использовать "corp-engine", но уже для парольной авторизации, то есть для дискриминатора "PasswordAuthenticationSettingsDto")
| |
− |
| |
− | ===== ClientSecret =====
| |
− | Настройка "clientSecret" - опциональная!!!
| |
− | Если все-таки необходима данная настройка, то, как и в случае с clientId:
| |
− | * Перейти в keycloak
| |
− | * Выбрать проект (realm)
| |
− | * Перейти в раздел "clients"
| |
− | * Выбрать необходимого клиента
| |
− | * Перейти в раздел "Credentials"
| |
− | * Найти поле "Sectet" и скопировать строку
| |
− |
| |
− | === Токен доступа ===
| |
− | Headers - токен доступа
| |
− |
| |
− | '''1 вариант - тенант'''
| |
− |
| |
− | "Headers": { "namespace": "landscaping" }
| |
− |
| |
− | '''2 вариант - Bearer <token>'''
| |
− |
| |
− | Токен берем из средств разработчика (f12 или ctrl+f12)
| |
− |
| |
− | "Headers": {"Authorization": "Bearer <token>"}
| |
− |
| |
− | '''3 вариант - секрет'''
| |
− |
| |
− | Создается отдельный клиент, который по написанному токену имеет ограниченный набор прав
| |
− |
| |
− | "Headers": { "secret": "Ke2QSqWkX4FgyKnx6RYnYFLyqA2MHTq9Jvdk" }
| |
− |
| |
− | == Приемник данных (Destination) ==
| |
− | {| class="wikitable"
| |
− | |-
| |
− | ! Название полей !! Описание !! Тип
| |
− | |-
| |
− | | discriminator || Дискриминатор:
| |
− | * Если приемник - справочник, то "DictionaryDataOptions"
| |
− | * Если приемник - показатель, то "IndicatorDataOption
| |
− | || Текст ячейки
| |
− | |-
| |
− | | SaveMode ||
| |
− | * DictionaryClient - запись через апи справочников (стоит по умолчанию, можно не прописывать)
| |
− | * Postgres - запись через БД (в данном случае следует указать)
| |
− | || string (строка)
| |
− | |-
| |
− | | mapperOptions[] || Настройки маппинг || string (строка)
| |
− | |-
| |
− | | expressions[] || Настройки выражений (при необходимости) || коллекция полей
| |
− | |-
| |
− | | clearData || Очистить данные (для справочника '''(если дискриминатор - DictionaryDataOptions)''' добавлена настройка для частичной очистки данных) || boolean (логический тип)
| |
− | |-
| |
− | | dictionaryIdent || Код справочника-приемника данных || string (строка)
| |
− | |}
| |
− | '''Шаблон для Destination:'''
| |
− | <syntaxhighlight lang="JSON" line>
| |
− | "Destination": {
| |
− | "discriminator": "",
| |
− | "SaveMode": "Postgres",
| |
− | "mapperOptions": [ {}, {}],
| |
− | "expressions": [{}],
| |
− | "clearData": false,
| |
− | "dictionaryIdent": ""
| |
− | }
| |
− | </syntaxhighlight>
| |
− |
| |
− | === Настройки маппинга ===
| |
− | Все настройки маппинга записываются в поле mapperOptions
| |
− |
| |
− | Количество столбцов источника данных, должны соответствовать количеству столбцов приемника данных
| |
− | {| class="wikitable"
| |
− | |-
| |
− | ! Название поля !! Описание !! Тип
| |
− | |-
| |
− | | propertyName || Наименование данных из источника || string (строка)
| |
− | |-
| |
− | | filedName || Название столбца-приемника || string (строка)
| |
− | |-
| |
− | | dataType || Тип столбца-приемника
| |
− | '''(тип атрибута-источника и атрибута-приемника должен совпадать)'''
| |
− | || string (строка)
| |
− | |-
| |
− | | isPrimary || Первичный ключ (обычно первичным ключом является столбец с уникальными значениями, то есть идентификатор) || boolean (логический тип)
| |
− | |-
| |
− | | ExpressionId || Идентификатор выражения (необязательно, только если для данных требуется выражение) || string (строка)
| |
− | |-
| |
− | | discriminator || Дискриминатор (MapperOption) || string (строка)
| |
− | |}
| |
− | '''Шаблон для mapperOptions:'''
| |
− | <syntaxhighlight lang="JSON" line>
| |
− | "mapperOptions": [
| |
− | {
| |
− | "propertyName": "",
| |
− | "filedName": "",
| |
− | "dataType": "",
| |
− | "isPrimary": true,
| |
− | "discriminator":"MapperOption"
| |
− | },
| |
− | {
| |
− | "propertyName": "",
| |
− | "filedName": "",
| |
− | "dataType": "",
| |
− | "isPrimary": false,
| |
− | "discriminator":"MapperOption",
| |
− | "ExpressionId": 1
| |
− | },
| |
− | ]
| |
− | </syntaxhighlight>
| |
− |
| |
− | === Настройки выражений ===
| |
− | {| class="wikitable"
| |
− | |-
| |
− | ! Название поля!! Описание !! Тип
| |
− | |-
| |
− | | Id || Идентификатор выражения || integer (целое число)
| |
− | |-
| |
− | | Expression || Условие для выражения || string (строка)
| |
− | |-
| |
− | | Variables || Переменные, которые используются в выражении || string (строка)
| |
− | |}
| |
− | '''Шаблон для выражений:'''
| |
− | <syntaxhighlight lang="JSON" line>
| |
− | "expressions":[
| |
− | {
| |
− | "Id": 1,
| |
− | "Expression": "",
| |
− | "Variables": {"1": "", "2": ""}
| |
− | }
| |
− | ]
| |
− | </syntaxhighlight>
| |