⟵ сюдатуда ⟶
  • Учебный курс
  • Создание простых таблиц и полей
  • Коды базовый уровень
  • Селекты и связь между таблицами
  • Настройки таблиц базовый уровень
  • Префильтры базовый уровень
  • Условное форматирование базовый уровень
  • Коды действия базовый уровень
  • Использование всплывающих окон
  • Циклы базовый уровень
  • Роли и пользователи в web
  • Коды продвинутый уровень
  • Коды действий продвинутый уровень
  • Префильтры продвинутый уровень
  • Настройки полей и таблиц продвинутый уровень
  • Циклы продвинутый уровень
  • Форматирование продвинутый уровень
  • Селект-дерево
  • Выполнения кода действия по расписанию
  • Печать и отправка email
  • Нотификации
  • Взаимодействие по API
  • Вызов стороннего скрипта из кода по кнопке
  • Вызов стороннего сервера из кода
  • Прием внешних запросов к тотум
  • Авторизация в remotes
  • Адаптивность и секции
  • Графики
  • Вид таблицы панелями и поворот строчной части
  • Анонимные таблицы для неавторизованного доступа
  • Внешние формы для сбора информации
  • Обновление и бэкапирование
  • Дублирование схем и перенос таблиц между базами
  • Консольная утилита bin/totum
  • Вызов стороннего сервера из кода

    Из каких секций кода можно вызвать linkToScript или getFromScript?

    Это функции кодов-действий, но getFromScript относится к исключениям, которые могут выполняться в коде.

    Что произойдет, если при вызове сторонний сервер не отвечает?

    Таймаут процесса Totum на это не влияет, он бесконечно будет ждать сторонний сервер, пока тот не вернет код ошибки.

    Чтобы избежать жестких зависаний — задавайте параметр timeout.

    Можно ли getFromScript выполнить кроном?

    Конечно!

    Можно ли увидеть ошибку, если код действия выполняется кроном и сторонний сервер не ответил?

    Да, для это надо код крона обернуть в tryCatch и в секцию catch написать действие, которое нужно совершить если код крона завершился с ошибкой — например отправить админу нотификацию:


    =send_admin:
    set(table: 'table'; field: 'h_data' = $script) // Запрос без параметров script: getFromScript(uri: "https://example.host/api/uri/"; timeout: 30) send_admin: insert(table: 'notifications'; field: 'code' = "admin_text"; field: 'active_dt_from' = $#ndt; field: 'title' = "Ошибка крона"; field: 'user_id' = 1; field: 'vars' = json`["text":$#error]`; field: 'active' = true)

    В этом примере использован синтаксический вызов tryCatch — текст ошибки в этом случае может быть получен из переменной $#error.

    Этот пример - для понимания как можно обработать ошибки крона, если вам нужно другое поведение. Сейчас в Totum уже реализованы в случае ошибки крона автоматическая отправка письма на email, указанный в Conf.php, и нотификации пользователю admin.

    Если в процессе выполнения кода обращение к вызову стороннего сервера идет несколько раз, то как сделать кэширование в рамках выполнения кода?

    Используется стандартное фиксирование строки тильдой — ~.

    пример организации отправки смс

    Достаточно часто прямой вызов стороннего сервера в процессе выполнения каких-то действий внутри Тотум является плохой практикой, тк задержка ответа стороннего сервера будет тормозить действие в системе.

    В этом случае делается асинхронный механизм отправки. Например, если нам по условиям нужно отправить клиенту СМС, то:

    1. Делаем таблицу с СМС.

    2. Каждая строчка в этой таблице будет отдельным СМС.

    3. Когда выполняется действие мы записывает строку в эту таблицу с текстом и телефоном получателя.

    4. Код вызова стороннего сервера ставим в чекбокс на изменение.

    5. Ставим галочки кроном раз в 1-5 минут.

    Таким образом если сервер API СМСок или Телеграм-бота отрубится, то действия внутри Тотум будет продолжать происходить без тормозов.