Блок событий
Блоки событий инструкции FORM
- набор конструкций, управляющих событиями в интерактивном представлении формы.
Синтаксис
EVENTS formEventDecl1, ..., formEventDeclN
Где каждый formEventDecli
имеет следующий синтаксис:
ON eventType eventActionId(param1, ..., paramK) | { eventActionOperator }
Описание
Блок событий позволяет задать обработчики событий формы, которые возникают в результате определенных действий пользователя. В одном блоке можно через запятую указать произвольное количество обработчиков событий. Если для события указывается несколько обработчиков, то они гарантированно будут выполняться в порядке их задания.
Параметры
eventType
Тип события формы. Задается одним из следующих ключевых слов:
INIT
OK
OK BEFORE
OK AFTER
APPLY
APPLY BEFORE
APPLY AFTER
CANCEL
CLOSE
DROP
CHANGE objName
- указывает, что действие должно быть выполнено при изменении значения объекта с именемobjName.
QUERYOK
QUERYCANCEL
SCHEDULE PERIOD intPeriod [FIXED]
- создаёт планировщик, выполняющий действие каждыеintPeriod
секунд. Ключевое словоFIXED
указывает на то, что период до следующего действия отсчитывается от старта текущего действия. По умолчанию период отсчитывается от окончания текущего действия.
eventActionId
Идентификатор действия, которое будет являться обработчиком события.
param1, ..., paramK
Список параметров действия. Каждый параметр задается именем объекта формы. Имя объекта, в свою очередь, задается простым идентификатором.
actionOperator
Контекстно-зависимый оператор-действие. В качестве параметров этого оператора можно использовать имена уже объявленных объектов на форме.
Примеры
showImpossibleMessage() { MESSAGE 'It\'s impossible'; };
posted = DATA BOOLEAN (Invoice);
FORM invoice 'Инвойс' // создаем форму по редактированию инвойса
OBJECTS i = Invoice PANEL // создаем объект класса инвойс
// ... задаем остальное поведение формы
EVENTS
// указываем, что при нажатии пользователем OK должно выполняться действия,
// которое выполнит действия по "проведению" данного инвойса
ON OK { posted(i) <- TRUE; },
// по нажатию кнопки formDrop выдаем сообщение, что такого не может быть, так как эта кнопка
// по умолчанию будет показываться только в форме по выбору инвойса, а эта форма по сути
// является формой редактирования инвойса
ON DROP showImpossibleMessage()
;
CLASS Shift;
currentShift = DATA Shift();
CLASS Cashier;
currentCashier = DATA Cashier();
CLASS Receipt;
shift = DATA Shift (Receipt);
cashier = DATA Cashier (Receipt);
FORM POS 'POS' // объявляем форму для продажи товара покупателю в торговом зале
OBJECTS r = Receipt PANEL // добавляем объект, в котором будет храниться текущий чек
// ... объявляем поведение формы
;
createReceipt () {
NEW r = Receipt {
shift(r) <- currentShift();
cashier(r) <- currentCashier();
SEEK POS.r = r;
}
}
// добавляем свойство через расширение формы, чтобы можно было сделать SEEK к уже созданному объекту на форме
EXTEND FORM POS
EVENTS
// при открытии формы выполняем действие по созданию нового чека, которое заполняет смену,
// кассира и прочую информацию
ON INIT createReceipt()
;