====== Описатели полей ====== ===== Введение ===== Поля в контроллере источника данных описываются массивом. Получить описатели можно вызвав методы: **getFields($rowType)** и **getField($name, $rowType)**. ===== Описание полей в источнике данных ===== ==== Общие описатели ==== * **name** - имя поля, обязательный параметр * **type** - тип поля в терминах LSS: string, password, status, memo, date, num, check, ref, list, icons, radio, multilist, html * **caption** - название поля в понятном человеку виде * **len** - отображаемая ширина поля в символах * **maxlength** - максимально допустимое кол-во символов в поле * **stretch** - ширина поля на максимум, по умолчанию false * **default** - значение поля по умолчанию, при добавлении новой строки * **notnull** - значение поля должно быть обязательно задано * **log** - изменение значения поля необходимо логировать ==== Числа ==== * **dec** - кол-во знаков после запятой ==== Справочники ==== Параметры поля type="ref" * **reftable** - имя источника данных справочника. В терминах LSS **datasource** элемента **ref** * **refrowtype** - означает, что справочник является деревом. Задает тип узла, из которого можно выбирать значения. В терминах LSS **row.type** элемента **ref** * **ref.params** - массив, задает значения параметров при вызове справочника. Если значение параметра начинается с **get(** или **getplus(** то значение подставляется в **js_value** и добавляется **skipempty=1**, иначе значение подставляется в **value**. Например: $fld['reftable']='worker'; $fld['ref.params']=array ( 'filter.orgid' => "get('orgid')", 'filter.code' => "QWERT" ); соответствует LSS описанию: параметры начитываемых из справочника полей: * **refid** - имя поля справочника (type=ref) * **refname** - имя поля в источнике данных справочника, связанного с текущем полем (по умолчанию name) * **reftext** - имя поля справочника, отображаемого в диалоге выбора значений, если не задано, то из refname * **dlgwidth** - ширина диалога выбора значения из справочника ==== Списки: list, radio, icons ==== * **list** - список значений, разделенный ',' или ';'. Возможны варианты: * список вида: **код**=**значение**;**код**=**значение**;**код**=**значение**. В таком варианте в поле хранится **код**, а отображается **значение**. * список вида: **значение**;**значение**;**значение**. В таком варианте все зависит от **basetype**. Если **basetype**=**string**, то в поле хранится **значение**. Если **basetype**=**num** то в поле хранится порядковый номер (от 1), а отображается **значение**. * **basetype** - string или num ==== Права и видимость ==== * **visible** - видимость поля, по умолчанию true * **readonly** - запрет на правку поля, по умолчанию false * **js_visible** - выражение JavaScript задающее видимость поля, отрабатывается только на клиенте * **js_readonly** - выражение JavaScript задающее запрет на правку поля, отрабатывается только на клиенте ==== Взаимодействие клиента с сервером ==== * **save** - при изменении значения поля автоматически вызывать запрос **save** * **change** - при изменении значения поля автоматически вызывать запрос **change** * **change.params** - параметры, передаваемые запросу **change**. Аналогично **ref.params** * **change.clears** - массив имен полей, которые надо очистить при изменении значения поля. Если в списке перечислено поле type="ref" то ссылающиеся на него поля refid указывать необязательно. ==== Серверные ==== * **virtual** - поле виртуальное, в автогенерации SQL запросов не участвует. Для таких полей атрибуты table и alias не используются. * **hidden** - значение поля не передается на клиент * **log** - изменение поля надо логировать * **info** - дополнительная служебная информация в виде массива (ключ=значение). Используется для спецобработки на сервере. ===== Параметры поля в экранной форме "структура БД" ===== В экранной форме "структура БД" описывается таблицы и поля базы данных. По этим описателям генерятся контроллеры источников данных - описатели полей, SQL запросы к таблицам. ==== описатели полей REF ==== * **ref** - параметры, передаваемые запросу для начитки содержимого справочника filter.mode=РАБ filter.statusid=get('statusid') будет построено: Если значение параметра начинается с: **get(**, **!get(**, **getplus(**, **!getplus(** то это выражение, подставляется в **js_value**, добавляется **skipempty**. Иначе это константа, подставляется в **value**. * **ref_join** - подстраивает поведение связи при выполнении **join**. Стандартное поведение: подменять ссылки для **restrict** связей и удалять для **cascade**. Если параметр задан, то поведение зависит не от типа связи а от значения этого параметра. Значения 1, r, R означают подмену ссылок, все остальное означает удаление. * **ref_copy** - подстраивает поведение связи при выполнении **copy**. Стандартное поведение: копировать только для **cascade** связей. Если параметр задан, то поведение зависит не от типа связи а от значения этого параметра. Значения 1, c, C означают копирование. * **ref_logparent** - при любом изменении в строке отписывать в лог родительской таблицы по этой ссылке. Если значение 1, то имя в логе совпадает с именем таблицы, иначе значение задает имя в логе * **ref_readonlytest** - при правке у удалении строки проверять признак row.readonly строки связанного источника данных. ==== стандартные описатели ==== * **change** - при изменении поля отсылать запрос change или выполнять очистку полей при изменении поля посылать запрос change без параметров 1 при изменении поля посылать запрос change с параметрами field1=get('field1') field2=get('field2') при изменении поля очищать значения перечисленных полей field1=clear * **save** - 1|0 при изменении значения поля автоматически вызывать запрос save * **info** - произвольная информация вида cod=значение. Перенесется в описатель поля fld ==== видимость и доступность ==== * **readonly** - 1|0 можно объявить поле readonly * **js_readonly** - можно объявить поле readonly в зависимости от условия: get('mode_code')=='ОТКЛ' ==== описатели полей MAIN при подключении их в справочник ==== * **reftext** - при подключении поля как справочник задает значение reftext * **reffind** - при подключении поля как справочник задает значение reffind * **dlgwidth** - при подключении поля как справочник задает значение dlgwidth * **refcaption** - 1|0 при подключении поля как справочник брать caption из поля ссылки (type=ref) ==== Расширенный описатель info ==== Описатель info позволяет пополнить описание поля массивом вида имя=значение. Имена могут быть произвольными. Однако, некоторые имена обрабатываются особым образом - подменяют описатели поля. Вот список таких имен: * refid * refname * visible * js_visible * default * hidden * list * basetype