Списки значений из SQL-запросов
Для получения списков значений параметров и списков значений ячеек можно использовать SQL-запросы.
Ниже приведен пример настройки в таблице xls.handlers.
| ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE | TARGET_WORKSHEET | MENU_ORDER | EDIT_PARAMETERS |
|---|---|---|---|---|---|---|---|---|---|---|---|
| s02 | code_cashbook | company_id | ValidationList | s02 | xl_list_company_id_code | CODE | <SQL> | ||||
| s02 | code_cashbook | company_id | ParameterValues | s02 | xl_list_company_id_code | CODE | <SQL> |
Используйте тип CODE в колонке HANDLER_TYPE и SQL-запрос в колонке HANDLER_CODE.
В простом случае SQL-код может выглядеть так:
SELECT id, name FROM s02.companies ORDER BY name, id
Вы также можете использовать параметры. Например, чтобы вывести значения на языке пользователя:
SELECT
c.id,
COALESCE(t.TRANSLATED_NAME, c.name) AS name
FROM
s02.companies c
LEFT OUTER JOIN s02.xl_translations t ON t.TABLE_SCHEMA = 's02' AND t.TABLE_NAME = 'strings'
AND t.LANGUAGE_NAME = @data_language AND t.COLUMN_NAME = c.name
ORDER BY
name,
id
В этом примере используется контекстный параметр @data_language, который получает код языка данных пользователя.
SQL Server и SQLite используют параметры с префиксом @, а на остальных платформах — с префиксом двоеточия, например, :data_language.
Определение кода в одном месте
Пример выше содержит дублирующийся SQL-код в двух строках. В реальных приложениях таких дублированных строк может быть еще больше.
Чтобы избежать дублирования, можно использовать два подхода:
- Создать и использовать хранимую процедуру вместо кода.
- Определить объект на основе SQL-кода в таблице xls.objects и использовать его в таблице xls.handlers.
Вот пример настройки в таблице xls.objects для второго подхода:
| ID | TABLE_SCHEMA | TABLE_NAME | TABLE_TYPE | TABLE_CODE | INSERT_OBJECT | UPDATE_OBJECT | DELETE_OBJECT |
|---|---|---|---|---|---|---|---|
| s02 | xl_list_company_id_code | CODE | SELECT id, name FROM s02.companies ORDER BY name, id |
В этом случае вы можете использовать объект s02.xl_list_company_id_code без повторного определения его кода:
| ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE | TARGET_WORKSHEET | MENU_ORDER | EDIT_PARAMETERS |
|---|---|---|---|---|---|---|---|---|---|---|---|
| s02 | code_cashbook | company_id | ValidationList | s02 | xl_list_company_id_code | CODE | |||||
| s02 | code_cashbook | company_id | ParameterValues | s02 | xl_list_company_id_code | CODE |