Перейти к основному содержимому
Версия: 7.0

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 — служебные действия над отражаемыми здесь таблицами и материализованными колонками.