Модель#
Основная единица бизнес-логики программы. Декларативное описание сущности/объекта/документа.
Структура#
Структура модели описывается в виде json в файле с расширением .model.json.
-
parent- Задает модель для наследования. В качестве значения устанавливается относительный путь к модели. -
schema- Задает имя схемы для таблицы и представления модели. По умолчанию значение dbo. Поддержка с версии 8.4. -
dbName- Задает связь модели с таблицей в пользовательской базе данных. В качестве значения устанавливается имя таблицы. В примере для модели задана таблица с именем testTable. Обязательный параметр, если нет viewName. -
viewName- Задает связь модели с представлением в пользовательской базе данных. В качестве значения устанавливается имя представления. При установке значения для этого свойства данные считываются из указанного представления, иначе - из указанной таблицы. При изменении данных система работает с таблицей, указанной свойством dbName. В примере свойство не задано, поэтому чтение и изменение данных происходит из таблицы testTable. -
typeName- Задает значение, по которому происходит разделение данных на уровне одной таблицы. Используется свойством typeNameProperty. -
primaryKeyDomain- Задает ключ для генератора уникальных значений. В качестве значения указывается строка. Если значение этого свойства уникально в рамках всех моделей, то порядковый номер указанного первичного ключа модели генерируется только для одной таблицы. Если несколько моделей имеет одинаковое значение для этого свойства, то порядковый номер указанного первичного ключа генерируется для нескольких таблиц. Обязательный параметр. -
primaryKeyProperty- Описывает первичный ключ модели. В качестве значения устанавливается имя свойства модели из словаря properties. Обязательное свойство. -
labelProperty- Задает свойство, значение которого будет использоваться в качестве наименования объекта. Используется обозревателем аналитик в окне поиска для задания отображаемого наименования в контроле Lookup. -
typeNameProperty- Указывает на свойство, используемое для разделения данных на уровне одной таблицы или представления. В качестве значения устанавливается имя свойства модели из словаря properties. Указанное свойство должно быть строкового типа. При установке этого свойства, в колонку, описанную указанным свойством, при сохранении данных модели записывается значение, указанное свойством typeName. При этом чтение данных осуществляется с условием проверки равенства значения в этой колонке значению typeName. В примере при сохранении данных в колонку TypeName таблицы testTable записывается значение "mytest". При чтении данных из таблицы testTable выбираются только те записи, у которых в колонке TypeName значение равно "mytest". -
dateProperty- Указывает на свойство, используемое в качестве расчетной даты. В качестве значения устанавливается имя свойства модели из словаря properties. Указанное свойство должно иметь свойство type, равное "date". -
storeHistory- Флаг, которое отвечает за хранение истории изменения данных в исторической базе. В качестве значения устанавливается булевое значение. По умолчанию значение true. В примере флаг принимает значение true, поэтому при изменении данных в таблице testTable с помощью исторического триггера вся история изменений будет сохраняться в таблице testTable исторической базы. -
displayName- Описывает наименование модели для отображения на вкладках, если оно не переопределено свойствами экранной формы. В качестве значения устанавливается строка. -
description- Задает описание модели. В качестве значения устанавливается строка. -
lock- Флаг, включающий пессимистическое блокирование конкурентного доступа к экземплярам этой модели. Поддержка с версии 8.4. -
rights- Описывает права для данного объекта. Представляет собой объект. Для каждого действия (create, read, update, delete) задается массив ролей, для которых это действие будет доступно. В примере чтение данных доступно только для ролей super и qweqwe, создание и обновление - только для роли super и удаление данных не доступно ни для одной роли. Обязательное свойство. -
readInMirror- если true, то запрос на чтение данных будет выполняться в зеркале БД. По умолчанию значение false. -
useContext- Устаревшее свойство. Рекомендуется использоватьuseSessionContext. Описывает настройки использования пользовательского контекста при работе с данными с помощью этой модели. Представляет собой объект. Для каждого действия (create, read, update, delete) задается булевое значение использовать контекст или нет. По умолчанию для всех действий значение true. В примере при чтении данных использование контекста отключается. Подробнее в статье пользовательский контекст. -
useSessionContext- Описывает настройки использования пользовательского контекста при работе с данными с помощью этой модели. Представляет собой объект. Для каждого действия (create, read, update, delete) задается булевое значение использовать контекст или нет. По умолчанию для всех действий значение true. В примере при чтении данных использование контекста отключается. Подробнее в статье пользовательский контекст.
Свойства модели#
properties- описывает перечень свойств модели. Представляет собой объект. Каждое свойство описывается в виде поля объекта properties, именем которого является имя свойства, а значение - объект с полями dbName, viewName, type. Обязательное свойство.dbName- свойство, которое задает связь свойства модели и колонки таблицы. В качестве значения устанавливается наименование колонки таблицы, заданной свойством dbName модели. Обязательное свойство.viewName- задает связь свойства модели и колонки представления. В качестве значения устанавливается наименование колонки представления, заданного свойством viewName модели. Обязательное свойство.type- задает тип свойства модели. В качестве значения может быть установлено имя типа, которое берется из словаря примитивов и является регистрозависимым значением, относительный путь к файлу модели или строка "this", если в качестве типа свойства модели задается та же самая модель. Обязательное свойство.
translate- если true, свойство модели подлежит локализации. Мигратор автоматически создаст таблицу переводов и добавит в неё текущую колонку.linkedModel- задает модель для создания внешнего ключа (foreign key) при использовании примитивного типа для свойства модели.В качестве значения может быть относительный путь к файлу модели или строка "this", если в качестве типа свойства модели задается та же самая модель.fields- представляет собой массив колонок, которые будут загружаться, если данное свойство является справочником. (доступно с версии ecosoft-lexema8 4.19.0)meta- объект, описывающий дополнительные настройкиformat- задает форматирование данныхanalytics- объект, задающий настройки, используемые обозревателем аналитикeditable- использование свойства при автоматическом построении формы на основе модели в обозревателе аналитик (значение true или false)filterable- использование свойства в окне поиска аналитик (значение true или false)name- задает отображаемое имя в форме обозревателя аналитик
В примере у модели описано 11 свойство, 6 из которых (CDate, WDate, CHost, Whost, CUser, WUser) являются системными, и их можно не описывать для краткости формата. В качестве типа свойства Contractor задана модель contractor, у остальных свойств - примитивный тип.
Дочерние коллекции#
details- Описывает дочерние коллекции модели. Представляет собой объект. Каждая дочерняя коллекция описывается в виде свойства объекта details, именем которого является имя дочерней коллекции, а значение - описание :type- Задает модель для дочерней коллекции. В качестве значения устанавливается относительный путь к файлу модели, либо строкаthis, если в качестве дочерней коллекции модели используется эта же самая модель. Обязательное свойство.foreignKeyProperty- Задает свойство модели дочерней коллекции, по которому строится внешний ключ. В качестве значения устанавливается имя свойства модели дочерней коллекции, тип которого совпадает с типом первичного ключа основной модели. Указанное свойство должно быть описано в модели дочерней коллекции. Обязательное свойство.
В примере для модели simpleModel описана одна дочерняя коллекция с именем Detail на той же самой модели. Для внешнего ключа используется свойство PCode.
Базовые свойства модели#
Модель содержит (может содержать) базовые свойства, обрабатываемы движком Лексемы. Некоторые свойства добавляются в модель всегда и их можно не описывать в свойствах, некоторые свойства необходимо указать.
| Имя | тип | Описание | Обязательное | Необходимо описать в модели |
|---|---|---|---|---|
| CDate | dateTimeOffset | Дата/Время создания документа | Да | Нет |
| WDate | dateTimeOffset | Дата/Время последнего изменения документа | Да | Нет |
| CHost | string | ip-адрес клиента на котором был создан документ | Да | Нет |
| WHost | string | ip-адрес клиента на котором был изменён документ | Да | Нет |
| CUser | string | логин автора документа | Да | Нет |
| WUser | string | логин последнего изменившего документ | Да | Нет |
| COrg | int | Код организации в которой создан документ | Нет | Да |
| WOrg | int | Код организации в которой изменён документ | Нет | Да |
События#
events- Описывает клиентские и sql-серверные события модели. Представляет собой объект из четырех свойств:client-Описывает клиентские события модели. В качестве значения устанавливается относительный путь к js-файлу. В примере для свойства Rate модели назначен обработчик изменения значения.- (Только для версии 8.3)
update, insert, delete- описывают sql-серверные события модели. В качестве значения устанавливается относительный путь к sql-файлу. В примере задаётся запрос для события обновления записи (update).
Примеры#
Пример simpleModel.model.json
В примере описание модели имеет пустые или необязательные значения, поэтому ее можно привести к следующему виду:
Пример. simpleModel.model.json
События изменения свойств#
Пример
События моделей#
Наследование#
Механизм создания новых моделей путем модификации существующей. Чтобы отнаследоваться от модели, необходимо указать в атрибуте parent относительный путь к файлу этой модели. Описание этой модели переопределяется или расширяется описание текущей модели и получается результирующая. То есть, если в новой модели есть атрибут, которого нет в родительской, то в результате получаем описание родительской модели, дополненной новыми атрибутами. Если в новой модели описать атрибут со значением, отличным от значения этого же атрибута в родительской модели, то в результате получим описание родительской модели с переопределенным значением этого атрибута. Ниже представлены примеры работы механизма наследования.
Примеры описание модели ./product.model.json
Примеры описание модели с наследованием
Примеры результирующая модель
Ограничение загрузки свойств модели#
Для свойства, построенного на другой модели, можно ограничить перечень загружаемых полей (для увеличения скорости загрузки модели). Для этого в свойстве в поле fields, необходимо указать перечень загружаемых свойств. Всегда загружается поле - ключ для модели (чаще всего это VCode).
Информация
Ограничение загрузки полей выполняется на уровне sql-запроса. То есть лишние поля отсутствуют в sql-запросе при загрузке модели, что может существенно ускорить его выполнение.
При ограничении не будут загружаться, если не указаны в fields, системные поля (WDate, WUser, ....).
Пример
Свойство ObjectField построено на той же модели. Но при загрузке в него загрузятся свойства VCode, Name.