Формы JSON для динамических приложений
Все продукты SaveToDB поддерживают специальный формат для возвращаемых результатов.
Хранимые процедуры могут возвращать единственную ячейку с объектом JSON, содержащим свойства: parameters, rows, columns и cells.
Клиентские приложения создают элементы управления для параметров, строк, колонок и затем формируют таблицу на основе значений ячеек.
Это позволяет создавать полностью динамические редактируемые формы, что особенно полезно для приложений, основанных на кубах.
Вот пример возвращаемого результата:
{
"parameters": [
{
"name": "entity_id",
"value": 1,
"items": [
{"id": 1, "name": "Plant 01"},
{"id": 2, "name": "Plant 02"}
]
},
{
"name": "category_id",
"value": 1,
"items": [
{"id": 1, "name": "Budget"},
{"id": 2, "name": "Actual"},
{"id": 3, "name": "Forecast"}
]
},
{
"name": "year",
"value": 2022,
"items": [
{"year": 2022}
]
}
],
"rows": [
{"account_id": 1, "name": "Sales"},
{"account_id": 2, "name": "Cost of sales"},
{"account_id": 3, "name": "Operating expenses"},
{"account_id": 4, "name": "Net Income"}
],
"columns": [
{"time_id": 1, "name": "2022-01"},
{"time_id": 2, "name": "2022-02"},
...
{"time_id": 12, "name": "2022-12"}
],
"cells": [
{"account_id": 1, "time_id": 1, "value": 20000000.0000},
{"account_id": 1, "time_id": 2, "value": 20000000.0000},
...
{"account_id": 4, "time_id": 12, "value": 4000000.0000}
]
}
Свойство parameters содержит массив объектов параметров, таких как entity_id, category_id и year в примере.
Каждый объект параметра включает свойства name, value и items. Свойство items содержит массив объектов значений.
Значения параметров общие для всех ячеек.
Свойства rows и columns представляют собой массивы объектов элементов осей.
Каждый объект элемента оси должен содержать значения, используемые в ячейках, и свойства для заголовков.
В приведенном примере account_id и time_id используются в ячейках, а свойство name — в заголовках.
Свойство cells содержит массив объектов ячеек. Этот массив должен содержать хотя бы один элемент.
Каждый объект ячейки включает значения осей и значение ячейки.
Вот код хранимой процедуры SQL Server для приведенного примера.
https://dbgate.savetodb.com/api/mssql-201/en-us/s20/usp_web_form_01/$definition
Пример вызова и его результаты в DBGate:
<https://dbgate.savetodb.com/api/mssql-201/en-us/s20/usp_web_form_01?entity_id=1&category_id=1&year=2022>
Пример вызова и его результаты в ODataDB:
SaveToDB и DBEdit выполняют стандартные вызовы хранимых процедур.
Разработчики должны пометить такие процедуры типом JsonForm в таблице xls.handlers.
Например:
| ID | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | EVENT_NAME | HANDLER_SCHEMA | HANDLER_NAME | HANDLER_TYPE | HANDLER_CODE |
|---|---|---|---|---|---|---|---|---|
| s20 | usp_web_form_01 | JsonForm | ATTRIBUTE |
Встроенные JavaScript-клиенты DBGate и ODataDB автоматически определяют такие формы.
Формы JSON являются "обычными" и поддерживают все настраиваемые возможности.
Особенно интересно, что динамические формы могут иметь простые в реализации обработчики изменений.
Эти обработчики могут использовать параметры с именами свойств объектов parameters, rows, columns и cells.
Например, вот код обработчика изменений для данного примера:
https://dbgate.savetodb.com/api/mssql-201/en-us/s20/usp_web_form_01_change/$definition
Вы можете попробовать этот пример:
- Используя меню Мастера, Примеры онлайн, Sample 20 - Cube App в надстройке SaveToDB
- Используя Файл, Новый из примеров онлайн..., Sample 20 - Cube App в DBEdit
- Используя Пример ODataDB 20 - Приложение куба
- Используя Пример DBGate 20 - Приложение куба