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

Смарт-выражения — справочник дефолтов

Справочник соответствия параметров между старой админкой, новой 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.