Онлайн обработчик событий HTTPRequest (мобильный клиент)¶
HTTPRequest - это обработчик события, который отправляет POST-запрос во внешний backend. Backend получает JSON с данными события, выполняет свою логику и возвращает JSON. В ответе можно вернуть новые данные и/или команды для UI.
В событии надо выбрать HTTPRequest и в поле function name(method) указать метод запроса. Базу URL платформа возьмет из настроек приложения (секция Онлайн-обработчики), прибавит /<function_name> и пошлет в виде POST-запроса
При этом в запросе отправляется JSON такого вида
{
"_data": {
"...": "текущие данные узла"
},
"input_data": {
"...": "аргументы метода(в некоторых случаях)"
}
}
В случае общих событий - только _data
{
"_data": {
"...": "данные события"
}
}
На стороне сервера нужно подготовить ответ. Можно повлиять на _data узла, поместив или удалив что то в _data, оно перезапишется. И также можно поместить команды, которые должен выполнить клиент, при возврате ответа.
Пример возврата - добавили status и команды :
{
"_data": {
"_id": "config_uid$Goods$123",
"name": "Товар 001",
"barcode": "4601234567890",
"qty": 1,
"status": "checked"
},
"_commands": [
{
"command": "SetTitle",
"argument": ["Товар проверен"]
},
{
"command": "Refresh"
},
{
"command": "message",
"argument": ["Штрихкод принят"]
}
]
}
Важно: - если вернуть _data в событии узла, клиент заменит node._data; - если класс autosaved=true, узел будет сохранен; - если _data не вернуть, данные узла не меняются; - _commands выполняются после получения ответа; - argument лучше всегда передавать JSON-массивом.
Формат команды
{
"command": "ИмяКоманды",
"argument": ["аргумент1", "аргумент2"]
}
Если аргументов нет:
{
"command": "Refresh"
}
Рекомендации:
Возвращать всегда JSON-объект.
Для бизнес-ошибок лучше возвращать message, а не HTTP 500.
_data возвращать только если действительно нужно изменить данные.
argument передавать массивом даже для одного аргумента.
Имена команд чувствительны к регистру.
6. UI-команды HTTPRequest¶
Show¶
Назначение: показать layout текущего узла.
Формат argument: [ layout_array ]
Пример:
{
"command": "Show",
"argument": [
{"type":"Text", "text":"Готово"}
]
}
PlugIn¶
Назначение: подставить layout/plugin в текущий узел.
Формат argument: [ layout_array ]
Пример:
{
"command": "PlugIn",
"argument": [
{"type":"Text", "text":"Дополнительный блок"}
]
}
UpdateView¶
Назначение: обновить элемент интерфейса.
Формат argument для текущего узла: [view_id, value_json]
Формат argument с node_id: [node_id, view_id, value_json]
Пример:
{
"command": "UpdateView",
"argument": ["status_text", {"text":"Готово"}]
}
SetTitle¶
Назначение: изменить заголовок экрана.
Формат argument: [title]
Пример:
{
"command": "SetTitle",
"argument": ["Приемка"]
}
Refresh¶
Назначение: обновить текущую форму узла.
Формат argument: []
Пример:
{
"command": "Refresh"
}
RefreshTab¶
Назначение: обновить вкладку.
Формат argument: [] или [tab_id]
Пример:
{
"command": "RefreshTab",
"argument": ["goods"]
}
CloseNode¶
Назначение: закрыть текущую форму узла.
Формат argument: []
Пример:
{
"command": "CloseNode"
}
ScanBarcode¶
Назначение: запустить сканирование штрихкода.
Формат argument: [listener, event]
Пример:
{
"command": "ScanBarcode",
"argument": ["onBarcode", "scan"]
}
Dialog¶
Назначение: показать диалог.
Формат argument: [title, text, ok_button, cancel_button]
Расширенный формат: [title, text, ok_button, cancel_button, layout_json]
Пример:
{
"command": "Dialog",
"argument": ["Готово", "Операция выполнена", "OK", ""]
}
AddTimer¶
Назначение: добавить клиентский таймер.
Формат argument: [timer_key, seconds]
Пример:
{
"command": "AddTimer",
"argument": ["refresh_status", 5]
}
StopTimer¶
Назначение: остановить клиентский таймер.
Формат argument: [timer_key]
Пример:
{
"command": "StopTimer",
"argument": ["refresh_status"]
}
StopAllTimers¶
Назначение: остановить все клиентские таймеры.
Формат argument: []
Пример:
{
"command": "StopAllTimers"
}
ShowProgressGlobal¶
Назначение: показать глобальный индикатор прогресса.
Формат argument: []
Пример:
{
"command": "ShowProgressGlobal"
}
HideProgressGlobal¶
Назначение: скрыть глобальный индикатор прогресса. Формат argument: [] Пример:
{
"command": "HideProgressGlobal"
}
RunPython¶
Назначение: запустить метод текущего узла. Также поддерживается старое ошибочное имя RunPyhon.
Формат argument: [method_name]
Пример:
{
"command": "RunPython",
"argument": ["onAccept"]
}
RunEvent¶
Назначение: запустить событие.
Для узла argument: [event, listener]
Для common argument: [listener, event, parameter2]
Пример для узла:
{
"command": "RunEvent",
"argument": ["onInput", "after_http"]
}
Save¶
Назначение: сохранить текущий узел.
Формат argument: []
Пример:
{
"command": "Save"
}
Upload¶
Назначение: выгрузить текущий узел на сервер.
Формат argument: []
Пример:
{
"command": "Upload"
}
Общие UI-команды¶
toast¶
Назначение: короткое системное toast-сообщение.
Формат argument: [text]
Пример:
{
"command": "toast",
"argument": ["Сохранено"]
}
message¶
Назначение: snackbar-сообщение внизу экрана.
Формат argument: [text]
Пример:
{
"command": "message",
"argument": ["Операция выполнена"]
}
vibrate¶
Назначение: вибрация.
Формат argument: [] или [milliseconds]
Пример:
{
"command": "vibrate",
"argument": [300]
}
SendNotification¶
Назначение: показать Android-уведомление.
- Форматы argument:
[message]
[message, title]
[message, title, number, progress]
Пример:
{
"command": "SendNotification",
"argument": ["Задача завершена", "NodaLogic"]
}
SendProgressNotification¶
Назначение: показать/обновить уведомление с прогрессом.
Формат argument: [message, title, number, progress]
Пример:
{
"command": "SendProgressNotification",
"argument": ["Загрузка", "NodaLogic", 1001, 45]
}
beep¶
Назначение: звуковой сигнал.
- Форматы argument:
[]
[tone]
[tone, duration_ms, volume]
Пример:
{
"command": "beep"
}
speak¶
Назначение: произнести текст через Text-To-Speech.
Формат argument: [text]
Пример:
{
"command": "speak",
"argument": ["Готово"]
}
listen¶
Назначение: запустить распознавание речи, если есть разрешение RECORD_AUDIO.
Формат argument: []
Пример:
{
"command": "listen"
}