Перейти к основному содержимому
Версия: 7.0

Блок событий

Блоки событий инструкции FORM - набор конструкций, управляющих событиями в интерактивном представлении формы.

Синтаксис

[EVENTS] formEventDecl1, ..., formEventDeclN

Где каждый formEventDecli имеет следующий синтаксис:

ON eventType [replaceMode] eventAction

Где eventType — одна из следующих форм:

INIT
OK [eventPhase]
APPLY [eventPhase]
CANCEL
CLOSE
DROP
CHANGE objName
[CHANGE] OBJECT objName
[CHANGE] groupObjectEvent groupObjectName
[CHANGE] FILTERGROUPS filterGroupName
[CHANGE] FILTERS PROPERTY formPropertyName
[CHANGE] PROPERTY [eventPhase] formPropertyName
QUERYOK
QUERYCLOSE
containerEvent componentSelector
SCHEDULE PERIOD intPeriod [FIXED]

Где eventAction — одна из следующих форм:

eventActionId(param1, ..., paramK)
{ eventActionOperator }

Описание

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

Параметры

  • objName

    Имя объекта на форме. Простой идентификатор.

  • groupObjectName

    Имя группы объектов на форме. Простой идентификатор.

  • filterGroupName

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

  • formPropertyName

    Имя свойства на форме.

  • componentSelector

    Селектор компонента дизайна.

  • groupObjectEvent

    Одно из FILTER, ORDER, FILTERS, ORDERS.

  • containerEvent

    Одно из EXPAND, COLLAPSE, TAB.

  • eventPhase

    Одно из BEFORE, AFTER. Если опущено в OK / APPLY, обработчик выполняется на самом событии; если опущено в PROPERTY, задаётся единственный обработчик события CHANGE для свойства (см. replaceMode).

  • intPeriod

    Период планировщика в секундах (целочисленный литерал).

  • FIXED

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

  • replaceMode

    Управляет тем, замещает ли обработчик ранее заданные обработчики этого события или добавляется к ним. REPLACE замещает все ранее заданные для события обработчики; NOREPLACE добавляет обработчик к ним. Если не указано, по умолчанию используется REPLACE для QUERYOK и QUERYCLOSE и NOREPLACE для всех остальных событий. replaceMode не применяется к простой форме события PROPERTY (без BEFORE / AFTER) — она всегда замещает свой единственный обработчик.

  • eventActionId

    Идентификатор действия, которое будет являться обработчиком события.

  • param1, ..., paramK

    Список параметров действия. Каждый параметр задается именем объекта формы. Имя объекта, в свою очередь, задается простым идентификатором.

  • eventActionOperator

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

Примеры

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();

ACTIVATE POS.r = r;
}
}

// расширяем форму обработчиком ON INIT, чтобы при её открытии createReceipt создавал новый чек
// и сразу делал его текущим объектом на форме
EXTEND FORM POS
EVENTS
// при открытии формы выполняем действие по созданию нового чека, которое заполняет смену,
// кассира и прочую информацию
ON INIT createReceipt()
// применять каждые 60 секунд
ON SCHEDULE PERIOD 60 FIXED apply();
;