Reflection
Reflection — системный модуль, отражающий собственные метаданные приложения — навигатор, формы, свойства, действия и таблицы физической модели — в виде классов, свойств и форм, так что работающая логика может исследовать собственную структуру. Подключается через REQUIRE Reflection (System и Authentication тянутся автоматически).
Модуль хранит по одному объекту на каждый элемент метаданных (по одному Property на свойство, по одному Form на форму, по одному Table на таблицу и т. д.), наполняемому платформой при запуске. Свойства-поиски восстанавливают объект по каноническому имени или SID; статистика, признаки хранения и пользовательские настройки колонок привязаны к этим объектам; а формы в конце модуля показывают их под папкой навигатора metadata.
Группы свойств
Свойства и действия организованы в дерево групп.
| Класс / свойство | Что хранит |
|---|---|
PropertyGroup | по одному объекту на группу свойств и действий |
parent[PropertyGroup] | родительская группа в дереве |
level[PropertyGroup, PropertyGroup] | рекурсивная глубина: 1 для группы относительно самой себя, увеличивается на 1 за шаг до предка |
caption[PropertyGroup] / number[PropertyGroup] / SID[PropertyGroup] | отображаемое название, порядок и строковый идентификатор |
propertyGroup[STRING] | группа с указанным SID |
Метаданные навигатора
Дерево навигатора представлено классом NavigatorElement и двумя его наследниками.
| Класс / свойство | Что хранит |
|---|---|
NavigatorElement | по одному объекту на элемент навигатора |
NavigatorFolder | элемент навигатора, группирующий другие элементы |
NavigatorAction | элемент навигатора, открывающий форму или запускающий действие |
caption[NavigatorElement] / canonicalName[NavigatorElement] / number[NavigatorElement] | отображаемое название, уникальное каноническое имя и порядок |
parent[NavigatorElement] | родительский элемент в дереве |
level[NavigatorElement, NavigatorElement] | рекурсивная глубина, определяемая как level[PropertyGroup, PropertyGroup] |
form[NavigatorElement] | форма, открываемая элементом навигатора |
action[NavigatorAction] | действие, запускаемое элементом навигатора |
navigatorElementCanonicalName[STRING] | элемент с указанным каноническим именем |
isNavigatorFolder[NavigatorElement] / isNavigatorAction[NavigatorElement] | признаки, отличающие папку от действия |
Метаданные форм
| Класс / свойство | Что хранит |
|---|---|
Form | по одному объекту на форму |
caption[Form] / canonicalName[Form] | отображаемое название и уникальное каноническое имя |
form[STRING] | форма с указанным каноническим именем |
currentForm[] / activeForm[] | родные свойства с каноническим именем текущей и активной формы |
NoForm — единственный выделенный наследник Form с каноническим именем _NOFORM, используемый профайлером для отнесения работы, выполненной вне какой-либо формы.
Метаданные действий и свойств
ActionOrProperty — абстрактный базовый класс для свойств и действий; Property и Action — его конкретные наследники.
| Свойство | Что хранит |
|---|---|
canonicalName[Property] / canonicalName[Action] | уникальное каноническое имя |
canonicalName[ActionOrProperty] | каноническое имя независимо от конкретного наследника |
caption[ActionOrProperty] | отображаемое название |
annotation[ActionOrProperty] | аннотация |
class[ActionOrProperty] | реализующий Java-класс |
parent[ActionOrProperty] | группа PropertyGroup, к которой относится элемент |
number[ActionOrProperty] | порядок |
propertyCanonicalName[STRING] / actionCanonicalName[STRING] | свойство / действие с указанным каноническим именем |
actionOrPropertyCanonicalNameWithPostfix[STRING] | элемент, чьё каноническое имя с приписанным постфиксом _action / _property совпадает с аргументом (так свойство и действие с одинаковым именем остаются различимы) |
У свойств дополнительно есть признаки хранения и статистика.
| Свойство | Что хранит |
|---|---|
dbName[Property] | имя колонки в базе данных |
tableSID[Property] | SID таблицы, в которой хранится свойство |
stored[Property] | признак: свойство хранится в базе данных |
loggable[Property] / userLoggable[Property] | признаки: логирование изменений включено приложением / пользователем |
userMaterialized[Property] | признак: пользователь запросил материализацию |
isSetNotNull[Property] | признак: установлено ограничение NOT NULL |
disableInputList[Property] | признак: список автодополнения значений отключён |
select[Property] | элемент выбора в ячейке (SelectType: Button, ButtonGroup, Dropdown, List, No) |
complexity[Property] | оценка сложности вычисления |
stats[Property] | оценка числа строк |
quantity[Property] / notNullQuantity[Property] | общее число значений и число непустых значений |
lastRecalculate[Property] | время последнего пересчёта материализованного значения |
maxStatsProperty[] ограничивает статистику для свойства с пользовательским логированием: включение пользовательского логирования у свойства, чей stats[Property] превышает порог, отклоняется. webServerUrl[] хранит адрес веб-сервера. Оба показаны на форме options.
getPropertyDependencies[Property] и getPropertyDependents[Property] наполняют локальные свойства propertyDependencies[INTEGER] / propertyDependents[INTEGER] свойствами, из которых данное свойство читает, и свойствами, которые читают из него.
Отрисовки свойств и настройки колонок
PropertyDraw — одно размещение свойства или действия на форме (одна колонка формы или ячейка панели).
| Свойство | Что хранит |
|---|---|
actionOrProperty[PropertyDraw] | отображаемый ActionOrProperty |
sid[PropertyDraw] | идентификатор размещения в пределах формы |
caption[PropertyDraw] | отображаемое название |
form[PropertyDraw] | форма, которой принадлежит размещение |
groupObject[PropertyDraw] | группа объектов GroupObject, относительно которой отрисовывается размещение |
propertyDraw[Form, STRING] | размещение с указанной формой и SID |
show[PropertyDraw] / show[PropertyDraw, CustomUser] | статус видимости (PropertyDrawShowStatus: Show, Hide), глобально и для пользователя |
Отображение колонки настраивается глобально и переопределяется для каждого пользователя. Каждая настройка существует в двух параллельных формах — [PropertyDraw] для общего значения приложения и [PropertyDraw, CustomUser] для пользовательского переопределения:
| Свойство | Что хранит |
|---|---|
columnCaption | название колонки |
columnPattern | шаблон форматирования значения |
columnWidth | ширина колонки |
columnFlex | коэффициент растяжения колонки |
columnOrder | позиция колонки |
columnSort | приоритет сортировки среди колонок |
columnAscendingSort | направление сортировки |
inGrid | признак: колонка показана в таблице |
hasUserPreferences[GroupObject] и hasUserPreferences[GroupObject, CustomUser] отмечают группу объектов, у которой настроена раскладка колонок — глобально или для указанного пользователя. При наличии таких настроек вновь добавленное размещение получает статус Hide, чтобы не появляться до явного включения, а настройки сбрасываются, если с формы убраны все показанные колонки.
GroupObject — одна группа объектов на форме; несёт собственные настройки отображения, тоже в общей и пользовательской форме: fontSize, isFontBold, isFontItalic, pageSize (строк на страницу) и headerHeight.
FormGrouping — сохранённая группировка размещений группы объектов: name[FormGrouping], groupObject[FormGrouping], itemQuantity[FormGrouping] и настройки groupOrder / sum / max / pivot для каждого размещения.
Физическая модель
Классы физической модели отражают таблицы базы данных, их ключи и колонки.
| Класс / свойство | Что хранит |
|---|---|
Table | по одному объекту на таблицу |
sid[Table] / table[STRING] | SID таблицы и обратный поиск |
rows[Table] | число строк таблицы |
skipVacuum[Table] | признак: пропускать вакуумирование таблицы |
TableKey | по одному объекту на ключ таблицы; class / classSID / name и оценки строк quantity / quantityTop |
TableColumn | по одному объекту на хранимую колонку, связанную со своим property[TableColumn] |
quantity / notNullQuantity / percentNotNull | всего значений, непустых значений и доля непустых в колонке |
sparseColumns[Table] | число колонок таблицы, у которых percentNotNull меньше 50 |
DropColumn | по одному объекту на колонку, назначенную к удалению; sidTable / sid / time / revision |
Служебные действия выполняют обслуживание таблицы или колонки.
| Действие | Что делает |
|---|---|
recalculateClasses[Table] / checkClasses[Table] | пересчитать / проверить хранимые значения классов таблицы |
recalculateStats[Table] | пересчитать статистику таблицы |
pack[Table] | физически удалить помеченные строки |
recalculateMaterializations[TableColumn] | пересчитать материализованную колонку |
recalculateMaterializationsWithDependencies[TableColumn] / recalculateMaterializationsWithDependents[TableColumn] | то же, включая колонки, из которых она читает / которые читают из неё |
recalculateColumnsMaterializations[Table] | пересчитать все материализованные колонки таблицы |
checkMaterializations[TableColumn] | проверить материализованную колонку против свежего вычисления |
drop[DropColumn] / dropAllColumns[] | физически удалить одну назначенную колонку / все назначенные колонки |
disableClasses, disableStatsTable / disableStatsTableColumn и disableMaterializations — признаки, исключающие таблицу или колонку из соответствующего пересчёта.
Формы
| Форма | Что показывает |
|---|---|
physicalModel | таблицы с ключами и колонками, список удалённых колонок и служебные действия выше |
navigatorElements | дерево навигатора по parent[NavigatorElement] |
forms | группы объектов формы, её отрисовки свойств, пользовательские настройки колонок и группировки |
properties | свойства плоской таблицей и деревом под их группами свойств |
actions | действия плоской таблицей и деревом под их группами свойств |
Все пять форм помещены в папку навигатора metadata внутри системной области Administration.
Язык
- Оператор
RECURSION— вычисляет свойства глубиныlevelпо деревьям групп и навигатора. - Оператор
INTERNAL— стоит за служебными действиями физической модели, реализованными на Java.
Связано
System modules— общий перечень модулей платформы.Навигатор— дерево навигатора, отражаемое классомNavigatorElement.Формы— что такое форма и какForm/PropertyDraw/GroupObjectсоответствуют ей.Таблицы— физические таблицы, отражаемые классамиTable/TableKey/TableColumn.Индексы— индексы таблиц.Материализации— материализованные колонки, пересчитываемые служебными действиями.System— корневой модуль, подключающийся автоматически.Authentication— пользователи и контакты, подключаемые черезREQUIRE; пользовательские настройки форм хранятся поCustomUser.Security— задаёт права доступа на отражаемые здесь элементы навигатора, свойства и действия.Service— служебные действия над отражаемыми здесь таблицами и материализованными колонками.