Перейти к основному содержимому

Генерация экранных форм на основе класса модели данных

Для ускорения разработки приложения вы можете сгенерировать типовые экранные формы на основе классов модели данных. На основе каждого класса вы можете сгенерировать пару экранных форм: табличную экранную форму — для отображения данных экземпляров класса и карточную экранную форму — для просмотра, создания, редактирования и удаления данных экземпляра класса. Генерация пары экранных форм этих типов позволяет реализовать интерфейс для выполнения CRUD-операций с данными в базе данных, например, для работы со справочниками в разрабатываемом приложении. Типы компонентов на сгенерированной карточной экранной форме соответствуют типам атрибутов класса модели данных, а количество компонентов соответствует количеству атрибутов класса. Количество столбцов таблицы на табличной экранной форме также соответствует количеству атрибутов класса. Если класс связан с другими классами связью многие-к-одному, количество компонентов на карточной экранной форме и количество столбцов таблицы на табличной экранной форме увеличивается на количество связей такого типа.

Соответствие типов атрибутов класса типам компонентов экранных форм показано в следующей таблице.

Тип атрибута классаКомпонент экранной формы
integerInput с возможностью ввода чисел
MoneyInput с возможностью ввода чисел
enumSelect с вариантами согласно значениям enum
dateTimeCalendar с форматом ввода согласно параметрам, указанным для атрибута dateTime
booleanCheckbox

Если класс связан с другим классом связью многие-к-одному, на карточной экранной форме создается компонент Select. В процессе генерации экранных форм на основе класса со связью многие-к-одному можно выбрать один атрибут связанного класса, значения которого будут отображаться на обеих экранных формах вместо значений идентификаторов объектов целевого класса. Таким образом, на карточной экранной форме в качестве значений вариантов раскрывающегося списка будут использоваться значения выбранного атрибута. Например, предположим, что в приложении Электронная Библиотека созданы классы Book и Author, между которыми установлена связь многие-к-одному: многие экземпляры класса Book связаны с одним экземпляром класса Author. Затем предположим, что при генерации экранных форм на основе класса Book выбран атрибут Name (имя автора книги). Тогда имена авторов книги будут отображаться на табличной экранной форме в столбце с именем связи между классами и на карточной экранной форме в раскрывающемся списке. Если при генерации экранных форм ни один из атрибутов класса не выбран, на обеих экранных формах будут отображаться значения идентификаторов объектов целевого класса. Тип значений идентификатора определяется типом уникального идентификатора, указанным при создании связанного класса.

Вы можете изменить сгенерированные экранные формы, чтобы они максимально соответствовали макетам и бизнес-требованиям к разрабатываемому приложению.

Вы запускаете генерацию экранных форм из интерфейса Редактора Модели Данных. DevTools выполняет определенные действия, в результате чего проект изменяется следующим образом:

  • В папке containers создается папка с именем, соответствующим псевдониму класса, на основе которого генерируются экранные формы. Если папка с таким именем уже существует, новая папка получает имя согласно следующему шаблону: <псевдоним класса>_<индекс>, например, Book_1. В папке создаются файлы описания экранных форм со следующими именами:

    • <имя папки>Page.mdcontainer: описывает табличную экранную форму типа Page.
    • <имя папки>Form.mdcontainer: описывает карточную экранную форму типа PartView.
  • В файле Actions.mdschema создает действия типа GraphQL для выполнения следующих операций с данными класса:

    • Get<псевдоним класса>_<идентификатор>: получение данных класса;
    • Create<псевдоним класса>_<идентификатор>: создание экземпляра класса;
    • Update<псевдоним класса>_<идентификатор>: изменение данных экземпляра класса;
    • Delete<псевдоним класса>_<идентификатор>: удаление экземпляра класса.
  • Для экранной формы <имя папки>page.mdcontainer создается источник данных с именем Get<псевдоним класса>. В параметрах этого источника данных на вкладке Общие указано действие Get<псевдоним класса>_<идентификатор>, а на вкладке События указаны следующие действия:

    • Create<псевдоним класса>_<идентификатор>;
    • Update<псевдоним класса>_<идентификатор>;
    • Delete<псевдоним класса>_<идентификатор>.
  • На экранной форме <имя папки>page.mdcontainer в обработчик события OnRowClick() компонента DataGrid записывается код, реализующий логику вызова экранной формы <имя папки>form.mdcontainer.

  • На экранной форме <имя папки>form.mdcontainer в обработчик события OnClick() компонента Button записывается код, реализующий создание, изменение и удаление экземпляра класса.

Чтобы сгенерировать экранные формы на основе класса модели данных:

  1. В проекте выберите файл DataModel.mdmodel.

  2. На боковой панели нажмите значок UG_settings_icon.png и выберите раздел Классы.

  3. Выберите класс, на основе которого вы хотите сгенерировать экранные формы.

  4. Справа от имени класса нажмите значок UG_generate_form_icon.png (Сгенерировать экранные формы).

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

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

    DevTools генерирует экранные формы. В папке containers отображается папка <псевдоним выбранного класса> с файлами сгенерированных экранных форм.

    В файл Actions.mdschema добавляются описания действий типа GraphQL для получения, создания, изменения и удаления данных класса.

    Для экранной формы <псевдоним выбранного класса>Page создается источник данных. Эта экранная форма содержит таблицу, отображаемую компонентом DataGrid. Имена столбцов таблицы соответствуют именам атрибутов выбранного класса. Имя столбца, представляющего созданный при связывании классов атрибут, соответствует имени связи между классами.

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

Теперь вы можете перейти к изменению сгенерированных экранных форм, например, изменить CSS-стили компонентов, или оставить экранные формы без изменений, если они соответствуют вашим ожиданиям относительно дизайна и выполняемых функций.