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

Оператор SHOW

Оператор SHOW создаёт действие, открывающее форму в интерактивном представлении.

Синтаксис​

SHOW [formId =] target
[formActionOptions]
[{initActionOperator}]

Где target — одна из двух форм. Именная форма открывает ранее объявленную форму:

formName [OBJECTS objName1 = expr1 [NULL], ..., objNameN = exprN [NULL]]

а классовая форма открывает форму выбора или редактирования класса:

classFormType className = expr [NULL]

А formActionOptions — произвольная комбинация следующих опций в любом порядке:

FILTERS filterExpr1, ..., filterExprM
syncType
windowType
manageSessionType
sessionScopeType
cancelType
READONLY
CHECK
ACTIVATE [USER]

Где windowType — одно из:

FLOAT
WINDOW [windowName]
EMBEDDED
POPUP
IN containerName

Описание​

Оператор SHOW создаёт действие, которое открывает указанную форму. Блок OBJECTS задаёт начальные значения объектам формы (в классовой форме та же роль у единственного = expr, относящегося к единственному объекту формы, который неявно имеет имя object и может быть использован под этим именем внутри выражений FILTERS). Внутри formActionOptions опция FILTERS прикрепляет дополнительные фильтры, вычисляемые из контекста вызова; остальные опции управляют поведением открытия — потоком, расположением, сессией, видимостью системных действий и другими модификаторами. Завершающий блок {initActionOperator} выполняется один раз при открытии формы.

Параметры​

  • formId

    Строковый литерал - метка, которую несёт открытая форма и по которой к ней обращаются последующие действия: ACTIVATE FORM и CLOSE FORM. Одну и ту же метку могут нести несколько открытых форм: CLOSE FORM запрашивает закрытие каждой из них, а ACTIVATE FORM активирует первую найденную в окнах FORMS. По умолчанию открытая форма метки не несёт.

  • formName

    Имя формы. Составной идентификатор.

  • classFormType

    Тип открывающейся классовой формы. Задаётся одним из ключевых слов:

    • LIST — форма выбора (списка)
    • EDIT — форма редактирования
  • className

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

  • objName1, ..., objNameN

    Имена объектов формы, для которых задаются начальные значения. Простые идентификаторы.

  • expr, expr1, ..., exprN

    Выражения, значения которых используются как начальные значения соответствующих объектов формы.

  • NULL после начального значения

    Ключевое слово. Разрешает передаче начального значения быть NULL. По умолчанию, если какое-либо передаваемое значение равно NULL, действие пропускается, и управление передаётся следующему действию. Переданный NULL не становится значением объекта: он равносилен отсутствию значения, и текущим становится объект по умолчанию группы.

  • initActionOperator

    Контекстно-зависимый оператор-действие, выполняющийся при открытии формы, после обработчиков EVENTS ON INIT формы.

Опции​

  • filterExpr1, ..., filterExprM

    Непустой список выражений, задающих дополнительные фильтры, применяемые к форме. Каждое выражение может использовать как параметры контекста вызова, так и собственные объекты формы.

  • syncType

    Режим управления потоком. Одно из:

    • WAIT — синхронный (ожидать закрытия формы)
    • NOWAIT — асинхронный (продолжить сразу после открытия)

    По умолчанию платформа выбирает WAIT, если вызов сам сделан из модальной формы, если в этом же вызове далее потребуются дополнительные обращения к сессии или если выбранный тип окна сам модальный (FLOAT, EMBEDDED, POPUP); иначе — NOWAIT.

  • windowType

    Расположение формы: FLOAT показывает форму как плавающее окно, WINDOW — как закладку в системном окне форм System.forms или в окне FORMS, которое называет windowName, — так форма рисуется шапкой или боковой панелью, — EMBEDDED и POPUP — как встроенные редакторы, IN помещает форму внутрь containerName — компонента дизайна, квалифицированного формой (имя формы, за которым следует путь к компоненту внутри дизайна этой формы), который должен быть контейнером. По умолчанию в синхронном режиме используется FLOAT, в асинхронном — WINDOW. В синхронном режиме закладка WINDOW до своего закрытия блокирует форму, из которой открыта, а из формы, показанной окном, показывается окном, как FLOAT: чтобы из формы, показанной окном, открыть именно закладку, укажите NOWAIT.

    • windowName

      Имя окна, в которое помещается форма. Составной идентификатор окна, объявленного как WINDOW ... FORMS; любое другое окно — ошибка. Мобильный веб-клиент и десктоп-клиент рисуют одно окно System.forms, поэтому там форма открывается в System.forms, закладкой.

  • manageSessionType

    Переопределяет, считается ли открываемая форма собственником сессии. Одно из:

    • MANAGESESSION — принудительно собственник
    • NOMANAGESESSION — принудительно не собственник

    По умолчанию форма становится собственником сессии только если на момент открытия у сессии не было другого собственника.

  • sessionScopeType

    Сессия, в которой открывается форма. Одно из:

    • NEWSESSION — новая сессия верхнего уровня
    • NESTEDSESSION — новая вложенная сессия
    • THISSESSION — текущая сессия (по умолчанию)
  • cancelType

    Переопределяет, отображать ли системное действие Отменить (System.formCancel[]) на форме. Одно из:

    • CANCEL — принудительно показать
    • NOCANCEL — принудительно скрыть

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

  • READONLY

    Ключевое слово. Если указано, форма открывается в режиме только для чтения.

  • CHECK

    Ключевое слово. Если указано, при нажатии пользователем системного действия OK (System.formOk[]) платформа сначала валидирует ожидающие применения изменения сессии (выполняет проход apply — ограничения, агрегации, обработчики событий — без фиксации); форма закрывается только если валидация прошла успешно, иначе остаётся открытой.

  • ACTIVATE

    Ключевое слово. Если указано и та же форма уже открыта в этом окне с той же меткой formId, активируется она, а вторая не показывается; уже открытая форма показывается как есть. Открытие без formId означает форму, открытую без метки, а не любую из них. Так как уже открытая форма показывается без изменений, ACTIVATE указывается только вместе с WINDOW и NOWAIT и не указывается вместе с OBJECTS, FILTERS, READONLY, CHECK, опцией сессии, опцией отмены и блоком инициализации - они относятся к открываемой форме, и применить их было бы некуда.

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

    Такая ранняя активация выполняется для действия, запущенного из навигатора - щелчком или клавишей привязки, - для действия, которое свойство выполняет при обычном изменении или по привязке, если изменение не передаёт значение, и, в веб-клиенте, для события формы. Она не выполняется для значения, которое передаёт пользовательское представление (изменение из CUSTOM-отрисовщика, changeProperty контроллера React), для вставки и для действия, которое пользовательское представление запускает по имени: там форма создаётся на сервере и закрывается клиентом при получении, как описано ниже.

    Решение о повторном использовании принимается при вызове действия. Если после этого форма закрывается, это открытие не создаёт её заново. Активация сохраняется, даже если действие отклонено или не дошло до этого SHOW.

    Если ранней активации не было, клиент повторяет проверку при получении новой формы. Если соответствующая форма к этому моменту уже открыта, клиент активирует её и закрывает новую; в этом случае события инициализации и закрытия новой формы выполняются.

    Добавленное USER оставляет выбор пользователю: форма активируется, только пока ему запрещены дублирующиеся формы (настройка forbidDuplicateForms), а при вызове действия из навигатора удерживаемый Ctrl всё равно открывает второй экземпляр. Без USER ни настройка, ни Ctrl этого не меняют. USER - это то, что делает элемент формы в навигаторе.

Примеры​

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 { MESSAGE 'On init'; };

// открытие в новой сессии как плавающее окно с новым объектом в качестве текущего
NEWSESSION {
NEW s = Sku {
SHOW sku OBJECTS s = s FLOAT;
}
}

// открытие именной формы со значениями панели, дополнительным фильтром и идентификатором экземпляра
SHOW 'recentOrders' = showForm OBJECTS dateFrom = 2024_01_01, dateTo = 2024_12_31 FILTERS number(o) > 1000 NOWAIT;

// открытие формы выбора класса Sku, сфокусированной на конкретном sku
NEW s = Sku { SHOW LIST Sku = s; }
}