====== Декларативное описание экранной формы ====== [[start:|lss]] ===== Введение ===== [[form-definition]] - XML описание, по которому строится экранная форма Работа экранного интерфейса [[Viewer]] грубо выглядит так: * [[Viewer]] посылает [[Request|запрос]] на сервер * В [[Response|ответ]] получает описание экранной формы * По описанию экранная форма отображается и начинает работать Описание экранной формы декларативно и статично. Оно не меняется в процессе работы формы. Оно практически не содержит программного кода (за исключением динамически вычисляемых выражений), все нестандартное поведение обеспечивается обращением к серверным скриптам. ===== Формат описания экранной формы ===== Описание экранной формы состоит из следующих крупных разделов:
="" ="" ... =""/>
==== Заголовок описания экранной формы ====
* [[form-definition-header | Подробное описание заголовка]] ==== Секция описания наборов строк ==== Изменения в описании источника данных по сравнению с контекстно независимым описанием Список дочерних наборов строк ... [[form-definition-rowsets]] ==== Секция описания запросов уровня формы ==== ... ... * [[form-definition-requests | Подробное описание секции запросов]] ==== Секция описания скриптов JavaScript ==== [[form-definition-scripts]] ==== Секция описания начальных значений данных формы ==== ==== Секция описания панелей ==== Список полей источника данных ... ... ... ... ... ... ... ... ...
[[form-definition-panels]] ==== Секция ==== Содержит описания панелей, из которых собирается экранный интерфейс формы. === Полезные атрибуты === * **type** - тип панели, в настоящий момент реализованы типы: **panel**, **tab**, **accordion**, **grid** * **align** - выравнивание: center, left, right, top, bottom * **rowset** - имя набора строк === Дочерние узлы === * panels, panel - внутри панели могут содержаться дочерние панели, их описание может группироваться внутри узла , а может лежать непосредственно внутри родительского узла ===== Виды панелей ===== ==== panel ==== Панель - контейнер, дочерние панели могут размещаться как: * align="top" - должна быть понятна высота панели * align="bottom" - должна быть понятна высота панели * align="left" - должна быть понятна ширина панели * align="right" - должна быть понятна ширина панели * align="center" - должны быть понятны ширина и высота панели * align="" ==== scroll ==== Панель - контейнер, все дочерние панели размещаются как при align="top". Если суммарная высота дочерних панелей превышает высоту родительской панели, появляется прокрутка ==== tab ==== Контейнер дочерних панелей, в виде TabFrame * атрибут **bestchild**=1 - отображать только одну (первую подходящую) дочернюю панель. Анализируется row.type и js_visible * возможность динамически определять **текущую панель** при **смене строки** * привязать к панели **rowset**, смена строки в котором вызывает смену текущей панели * у дочерних панелей атрибуты **best**, **js_best** - если у текущей панели признак best, то она остается текущей, иначе первая с признаком best ==== accordion ==== Контейнер дочерних панелей в виде аккордеона * атрибут **bestchild**=1 - отображать только одну (первую подходящую) дочернюю панель. Анализируется row.type и js_visible ==== grid ==== дополнительные признаки панели * **style**=grid|report|card * **waitanimate**="0|1" - отображать ожидание загрузки анимированным gif * **noheader** - не показывать заголовки 0|1 * **noselect** - не показывать текущую строку 0|1 * **color.readonly**=gray|white * **mark.icon**=mark|check дополнительные признаки полей * **noscroll** - включить поле в непрокручиваемую область слева 0|1 * **clipboard** - возможность выделения текста для переноса в буфер обмена 0|1 * **align** - left|right|center * **lightclick** - 0|1 обработка легкого нажатия мышки (как для пометки mark), имеет смысл для check и icons дополнительный тип поля * type=html - содержимое интерпретируется как HTML, реализована CSS поддержка таблиц для таких полей: ...
...
==== tree ==== Панель дерева. Источник данных древовидный. Особым образом обрабатываются атрибуты row: * **row.type** - тип узла, если дерево состоит из разнородных узлов * **row.icon** - иконка, если поля нет, то из id.treetype, иначе стандартная * **row.final** - не может быть дочерних элементов * **row.empty** - нет дочерних элементов (но могут быть) Следующие данные берутся из полей, в качестве имен можно использовать стандартные имена, или переопределять их в секции **fields** набора строк. Если набор строк разнородный, и содержит разные описатели fields для разных типов узлов, то для разных типов узлов можно задать разные имена полей * **name** - поле, из которого брать текст метки, можно переопределить в fields как name="имя поля" * **description** - поле, из которого брать всплывающую подсказку, можно переопределить в fields как description="имя поля" дополнительные признаки панели * **mark.icon**=mark|check ==== treemenu ==== Реализует древовидное меню, умеющее по DblClick запускать экранные формы. Панель аналогична панели **tree**, но использует дополнительный параметр **collapse**, означающий необходимость свернуть панель при запуске экранной формы, и развернуть при получении фокуса ввода на панель: Особым образом интерпретируются следующие поля набора строк: * **form** - поле, содержащие имя запускаемой формы, может быть переопределено в секции fields treemenu.form="имя поля" * **params** - поле, содержащие параметры запускаемой формы, может быть переопределено в секции fields treemenu.params="имя поля" ==== fields ==== Панель позволяет совместно разместить несколько полей набора строк ... Дополнительные параметры полей: * line - разные поля, имеющие одинаковые значения этого параметра размещаются вместе в одной строке. Поля, для которых параметр не задан, размещаются с новой строки. * column - поля, размещенные в разных строках, с одинаковым значением параметра column, совместно выравниваются по левому краю. По умолчанию, первые в колонке поля имеют одинаковое значение этого параметра, и соответственно, совместно выравниваются. * len - длина содержимого поля в символах * stretch - расширять ==== attribute ==== Панель атрибутов построена на базе панели **fields**, однако описания и значения полей берутся из таблицы, каждая строка - поле панели attribute. При перечитке таблицы панель перерисовывается, и отображает другие поля. Для корректной работы, у источника данных панели должны быть следующие поля: * **caption** - название атрибута * **type** - тип атрибута: string|num|date|list|radio|memo|ref|caption * **len** - длина, обычно если не задана, то stretch=1 * **dec** - имеет смысл для атрибутов типа num, знаков после запятой * **list** - имеет смысл для атрибутов list и radio, значения через ; * **action** - имя запроса, который надо выполнить по клику * **line** - имя строки, элементы с одинаковым значениям этого поля размещаются в одной строке * **value** - значение атрибута * Значение **row.readonly** строки интерпретируется как readonly поля Работа справочника type=ref реализована кривовато, но работает. На все атрибуты используется один и тот-же справочник. Это может быть специально сделанный на сервере источник данных справочника, который по полученным параметрам понимает, что надо возвращать для текущего атрибута. У источника данных панели должно быть 2 поля: * **valueid** - поле type="ref", с прописанным вызовом общего для всех атрибутов справочника * **valuename** - поле refid="valueid" - корректно описанное поле refname, может называться как угодно, лишь бы ссылалось на valueid. Имеет смысл организовать источник данных на сервере так, что бы это поле было виртуальным, а значение его было привязано к полю value. ==== html ==== Панель может отображать произвольный HTML текст по шаблону с макроподстановками или текст заголовка Макроподстановки * %%CAPTION%% - текст параметра caption * %%LOGIN%% - элемент с именем текущего пользователя (из параметра login) по клику запрос disconnect * %%выражение%% - см [[lssformat]] - как для подстановки в функцию get Стили * caption - стиль заголовка панели, вариант medium и large позволяет увеличить размер. Внутри стиля caption доступен стиль params для таблицы параметров:
Имя параметразначение параметра
Имя параметразначение параметра
==== htmllist ==== Панель для отображения списка, сформированного по произвольным HTML шаблонам === Примеры === Горизонтально расположенные элементы, вроде закладок панелей: Вертикальный список элементов Вертикальный список элементов, визуально похожий на url ссылки Макроподстановки * выражение - см [[lssformat]] - как для подстановки в функцию get ==== list ==== Панель для отображения вертикального списка ==== tablist ==== ==== multi ==== Панель для списка множественного выбора Простое описание, поле должно быть refid Сложное описание, актуально для style=check с изменяющимся составом доступных галочек ==== webbrowser ==== Эта панель в IFRAME отображает содержимое адреса ... * атрибут **url** задает адрес отображаемой в панели страницы * атрибут **field** задает имя поля, содержащего адрес отображаемой в панели страницы * атрибут **noscript** запрещает выполнение javascript в отображаемой в панели страницы * атрибут **repaint** * **auto** по умолчанию, перечитка при любом изменении url, вызывается изменениями в связанном источнике данных * **manual** имеет смысл только для фильтра, перечитка при вызове запросов refresh или refreshrow, если задан параметр default, то перед первой перечиткой отображается его содержимое * атрибут **progress** включает отображение индикатора прогресса загрузки содержимого iframe * параметры param пополняют адрес передаваемыми через url параметрами * параметр **http.url** позволяет задать url через параметры, как в запросах httpget или httpput Особая обработка запроса panel: * panel.print - распечатать содержимое * panel.refresh - принудительно перечитать ==== extcontrol ==== Панель позволяет подключить к экранной форме внешний HTML документ, с привязкой к среде разработки. В HTML документе, отображаемом внутри панели должна быть объявлена функция doLssRepaint(params), которая будет автоматически вызываться при перерисовке источника данных. В params передаются: источник данных, значения параметров, режим перерисовки (все, одна строка) ... ==== img ==== Эта панель отображает картинку, size="" - исходный размер ... ==== memo ==== Эта панель отображает текстовое memo поле с возможностью редактирования * readonly="manual" - в самом поле править нельзя, но в диалоге просмотра можно ==== allicons ==== Эта панель отображает все зарегистрированные в проекте иконки ==== chart ==== Эта панель отображает графики и диаграммы ... ==== separator ==== Это панель разделитель. Отображается как разделительная линия. Например, можно с помощью ее отделять друг от друга панели fields ==== form ==== Эта панель используется в главной экранной форме приложения. В ней размещаются (сменяя друг друга) динамически формируемые в процессе работы приложения экранные формы. Такая панель должна быть одна, иначе все запутается.