====== Заголовок описания экранной формы ====== [[start:|lss]] | [[form-definition]] ===== Введение ===== Заголовок содержит основные описатели [[form-definition|экранной формы]]. [[form-definition|Экранная форма]] может быть модальной или не модальной. У модальной формы (**modal="1"**) надо задать размеры - высоту и ширину (**width**, **height**), в процентах от размера экрана или пикселях. Не модальная [[form-definition|экранная форма]] размещается во вкладках, на всю ширину экрана, вместе другими открытыми не модальными [[form-definition|экранными формами]]. Ее имя (**name**) уникально: повторное открытие новой формы автоматически закрывает открытую старую форму с тем-же именем, если такая есть. Посредством параметра **tabindex** можно управлять порядком размещения открытых [[form-definition|форм]] во вкладках. Имя [[form-definition|экранной формы]] (**name**) не только обеспечивает уникальность размещения открытой формы во вкладках, но и передается на сервер в каждом [[request|запросе]]. Обычно, для [[form-definition|экранной формы]] на сервере есть обрабатывающий ее [[request|запросы]] контроллер, и имя этого контроллера так-же задается параметром **name**. Однако, бывает ситуация, когда удобно разделить эти 2 понятия - имя вкладки задавать отдельно, контроллер отдельно. Тогда можно использовать описатель **controller**, его значение и будет передаваться на сервер в каждом запросе, в качестве имени [[form-definition|экранной формы]]. На открытие и закрытие [[form-definition|экранной формы]] можно назначить событие: **onshow** и **onclose**. Это может быть отправляемый на сервер [[request|запрос]], а может быть (в виде исключения, для особых надобностей) исполняемый на клиенте код JavaScript. ===== Общий вид заголовка ===== Вот примерный вид заголовка описателя [[form-definition|экранной формы]]:
===== Название экранной формы, контроллер, заголовок ===== * **name** - имя [[form-definition|экранной формы]], обязательный параметр. Уникальное имя [[form-definition|экранной формы]] во вкладках, для не модальных экранных форм. Задает передаваемое на сервер в [[request|запросах]] имя [[form-definition|экранной формы]] (имя контроллера), если не задан параметр **controller**. * **controller** - передаваемое на сервер в [[request|запросах]] имя [[form-definition|экранной формы]] (имя контроллера). Если не задано, используется значение параметра **name**. * **caption** - текст заголовка [[form-definition|экранной формы]], для не модальной [[form-definition|экранной формы]] отображается в имени вкладки. * **tabindex** - числовое значение, по умолчанию 0. Задает порядок размещения [[form-definition|экранной формы]] во вкладках. [[form-definition|Экранные формы]] с большим значением **tabindex** размещаются во вкладках позже, с меньшим раньше. Если значения одинаковые, то [[form-definition|формы]] размещаются в порядке создания - созданные позднее размещаются позже. ===== Параметры модальных экранных форм ===== По умолчанию [[form-definition|экранная форма]] отображается во всю ширину экрана, во вкладках, вместе с другими открытыми не модальными [[form-definition|экранными формами]]. Существует 2 способа отобразить [[form-definition|экранную форму]] модально. Во первых, можно в запросе вызова [[form-definition|экранной формы]] указать, что она должна отображаться модально: Во вторых, можно задатьэкранной формыэкранной формы параметры в заголовке описания [[form-definition|экранной формы]]: описание экранной формы
* **modal** - если значение 1, то надо отобразить [[form-definition|форму]] модально. Если 0, то не модально. По умолчанию 0. * **width** - ширина [[form-definition|экранной формы]], в процентах или пикселях. Имеет смысл только для модальных [[form-definition|экранных форм]]. * **height** - высота [[form-definition|экранной формы]], в процентах или пикселях. Имеет смысл только для модальных [[form-definition|экранных форм]]. ===== Открытие экранной формы ===== Для модальной [[form-definition|экранной формы]] событие на открытие возникает только 1 раз - после ее отображения. Для не модальной [[form-definition|формы]] это событие возникает как при первом отображении [[form-definition|экранной формы]], так и при переключении вкладок открытых [[form-definition|экранных форм]]. С текущей [[form-definition|экранной формы]] можно уйти, переключившись на другую, а потом вернутся обратно. При первом отображении значение JavaScript функции **get('#data.first')** равно 1, при последующих 0. На событие открытия [[form-definition|экранной формы]] можно задать [[request|запрос]], отправляемый на сервер. А можно написать исполняемый JavaScript код. Пример обработки события **onshow** через отправку [[request|запроса]]:
* в заголовке событие **onshow** связываем с обработчиком **on-show**. * в секции **requests** описываем [[request|запрос]] **on-show** в виде контейнера цепочки [[request|запросов]]. * [[request|запрос]] **exec-onshow-first** отправляется на сервер при первом запуске [[form-definition|экранной формы]]. * [[request|запрос]] **exec-onshow-next** отправляется на сервер при последующем повторном переключении на [[form-definition|экранную форму]]. Эту обработку можно организовать иначе, ничего не объявляя в заголовке, а в секции **requests** объявив цепочку [[request|запросов]] с именем **onshow**:
Пример обработки события **onshow** через выполнение JavaScript
===== Закрытие экранной формы ===== По умолчанию, [[form-definition|экранную форму]] можно закрыть, нажав мышкой на закрывающий крестик. Параметр **closable="0"** делает этот крестик недоступным. Такую [[form-definition|экранную форму]] можно закрыть только программно: * можно вызвать [[request|запрос]] **close** * для не модальной [[form-definition|формы]] можно открыть другую форму с тем-же именем. Событие закрытия [[form-definition|экранной формы]] возникает 1 раз - собственно, при ее закрытии. На событие закрытия экранной формы можно задать [[request|запрос, отправляемый на сервер]]. А можно написать исполняемый JavaScript код. Пример обработки события **onclose** через отправку [[request|запроса]]:
Пример обработки события **onclose** через выполнение JavaScript эксперементальная
===== Перехват и обработка запросов экранной формы на клиенте ===== Это функция эксперементальная. Есть возможность перехватывать на клиенте отправляемые на сервер [[request|запросы]], обрабатывать их на клиенте, и возвращать ответ, не обращаясь к серверу. Обработчик **js_onrequest** получает отправляемый на сервер [[request|запрос]] в следующем виде: { request: 'имя запроса', form: 'имя экранной формы', rowset: 'имя набора строк', datasource: 'имя источника данных на сервере', xml: <запрос в виде XML узла>, json: <запрос, преобразованный в JSON> } В качестве [[response|ответа]] обработчик может вернуть: * **false** - обработчик не смог обработать [[request|запрос]] на клиенте, надо передать [[request|запрос]] на сервер * **строка** - [[request|запрос]] обработан на клиенте, содержимое строки надо преобразовать к xml и передать в качестве [[response|ответа]] * **json** - [[request|запрос]] обработан на клиенте, содержимое json надо преобразовать к xml и передать в качестве [[response|ответа]] * **xml** - [[request|запрос]] обработан на клиенте, содержимое, в виде xml, надо передать в качестве [[response|ответа]]