Активация (ACTIVATE)
Оператор активации создаёт действие, которое делает активным один из элементов формы: свойство (или действие), закладку, форму либо набор объектов в группе объектов формы.
Активация формы, закладки или свойства
Активация формы, закладки или свойства изменяет фокус / выделение в пользовательском интерфейсе:
- Свойство — устанавливает фокус на заданное свойство (или действие) на форме. Применяется к текущей активной форме, которая должна содержать указанное свойство.
- Закладка — выбирает одну из вкладок в заданной панели закладок. Применяется только если форма, которой принадлежит закладка, является активной в момент выполнения действия.
- Форма — активирует заданную форму, если она была открыта у пользователя. Если одна и та же форма была открыта несколько раз, активируется та, которая была открыта первой. Если форма не открыта, действие не имеет эффекта.
Если предусловия активации формы не выполнены (форма не открыта) или закладка не принадлежит активной форме, то действие просто не выполняет никаких изменений. Активация свойства, напротив, рассчитана на вызов из контекста той формы, на которой это свойство находится: при отсутствии формы в контексте действия или при свойстве, не принадлежащем этой форме, поведение не определено.
Активация этих видов переключает только фокус / выделение в пользовательском интерфейсе и не изменяет данные и состав открытых форм: если требуемой формы ещё нет у пользователя, её нужно предварительно открыть (SHOW).
Активация объектов в группе
Активация объектов (поиск) делает заданный набор объектов текущим в указанной группе объектов формы. Объекты, для которых выполняется операция, будем называть объектами поиска.
Направление поиска
Направление поиска определяет, какой набор объектов будет выбран текущим:
- для дополнительных объектов группы (не указанных среди объектов поиска) — выбирается подходящий набор этих объектов;
- для объектов поиска, если искомый набор на форме не найден — выбирается ближайший к искомому.
Направление может принимать одно из четырёх значений:
- Первый (
FIRST) - для дополнительных объектов выбирается первый подходящий набор в соответствии с заданным порядком; для объектов поиска, если искомый набор не найден, — следующий ближайший. - Последний (
LAST) - для дополнительных объектов выбирается последний подходящий набор; для объектов поиска, если искомый набор не найден, — предыдущий ближайший. - Предыдущий (
PREV) - набор объектов, ближайший к предыдущему текущему (до выполнения операции поиска). - Не определено (
NULL) - объекты группы сбрасываются вNULL.
В операторе направление задаётся ключевыми словами FIRST, LAST или NULL; значение PREV явно не указывается. Если ни одно из этих ключевых слов не задано, направление определяется типом объектов по умолчанию, заданным у группы объектов (в том числе PREV). Если тип у группы не задан явно, он выбирается эвристически на основе её фильтров — FIRST для узкого фильтра, иначе PREV.
Установка NULL значений
В операторе также существует возможность сбросить объекты заданной группы в NULL. Опция NULL применима как к форме с группой объектов (с блоком OBJECTS или без него), так и к форме с одиночным объектом (formObjectId = expr): в группе сбрасываются все объекты, кроме явно указанных в операторе, — им присваиваются соответствующие выражения. Направление поиска с NULL не комбинируется.
Язык
Для создания действия используется оператор ACTIVATE.
Примеры
//Форма с двумя закладками
FORM myForm 'Моя форма'
OBJECTS u = CustomUser
PROPERTIES(u) name
OBJECTS c = Chat
PROPERTIES(c) name
;
DESIGN myForm {
NEW tabbedPane FIRST {
tabbed = TRUE;
NEW contacts {
caption = 'Контакты';
MOVE BOX(u);
}
NEW recent {
caption = 'Последние';
MOVE BOX(c);
}
}
}
testAction() {
ACTIVATE FORM myForm;
ACTIVATE TAB myForm.recent;
}
CLASS ReceiptDetail;
barcode = DATA STRING[30] (ReceiptDetail);
quantity = DATA STRING[30] (ReceiptDetail);
FORM POS
OBJECTS d = ReceiptDetail
PROPERTIES(d) barcode, quantityGrid = quantity
;
createReceiptDetail 'Добавить строку продажи'(STRING[30] barcode) {
NEW d = ReceiptDetail {
barcode(d) <- barcode;
ACTIVATE PROPERTY POS.quantityGrid;
}
}
number = DATA INTEGER (Order);
FORM orders
OBJECTS o = Order
PROPERTIES(o) READONLY number, currency, customer
;
newOrder {
NEW new = Order {
number(new) <- (GROUP MAX number(Order o)) (+) 1;
ACTIVATE orders.o = new;
}
}
activateFirst { ACTIVATE FIRST orders.o; }
activateLast { ACTIVATE LAST orders.o; }
EXTEND FORM orders
PROPERTIES(o) newOrder, activateFirst, activateLast
;