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

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

Реестр выявленных багов и ограничений. Полные ответы на тикеты и постановки — в ServiceFlow/.


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

Выявлен: 2026-02-09 Статус: ограничение подтверждено, принято в работу Тикет+постановка: ServiceFlow/user-localization-via-smart-actions.md

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

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

Ключевые файлы: - TCClassLib/Smart/Actions/StandardActions/StandartActionCreateUser.cs - TCClassLib/Smart/Actions/StandardActions/StandartActionUpdateUser.cs - TCClassLib/Users/UserHelpersProcedures.cs:160UpdateUserLocalizationValues

Workaround: SQL-скрипт в пакете смарт-действий (обходит кеш, подробности в ServiceFlow).

Оценка: ~4–8 часов разработки. Основная логика (LocalizationService.UpdateForLanguage) уже существует.


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

Выявлен: 2026-02-26 Статус: ограничение подтверждено, поведение намеренное (судя по коду)

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

Причина: в task-card.component.ts вызов whenOpenTask обёрнут в явную проверку:

this.taskIdState$.pipe(distinctUntilChanged(), takeUntil(this.destroy$)).subscribe(taskId => {
    if (this.chatMode) {
        return this.server.task.whenOpenTask(taskId).pipe(take(1)).subscribe();
    }
});

chatMode = true выставляется только когда компонент рендерится в режиме чата. При открытии задачи в обычном режиме вызов не выполняется вовсе.

Ключевые файлы: - spa/apps/spa/src/app/components/task/ui/task-card/task-card/task-card.component.ts:1548–1551 - core/UniForm/UniForm.Api/Controllers/OldApi/Version2_0/Tasks/TasksController_Actions.cs — эндпоинт POST /{taskId}/when-open-task - core/TCClassLib/Services/TaskActionService.cs:5270 — серверный метод WhenOpenTask

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

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


3. Mustache-шаблоны: генерация по шаблону возвращает пустые строки

Выявлен: 2026-03-16 Статус: исправлено в 2.268.77 Автор фикса: Шугаев

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

Фикс: исправлена логика рендера mustache в TemplateGenerator.


4. Смарт-отмена (Cancel) в Lua не работала

Выявлен: 2026-03-11 Статус: исправлено в 2.268.63 Автор фикса: Шарафутдинов

Фикс: корректная обработка Cancel-действий в Lua-скриптах.


5. 500 на кнопках действий (смарт-кнопки)

Выявлен: 2026-03-13 Статус: исправлено в 2.268.74 Автор фикса: Шарафутдинов

Симптом: NullReferenceException при нажатии на смарт-кнопки действий.

Ключевые файлы: - PacksLogic.cs - StandartActionGenerateByTemplate.cs - TemplateGenerator.cs - UnhandledExceptionFilterAttribute.cs (улучшена обработка ошибок)


6. SmartScript Execution Logger — новая подсистема логирования (2.268.78)

Дата: 2026-03-16 Статус: реализовано

Что появилось: структурированное логирование выполнения смарт-скриптов через SmartScriptExecutionLogger. Покрывает JS (Jint) и Lua (NLua) движки. Rate-limiting: debug ≤ 10, info ≤ 30, error ≤ 50 записей за выполнение. SS.logError / console.error дублируются в ExceptionsLog. Source name в стек-трейсах: SmartScript {ID} ("{Name}").

Затронутые файлы: - SmartScriptExecutionLogger.cs (новый) — логгер + enum ScriptLogLevel - SmartScriptErrorException.cs (новый) — структурированное исключение с ScriptId, ScriptName, ExecutionId, TaskId, ScriptStack - SmartScriptService.cs — интеграция CustomSettingsCache, логгера, FlushExecutionLog - SmartScriptEditorService.cs — интеграция CustomSettingsCache, логгера с UserId - JsScriptEngine.cs, LuaScriptEngine.csRegisterLoggingApis, source name - JsLibApi.cs — source name для LIB-скриптов - CustomSettingKeys.cs — константа SmartScriptLogLevel - ExceptionType.cs — значение SmartScript - CalendarManager.cs, ExchangeFolderService.cs, DbCommandsManagerBase.cs (×2), MultiLookupToDoListService.csExceptionDispatchInfo.SetCurrentStackTrace

Тесты: 65 тестов — SmartScriptDevExTests + SmartScriptServiceDispatchTests.

Связано: ServiceFlow/ss-devex-infrastructure-spec.md — спецификация инфраструктуры логирования SS.


Перекрёстные ссылки

  • docs/domains/localization/backend.md § 6 — Known Issue #1
  • docs/domains/smart-actions/actions-reference.md — параметры CreateUser/UpdateUser
  • docs/domains/users-and-groups/database.md — FK-колонки локализации в Users
  • ../smart-filters/admin.md — EventID 64, Known Issue #2