Самостоятельное окно ввода.
<edit edit-attributes> [{<edititem> ... <edititem/>}] <edit/>
Название | Тип | Описание |
---|---|---|
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 |
Название | Тип | Описание |
---|---|---|
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» |
Название | Тип | Описание |
---|---|---|
title-mode | string | Режим работы окна ввода: «Добавление» или «Редактирование». При работе с БД (в составе <view>) значение этого атрибута устанавливается автоматически. При работе с прочими источниками необходимо атрибут устанавливать вручную. |
Название | Тип | Описание |
---|---|---|
data-loader | code | Имя java-метода, написанного прикладным программистом на Java и выполняющем загрузку данных в поля ввода. На вход загрузчик получает ссылку на окно ввода, внутри которого можно искать нужные поля ввода по их id. При использовании data-loader значение атрибута source-type игнорируется. |
build | boolean | При записи в него true строит окно ввода (но не показывает), по пути выполняя событие onOpen. При чтении возвращает признак построенности окна. |
forced-save | boolean | Записывает данные, не дожидаясь нажатия пользователем OK. Т.е. эмуляция нажатия кнопки OK. |
repaint | boolean | Перерисовка окна ввода. |
Название | Тип | Описание |
---|---|---|
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» . |
Название | Тип | Описание |
---|---|---|
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). |
Название | Тип | Описание |
---|---|---|
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 |
Окно ввода умеет самостоятельно работать с:
Если требуется работа с другим типом источника данных, то нужно написать свой загрузчик данных и зарегистрировать его в 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>