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

В интерактивном представлении (SHOW, DIALOG)

Этот оператор создает действие, которое открывает форму в интерактивном представлении.

Управление потоком

Существует два режима работы оператора:

  • Синхронный (WAIT) - ожидает момента, пока пользователь не закроет форму, и только после этого, записав все результаты выполнения, передает управление следующему за ним действию.
  • Асинхронный (NOWAIT) - передает управление следующему за ним действию сразу после открытия формы на клиенте.

Если режим не задан явно, платформа выбирает его автоматически: оператор работает синхронно, если открываемая форма показывается в модальном расположении, если форма, из которой она открывается, сама модальна, или если текущая сессия ещё может использоваться после этого действия; в противном случае - асинхронно.

Расположение формы

Открываемая форма может быть показана одним из следующих способов:

  • Как окно (FLOAT) - форма показывается в виде плавающего окна.
  • Как закладка (DOCKED) - форма открывается в виде закладки в системном окне System.forms.
  • Как встроенная форма (EMBEDDED) - форма показывается встроенной в форму, из которой она открывается.
  • Как всплывающая форма (POPUP) - форма показывается в плавающем всплывающем окне, привязанном к элементу, из которого она открывается.
  • В контейнере (IN) - форма встраивается в заданный контейнер формы, из которой она открывается.

По умолчанию, в синхронном режиме работы форма показывается как окно, а в асинхронном - как закладка.

к сведению

В текущей реализации платформы плавающее окно, встроенная форма и всплывающая форма модальны; закладка и форма в контейнере - нет. Именно эту модальность платформа использует, когда выбирает режим автоматически (см. выше).

Управление системными действиями

По умолчанию в интерактивном представлении платформа автоматически определяет, какие системные действия управления жизненным циклом формы / сессии показывать, а какие нет. Но так как эти условия в определенной степени эвристичны, у разработчика существует возможность при открытии формы явно задать действия, которые необходимо показывать, при помощи соответствующего набора опций. Аналогично, при помощи соответствующей опции, можно задать является форма собственником сессии, в которой она открывается или нет.

Диалоговая форма

Также в этом операторе существует возможность вернуть последнее текущее значение заданного объекта (или, при необходимости, нескольких объектов), и тем самым, по сути, осуществить ввод значения. Отменой ввода при этом считается закрытие пользователем формы при помощи System.formClose (а не System.formOk).

При вводе значения иногда бывает необходимо не только выбрать значение из списка, но и дать возможность пользователю вернуть значение NULL. Для этого в диалоговой форме есть специальная опция, задав которую, на форме появится специальное действие Сбросить (System.formDrop). Соответственно, вызов этого действия закрывает форму, и возвращает в качестве результата значение NULL.

Также как и в остальных операторах ввода значения, в диалоговой форме этого оператора можно:

Кроме того, если ввод значения осуществляется для изменения заданного свойства, часто бывает необходимо уже на этапе выбора значений показывать пользователю не все наборы объектов, а только те, выбор (и последующие изменение) которых не нарушит существующие в системе ограничения. Соответственно, чтобы разработчику не приходилось копировать форму и вручную добавлять ей необходимый фильтр, платформа сама по умолчанию генерирует и добавляет на форму соответствующие фильтры (впрочем, при необходимости, это поведение можно отключить при помощи специальной опции).

Диалоговая форма оператора доступна только в синхронном режиме.

Дополнительные возможности

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

Кроме того, при вызове формы можно указать, что при её закрытии через System.formOk сначала должны проверяться все ограничения, и при нарушении любого из них форма не закрывается.

Также при вызове формы можно указать, что она должна открываться в новой (вложенной) сессии. При этом передача объектов и ввод значения будут выполняться в текущей сессии (соответственно эту опцию имеет смысл использовать, только если необходимо передавать объекты и/или вводить значение, так как в противном случае, логичнее использовать непосредственно оператор новой сессии).

Язык

Для открытия формы в интерактивном представлении используется оператор SHOW. Для показа формы в режиме диалога используется оператор DIALOG.

Примеры

date = DATA DATE (Order);
FORM showForm
OBJECTS dateFrom = DATE, dateTo = DATE PANEL
PROPERTIES VALUE(dateFrom), VALUE(dateTo)

OBJECTS o = Order
FILTERS date(o) >= dateFrom, date(o) <= dateTo
;

testShow () {
SHOW showForm OBJECTS dateFrom = 2010_01_01, dateTo = 2010_12_31;

NEWSESSION {
NEW s = Sku {
SHOW sku OBJECTS s = s FLOAT;
}
}
}
FORM selectSku
OBJECTS s = Sku
PROPERTIES(s) id
;

testDialog {
DIALOG selectSku OBJECTS s INPUT DO {
MESSAGE 'Selected sku : ' + id(s);
}
}

sku = DATA Sku (OrderDetail);
idSku (OrderDetail d) = id(sku(d));

changeSku (OrderDetail d) {
DIALOG selectSku OBJECTS s = sku(d) CHANGE;

//равносильно первому варианту
DIALOG selectSku OBJECTS s = sku(d) INPUT NULL CONSTRAINTFILTER DO {
sku(d) <- s;
}
}