Списки значений для OData
В этой статье мы рассмотрим настройку сервисов OData для списков значений в надстройке SaveToDB версии 10 и выше.
OData не предоставляет стандартных возможностей для описания обработчиков событий.
Существует два способа конфигурации отсутствующих возможностей OData:
- Использовать аннотации.
- Использовать объекты OData, которые возвращают настройки.
Для сторонних сервисов OData разработчики могут опубликовать таблицу xls.handlers в виде EntitySet.
Надстройка SaveToDB определяет такие объекты настройки по сигнатуре полей и загружает их после загрузки документа метаданных.
Настройка списков значений аналогична следующим подходам:
Тем не менее, рекомендуется использовать объекты OData вместо объектов базы данных.
Например, конфигурация для таблицы выглядит следующим образом:
| ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE |
|---|---|---|---|---|---|---|---|---|
| s02 | usp_cashbook | company_id | ValidationList | s02 | companies | TABLE | id, +name | |
| s02 | usp_cashbook | company_id | ParameterValues | s02 | companies | TABLE | id, +name |
Предположим, что сервис OData публикует s02.usp_cashbook в схеме s02 с именем usp_cashbook. В этом случае левая часть остается неизменной, так как она указывает схему и имя типа объекта. Однако в полях обработчика событий должен быть указан EntitySet вместо таблицы.
Если сервис OData публикует таблицу в контейнере схемы default с именем s02_companies, конфигурация будет выглядеть следующим образом:
| ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE |
|---|---|---|---|---|---|---|---|---|
| s02 | usp_cashbook | company_id | ValidationList | default | s02_companies | ENTITYSET | id, +name | |
| s02 | usp_cashbook | company_id | ParameterValues | default | s02_companies | ENTITYSET | id, +name |
Надстройка SaveToDB поддерживает список полей в поле HANDLER_CODE для EntitySet аналогично таблицам и представлениям. Однако лучшим решением будет создание отдельных объектов для определения колонок списков значений на стороне сервиса.
Обратите внимание, что конфигурации выше не конфликтуют. Пользователи могут подключаться к базе данных и использовать первую конфигурацию или к сервису OData и использовать вторую.
Ниже приведен пример конфигурации для получения списков значений с помощью хранимых процедур:
| ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE | TARGET_WORKSHEET | MENU_ORDER | EDIT_PARAMETERS |
|---|---|---|---|---|---|---|---|---|---|---|---|
| s02 | usp_cashbook | company_id | ValidationList | s02 | xl_list_company_id | PROCEDURE | |||||
| s02 | usp_cashbook | company_id | ParameterValues | s02 | xl_list_company_id | PROCEDURE |
Конфигурация для OData будет выглядеть следующим образом:
| ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE | TARGET_WORKSHEET | MENU_ORDER | EDIT_PARAMETERS |
|---|---|---|---|---|---|---|---|---|---|---|---|
| s02 | usp_cashbook | company_id | ValidationList | default | s02_xl_list_company_id | FUNCTIONIMPORT | |||||
| s02 | usp_cashbook | company_id | ParameterValues | default | s02_xl_list_company_id | FUNCTIONIMPORT |
Эта конфигурация использует объекты FunctionImport вместо процедур.