Создание документа на основе модели

Материал из Lexema.ru
Перейти к: навигация, поиск

Документ является базовым элементом Lexema.ru, из операций с документами строятся все бизнес-процессы в системе. Создание документа, как и многие другие операции, осуществляется с помощью моделера приложения и требует авторизации. Понятие документа в системе включает модель и экранную форму (одну или несколько). В большинстве случаев документы создаются на основе модели, иногда на основе представления БД ("вьюшки") или запроса. Как правило, на основе модели создаются две экранных формы - реестр (список документов) и форма для редактирования одного документа.

Процесс создания документа на основе модели включает следующие действия:

  1. Создание модели и её полей
  2. Обновление БД (миграция)
  3. Создание экранной формы для редактирования документа и реестра документов
  4. Предоставление прав на созданные объекты (модель, экранных формы) одной или нескольким ролям пользователей
  5. Создание ссылки на реестр в меню приложения

Создание модели и её полей

Для работы с моделями в дереве навигации выберите раздел «Модели» и пункт с тем же именем:

NavTree1.png

Примечание: если дерево навигации отсутствует на экране: оно было скрыто, для его отображения нажмите кнопку ArrowBtn.png или выберите раздел «Мои документы». Panel1.png

Нажмите кнопку «Создать документ» на панели инструментов на вкладке «Документ» или кнопку «Insert» на клавиатуре. Введите имя модели (документа), соблюдая правила именования объектов. Имя таблицы и PrimaryKeyDomain будут автоматически заполнены заданным именем модели, при необходимости их можно скорректировать. В списке «Пространство имен» необходимо выбрать пункт, соответствующий проекту, в рамках которого создаётся модель. Если вы затрудняетесь с выбором, необходимо указать пункт «1 | Base» (базовое пространство имён).

Model head props.png

Создание полей модели

По умолчанию при создании новой модели генерируются следующие служебные поля:

  • VCode - уникальный идентификатор (суррогатный первичный ключ) модели/таблицы;
  • CDate - дата создания записи;
  • CHost - имя хоста (узла сети), с которого была создана запись;
  • CUser - имя учётной записи (логин) пользователя, который создал запись;
  • WDate - дата последнего изменения записи;
  • WHost - имя хоста, с которого было произведено последнее изменение записи;
  • WUser - имя учётной записи пользователя, который произвёл последнее изменение записи;
  • COrg - код организации холдинга, в рамках которой была создана запись;
  • WOrg - код организации холдинга, в рамках которой было произведено последнее изменение записи;

Параметры служебных полей доступны только для чтения, изменять их нельзя. Также не рекомендуется их удалять.

Для каждого поля модели необходимо ввести имя в колонке Name, соблюдая правила именования. Имя поля таблицы БД в колонке DbName будет автоматически заполнено таким же именем. При необходимости DbName можно изменить. Колонка DbName может быть не заполнена для вычисляемых ("вьюшечных") полей. Если с моделью связано представление БД (вьюшка), то в колонке ViewName можно задать имя поля вьюшки.

Каждому полю необходимо задать тип данных (группа колонок Type). Типы разделяются на базовые и справочники. От выбранного типа поля модели зависит вид элемента управления в экранной форме.

Базовые типы:

  • int - целочисленное значение
  • bigint - длинное целое, применяется для хранения ключевых полей (идентификаторов, кодов) моделей
  • string - короткая строка (до 255 символов), соответствующий тип MS SQL - varchar(255)
  • longstring - длинная строка, соответствующий тип MS SQL - varchar(max)
  • money - тип данных для хранения значений денежных сумм
  • double - вещественный тип данных
  • bool - значение логического типа. В экранных формах элементом управления, соответствующим полю типа bool, является флажок (CheckBox)
  • Date - дата
  • DateTimeOffset - дата и время с учетом часового пояса
  • File - ссылка на файл. В экранных формах элементом управления, соответствующим полю типа File, является интерфейс для загрузки, просмотра и скачивания файлов.

Помимо базовых типов, поле может являться ссылкой (внешним ключом) на запись в другой таблице (справочнике). Для создания ссылки необходимо выбрать в списке имя типа данных, соответствующего модели. В БД такое поле имеет тип bigint. В экранной форме для данного поля будет создан выпадающий список (Lookup), содержащий значения из связанной модели.

Рекомендуется также ввести краткие описания полей в столбце Description, это является хорошим стилем разработки и упрощает процесс командной работы.

Примечание: наименование модели и её полей должны быть англоязычными. Перевод англоязычных терминов, использованных в наименовании, следует внести в Словарь типовых терминов.

Model fields.png

Сохраните модель, нажав на кнопку «Сохранить» или «Сохранить и закрыть».

Обновление БД (миграция)

После создания модели необходимо произвести обновление БД, в результате которого будут сгенерирваны и выполнены SQL-скрипты для создания и/или изменения объектов БД (таблиц, первичных и внешних ключей, ограничений, триггеров. Этот процесс требуется для синхронизации описания моделей бизнес-логики приложения и структуры таблиц физической БД.

Для осуществления данной операции в дереве навигации откройте раздел «Система» и выберите пункт «Обновление БД». Необходимо корректно сформировать строку подключения к серверу БД, которая включает следующие параметры:

  • Server - IP-адрес или символьное имя сервера БД, на котором расположена база с пользовательскими данными
  • Database - имя БД пользовательских данных
  • Id - логин учётной записи СУБД MS SQL Server, обладающей правами на выполнение соответствующих запросов
  • Password - пароль указанной учётной записи

Пример строки подключения: Server=192.168.0.2\sql;Database=L8_TestData;User Id=sa;Password=TopSecret;

После ввода строки подключения необходимо нажать кнопку "Обновить содержание". В результате в таблице на экране будет отображён список объектов БД, подлежащих обновлению.

По умолчанию выводятся объекты всех пользователей системы, однако существует возможность отобразить только свои изменения. Для удобства работы список может быть отфильтрован по имени хоста (узла сети), на котором было произведено создание или последнее изменение объекта. Для фильтрации необходимо заполнить следующие поля перед нажатием на кнопку "Обновить содержание":

  • CHost - имя хоста, на котором было произведено создание объектов
  • WHost - имя хоста, на котором было произведено последнее изменение объектов

Интерфейс обновления БД содержит три вкладки:

  • Пользовательские объекты
  • Системные объекты
  • Объекты исторической базы

Список объектов, подлежащих обновлению, может быть скорректирован - из него могут быть удалены записи.

Для удобства работы список может быть сгруппирован по одному или нескольким полям. Для группировки по колонке необходимо перетащить её заголовок в соответствующую область в шапке таблицы.

Update db.png

Для завершения операции обновления БД необходимо нажать на кнопку "Запустить миграцию" на панели инструментов. В результате будут выполнены все запросы, показанные в списке в столбце "Скрипт".

Создание экранных форм

Экранные формы необходимы пользователям системы для работы с документами. Как правило, для большинства документов требуется две ЭФ - форма для редактирования и реестр. Эти две ЭФ для одного документа взаимосвязаны между собой, для упрощения создания связей вначале рекомендуется создать форму для редактирования, а затем - реестр.

Для создания экранной формы для редактирования документа в дереве навигации откройте раздел «Представления» и выберите пункт «Экранные формы». Нажмите кнопку «Создать документ» на панели инструментов на вкладке «Документ» или кнопку «Insert» на клавиатуре. В диалоговом окне выберите из списка "Платформа" пункт "JsControls", укажите пункт «Модель (документ)», выберите из списка имя созданной ранее модели. Оставьте отмеченной флажок «Создать типовой интерфейс».

Create view dialog.png

Имя экранной формы будет сгенерировано автоматически на основе имени модели путём добавления Form в конце (например, для модели TestModel имя ЭФ - TestModelForm). Введите описание созданной формы в соответствующее поле.

NewForm.png

Сохраните созданное представление с помощью кнопки "Сохранить" на панели инструментов "Документ". Разверните дерево элементов экранной формы и ознакомьтесь с его структурой. Подробнее эта структура и принципы работы с элементами описаны в статье "Работа с элементами экранной формы". Закройте экранную форму, нажав на кнопку "Сохранить и закрыть".

Создание реестра и его связь с формой редактирования

После создания и сохранения формы для редактирования документа, необходимо создать экранную форму реестра. Для этого необходимо в окне "Экранные формы" нажать кнопку "Создать документ" и заполнить следующие поля:

  • выбрать тип - "Модель (реестр)"
  • выбрать название модели
  • выбрать название экранной формы для редактирования, созданной ранее

CreateRegistryDialog.png

Имя созданного реестра будет сгенерировано автоматически на основе имени модели путём добавления Registry в конце (например, для модели TestModel имя ЭФ - TestModelRegistry). Введите описание созданной формы в соответствующее поле.

Важно! Для создания корректной связи между формой для редактирования и реестром необходимо заполнить поле "Связанная ЭФ", выбрав из списка соответствующее значение.

NewRegistryFields.png

Форму для редактирования также необходимо привязать к реестру, для этого её нужно открыть из списка экранный форм и заполнить поле "Связанная ЭФ", выбрав из списка имя созданного реестра:

LinkedForm.png

Предоставление прав на созданные объекты

Для предоставления пользователям возможности работать с документом необходимо настроить параметры доступа ко всем используемым объектам - экранным формам, моделям и запросам. В системе Lexema.ru разделение прав доступа к объектам осуществляется на основе ролей пользователей. Для работы с этим механизмом необходимо в дереве навигации открыть раздел «Администрирование прав доступа», пункт «Роли». В списке ролей выбрать необходимую роль (например, роль Super). Откройте роль на редактирование с помощью кнопки «Открыть документ на изменение» или двойным щелчком мышки на строке.

RolesList.png

Интерфейс администрирования прав доступа состоит из четырёх вкладок:

  • Элементы управления
  • Модели
  • Запросы
  • Вложенные роли

Предоставление прав доступа к экранным формам

На вкладке "Элементы управления" в списке документов найдите названия созданных представлений (новые документы, как правило, отображаются в конце списка). Выделите строку с названием формы реестра (например, TestModelRegistry).

RightsList.png

В дереве элементов справа можно задать права на доступ к элементам экранной формы. Для предоставления полного доступа ко всей форме нажмите правой кнопкой мышки на элемент RootItem и выберите в контекстном меню пункт «2 – Активность».

RightsForm.png

Повторите действия по предоставлению полного доступа для второй экранной формы документа.

Предоставление прав доступа к модели

На вкладке "Модели" необходимо перейти в конец списка, в колонке "Model - Наименование" ввести название созданной ранее модели. Поля VCode, Namespace и GlobalId заполнятся автоматически. Для предоставления текущей роли прав на создание, чтение, изменение и удаление записей модели необходимо соответствующим образом установить или снять галочки в столбцах Create, Read, Update и Delete. Если модель отсутствует в списке, по умолчанию роль не обладает никакими правами доступа к записям модели.

PermissionsOnModel.png

Права на доступ роли к запросам предоставляется аналогичным образом.

После добавления прав доступа сохраните изменения и закройте документ роли, нажав на кнопку "Сохранить" или "Сохранить и закрыть".

Создание пункта меню для открытия реестра документов

Меню в системе Lexema.ru имеет древовидную иерархическую структуру: пункты меню распределены по категориям. Для работы с созданным документом необходимо создать пункт (элемент) меню в существующей категории, либо создать для него новую категорию меню.

Создание новой группы (категории) меню

Для создания новой группы меню необходимо в дереве навигации в категории "Меню" выбрать пункт "Группы". Далее нажать кнопку "Создать документ". В открывшемся окне необходимо ввести название группы - оно будет отображаться в главном меню системы. Затем необходимо сохранить новую группу, нажав кнопку "Сохранить".

NewMenuGroup.png

Добавление пункта (элемента) меню

Для добавления пункта меню необходимо в табличной части новой или существующей группы в колонке Name указать название пункта меню, а в поле View выбрать созданный ранее реестр.

NewMenuItem.png

Для того, чтобы сделанные изменения вступили в силу, необходимо нажать кнопку "Сохранить", либо "Сохранить и закрыть"

Проверка работоспособности созданного документа

Для проверки работоспособности созданного документа необходимо открыть в браузере страницу системы и авторизоваться (ввести логин и пароль). В главном меню в области "Мои документы" следует раскрыть соответствующую категорию и нажать на пункт меню.

MainMenu.png

В открывшемся реестре нажмите кнопку "Создать" - в результате будет отображена форма редактирования документа. Введите данные в поля формы, нажмите кнопку "Сохранить и закрыть" на панели инструментов.

DocForm.png

Следует отметить, что по умолчанию система генерирует англоязычные надписи для элементов управления в форме редактирования и реестре, а также отображает некоторые системные поля. В реальных документах следует переименовывать надписи и удалять лишние элементы управления для служебных полей (код и т.п.).

В результате сохранения документа в реестре отобразиться созданная запись.

TestRegistry.png

Если все вышеперечисленные действия выполнились успешно, значит документ был создан верно.

Настройка параметров отображения формы и её элементов

Параметры отображения формы и её элементов управления, установленные по умолчанию при генерации, как правило, не являются оптимальными. Для более корректного отображения форм рекомендуется:

  • в реестре:
    • проверить задана ли связанная ЭФ. При необходимости выбрать в этом списке форму для редактирования данного документа
    • задать заголовок формы (свойство title элемента RootItem)
    • переименовать заголовок таблицы AnaliticalGrid (свойство caption) - ввести название на русском языке
    • переименовать заголовки полей таблицы AnaliticalGrid - ввести значения на русском языке
    • удалить ненужные поля из таблицы реестра
    • поменять порядок полей
    • изменить ширину колонок
  • в экранной форме для редактирования:
    • проверить задана ли связанная ЭФ. При необходимости выбрать в этом списке реестр данного документа
    • задать заголовок формы (свойство title элемента RootItem)
    • удалить поле VCode (его редактирование вручную не предполагается)
    • переименовать заголовки полей формы
    • изменить ширину полей в зависимости от размеров содержимого
    • для полей типа longstring удалить текстовое поле (TextBox) и создать многострочное текстовое поле типа Memo

Обновление страницы после изменения экранной формы

После любого изменения элементов бизнес-логики (моделей, экранных форм, скриптов и т.д.) требуется перезагрузка страницы с очисткой кеша. Для этого следуйте инструкциям из соответствующего раздела руководства.

Указание заголовка формы

В моделере приложения откройте экранную форму (категория "Представления", пункт "Экранные формы"). В дереве элементов формы выберите RootItem. В окне свойств добавьте свойство title, в поле "Значение" введите текст заголовка формы:

SetFormTitle.png

Этот текст будет отображаться в названии вкладки браузера и в названии вкладки приложения:

FormTitleDemo.png

Переименование полей экранной формы

В соответствии с правилами именования объектов имена полей моделей называются на английском языке. После автоматической генерации интерфейса по умолчанию подписи элементов управления формы и заголовки колонок реестра совпадают с именами полей модели. Т.к. англоязычные подписи на форме, как правило, неприемлемы, необходимо их изменить на русскоязычные. Для этого в моделере приложения откройте экранную форму (категория "Представления", пункт "Экранные формы"). В дереве элементов формы выберите поле, подпись которого нужно поменять. В окне свойств в строке caption измените значение на русскоязычное:

RenameFieldInForm.png

Проделайте аналогичные действия для всех полей. В результате на форме в браузере подписи полей станут русскоязычными:

RusCaptionsDemo.png

Элементы экранных форм размещаются в группах LayoutGroup. У группы также может быть добавлено и задано свойство caption.

Переименование полей реестра

В целом данный процесс аналогичен переименованию полей формы, однако, свойство-заголовок колонки таблицы реестра (AnalyticalGrid) называется Text:

RenameFieldsInRegistry.png

Подписи служебных полей "Дата создания", "Дата изменения" и т.п. по умолчанию называются по-русски при генерации, в их изменении нет необходимости.

В результате имена колонок таблицы реестра отображаются на русском языке:

RusCaptionsInRegistry.png

Удаление полей формы и реестра

При автоматической генерации элементов управления формы на основе модели по умолчанию создаются элементы для редактирования системных полей - VCode, COrg, WOrg и т.п. Наличие этих полей в форме редактирования нецелесообразно, т.к. их значения заполняются автоматически.

Для удаления этих элементов в моделере приложения откройте экранную форму (категория "Представления", пункт "Экранные формы"). В дереве элементов формы выберите поле, которое необходимо удалить, нажмите правую кнопку мыши. В контекстном меню выберите пункт "Удалить":

DeleteFormWidget.png

Удаление полей из реестра осуществляется аналогичным образом. Однако, в реестре поле VCode рекомендуется оставить.

Добавление полей в форму

Если вы случайно удалили нужное поле, его можно повторно добавить. Для этого в дереве выберите группу элементов (LayoutGroup), нажмите правую кнопку мыши. В контекстном меню выберите подменю "Добавить свойство модели", в нём выберите поле, которое необходимо добавить:

AddFieldToForm.png

Замена поля типа TextBox на Memo

Поля моделей могут иметь тип longstring - длинная строка, тип БД - varchar(max), применяется для хранения описания, примечаний, комментариев и т.п. По умолчанию при генерации интерфейса для таких полей создаются элементы типа TextBox - однострочное текстовое поле. Целесообразно заменить его на многострочное - Memo. Для этого выберите текстовое поле, которое нужно заменить, нажмите правую кнопку мыши. В контекстном меню выберите пункт "Удалить". Затем выделите группу (LayoutGroup), в которую необходимо добавить поле, нажмите правую кнопку мыши, в контекстном меню выберите пункт "Добавить компонент" - "Memo". Для созданного элемента заполните свойство bind (привязка) - введите имя поля модели, к которому должен быть привязан элемент (например, value:Comment). Создайте и введите значения для следующих свойств:

  • caption - заголовок элемента
  • width - ширина поля в пикселах
  • controlRows - высота поля в строках