Внешние справочники

Материал из 3v-wiki
Перейти к навигации Перейти к поиску

Начиная с релиза 0.26 появилась возможность создавать справочники на стороннем API. Есть ограничения которые накладываются на стороннее API

  • API должен реализовывать методы по чтению данных GetData следующей сигнатуры:

Post запрос с параметров в Url source который содержит в себе идентификатор источника данных. Тело запроса:

 1 {
 2   "fields": [
 3     "field1",
 4     "field2",
 5     ...
 6   ],
 7   "filters": [
 8     {
 9       "fieldName": "field3",
10       "values": [
11         1, 2, 3
12       ],
13       "conditionType": "InCollection"
14     }
15   ],
16   "orderFields": [
17     {
18       "fieldName": "field4",
19       "sortDirection": "Ascending",
20       "nullsSortingMode": "PlaceFirst"
21     }
22   ],
23   "limit": 100
24 }

Где fields - коллекция идентификаторов полей которые будут отданы в ответе (обязательное для заполнения). filters - коллекция фильтров (опционально). Каждый фильтр состоит из fieldName - идентификатора поля на которое накладывается условие, values - коллекция значений, conditionType - тип накладываемого условия.
Для conditionType допустимы следующие значения:

Значение Описание
Default Условие по умолчанию. Фильтрация по In.
InCollection Условие вхождения.
NotInCollection Не входит в коллекцию.
Equal Равно.
NotEqual Не равно.
IsNull Равно null.
NotNull Не null.
More Больше.
MoreOrEqual Больше или равно.
Less Меньше.
LessOrEqual Меньше или равно.

orderFields - коллекция для сортировки значений. Каждая настройка сортировки содержит fieldName - идентификатор поля по которому будет идти сортировка, sortDirection - направление сортировки, nullsSortingMode обработка null при сортировке.
Для sortDirection допустимы следующие значения:

Значение Описание
Ascending По возрастанию.
Descending По убыванию.

Для nullsSortingMode допустимы значения:

Значение Описание
PlaceFirst Размещать null в начале.
PlaceLast Размещать null в конце.

limit - ограничение на кол-во возвращаемых строк. (Опционально)


  • API может реализовывать метод по сохранению данных SaveData:

Post запрос с параметров в Url source который содержит в себе идентификатор источника данных. Тело запроса:

 1 {
 2   "sourceId": "SourceId",
 3   "values": [
 4     {
 5       "keyValues": [
 6         "KEY"
 7       ],
 8       "fieldName": "VALUE1",
 9       "rowsData": [
10         [
11           1, 2, 3
12         ]
13         [
14           111, 222, 333
15         ]
16       ]
17     }
18   ]
19 }

Где sourceId дублирует значение из параметра source.
В values задается коллекция сохраняемых значений. keyValues - коллекция идентификаторов полей по которым можно однозначно определить строку данных. fieldName - поле которое изменяется. rowsData - коллекция значений, где в начале идут значения по столбцам из keyValues в том же порядке, а в элементе коллекции идут значения для столбца fieldName.

  • API может реализовывать метод GetStructure по получению структуры источника данных по его идентификатору. Это должен быть Get запрос с параметром source - идентификатор источника.

Данный метод используется в методе /api/Dictionaries/CreateExternalDictionaryModel API справочников в случае указания connectionId - идентификатора объекта репозитория соединения настроенного на сторонний сервис. Пример такого объекта соединения:

1 {
2   "dbType": "Web",
3   "connectionString": "http://audit/api/AuditDataSource/"
4 }





Возможная структура JSON схемы для внешнего справочника-ярлыка:
 1 {
 2   "disableCache": false,
 3   "cacheSettings": {
 4     "expirationMinutes": null
 5   },
 6   "dictionaryStructure": {
 7     "id": 36973,
 8     "name": "Новый внешний справочник",
 9     "code": "New_ExternalDictionary_30",
10     "description": null,
11     "type": "ExternalDictionary",
12     "tableName": "11",
13     "sequenceName": "",
14     "databaseId": 36882,
15     "attributes": [
16      ...
17     ],
18     "indexes": []
19   },
20   "id": 36973,
21   "name": "Новый внешний справочник",
22   "code": "New_ExternalDictionary_30",
23   "description": null,
24   "dictionaryType": "ExternalDictionary",
25   "tableName": "11",
26   "isHistoryEnabled": false,
27   "databaseId": 36882,
28   "isAccessRightsEnabled": false,
29   "hierarchies": null,
30   "viewOptions": {
31     "limit": null,
32     "filteringAttributes": [],
33     "filtersJoin": "And",
34     "disableRefreshWhenParameterChanged": false,
35     "disabledEvents": null,
36     "gridComponent": null
37   },
38   "isDataSourceExternal": true,
39   "discriminator": "ExternalDictionary"
40 }
Ключ Описание значения
databaseId идентификатор соединения типа "Link"
tableName идентификатор справочника из внешней платформы