Последняя версия DataExpress 3 beta от 1 сентября 2019 года.
Изображение Скачать | Изображение Что нового?
См. также: Энциклопедия DX | Форум на develop-soft | Песочница
ИзображениеИзображениеИзображение

Разработка действий (@action)

Справочная информация, руководства, видеоматериалы от пользователей DataExpress.
Аватара пользователя
admin
Разработчик
Сообщения: 4626
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 20 раз
Поблагодарили: 95 раз

Разработка действий (@action)

Сообщение admin » Сб окт 28, 2017 5:52 pm

Действие описывается в специальных комментариях. Пример:

Код: Выделить всё

{@action
Id=D569B5E1-7575-445F-8DFB-54B5FF99595B
Target=all
OrigName=MyActionProc
Name=Некое действие
Group=Моя группа
UI=
<ui>
   <form name="form" caption="Выберите форму" />
   <field name="field" caption="Выберите поле" source="form" filter="number" />
   <grid name="mygrid" caption="Таблица" height="100" >
      <text name="text" caption="Название" />
      <checkbox name="checkbox" caption="Флажок" defaultvalue="1" />
   </grid>
   <expr name="expr" caption="Выражение" />
</ui>
Description=Описание действия
@}
procedure MyActionProc(FormName, FieldName: Variant; Grid: TVariantArray2d; Expr: Variant);
begin
end;


Параметры:
Id - уникальный идентификатор действия. Программа ищет действие по его идентификатору. Это любая последовательность символов, но лучше использовать для этого GUID. В редакторе скриптов GUID можно вставить комбинацией Ctrl-Shift-G.
Target - определяет, где можно применять действие: в форме, кнопке или везде. В редакторе скриптов в комментариях @action должен идти после атрибута id.
Допустимые значения:
    form - только для формы
    button - только для кнопки
    all - для формы и кнопки.
    main - действие, выполняемое при старте программы.
При выборе в дизайнере действия для формы или кнопки, в списке будут отфильтрованы допустимые тегом Target (для формы, кнопки, или обеих, соответственно).
Действия с Target main будут отображены и доступны для использования при нажатии кнопки действий в верхней панели.
OrigName - имя процедуры или функции в модуле.
Name - название действия для пользователя.
Group - группа, к которой принадлежит действие. Сочетание группы и названия должно быть уникальным.
UI - описание интерфейса в формате XML. Компоненты (описаны ниже) используются для настройки действия.
Description - описание действия.

Описание интерфейса. Параметр UI.

Каждый тег соответствует определенному компоненту:

text - поле для ввода текста;
number - поле для ввода числа;
checkbox - флажок;
file - поле с кнопкой выбора файла;
folder - поле с кнопкой выбора папки;
expr - поле для ввода выражения;
filter - поле для ввода выражения фильтра;
list - список значений;
form - список основных форм (без подчиненных);
childform - список подчиненных форм;
query - список запросов;
object - список объектов;
field - список полей;
component - список компонентов;
report - список отчетов;
template - список шаблонов;
divider - разделитель.
grid - таблица.

Теги имеют атрибуты:
name - имя компонента;
caption - поясняющая надпись;
height - высота таблицы;
width - ширина столбца таблицы;
required - обязательное;
defaultvalue - значение по умолчанию;
items - элементы списка;
source - компонент-источник;
filter - фильтр списка.
noform - если в ui-теге "expr" noform=1, то в редакторе выражений кнопка выбора полей формы будет скрыта.

Каждый компонент должен иметь обязательный атрибут name - имя компонента (для разделителя необязательно). Имя должно содержать только символы латинского алфавита, цифры и символ подчеркивания. Имя не может начинаться с цифры, должно быть уникальным в пределах интерфейса.

Элементы списка items отделяются друг от друга точкой с запятой.

Такие компоненты, как expr, childform, query, object, field, component, могут зависеть от другого компонента. Имя этого компонента указывается в атрибуте source.

Атрибут filter используется в тегах: file, field и components.

Атрибуты в тегах.

Рассмотрим некоторые атрибуты применительно к тегам. Первые на очереди тег file и атрибут filter. В данном случае filter определяет фильтр диалогового окна выбора файла. Синтаксис его точно такой же, как в компонентах TOpenDialog и TSaveDialog. Пример:

Код: Выделить всё

<file name="_file" caption="Запустить программу" filter="Приложения|*.exe" />


Атрибут source в теге expr определяет форму (form), в контексте которой вычисляется выражение. Если атрибут не задан, то используется текущая форма. Пример:

Код: Выделить всё

<form name="_myform" caption="Форма" />
<expr name="_myexpr" caption="Выражение" source="_form" />


Source в теге filter определяет форму (form), данные которой нужно отфильтровать. Если атрибут не задан, то используется текущая форма.

Атрибут source в теге form может определять запрос (query), формы которого показать в списке. Если атрибут не указан, то список содержит все основные формы.

Атрибут source в теге childform может определять форму (form) или объект (object). Если указан объект, то в списке будут все подчиненные формы той формы, на которую ссылается объект. Если источник не указан, то используется текущая форма.

Source в теге query может определять форму (form), подчиненную форму (childform) или объект (object). Атрибут определяет запросы какой формы будут в списке. Если источник не указан, то используется текущая форма.

Source в теге object может определять форму или подчиненную форму. Если атрибут не задан, то используется текущая форма.

Source в теге field может определять форму, подчиненную форму, объект или запрос. Если источник не указан, то используется текущая форма. Атрибут filter определяет поля какого типа показать в списке. Типы отделяются точкой с запятой. Возможные значения: text - текстовые поля (текст, список, заметка), number - число, date - дата, time - время, object - объект, counter - счетчик, checkbox - флажок, file - файл, image - изображение. Пример:

Код: Выделить всё

<form name="_myform" caption="Форма" />
<field name="_myfield" caption="Поле" source="_myform" filter="text;number;date" />


Source в теге components может определять форму или подчиненную форму. Если источник не задан, то используется текущая форма. Атрибут filter определяет компоненты какого типа показать в списке. Типы перечисляются через точку с запятой. В качестве типа используется имя класса. Пример:

Код: Выделить всё

<form name="_myform" caption="Форма" />
<component name="_mycmp" caption="Компонент" source="_myform" filter="TdxEdit;TdxComboBox;TdxLabel;TdxButton" />


Зависимость может иметь несколько уровней. Пример:

Код: Выделить всё

<form name="_myform" caption="Форма" />
<childform name="_mychildform" caption="Таблица" source="_myform" />
<object name="_obj" caption="Объект" source="_mychildform" />
<childform name="_objchild" caption="Таблица объекта" source="_obj" />
<field name="_field" caption="Поле" source="_objchild" />

Если в родительском компоненте меняется значение, то подчиненные компоненты очищаются. Это относится только к спискам.

Атрибут items используется в паре с тегом list и определяет элементы списка. Элементы перечисляются через точку с запятой.

Атрибут required можно включить в любой тег (правда, для grid он не имеется смысла). При сохранении программа выдаст сообщение, если какой-то из обязательных параметров не заполнен.

Атрибут defaultvalue определяет значение по умолчанию для компонента. Для флажка возможно единственное значение: 1. Остальные значения будут проигнорированы.

Атрибут caption определяет поясняющую надпись. Для разделителя также можно указать надпись.

Таблицы.

Вы можете задавать не просто отдельные компоненты, а целые массивы компонентов. Для этого используются таблицы. Синтаксис очень простой. Чтобы определить столбцы и типы компонентов, достаточно вышеперечисленные теги перечислить между тегами <grid>..</grid>. Пример:

Код: Выделить всё

<form name="_myform" caption="Форма" />
<grid name="_fields" caption="Поля" height="150">
   <field name="_field" caption="Поле" source="_form" filter="text" />
   <checkbox name="_mychk" caption="Флажок" width="80" />
</grid>


Таблице можно задать высоту с помощью атрибута height. Текст заголовков берется из атрибута caption вложенных тегов. Если ширина width не задана, то ширина колонки определяется автоматически. Ширину колонок менять нельзя. Если в таблице определен только один компонент, то заголок таблицы скрывается. Если в таблице определены зависимые компоненты, то при изменении значения в родительском компоненте ячейки НЕ стираются.

Символы внутри атрибутов <, > и " должны быть заменены на &lt; &gr; &quot; соответственно.

Сопоставление компонентов с параметрами процедуры.

Число параметров в процедуре должно совпадать с количеством компонентов, не включая компоненты в тегах grid и разделители divider. Каждый параметр должен иметь тип Variant. Параметр для тега grid должен иметь тип TVariantArray2d, который представляет собой двухмерный массив: array of array of Variant. Первое измерения - это строки, второе - столбцы. Параметры и элементы массива могут быть двух типов: Double (компоненты number, checkbox) и String (остальные). Параметр может быть равен NULL, если компонент был добавлен позже, чем были сохранены параметры.

Новые версии действий.

Разработчик может постепенно совершенствовать действия, добавляя новые компоненты. Допускается менять порядок компонентов и столбцов в таблице. Программа сопоставляет компоненты с параметрами по имени компонента. Также допустимо изменять название действия и группу, программа определяет действие по его ID. Вот ID менять нельзя, т. к. тогда все настройки действия могут быть потеряны при открытии окна "Действие".
Вложения
DEMO_DB.7z
Пример действия "Заполнить по"
(65.24 КБ) 109 скачиваний

Аватара пользователя
admin
Разработчик
Сообщения: 4626
Зарегистрирован: Пн мар 14, 2016 11:32 am
Откуда: Ленинградская
Благодарил (а): 20 раз
Поблагодарили: 95 раз

Re: Разработка действий (@action)

Сообщение admin » Ср ноя 22, 2017 10:57 pm

Еще пример: фильтрация двух объектов, состоящих в отношении многие-ко-многим. Этот пример демонстрирует технику написания подключаемых действий. Рекомендую ознакомиться, исходники с комментариями.
Вложения
МНОГИЕКОМНОГИМ.7z
(39.64 КБ) 144 скачивания

Аватара пользователя
YurAnt
Эксперт
Сообщения: 3352
Зарегистрирован: Чт апр 13, 2017 8:57 am
Поблагодарили: 4 раза
Контактная информация:

Re: Разработка действий (@action)

Сообщение YurAnt » Чт ноя 23, 2017 9:08 am

Обсуждение переехало >>>