Смарт-действия — Известные проблемы¶
Реестр выявленных багов и ограничений. Полные ответы на тикеты и постановки — в 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:160 — UpdateUserLocalizationValues
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.cs — RegisterLoggingApis, source name
- JsLibApi.cs — source name для LIB-скриптов
- CustomSettingKeys.cs — константа SmartScriptLogLevel
- ExceptionType.cs — значение SmartScript
- CalendarManager.cs, ExchangeFolderService.cs, DbCommandsManagerBase.cs (×2), MultiLookupToDoListService.cs — ExceptionDispatchInfo.SetCurrentStackTrace
Тесты: 65 тестов — SmartScriptDevExTests + SmartScriptServiceDispatchTests.
Связано: ServiceFlow/ss-devex-infrastructure-spec.md — спецификация инфраструктуры логирования SS.
Перекрёстные ссылки¶
docs/domains/localization/backend.md§ 6 — Known Issue #1docs/domains/smart-actions/actions-reference.md— параметры CreateUser/UpdateUserdocs/domains/users-and-groups/database.md— FK-колонки локализации в Users../smart-filters/admin.md— EventID 64, Known Issue #2