Введение#
Модель - основная единица бизнес-логики программы. Декларативное описание сущности/объекта/документа. Это описание данных, которые хранятся в БД (таблица в которой хранятся данные, свойства, которые хранятся в таблице и т.д.). Каждая модель описывается в отдельном файле в json формате. Файл должен иметь формат: «Имя_модели.model.json». Как правило все они располагаются в каталоге проекта models.
Создание модели#
Создание модели заключается в её описании с помощью файла в формате json и использовании функционала обновления БД для создания требующихся для модели объектов БД.
В качестве примера описания простой модели будет использована модель city.model.json.
Отрывок содержимого файла:
Свойства#
| Наименование | Тип | Описание | Обязат. |
|---|---|---|---|
| parent | строка | задает модель для наследования. В качестве значения устанавливается относительный путь к модели. | nan |
| schema | строка | задает имя схемы для таблицы и представления модели. По умолчанию значение dbo. | nan |
| dbName | строка | задает связь модели с таблицей в пользовательской базе данных. В качестве значения устанавливается имя таблицы. В примере для модели задана таблица с именем testTable. | Да |
| viewName | строка | задает связь модели с представлением в пользовательской базе данных. В качестве значения устанавливается имя представления. При установке значения для этого свойства данные считываются из указанного представления, иначе - из указанной таблицы. При изменении данных система работает с таблицей, указанной свойством dbName. В примере свойство не задано, поэтому чтение и изменение данных происходит из таблицы testTable. | nan |
| typeName | строка | задает значение, по которому происходит разделение данных на уровне одной таблицы. Используется свойством typeNameProperty. | nan |
| primaryKeyDomain | строка | задает ключ для генератора уникальных значений. В качестве значения указывается строка. Если значение этого свойства уникально в рамках всех моделей, то порядковый номер указанного первичного ключа модели генерируется только для одной таблицы. Если несколько моделей имеет одинаковое значение для этого свойства, то порядковый номер указанного первичного ключа генерируется для нескольких таблиц. | Да |
| primaryKeyProperty | строка | описывает первичный ключ модели. В качестве значения устанавливается имя свойства модели из словаря properties. | Да |
| labelProperty | строка | задает свойство, значение которого будет использоваться в качестве наименования объекта. Используется обозревателем аналитик в окне поиска для задания отображаемого наименования в контроле Lookup. | nan |
| typeNameProperty | строка | указывает на свойство, используемое для разделения данных на уровне одной таблицы или представления. В качестве значения устанавливается имя свойства модели из словаря properties. Указанное свойство должно быть строкового типа. При установке этого свойства, в колонку, описанную указанным свойством, при сохранении данных модели записывается значение, указанное свойством typeName. При этом чтение данных осуществляется с условием проверки равенства значения в этой колонке значению typeName. В примере при сохранении данных в колонку TypeName таблицы testTable записывается значение "mytest". При чтении данных из таблицы testTable выбираются только те записи, у которых в колонке TypeName значение равно "mytest". | nan |
| dateProperty | строка | указывает на свойство, используемое в качестве расчетной даты. В качестве значения устанавливается имя свойства модели из словаря properties. Указанное свойство должно иметь свойство type, равное "date". | nan |
| storeHistory | bool | флаг, которое отвечает за хранение истории изменения данных в исторической базе. В качестве значения устанавливается булевое значение. По умолчанию значение true. В примере флаг принимает значение true, поэтому при изменении данных в таблице testTable с помощью исторического триггера вся история изменений будет сохраняться в таблице testTable исторической базы. | nan |
| displayName | строка | описывает наименование модели для отображения на вкладках, если оно не переопределено свойствами экранной формы. В качестве значения устанавливается строка. | nan |
| description | строка | задает описание модели. В качестве значения устанавливается строка. | nan |
| lock | bool | флаг, включающий пессимистическое блокирование конкурентного доступа к экземплярам этой модели. Поддержка с версии 8.4. | nan |
| rights | объект | описывает права для данного объекта. Представляет собой объект. Для каждого действия (create, read, update, delete) задается массив ролей, для которых это действие будет доступно. В примере чтение данных доступно только для ролей super и qweqwe, создание и обновление - только для роли super и удаление данных не доступно ни для одной роли. | Да |
| useContext | строка | описывает настройки использования пользовательского контекста при работе с данными с помощью этой модели. Представляет собой объект. Для каждого действия (create, read, update, delete) задается булевое значение использовать контекст или нет. По умолчанию для всех действий значение true. В примере при чтении данных использование контекста отключается. | nan |
| properties | массив | описывает перечень свойств модели. Представляет собой объект. Каждое свойство описывается в виде поля объекта properties, именем которого является имя свойства, а значение - объект с полями dbName, viewName, type. | Да |
Детализация свойств#
Properties#
Массив свойств модели (колонки в таблице/представлении). Каждое свойство описывается объектом, который может содержать свойства:
| Наименование | Тип | Описание |
|---|---|---|
| dbName | строка | свойство, которое задает связь свойства модели и колонки таблицы. В качестве значения устанавливается наименование колонки таблицы, заданной свойством dbName модели. |
| viewName | строка | задает связь свойства модели и колонки представления. В качестве значения устанавливается наименование колонки представления, заданного свойством viewName модели. |
| type | строка | задает тип свойства модели. В качестве значения может быть установлено имя типа, которое берется из словаря примитивов и является регистрозависимым значением, относительный путь к файлу модели или строка "this", если в качестве типа свойства модели задается та же самая модель. Обязательное свойство. |
Модель всегда содержит свойства: CDate, WDate, CHost, Whost, CUser, WUser.
Список примитивных типов, доступных в системе для задания типов свойств модели и параметров запросов:
| Наименование | Описание |
|---|---|
| bigint | Тип bigint в БД |
| bool | Тип BIT в БД |
| date | Тип date в БД |
| dateTime | Тип dateTime в БД |
| dateTimeOffset | Тип dateTimeOffset в БД |
| double | Тип double в БД |
| file | Тип uniqueidentifeir в БД. Является ссылкой на файл в хранилище файлов. |
| int | Тип int в БД |
| longstring | Тип varchar(max) в БД |
| money | Тип money в БД |
| string | Тип varchar(255) в БД |
| time | Тип time в БД |
| tinyint | Тип tinyint в БД |
| varbinary(max) | Тип varbinary(max) в БД |
| uuid | Тип uniqueidentifeir в БД |
Пример#
Дочерняя коллекция (детейл)#
Документ может содержать табличную часть, представляющую собой массив из записей, представленных какой-то моделью. Например, документ прайс- лист, он содержит поле с датой актуальности и табличную часть со списком товаров и их цен на актуальную дату.
Для связи табличной части с шапкой документа принято использовать поле PCode (Parent code, родительский код), он содержит ссылку на код документа.
Регистрация табличной части (их может быть несколько) происходит в свойстве модели details. Это объект, который содержит описание детейлов модели в виде свойств. Каждое описание должно содержать свойство type (ссылка на табличную модель) и foreignKeyProperty (свойство в табличной модели, которое будет ссылаться на текущий документ).
Пример:
Модель документа прайс-лист, табличная часть только одна – Detail, которая смотрит на модель PriceListDetail.model.json и связывается по полю PCode. Файл модели PriceList.model.json.
Файл модели PriceListDetail.model.json.