Смарт-выражения — справочник дефолтов
Справочник соответствия параметров между старой админкой, новой AdminSPA и бэкендом.
1. Контролы выбора smart-выражений — где лежат
| Что |
Путь |
| Старая админка — WebForms контрол |
/repo/tc/taskcenter/admin/Smart/Controls/SmartExpressionSelect.ascx.cs |
| Старая админка — JS контрол |
/repo/tc/taskcenter/admin/Smart/Controls/SmartExpressionSelect.js |
| Legacy JS контрол (CustomPages) |
/repo/core/Valhalla.CommonFiles/src/scripts/app/controls/SelectSmartExpression.js |
| Legacy JS грид-редактор |
/repo/core/Valhalla.CommonFiles/src/scripts/app/kendo/kendo.grid.js (метод smartExpressionEditor, ~строка 784) |
| Новая AdminSPA — Angular компонент |
/repo/spa/apps/spa/src/app/pages/admin/controls/administration-smart-expressions-dropdown/administration-smart-expressions-dropdown.component.ts |
| Бэкенд — FormsGenerator атрибут |
/repo/core/Valhalla.Admin/FormsGenerator/Attributes/Scheme/SchemeElementSmartExpressionSelectOptionsAttribute.cs |
| Бэкенд — FormsGenerator опции |
/repo/core/Valhalla.Admin/FormsGenerator/ElementOptions.cs (класс SmartExpressionOptions, строка 59) |
| Бэкенд — генератор схемы |
/repo/core/Valhalla.Admin/FormsGenerator/EntitySchemeGenerator.cs (строка 286) |
| Бэкенд — Origin enum |
/repo/core/Valhalla.Integration/Valhalla.Integration/Enums/Smart/Origin.cs |
| Бэкенд — логика создания |
/repo/core/Valhalla.SmartLogic/SmartExpressionsLogic.cs |
| Бэкенд — сервис редактора |
/repo/core/Valhalla.Admin/Smart/SmartExpression/Editor/SmartExpressionEditorService.cs |
| Бэкенд — DB-сущность |
/repo/core/TCDataAccess/Kernel/Domain/Entities/Smart/SmartExpressionEntity.cs |
| Бэкенд — API контроллер |
/repo/core/UniForm/Uniform.Admin.Api/Controllers/Smart/SmartExpression/SmartExpressionsController.cs |
2. Параметры и их дефолты — сравнение
2.1 Origin / originId
| Где |
Дефолт |
Строка |
Комментарий |
Старая админка (SmartExpressionSelect.ascx.cs) |
Origin.Subcat (2) |
267 |
private Origin _origin = Origin.Subcat; |
Legacy JS (SelectSmartExpression.js) |
1 (CustomPages) |
72 |
origin: 1 в defaultUrlParams. Отличается! Этот контрол используется только на кастомных страницах |
Legacy JS грид (kendo.grid.js) |
2 (Subcat) |
794 |
origin: 2 в smartExpressionEditor |
| Новая AdminSPA (Angular) |
2 (Subcat) |
414-417 |
Явный фоллбэк: this.originId ?? 2 при загрузке списка |
| Новая AdminSPA — создание пака |
'Subcat' (строка!) |
837 |
origin: this.originId \|\| 'Subcat' — передаётся строка, не число |
| Новая AdminSPA — открытие редактора |
без фоллбэка |
716 |
origin: this.originId — если не задан Input, будет undefined |
| Новая AdminSPA — создание выражения |
без фоллбэка |
766 |
origin: this.originId — аналогично undefined |
Бэкенд (SmartExpressionEditorService) |
Origin.Subcat (2) |
109 |
editorContext?.Origin ?? Origin.Subcat |
Бэкенд (TreeBuilder) |
Origin.Subcat (2) |
— |
ctx.Origin ?? Origin.Subcat |
Бэкенд (SmartExpressionEntity) |
2 |
63-64 |
public byte OriginId { get; set; } = 2; |
2.2 SelectFilters / selectFilters
| Где |
Дефолт |
Строка |
Комментарий |
Старая админка (SmartExpressionSelect.ascx.cs) |
true |
50 |
public bool SelectFilters = true; |
| Новая AdminSPA (Angular) |
false |
68 |
@Input() selectFilters = false; |
| Бэкенд (FormsGenerator атрибут) |
нет дефолта |
— |
Обязательный параметр конструктора |
Расхождение: в старой админке по умолчанию true, в SPA по умолчанию false.
2.3 NoContextMode / noContextMode
| Где |
Дефолт |
Строка |
Комментарий |
Старая админка (SmartExpressionSelect.ascx.cs) |
false (неявный) |
265 |
public bool NoContextMode { get; set; } — дефолт bool = false |
| Новая AdminSPA (Angular) |
false |
121 |
@Input() noContextMode = false; |
Совпадают.
2.4 EventId / eventId
| Где |
Дефолт |
Строка |
Комментарий |
Старая админка (SmartExpressionSelect.ascx.cs) |
null |
74-78 |
public int? EventId — через ViewState, по умолчанию null |
| Новая AdminSPA (Angular) |
undefined |
83 |
@Input() eventId: number; — без начального значения |
Совпадают по смыслу (не задано = показываются все выражения).
2.5 SubcatId / subcatId
| Где |
Дефолт |
Строка |
Комментарий |
Старая админка (SmartExpressionSelect.ascx.cs) |
null |
40-45 |
public int? SubcatId — через hidden field |
| Новая AdminSPA (Angular) |
null |
65 |
@Input() subcatId: number = null; |
Совпадают.
2.6 TaskEventParameterValue / eventParameterValue
| Где |
Дефолт |
Строка |
Комментарий |
Старая админка (SmartExpressionSelect.ascx.cs) |
null |
99-103 |
public int? TaskEventParameterValue — через ViewState |
| Новая AdminSPA (Angular) |
null |
92 |
@Input() eventParameterValue = null; |
Совпадают.
2.7 SelectSearch
| Где |
Дефолт |
Строка |
Комментарий |
Старая админка (SmartExpressionSelect.ascx.cs) |
false |
52 |
public bool SelectSearch = false; |
| Новая AdminSPA (Angular) |
— |
— |
Нет такого Input. Отсутствует в SPA |
2.8 AvailableInSmartSearch
| Где |
Дефолт |
Строка |
Комментарий |
Старая админка (SmartExpressionSelect.ascx.cs) |
false (неявный) |
54 |
public bool AvailableInSmartSeach { get; set; } |
| Новая AdminSPA (Angular) |
— |
— |
Нет такого Input |
2.9 CycleContext / cycleContext
| Где |
Дефолт |
Строка |
Комментарий |
Старая админка (SmartExpressionSelect.ascx.cs) |
? |
— |
Передаётся в JS-конструктор |
| Новая AdminSPA (Angular) |
undefined |
115 |
@Input() cycleContext: number; |
3. Дефолты в бэкенд при отсутствии параметров
SmartExpressionsLogic.CreateSmartExpression (SmartExpressionsLogic.cs:277-280)
if (data.SubcatId.HasValue && data.OriginId != Origin.Subcat)
throw ArgumentException
Жёсткая валидация: SubcatId → OriginId обязан быть Subcat.
SmartExpressionEditorService (SmartExpressionEditorService.cs:109)
expression.OriginId = editorContext?.Origin ?? Origin.Subcat
Если origin не передан — Subcat.
SmartExpressionEntity (SmartExpressionEntity.cs:63-64)
public byte OriginId { get; set; } = 2
Дефолт сущности — Subcat.
SmartExpressionSelect.ascx.cs — валидация (строка 197-198)
if (SubcatId.HasValue && Origin != Origin.Subcat && Origin != Origin.Queue)
throw Exception
В старой админке Queue тоже допускается при наличии SubcatId (в отличие от бэкенда, где только Subcat).
4. Как origin попадает из UI в бэкенд
Старая админка
ASPX-атрибут Origin="Subcat"
→ SmartExpressionSelect.ascx.cs свойство Origin (строка 267-279)
→ OnPreRender передаёт (int)Origin в JS-конструктор (строка 210)
→ SmartExpressionSelect.js передаёт в URL: &origin=<число> (строка 175)
→ EditSmartExpression.aspx получает из QueryString
Также из кода: SmartExpressionsLogic.GetSmartExpressions(Origin, ...) (строка 341).
Новая AdminSPA
Шаблон [originId]="1"
→ @Input() originId (строка 89)
→ getSmartExpressionsList(): originId ?? 2 (строки 414-417)
→ POST /api/admin/smartexpressions/list { originId: число }
→ openAdminSmartExpressions(): origin: this.originId (строка 716, 766)
→ queryParams в URL, страница редактора читает из route
Legacy JS (SelectSmartExpression.js)
Вызов new SelectSmartExpression(jqElement, subcatId, options, dataSource, urlParams)
→ urlParams.origin = urlParams.origin || 1 (CustomPages — строка 72)
→ GET /admin/Smart/EditSmartExpression.aspx?origin=<число>
5. Быстрая навигация по параметру
| Параметр |
Старая (ASCX) |
Старая (JS) |
Новая (Angular) |
| origin |
.ascx.cs:267-279 |
.js:175,121 |
.ts:89,414-417,716,766,837 |
| selectFilters |
.ascx.cs:50 |
.js (передан через конструктор) |
.ts:68 |
| noContextMode |
.ascx.cs:265 |
.js (передан через конструктор) |
.ts:121 |
| eventId |
.ascx.cs:74-78 |
.js:121 |
.ts:83 |
| subcatId |
.ascx.cs:40-45 |
.js:121 |
.ts:65 |
| eventParameterValue |
.ascx.cs:99-103 |
.js:121 |
.ts:92 |
Полные пути к файлам — в таблице раздела 1.