Формы JSON

Формы 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 expences"},
    {"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:

https://odatadb.savetodb.com/v4/mssql-201/default/en-us/usp_web_form_01(entity_id=1,category_id=1,year=2022)

SaveToDB и DBEdit выполняют обычные вызовы хранимых процедур.

Разработчики должны пометить такие процедуры типом JsonForm в таблице xls.handlers.

Например:

IDTABLE_SCHEMATABLE_NAMECOLUMN_NAMEEVENT_NAMEHANDLER_SCHEMAHANDLER_NAMEHANDLER_TYPEHANDLER_CODE
 s20usp_web_form_01JsonFormATTRIBUTE

Встроенные JavaScript клиенты DBGate и ODataDB определяют такие формы автоматически.

Формы JSON являются "обычными" и поддерживают все настраиваемые возможности.

Особенно интересно, что динамические формы могут иметь достаточно простые в реализации обработчики изменений.

Такие обработчики могут использовать параметры с именами свойств объектов parameters, rows, columns и cells.

Например, ниже приведен код обработчика изменений для данного примера:

https://dbgate.savetodb.com/api/mssql-201/en-us/s20/usp_web_form_01_change/$definition

Вы можете попробовать этот пример: