Skip to main content

Не поддерживается

На такие запросы сервис отвечает 501 Not Implemented или 400 с объяснением. Параметры запроса
  • $search;
  • $compute вне $apply;
  • $levels;
  • $apply внутри $expand;
  • $expand поверх groupby и aggregate.
Выражения
  • оператор has;
  • функции fractionalseconds, totalseconds, totaloffsetminutes, mindatetime, maxdatetime, isof, geo.*, matchesPattern, hassubset, hassubsequence;
  • cast к типам Edm.* и cast выражения (cast(guid'…','Catalog_X') для составных свойств работает);
  • литералы binary и duration в сравнениях;
  • сравнение и упорядочивание строк неограниченной длины (400); contains по ним работает.
$apply
  • преобразования concat, expand, search, nest, join, rollup, $all, toppercent, topsum, bottompercent, bottomsum;
  • больше 10 шагов в цепочке.
Регистры
  • DrCrTurnovers регистра бухгалтерии;
  • виртуальные таблицы регистра расчёта.
Протокол
  • асинхронная обработка Prefer: respond-async;
  • повторяемость (Repeatability-Request-ID) для $batch целиком (для отдельных операций пакета работает).
Ограничение токена по IP
  • подсети IPv6 (отдельные адреса IPv6 и подсети IPv4 работают).
Постоянные пределы Настраиваемые лимиты описаны в разделе Лимиты запросов.

Rust-компонента и безопасный режим

В безопасном режиме расширения платформа не подключает внешние компоненты. Сервис работает, но всё выполняет встроенный язык, и большие выгрузки идут медленнее. Подробнее — Rust-компонента. Режим прав «Привилегированный» в безопасном режиме тоже недоступен: запросы odatat отвечают 503.

Редкий 500 «Тип не определен» после простоя сеанса

Признаки:
  • ответ 500, тело — текст платформы Тип не определен '<GUID>', а не ошибка в формате OData;
  • в журнале регистрации нет ошибки OData4.* для этого запроса;
  • тот же запрос, повторённый сразу, проходит.
Причина — гонка в платформе. Сеанс HTTP-сервиса на границе 20 секунд простоя (sessionMaxAge) на мгновение не видит объектов расширения. Чтение настроек, профилей и токенов расширение защищает повтором. А запись журнала запросов при такой ошибке платформа прерывает мимо обработки исключений, поэтому готовый ответ заменяется на 500. Сбой бывает только при включённом журнале и редко: единичные случаи за часы непрерывной работы, и не всегда. Что делать клиенту — повторить запрос. Power BI и Excel повторяют обновление сами.
Журнал запроса записи пишется после фиксации транзакции. Поэтому 500 может прийти, когда объект уже записан, и повтор POST создаст дубль. Повторяйте запросы записи безопасно:
  • Любой запрос записи — с заголовком Repeatability-Request-ID или Idempotency-Key. Повтор получит сохранённый ответ без повторного выполнения.
  • Создание — со своим Ref_Key и If-None-Match: *. Повтор получит 412, и объект останется один.
  • PATCH и PUT — с If-Match. После прошедшей записи версия другая, поэтому повтор получит 412.
  • DELETE, Post и Unpost — после сбоя прочитайте объект и проверьте результат.
Подробнее — Надёжная запись.
Если такие ответы участились или GUID в тексте принадлежит не журналу, это другой случай. Сообщите о нём в Issues: приложите запрос, время, GUID и состояние рабочего процесса веб-сервера.

Редкий 500 «Запись не найдена в менеджере имен базы данных»

Ошибка замечена единично, вскоре после обновления конфигурации базы данных на работающем веб-сервере. Отдельно повторённый запрос проходит. Причина не найдена, возможно, это тот же класс гонки сеанса платформы. Повторите запрос. Если ошибка повторяется, сообщите запрос, время и было ли перед этим обновление конфигурации.

$batch и сбой журнала после выполнения

Если запись журнала после выполнения пакета упадёт из-за сбоя платформы (см. выше), клиент получит 500 на весь пакет, хотя его операции уже выполнены и зафиксированы. Повтор такого пакета может создать объекты второй раз. Как избежать дублей:
  • передавайте в каждой операции Repeatability-Request-ID;
  • или передавайте ключ создаваемого объекта (Ref_Key) с If-None-Match: *;
  • сверяйте результат по Content-ID и id операций.

Блокировка журнала в файловой базе

Если весь регистр журнала заблокирован чужой транзакцией, ответ ждёт тайм-аута блокировки платформы, 20 секунд. В файловой базе так ведёт себя любая незавершённая запись в журнал, потому что блокировки там табличные. Средствами расширения это не обойти. Для нагруженной работы используйте клиент-серверную базу или выключите журнал.

Когда действуют изменения доступа

Отзыв токена, изменение профиля и изменение сопоставления пользователя с профилем действуют со следующего запроса. Исключение — запрос, попавший в гонку сеанса платформы (первый запрос после ~20 секунд простоя сеанса). В нём сервис может взять данные доступа, прочитанные этим сеансом не раньше 5 минут назад. Каждый такой случай пишется предупреждением OData4.Безопасность в журнал регистрации. Если таких данных нет, ответ — 503.

Платформа 8.3.11 и адрес клиента

В режиме совместимости 8.3.11 сервису недоступен адрес соединения клиента. Поэтому ограничение токена по IP проверяется только по заголовку доверенного прокси (X-Forwarded-For или X-Real-IP). Токен с разрешёнными IP без настроенного доверенного заголовка отвергается. Подробнее — Токены.