Инструкция FORM
Инструкция FORM - создание формы.
Синтаксис
FORM name [caption] formOptions
formBlock1
...
formBlockN
;
После указания имени и заголовка формы в произвольном порядке указываются опции формы formOptions:
imageSetting
LOCALASYNC
После опций формы описываются в произвольном порядке блоки формы formBlock1 ... formBlockN:
[EXTEND] FORMS formItem1, ..., formItemN
OBJECTS ...
TREE ...
PROPERTIES ...
FILTERS ...
[EXTEND] FILTERGROUP ...
ORDERS ...
PIVOT ...
[EVENTS] ...
HINTNOUPDATE LIST propertyId1, ..., propertyIdN
HINTTABLE LIST propertyId1, ..., propertyIdN
REPORT propertyExpression
REPORTS reportPath1, ..., reportPathN
FORMEXTID extID
EDIT className OBJECT objectName
LIST className OBJECT objectName
CUSTOMS apiItem1, ..., apiItemN
Где каждый formItem имеет следующий синтаксис:
[alias =] formName [(mappingBlock1 ... mappingBlockM)]
Где каждый mappingBlock имеет следующий синтаксис:
mappingType [newName1 = oldName1, ..., newNameK = oldNameK]
Где каждый reportPath имеет один из следующих синтаксисов:
TOP propertyExpression
groupObjectName propertyExpression
Где каждый apiItem имеет следующий синтаксис:
[apiName =] [ACTION] propertyId
Описание
Инструкция FORM объявляет новую форму и добавляет ее в текущий модуль. Кроме того эта инструкция позволяет описать структуру формы, а также ее статичное и частично интерактивное (за исключением дизайна формы) представление. В начале инструкции задаются имя и заголовки, затем указываются опции формы, а затем объявление содержит произвольное количество блоков, описывающих структуру формы. Их можно использовать в любом порядке, при условии, что каждый блок объявляется позже блоков, элементы которых он использует. Каждый блок может использоваться произвольное количество раз.
Параметры
-
nameИмя формы. Простой идентификатор. Имя должно быть уникально в пределах текущего пространства имен.
-
captionЗаголовок формы. Строковый литерал. Если заголовок не задан, то заголовком формы будет являться ее имя.
Опции формы (formOptions)
-
imageSettingНастройка иконки формы. Эта опция позволяет настроить отображение иконки вручную. Может иметь один из двух видов:
-
IMAGE [imageLiteral]Указание иконки формы. Если
imageLiteralне указывается, то происходит переключение в режим автоматической установки иконки.-
imageLiteralСтроковый литерал, значение которого определяет иконку.
-
-
NOIMAGEКлючевое слово, указывающее на то, что иконка формы должна отсутствовать.
-
-
LOCALASYNCКлючевое слово, указывающее на то, что обработки локальных событий будут выполняться после отображения изменений на форме.
Блоки формы (formBlock1 ... formBlockN)
-
[EXTEND] FORMS formItem1, ..., formItemNВстраивает в форму содержимое перечисленных ранее объявленных форм: их объекты, группы объектов и деревья, свойства и действия, фильтры и группы фильтров, сортировки, события, хинты (
HINTNOUPDATE,HINTTABLE), а также дизайн. Встроенные элементы сохраняют свои имена, и к ним можно обращаться в последующих блоках этой формы, а также в инструкцияхEXTEND FORMиDESIGNтак же, как к объявленным явно.Без ключевого слова
EXTENDвсе элементы встраиваемой формы добавляются как новые, а ее дизайн добавляется отдельным блоком в контейнерOBJECTSдизайна по умолчанию текущей формы. Контейнеры дизайна по умолчанию встраиваемой формы при этом получают имена с суффиксом(FORM f), гдеf- этоalias, а если он не задан - имя встраиваемой формы; к таким контейнерам можно обращаться в инструкцииDESIGN(напримерBOX(FORM f)).С ключевым словом
EXTENDэлементы встраиваемой формы, для которых на текущей форме уже есть элементы с такими же именами, не добавляются как новые, а отождествляются с ними: содержимое и настройки элемента встраиваемой формы переносятся на существующий элемент, а ссылки на него из остальных встраиваемых элементов переадресуются. Сопоставление по именам выполняется для объектов, свойств и действий, групп фильтров и контейнеров дизайна; автоматически создаваемые элементы (например, контейнеры группы объектов) следуют за элементами, которым они принадлежат. Дизайн при этом сливается с дизайном текущей формы.-
aliasИмя, которое используется вместо имени встраиваемой формы в суффиксе имен контейнеров ее дизайна (в частности, позволяет различать контейнеры при встраивании одной и той же формы несколько раз). Простой идентификатор. Учитывается только без ключевого слова
EXTEND. -
formNameИмя встраиваемой формы. Составной идентификатор.
-
mappingTypeТип сопоставляемых элементов в блоке сопоставления
mappingBlock. Задается одним из ключевых слов:OBJECTS- объектыPROPERTIES- свойства и действия на формеFILTERGROUPS- группы фильтровDESIGN- компоненты дизайна
С ключевым словом
EXTENDэлементы типов, для которых блок сопоставления не задан, сопоставляются автоматически по совпадению имен; явно заданный блок отключает автоматическое сопоставление для элементов своего типа. -
newName1 = oldName1, ..., newNameK = oldNameKСписок пар сопоставления; имена задаются простыми идентификаторами.
oldName- имя элемента на встраиваемой форме,newName- имя на текущей форме. Если элемент с именемnewNameна текущей форме уже существует, элемент встраиваемой формы отождествляется с ним, иначе - встраивается под именемnewName.
-
-
OBJECTS ...Добавляет объекты на форму. Синтаксис блока объектов.
-
TREE ...Добавляет дерево объектов на форму. Синтаксис блока дерева объектов.
-
PROPERTIES ...Добавляет свойства и действия на форму. Синтаксис блока свойств и действий.
-
FILTERS ...Добавляет фиксированные фильтры на форму. Синтаксис блока фиксированных фильтров.
-
[EXTEND] FILTERGROUP ...Добавляет группу фильтров на форму либо расширяет существующую. Синтаксис блока группы фильтров.
-
ORDERS ...Добавляет сортировки на форму. Синтаксис блока сортировок.
-
PIVOT ...Устанавливает начальные настройки вида представления сводная таблица. Синтаксис блока сводных таблиц.
-
[EVENTS] ...Устанавливает действия, выполняемые при определенных событиях. Синтаксис блока событий.
-
HINTNOUPDATE LIST propertyId1, ..., propertyIdNПомечает, что закэшированные значения перечисленных свойств не должны обновляться при изменениях в сессии этой формы.
-
propertyId1, ..., propertyIdNСписок идентификаторов свойств.
-
-
HINTTABLE LIST propertyId1, ..., propertyIdNПомечает, что изменения перечисленных свойств при чтении данных этой формой должны материализовываться во временную таблицу. Список задается так же, как в блоке
HINTNOUPDATE. -
FORMEXTID extIDУказание имени, которое будет использоваться для экспорта / импорта этой формы. Используется только в структурированном представлении.
-
extIdСтроковый литерал.
-
-
REPORT propertyExpressionУказание свойства, значение которого будет использовано в качестве имени файла отчета для пустой группы. В качестве параметров можно использовать имена уже объявленных объектов на форме. Предполагается, что значения этих объектов будут переданы при открытии формы в печатном представлении (если этого не будет сделано, они будут считаться равными
NULL).-
propertyExpression
-
-
REPORTS reportPath1, ..., reportPathNУказание свойств, значения которых будут использоваться в качестве имен файлов отчета для групп объектов формы. Вместо ключевого слова
REPORTSможно использовать его синонимREPORTFILES.-
TOPКлючевое слово, при указании которого свойство задается для пустой группы. Полностью аналогично блоку
REPORT. -
groupObjectNameИмя группы объектов, для которой задается свойство. Задается простым идентификатором. Группа объектов при этом помечается как отдельный отчет. Полностью аналогично опции
SUBREPORTблока объектов. -
propertyExpression
-
-
EDIT className OBJECT objectNameУстанавливает текущую форму в качестве формы редактирования объектов указанного класса.
-
classNameИмя пользовательского класса, при редактировании объектов которого будет вызываться описываемая форма. Задается составным идентификатором.
-
objectNameИмя объекта формы, который будет использоваться для редактирования. Задается простым идентификатором.
-
-
LIST className OBJECT objectNameУстанавливает текущую форму в качестве формы выбора объекта указанного класса.
-
classNameИмя пользовательского класса, для выбора объекта которого будет вызываться описываемая форма. Задается составным идентификатором.
-
objectNameИмя объекта формы, текущее значение которого будет использоваться в качестве выбираемого объекта. Задается простым идентификатором.
-
-
CUSTOMS apiItem1, ..., apiItemNЗадает список свойств и действий, которые разрешено вызывать из клиентского JavaScript-кода формы независимо от общих настроек доступа к API (настройка
enableAPI, аннотация@@api). Каждый элемент доступен под именемapiName, а если оно не задано - под собственным именем свойства (действия) без пространства имен. Имена элементов должны быть уникальны в пределах формы.-
apiNameИмя, под которым свойство (действие) будет доступно в клиентском коде. Простой идентификатор.
-
ACTIONКлючевое слово. Если задано, то считается, что в
propertyIdзадается действие. Если не задано, первоначально считается, что задается свойство, и только если оно не найдено - действие. -
propertyId
-
Примеры
CLASS Document;
// объявляем форму Документы
FORM documents 'Документы'
// Добавляем один объект класса Document, по этому имени объект будет доступен в операторах
// DESIGN, SHOW, EXPORT, DIALOG и др.
OBJECTS d = Document
// ... добавляем свойства и фильтры на форму
// помечаем что данная форма должна использоваться, когда необходимо выбрать документ,
// при этом объект d должен использоваться как возвращаемое значение
LIST Document OBJECT d
;
CLASS Item;
// объявляем форму Товар
FORM item 'Товар'
// добавляем объект класса Item и помечаем, что он должен отображаться в панель
// (то есть видимо только одно значение)
OBJECTS i = Item PANEL
// ... добавляем свойства и фильтры на форму
// помечаем что данная форма должна использоваться, когда необходимо добавлять или редактировать товар
EDIT Item OBJECT i
;
// объявляем форму со списком Товаров
FORM items 'Товары'
OBJECTS i = Item
// ... добавляем свойства и фильтры на форму
// добавляем кнопки, которые будут создавать и редактировать товар, используя форму item
PROPERTIES(i) NEWSESSION NEW, EDIT
;
CLASS Invoice;
CLASS InvoiceDetail;
// объявляем форму печати инвойса
FORM printInvoice
OBJECTS i = Invoice // добавляем объект класса инвойс, для которого будет идти печать
// ... добавляем свойства и фильтры на форму
;
// разбиваем определение формы на две инструкции (вторую инструкцию можно перенести в другой модуль)
EXTEND FORM printInvoice
// добавляем строки инвойса, каждая из которых будет использоваться в отчете в качестве детализации
OBJECTS d = InvoiceDetail
// ... добавляем свойства и фильтры на форму
// задаем файл отчета для группы объектов d, помечая ее как отдельный отчет
REPORTS d 'printInvoiceDetail.jrxml'
;
// объявляем действие , при выполнении которого будет открываться форма печати инвойса
print (Invoice invoice) { PRINT printInvoice OBJECTS i = invoice; }
CLASS Customer;
name = DATA ISTRING[100] (Customer);
FORM customers 'Покупатели'
OBJECTS c = Customer
PROPERTIES(c) name
;
// встраиваем список покупателей в другую форму
FORM customerBoard 'Покупатели и заказы'
FORMS cust = customers
;
// объявляем расширенную копию формы customers
FORM customersExt 'Покупатели (расширенная)'
EXTEND FORMS customers
// объект c унаследован от формы customers
PROPERTIES(c) NEWSESSION NEW, DELETE
;