<edit ... >

Самостоятельное окно ввода.


Синтаксис

<edit edit-attributes>
   [{<edititem>
      ...
    <edititem/>}]
<edit/>

Атрибуты Edit

Основные атрибуты (R/W):

Название Тип Описание
id id_name Уникальный, в рамках приложения, идентификатор объекта. Доступ к объекту с помощью AppScript выполняется через этот идентификатор.
Если id не задан, то интерпретатор автоматически заполнит его некоторым случайным в момент запуска приложения. В этом случае appxml-программист лишается возможности обращаться к объекту.
x ext-number Координата объекта по оси X. Если объектом является панель, то атрибут работает только если панель размещается в контейнере с layout=null. Для прочих layout атрибут не поддерживается.
y ext-number Координата объекта по оси Y. Если объектом является панель, то атрибут работает только если панель размещается в контейнере с layout=null. Для прочих layout атрибут не поддерживается.
source-type db | systemParam | techParam | userParam Тип источника данных для окна. Окно ввода умеет самостоятельно загружать данные в поля ввода из вышеперечисленных источников. systemParam, techParam, userParam - источник данных - соответствующие параметры приложения.
( :!: Внимание! При работе с параметрами приложения нет понятия «новая запись». Всегда выполняется только корректирвка текущих значений (исходя из природы источника данных).)
Если источник данных - собственный (написанный appxml-программистом), то source-type указывать не нужно, а нужно указать имя java-метода в атрибуте data-loader. По умолчанию, source-type=«db».
db-field-equal-id boolean @db-field-equal-id

Визуальные атрибуты (R/W):

Название Тип Описание
gap number Установка расстояния между размещаемыми объектами внутри данного объекта. Данный объект выступаетв роли контейнера. Поддерживаются дополнительные атрибуты: gap-x=«n», gap-y=«n».
Для окна ввода (только для окна ввода) поддерживаются еще ряд атрибутов: gap-top, gap-left, gap-bottom, gap-right. При этом gap-x = gap-left + gap-right, gap-y = gap-top + gap-bottom
order column | line | flow | freeform | line | vline Способ расположения объектов на окне ввода. Для объектов типа «group», «tab» можно задавать собственный order. Order действует на все вложенные объекты. По умолчанию, order=«column».
При order="column" объекты располагаются в одну или несколько колонок сверху вниз. Чтобы элемент перешел на следующую колонку необходимо указать ему x=«new». Ширина колонок - одинаковая. Ширина текстовых меток (label) выравнивается (только при text-position=«left»). При этом общая ширина окна (или group) определяется наибольшей длиной какого-то объекта. Если возникают сложности с использованием этого order, рекомендуется для теста переключиться в order=«freeform».
При order="line" объекты располагаются в одну или несколько строк. Чтобы элемент перешел на новую строку необходимо ему указать y=«new». Ширины элементов одинаковые. Ширина текстовых меток остается прежней. При этом общая ширина окна (или group) определяется наибольшей длиной какого-то объекта. Если возникают сложности с использованием этого order, рекомендуется для теста переключиться в order=«freeform».
При order="flow" объекты располагаются один за другим потокообразно в порядке поступления. Рекомендуется задавать не для окна, а для edititem c type=«group». Т.е. поля вода должны быть вложены в этот edititem. При этом можно регулировать размеры окна этого edititem (и, как следствие, размеры окна). Размеры необходимо задавать вручную.
При order="freeform" объекты располагаются в соответствии заданным им координатам «x», «y». Координата «y» может иметь дополнительное значение «new», при котором объект переносится в начало следующей (виртуальную) строки. Координата «x» может иметь дополнительное значение «old» (предназначено для использования в паре с y=«new»), при этом объект переносится на следующую строку, но по оси x остается на прежнем месте.
notitle boolean Скрываем/показываем заголовок окна
inline boolean Если true, то значит окно ввода является хранилищем полей для ввода в ячейке. По умолчанию, edit.inline=«false»

Атрибуты текстовой метки (R/W):

Название Тип Описание
title-mode string Режим работы окна ввода: «Добавление» или «Редактирование». При работе с БД (в составе <view>) значение этого атрибута устанавливается автоматически. При работе с прочими источниками необходимо атрибут устанавливать вручную.

Командные атрибуты (W/O):

Название Тип Описание
data-loader code Имя java-метода, написанного прикладным программистом на Java и выполняющем загрузку данных в поля ввода. На вход загрузчик получает ссылку на окно ввода, внутри которого можно искать нужные поля ввода по их id. При использовании data-loader значение атрибута source-type игнорируется.
build boolean При записи в него true строит окно ввода (но не показывает), по пути выполняя событие onOpen. При чтении возвращает признак построенности окна.
forced-save boolean Записывает данные, не дожидаясь нажатия пользователем OK. Т.е. эмуляция нажатия кнопки OK.
repaint boolean Перерисовка окна ввода.

Прочие атрибуты (R/W):

Название Тип Описание
auto-tab boolean @auto-tab
datetime-support boolean Флаг поддержки автоматической фиксации даты и времении
unique string Список полей, по которым, при нажатии кнопки «Ok», проверяется уникальность записи внутри таблицы. Список должен состоять из значений db-field атрибутов, указываемых для каждого поля ввода. Каждый элемент отделяется запятой.
field-length number Максимальная длина строки в текстовом поле ввода. Касается string-полей.
field-max-chars number Максимальная длина строки в многострочном текстовом поле ввода. Касается memo-полей.
field-mask mask Маска для числового поля по умолчанию. Касается number-полей.
field-columns number @field-columns
mass-mode boolean Режим работы окна ввода. «false» - окно ввода будет показано один раз (внизу окна чекбокса не будет). «true» - окно, при вводе новой записи и после нажатия кнопки «OK», будет открыто заново для ввода следующей новой записи. Такой вот потоковый ввод новых записей (чекбокс внизу окна будет не отмеченным).
show string show=record_id - получить данные записи с id=record_id, занести их в поля ввода и открыть окно. Если record_id=«null», то считаем, что нужен ввод новой записи. Поля ввода очищаются.
repeat boolean Управляет флагом «продолжить ввод». Даже если флаг не виден, то будучи включенным он откроет окно ввода заново.
repeat-visible boolean Управляет видимостью флага «продолжить ввод».
ok-button-visible boolean Флаг управления видимостью кнопки «Войти».
cancel-button-visible boolean флаг управления видимостью кнопки «Отмена».
ok-button-title string Заголовок для кнопки «Войти».
cancel-check boolean Флаг проверки измененности полей ввода при нажатии на Cancel. По умолчанию - cancel-edit=«true».
alwaysOnTop boolean Флаг вывода окна наверх.
text-position string положение текстовой метки поля ввода по умолчанию в полях ввода окна ввода. По умолчанию edit.text-position=«left».

Атрибуты только для чтения (R/O):

Название Тип Описание
record-id number @record-id
is-add-record boolean Возвращает флаг, открыто ли окно для добавления записи или для ее редактирования.
last-generated-id string Возвращает последний сгенерированный id после сохранения новой записи.

Событийные атрибуты (R/W):

Название Тип Описание
onKeyDown code Описание действий для события, возникающего при нажатии на клавишу, но до ее отпускания.
Правила описания см. (Описание событий в ApplicationXML).
onKeyUp code Описание действий для события, возникающего при отпускании клавиши.
Правила описания см. (Описание событий в ApplicationXML).
onKeyPressed code Описание действий для события, возникающего при нажатии на клавишу без учета фаз «нажатие/отпускание». Срабатывает после отпускания клавиши.
Правила описания см. (Описание событий в ApplicationXML).
onBeforeEdit code Имя метода, вызываемого после создаания и инициализации полей ввода, но перед показом окна ввода на экран.
Правила описания см. (Описание событий в ApplicationXML).
onBeforeAction code Имя метода, вызываемого после успешной валидации полей ввода, но перед сохранением их значений в базу.
Правила описания см. (Описание событий в ApplicationXML).
onAfterAction code Имя метода, вызываемого после сохранения значений в базу.
Правила описания см. (Описание событий в ApplicationXML).
onAction code Имя метода, вызываемого вместо стандартного метода сохранения значений в базу.
Правила описания см. (Описание событий в ApplicationXML).
onOpen code Срабатывает до создания полей. Предназначен для инициализации сторонних объектов (например, параметризованных справочников).
Правила описания см. (Описание событий в ApplicationXML).
onClose code Срабатывает после сохранения (или отказа от сохранения) информации.
Правила описания см. (Описание событий в ApplicationXML).
onAfterBuild code Срабатывает после создания и инициализации полей, но перед вычислением размера окна.
Правила описания см. (Описание событий в ApplicationXML).

Атрибуты Edititem

Основные атрибуты (R/W):

Название Тип Описание
type string | number | date | datetime | time | duration | check | memo | reference | label | combo | select | table | group | tab Тип поля ввода.
edit-noresize boolean Отключить выравнивание реквизита по длине (для order=«column» или «line»). Для полей типа date, time, datetime, duration автоматически устанавливаетсяe dit-noresize=«true».
text-position top | left | right По умолчанию text-position=«top»
valid boolean Возвращает флаг валидности (корректности) значения. Значение проверяется полем самстоятельно, на основании ранее установленных атрибутов (например, required) и полученного кода в vaildate-fn.
value-fn string Описывается код вычисления значения. Вычисленное значение автоматически записывается в атрибут value. Вычисление инициируется командным атрибутом value-refresh данного объекта.
Используется при возникновении зависимости значения данного поля ввода от значения другого поля ввода. При этом другое поле ввода после изменения своего значения (событие onChanged) должно вызвать атрибут value-refresh данного поля ввода. Значение value данного поля ввода пересчитается и обновится.
Код вычисления значения должен возвращать значение через return.
value-refresh boolean Командный атрибут пересчета значения value на основе кода, описанного в атрибуте value-fn. При обращении к данному атрибуту (value-refresh=«true») значение будет пересчитано и записано в атрибут value.
pair-name string @pair-name

Описание

Окно ввода умеет самостоятельно работать с:

  1. СУБД (окно ввода знает, что такое SQL, как достать данные из базы, как записать в базу изменения)
  2. Параметры приложения (<parameters>) (окно ввода знает, где находятся хранилища и как с ними работать)

Если требуется работа с другим типом источника данных, то нужно написать свой загрузчик данных и зарегистрировать его в edit.data-loader атрибуте. Загрузчик вызывается после создания полей ввода. Таким образом необходимые действия в загрузчике, это получить данные и записать их в поля ввода (используя их id) в атрибуты init-value.

Окно умеет самостоятельно проверять валидность введеных данных. Проверка опирается на указанные ограничительные атрибуты в полях ввода, а также на функцию, указанную в validate для каждого поля ввода. Если проверка на валидность прошла успешно, то тогда выполняется вызов onBeforeEdit-, onSave-методов или автоматическое сохранение данных.

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

Описание окна ввода - через тэг <edit>. Поля ввода описываются с помощью тэга <edititem>.

Описание поля ввода: Фактически это унифицированный вид нужного типа поля ввода. Только тип определяется не именем тэга (<string>, <number>, <combo>, <panel>, <tab>…), а атрибутом type. Если type=«group» или «tab», то <edititem> должно иметь вложенное описание полей.

Порядок генерации событий в edit:

datastore.refresh
onAfterBuild (здесь поля заполнены пустыми значениями)
onBeforeEdit (здесь поля заполнены значениями из базы (при редактировании))

если нажата OK:
onBeforeAction
onAction | datastore.insert/update
onAfterAction

если нажата Cancel:
onCancel

Общее для OK и Cancel событие: \\onClosed

Если есть поле, которое по вашему мнению является флаговым и вы делаете его невидимым, то значение ему нужно присваивать в <onBeforeEdit>

Примеры

<edititem type="group" title="School's description">
     <edititem id="name" type="string" text="School name" required="true"/>
     <edititem id="student_count" type="number" text="Students count" required="true"/>
     <edititem id="stuff_count" type="number" text="Stuff count"/>
</edititem>
 
tags/edit.txt · Последние изменения: 29/10/2020 16:32 (внешнее изменение)
 
Recent changes RSS feed Valid XHTML 1.0 Valid CSS