⟵ сюдатуда ⟶
  • Мастерклассы
  • Внешние подключения
  • Tableau и PowerBI
  • amoCRM
  • Битрикс 24
  • База знаний
  • Обращение к данным временной таблицы
  • Потеря связи с БД при большом трафике данных
  • Сохранить файл в поле по внешней ссылке url
  • Формирование списка из отмеченных галочками строк и вывод на печать
  • Добавление цикла в таблицу циклов кнопкой из временной таблицы
  • Функция TryCatch и передача данных после отката
  • Ошибка доступа при переходе в цикл если первая таблица недоступна для пользователя
  • Архитектура системы рассчитывающей остатки по кассе или складу
  • Сортировка при выборке по отображению поля Селект, а не по его основанию
  • Блокировка введения дублированного значения
  • Табличное отображение в контекстной панели
  • Сортировка строк в таблице с помощью кнопки
  • Как получить значение по условию из списка вложенных массивов?
  • Сбросить счётчик id в таблице
  • Скрытие поля в таблице по условию
  • Подтверждение действия при нажатии на кнопку в контекстном окне
  • Пересчет большой таблицы
  • Как суммировать значения в rowList по одному из ключей (по одной из колонок)
  • Наборы полей по условию при открытии через linkToTable
  • Как отложить выполнение действия и выполнить его в фоне
  • Создание и удаление строк при выборе значений в Селект или Селект-дерево
  • selectRowListForSelect с условием при котором текущее значение получается зачеркнутым
  • Не все внешние запросы на Remotes выполняются и ломается счетчик id
  • Сортировка Расчётных таблиц в Цикле
  • Как передать данные в виде чисел при обращении POST к API стороннего сервиса (must be a "integer")
  • Как сделать график если есть несколько параметров
  • Сохранение изначальных значений в поле в случае, когда поле рассчитывается кодом
  • Не все внешние запросы на Remotes выполняются и ломается счетчик id

    Оригинал на GitHub

    Ссылка на GitHub ⟹

    Вопрос

    При выполнении запросов на REMOTES периодически встречаем пропуски в нумерации id, которые, казалось бы, должны идти последовательно. Мне надо понять почему записей нет. Например, в моем случае в тотуме нет id 5167,5163. То есть записи отправлены, но не получены

    1. Нужно понять как отловить такие ошибки

    2. Логируется ли это где-то

    3. Есть ли какое-либо особое сообщение о ошибке или это тоже 200 ОК и не отслеживается?

    Ответ

    Чаще всего такой эффект может быть в случае, когда приходит несколько одновременных запросов, и они пишутся в одну таблицу. У таблиц по умолчанию стоит перезапуск транзакций при ошибке одновременного доступа — при запросе ремоута возможно 5 перезапусков, потом он выдаст 200 с содержимым error или в (некоторых случаях) текстом ошибки.

    Так как id тотума резервируется при начале первой попытки, то он получается пропущен.

    Если ремоут завершился успешно, и у вас стоит тип ответа success/error то при успешном завершении будет 200 + success.

    Оптимизация таблицы записи

    В случае, когда вы из внешней системы идет постоянная запись в одни таблицу в Totum:

    • надо исключить в этой таблице Коды действия при добавлении и обрабатывать записанные строки асинхронно через простановку галочек кроном или daemons.

    • для этой таблицы записи поставить параметр "Актуальность" в значение ! Без отслеживания изменений. В этом случае код-действия remotes не будет проверять действия других пользователей в таблице.

    Как сделать логирование ошибок в Ремоутах

    Используйте tryCatch в коде ремоута:

    =catch: "remote_code_action_here"
    
    catch: insert(table: 'table_for_errors'; field: 'data_field_for_error' = $#exception) 
    

    При использовании JSON-api он всегда возвращает код 200

    Если вам нужно вернуть заголовки, то надо подключаться напрямую к remotes: HOST/Remotes/remote_name.

    В этом случае используется remotes_user от которого будет выполнен ремоут, а авторизация передается либо в теле запроса, либо в заголовке. Прочитать заголовки в коде ремоута можно из переменной $#headers.

    В этом случае работает тип ответа, заданный в поле return в строке ремоута в таблице ремоутов.

    Пользовательские заголовки ответов в remotes

    Если вы там поставите в remotes вариант ответа headers + body, то тогда сможете сформировать нужные вам заголовки:

    =catch: json`{"headers":$headers_ok,"body":$body_ok}`
    
        headers_ok: $#lc
        body_ok: "code_action_here"
    
    catch: json`{"headers":$headers_err,"body":$body_err}`
    
        headers_err: json`["HTTP/1.0 500 Some custom error"]`
        body_err: $#exception
    

    Таким образом, мы можем отдавать стороннему сервису нужные ему коды ошибок.