Чем отличается getFromScript от linkToScript?
Есть две функции, которые из Totum могут вызвать сторонний сервер. На самом деле их больше, но нас интересуют эти две:
linkToScript — открывает окно!
getFromScript — выполняет действие в фоне!
Как выполнить POST или GET запрос при помощи getFromScript?
Например, нам нужно вызвать сторонний сервер, передать ему параметры запроса и сделать что-то с полученным ответом. Например запишем ответ в поле h_data
:
Передаем POST-параметры (они не видны в адресной строке):
=: set(table: $#ntn; field: 'h_data' = $script)
// Вариант, когда мы post-параметры вносим вручную
script: getFromScript(uri: "https://example.host/api/uri/"; post: "action" = "select"; post: "key" = "oIpOyDHca3tSQZIz3ZjY"; post: "params" = $params; timeout: 30)
params: jsonCreate(data: $paramsJsonData)
paramsJsonData: rowCreate(field: "user" = #user; field: "type" = "new")
=: set(table: $#ntn; field: 'h_data' = $script)
// Вариант, когда мы post-параметры передаем как row
script: getFromScript(uri: "https://example.host/api/uri/"; posts: $data; timeout: 30)
data: rowCreate(field: "action" = "select"; field: "key" = "oIpOyDHca3tSQZIz3ZjYRZGqQd0yvqXYwQ"; field: "params" = $params)
params: jsonCreate(data: $paramsJsonData)
paramsJsonData: rowCreate(field: "user" = #user; field: "type" = "new")
Передаем GET-параметры (они видны в адресной строке):
=: set(table: $#ntn; field: 'h_data' = $script)
// Вариант, когда мы post-параметры передаем как row
script: getFromScript(uri: "https://example.host/api/uri/"; gets: $data; timeout: 30)
data: rowCreate(field: "action" = "select"; field: "key" = "oIpOyDHca3tSQZIz3ZjYRZGqQd0yvqXYwQ"; field: "params" = $params)
params: jsonCreate(data: $paramsJsonData)
paramsJsonData: rowCreate(field: "user" = #user; field: "type" = "new")
Зачем нужен параметр timeout?
Важно: при вполнении такого запроса к стороннему серверу если не задать параметр timeout
процесс Тотума будет ждать ответ бесконечно и не отключится по внутреннему таймауту.
Если timeout
задан то по его истечении при отсутвии ответа стороннего сервера произойдет срабатывание exeption
, аналогично функции errorExeption.
Может ли getFromScript быть вызван из кода, а не только из кода-действия?
Да, getFromScript является одной из функций исключений. Но с этим необходимо быть очень осторожным, тк зависание ответа стороннего сервера приведет к зависанию таблицы!