Оператор ACTIVATE
Оператор ACTIVATE - создание действия, которое активирует один из элементов формы: указанную форму, закладку, свойство (или действие) на форме либо набор объектов в группе объектов формы.
Синтаксис
ACTIVATE FORM formAddress
ACTIVATE TAB formName.componentSelector
ACTIVATE PROPERTY formPropertyId
ACTIVATE [seekDirection] formObjectId = expr
ACTIVATE [seekDirection] formGroupObjectId [OBJECTS formObject1 = expr1, ..., formObjectK = exprK]
Где formAddress - одно из:
[formLabel =] formName [WINDOW windowName]
formLabel [WINDOW windowName]
WINDOW windowName
Описание
Синтаксис оператора ACTIVATE зависит от вида активируемого элемента.
Активация формы, закладки или свойства
Формы ACTIVATE FORM, ACTIVATE TAB и ACTIVATE PROPERTY создают действие, которое активизирует форму, закладку или свойство (действие) на форме. Действие не имеет параметров и не использует контекст. Поведение определяется ключевым словом:
FORM— активирует у пользователя первую форму, названную адресом, среди форм, открытых в окнахFORMS(в виде запроса клиенту). Адрес называет форму любым сочетанием метки, с которой она была открыта, её имени и окна, в которое она была открыта; хотя бы одно из трёх должно быть указано, а неуказанная часть адрес не сужает. Если подходит несколько форм, окна перебираются по очереди,System.formsпервым, а внутри окна формы - в порядке открытия. Если адрес не называет ни одной открытой формы, действие не имеет эффекта.TAB— делает указанную закладку активной в соответствующей панели закладок. Активация закладки выполняется только в том случае, если указанная форма в момент выполнения действия является активной (тот же вызов на неактивной форме не имеет эффекта). Закладка не активируется, если она является пустым контейнером (без дочерних элементов).PROPERTY— переводит фокус на указанное свойство или действие, отображаемое на текущей активной форме. Для успешного выполнения указанное свойство должно находиться на форме, выполняющей действие.
Активация объектов в группе
Формы ACTIVATE ... formObjectId = expr и ACTIVATE ... formGroupObjectId [OBJECTS ...] создают действие, выполняющее активацию объектов в группе. В первом варианте указывается искомое значение одиночного объекта на форме (этот объект может находиться в составе некоторой группы объектов), во втором — конкретная группа объектов и искомые значения для некоторых её объектов (будем называть их объектами поиска).
Параметры
-
formLabelСтроковый литерал - метка, с которой форма была открыта оператором
SHOW. Если не указана, активируется форма с любой меткой. -
formNameИмя формы. Составной идентификатор. Внутри
formAddress, если не указано, активируется форма с любым именем. -
windowNameИмя окна
FORMS, в которое была открыта форма. Составной идентификатор. Если не указано, форма ищется во всех окнах. Мобильный веб-клиент и десктоп-клиент, которые рисуют одно окноSystem.forms, эту часть не учитывают. -
componentSelectorСелектор компонента дизайна. Компонент должен быть закладкой панели вкладок (то есть находиться внутри контейнера со свойством
tabbed = TRUE). -
formPropertyIdГлобальный идентификатор свойства или действия на форме, на которое должен перейти фокус.
-
seekDirectionОпция. Задаёт направление поиска. Возможные значения:
FIRST- для дополнительных объектов выбирается первый подходящий набор; для объектов поиска, если искомый набор не найден, выбирается следующий ближайший.LAST- для дополнительных объектов выбирается последний подходящий набор; для объектов поиска, если искомый набор не найден, выбирается предыдущий ближайший.NULL- текущие значения объектов указанной группы сбрасываются вNULL. Для формы с одиночным объектом и для формы с блокомOBJECTSсбрасываются все объекты группы, не указанные явно в операторе (в том числе дополнительные); явно указанным объектам присваиваются переданные выражения.
Если опция не указана, используется тип объектов по умолчанию, заданный у группы объектов (значение
PREVявно в операторе не указывается). -
formObjectIdГлобальный идентификатор объекта на форме, для которого указывается искомое значение.
-
exprВыражение, значением которого является искомое значение объекта на форме.
-
formGroupObjectIdГлобальный идентификатор группы объектов, для объектов которой указываются искомые значения.
-
formObject1 ... formObjectKСписок имён объектов на форме. Может содержать только часть объектов указанной группы объектов. Имя объекта задаётся простым идентификатором.
-
expr1 ... exprKСписок выражений, значения которых являются искомыми значениями соответствующих объектов в указанной группе объектов.
Примеры
//Форма с двумя закладками
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;
}
WINDOW workspace FORMS;
showOrders() { SHOW 'main' = orders WINDOW workspace NOWAIT; }
// одна и та же форма может быть открыта не один раз, и метка говорит, какая из них нужна
backToMain() { ACTIVATE FORM 'main' = orders WINDOW workspace; }
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
;