Перейти к содержанию

Смарт-действия — Известные проблемы

Документ — реестр известных проблем и ограничений смарт-действий (Smart Actions) 1Формы: активные ограничения (локализация ФИО в CreateUser/UpdateUser, EventID 64 в WhenOpenTask) и ранее исправленные проблемы. Для инженеров поддержки и разработчиков, работающих с пакетами смарт-действий.


1. CreateUser / UpdateUser не поддерживают локализованные ФИО

Статус: ограничение подтверждено, принято в работу

Симптом: при создании пользователя через смарт-действие «Создать пользователя» нельзя указать ФИО на дополнительном языке (например, английском). ФИО записывается как локализация только для языка, указанного в параметре «Язык».

Причина: действие записывает локализованное ФИО только для основного языка пользователя; параметров для второго языка нет.

Обходной путь: дописать в пакет смарт-действий SQL-скрипт, который проставляет ФИО для второго языка напрямую.


2. WhenOpenTask (EventID 64) срабатывает в SPA только в представлении «Чаты»

Статус: ограничение подтверждено, поведение намеренное

Симптом: смарт-правило на событие «Во время открытия задачи» не срабатывает, когда пользователь открывает задачу в стандартной карточке (полное представление). Срабатывает только при открытии в представлении «Чаты».

Обходной путь: событие можно вызвать напрямую через API (POST /api/v2/tasks/{taskId}/when-open-task) — без ограничений по представлению. Актуально для интеграций и мобильного клиента.

Дополнительно: контекст открытия передаётся в @eventParam1 (не @eventParam0). @eventParam0 у данного события не используется — нетипичное поведение по сравнению с другими событиями.


3–5. Исправленные ранее проблемы (сборки 2.268.63–2.268.77)

Три исправленные ранее проблемы с указанием сборок исправления; в текущих сборках не воспроизводятся.

Mustache-шаблоны возвращали пустые строки (исправлено в 2.268.77): смарт-действие «Сгенерировать файл по шаблону» с mustache-шаблоном возвращало пустое содержимое.

Смарт-отмена (Cancel) в Lua не работала (исправлено в 2.268.63): действие «Отменить» (Cancel) не отрабатывало корректно при вызове из Lua-скрипта.

Ошибка 500 на смарт-кнопках действий (исправлено в 2.268.74): ошибка при нажатии на смарт-кнопки действий (в частности, при генерации файла по шаблону).


6. ESQL: FROM {0} без алиаса — 500 на reserved keyword

Статус: исправлено

Симптом: запросы вида SELECT VALUE COUNT(1) FROM {0} WHERE ... возвращают 500. Проявлялось при вычислении видимости блоков смарт-фильтра в МТФ.

Причина: в бесконтекстной ветке генератора ESQL конструкция FROM {0} подставлялась без алиаса коллекции. Парсер ESQL принимал стоящий сразу за FROM reserved keyword (WHERE, ORDER, GROUP) за имя коллекции. В контекстной ветке (FROM Tasks as t) алиас присутствовал, поэтому ошибка не воспроизводилась.

Инвариант: алиас as t подставляется во всех ветках генератора ESQL.

Подробный разбор устройства бесконтекстного вычисления смарт-фильтра (режим НТФ) — в smart-filters/backend.md, раздел «Вычисление фильтра без контекста».

7. Потеря значения параметра действия через admin-MCP (JsonElement)

Статус: исправлено

Симптом: при сохранении действия пакета через admin-MCP (/mcp-admin-api-actions-pack-editoractions_pack_editor_save_pack_action) значение параметра не записывалось в БД. Проявлялось двумя способами: - ArgumentException: unknown value type: System.Text.Json.JsonElement — значение не распознавалось контролом параметра. - SqlException 547 — нарушение CHECK-ограничения CK_PacksActionsParameters_Value_XOR_Expression при вставке параметра с пустым значением.

Причина: admin-MCP десериализует тело запроса через System.Text.Json, помещая в object-поле FixedValue тип JsonElement. Базовый класс контролов ParameterControlBase обрабатывал только JObject (Newtonsoft) и нативные типы — JsonElement попадал в else-ветку с исключением. Отдельно — отсутствие фильтрации пустых параметров в MergeParameters позволяло довести до БД строку с пустыми значениями всех источников.

Инвариант: ParameterControlBase.SerializeValue обрабатывает JsonElement наравне с JObject; PacksActionsEntityService.MergeParameters фильтрует параметры без значения через HasParameterValue перед записью.

8. CreateUser / UpdateUser: поле «Пароль» в редакторе всегда пустое, отдельной очистки нет

Симптом: в редакторе пакета действий поле «Пароль» действий «Создать пользователя» и «Изменить пользователя» всегда отображается пустым, даже если пароль был задан ранее. Отдельного способа очистить ранее сохранённый пароль в интерфейсе нет.

Причина: значение пароля хранится в зашифрованном виде и намеренно не возвращается в редактор, в описание действия и в экспорт модуля — поле работает только на запись. Пустое поле при сохранении трактуется как «не менять сохранённое значение».

Обходной путь: чтобы заменить пароль, введите новое значение. Чтобы убрать ранее сохранённый пароль, смените источник значения параметра (выражение, скрипт или предопределённый параметр) либо пересоздайте действие.