Brief: формы
Структура формы
Форма — универсальный элемент, описывающий, какие объекты и какие свойства для них читаются. Объявляется инструкцией FORM и состоит из блоков:
OBJECTS— объекты формы с классами; объекты в одних скобках образуют группу объектов, наборы которой являются их декартовым произведением;PROPERTIES— свойства и действия, которым передаются объекты формы;FILTERS— свойства-условия: остаются наборы объектов со значением неNULL;ORDERS— сортировка наборов объектов;FILTERGROUP— фильтры, из которых пользователь выбирает один активный;TREE— несколько групп объектов, показываемых одной таблицей-деревом.
FORM orders
OBJECTS o = Order
PROPERTIES(o) date, number
OBJECTS d = OrderDetail
PROPERTIES(d) nameSku, quantity
FILTERS order(d) = o
;
Аналогия: запрос SELECT сразу по нескольким наборам строк, каждый со своей выборкой. Подробно — структура формы.
Интерактивное представление
В интерактивном представлении пользователь работает с открытой формой: выбирает текущие объекты, меняет первичные свойства, вызывает действия. Данные читаются по мере необходимости, изменения сразу видны. Группа объектов показывается таблицей или панелью, и только группы, перечисленные в блоке TREE, объединяются в одно дерево; фильтры и сортировки пользователь может добавлять сам.
Свойство отображается ровно в одной группе объектов — своей группе отображения, по умолчанию последней из тех, чьи объекты ему переданы. Свойство, у которого группы отображения нет вовсе, — например, свойство без параметров — попадает в PANEL верхнего уровня формы, а в представлении TOOLBAR — в TOOLBARBOX.
Какое представление используется, задается не в форме, а в операторе ее открытия, поэтому одна форма обслуживает их все. Расположение компонентов на экране задает дизайн формы, см. Brief: дизайн форм.
Печатное представление
Печатное представление — одно из двух статичных: все данные читаются на момент открытия, обратной связи нет. Группы объектов выстраиваются в иерархию: свойства родительской группы выводятся по разу на каждый её собственный набор объектов, под ним идут соответствующие наборы дочерней, и затем всё повторяется для следующего набора. Файл получается из этого, только если задан формат; без него отчет отрисовывается интерактивно — показывается пользователю, уходит на принтер или доставляется сообщением. Группы объектов выстраиваются в иерархию — свойства родительской группы выводятся один раз, дочерней — для всех ее наборов объектов.
На выходе PDF, DOC, DOCX, XLS, XLSX, HTML, RTF: предпросмотр, печать на принтере или файл. Макет описывает дизайн отчета — файл-шаблон .jrxml, который ищется по каноническому имени формы; если шаблон не найден, платформа строит дизайн автоматически по структуре формы (Brief: отчеты).
Структурированное представление
Структурированное представление — второе статичное после печатного: оно читает все данные на момент открытия формы и берет иерархию ее групп объектов — свойства родительской группы по разу на каждый ЕЕ СОБСТВЕННЫЙ набор объектов, а под ним вложены соответствующие наборы дочерней, — но записанная как данные, а не как страница — JSON, XML, CSV, DBF, XLS, XLSX, TABLE.
Форма задает и структуру, в которую данные записываются, и структуру, из которой они читаются. При чтении форматы те же, только для Excel ключевое слово одно, XLS, и оно принимает файлы и .xls, и .xlsx. Что это означает для каждого направления — в Brief: экспорт данных и Brief: импорт данных.
Открытие формы (SHOW, DIALOG, PRINT, EXPORT)
Оператор открытия формы создает действие, которое открывает форму в выбранном представлении.
| Оператор | Представление | Назначение |
|---|---|---|
SHOW | интерактивное | показать форму пользователю |
DIALOG | интерактивное | то же плюс возврат текущего значения объекта как введенного значения |
PRINT | печатное | отчет: предпросмотр, печать или файл |
EXPORT | структурированное | выгрузка данных формы в файл |
Оператор IMPORT форму не открывает: он разбирает файл и пишет значения в свойства формы так, чтобы обратная выгрузка этой формы воспроизвела исходный файл (импорт формы).
selectSku (OrderDetail d) { DIALOG skus OBJECTS s INPUT DO sku(d) <- s; }
printOrder (Order o) { PRINT printOrder OBJECTS o = o XLSX TO orderFile; }
Передача объектов и режим открытия
Блок OBJECTS оператора открытия передает форме значения объектов: в интерактивном представлении переданное значение становится текущим объектом, в статичном — добавляется фильтр на равенство ему. По умолчанию NULL среди передаваемых значений отменяет действие; ключевое слово NULL после значения это разрешает, а для объекта DIALOG, помеченного INPUT или CHANGE, разрешено автоматически.
У SHOW и DIALOG дополнительно задается расположение формы — FLOAT, DOCKED, EMBEDDED, POPUP, IN. У SHOW есть опция WAIT / NOWAIT; у DIALOG такой опции нет, и он выполняется синхронно всякий раз, когда его результат используется — блоком DO / ELSE или обратной записью CHANGE.
Подробно — Открытие формы. Форма открывается также выбором пункта навигатора, см. Brief: навигатор.