GetNewParamWindow
SYSDBA (обсуждение | вклад) (→Присвоение транзакции управляющим элементам окна параметров) |
SYSDBA (обсуждение | вклад) (→Пример использования) |
||
Строка 133: | Строка 133: | ||
Запустить диалог с переданным списком параметров. | Запустить диалог с переданным списком параметров. | ||
+ | |||
+ | ==Особенности работы с параметром Ссылка на множество== | ||
+ | |||
+ | Для параметра Ссылка на множество свои правила построения запроса. В запросе таблица получает алиас gg1. | ||
+ | |||
+ | Пример настройки: | ||
+ | |||
+ | Таблица: gd_contact | ||
+ | Поля: id, name | ||
+ | Условие: ID IN (тут любой запрос) | ||
+ | |||
+ | или | ||
+ | |||
+ | <source lang="sql"> | ||
+ | EXISTS( SELECT * FROM GD_CONTACT c......... WHERE c.ID = gg1.ID) | ||
+ | </source> | ||
==Пример использования== | ==Пример использования== |
Текущая версия на 12:58, 30 августа 2022
Окно ввода параметров макроса или отчета создается с помощью метода GetNewParamWindow глобального объекта System.
GetNewParamWindow(WindowKey: Integer): IgsParamWindow
где WindowKey — хэндл родительского окна.
Пример:
dim Win set Win = System.GetNewParamWindow(0)
Объект окна поддерживает интерфейс IgsParamWindow.
[править] Свойства IgsParamWindow
[править] ParamList
property ParamList: TgsParamList;
Возвращает объект класса TgsParamList, содержащий список параметров, которые должен отобразить диалог. Свойство доступно для чтения, то есть ему нельзя присвоить новый список, можно только редактировать существующий.
[править] Методы IgsParamWindow
[править] AddParam
procedure AddParam (ParamName: String; ParamType: String; Comment: String)
Добавляет в список параметров окна новый параметр. Например,
Win.AddParam "Параметр 1", "PRMDate", "Parameter 1"
ParamType может иметь следующие значения:
- prmInteger — целое число
- prmFloat — число с плавающей точкой
- prmDate — дата
- prmDateTime — дата и время
- prmTime — время
- prmString — строка
- prmBoolean — логическое значение
- prmNoQuery — параметр не отображается в диалоге
- prmEnumElement
- prmEnumSet
- prmPeriod - период дат
- prmList - список значений
- prmRadioButtons - выбор значения
- prmCheckBoxs - множество значений
[править] AddLinkParam
procedure AddLinkParam(ParamName: String; ParamType: String; TableName: String; PrimaryName: String; DisplayName: String; LinkCondition: String; LinkLanguage: String; Comment: String)
Добавляет в список параметров окна новый параметр типа ссылка. Константы типов:
- prmLinkElement — ссылка на элемент
- prmLinkSet — множество элементов
Например,
Win.AddLinkParam "Параметр 2", "PRMLinkElement", "GD_USER", "ID", "NAME", "", "", ""
[править] Execute
function Execute: Variant
Запустить диалог с параметрами заполненными через методы AddParam, AddLinkParam или свойство ParamList. Функция возвращает массив Variant с введенными параметрами. Причем "простые" параметры возвращаются как простые элементы массива, а параметры типа prmLinkElement и prmLinkSet как массивы. Например,
Win.AddParam "Параметр 1", "PRMDate", "Parameter 1" Win.AddLinkParam "Параметр 2", "PRMLinkElement", "GD_USER", "ID", "NAME", "", "", "" Result = Win.Execute
Получим окно следующего вида:
После нажатия "ОК" получим: в Result(0) — дата, в Result(1)(0) — ID администратора. Если нажать "Отмена", Result будет Empty!
[править] ExecuteWithParam
function ExecuteWithParam(ParamName: String; ParamType: String; Comment: String): Variant
Для единственного "простого" параметра — добавить его и вызвать окно.
[править] ExecuteWithLinkParam
function ExecuteWithLinkParam(ParamName: String; ParamType: String; TableName: String; PrimaryName: String; DisplayName: String; LinkCondition: String; LinkLanguage: String; Comment: String): Variant
Для единственного параметра-ссылки — добавить его и вызвать окно.
[править] ExecuteWithParamList
function ExecuteWithLinkParam(ParamList: TgsParamList): Variant
Запустить диалог с переданным списком параметров.
[править] Особенности работы с параметром Ссылка на множество
Для параметра Ссылка на множество свои правила построения запроса. В запросе таблица получает алиас gg1.
Пример настройки:
Таблица: gd_contact Поля: id, name Условие: ID IN (тут любой запрос)
или
EXISTS( SELECT * FROM GD_CONTACT c......... WHERE c.ID = gg1.ID)
[править] Пример использования
option explicit sub MacrosParamWindow dim ParamList, ParamWindow, ParamIndex, Result ' Создание диалога set ParamWindow = System.GetNewParamWindow(0) ' Добавление параметра через объект-диалог call ParamWindow.AddParam("paramInteger", "prmInteger", "paramInteger") ParamWindow.ParamList.Params(0).Required = True call ParamWindow.AddLinkParam("paramSet", "prmLinkSet", "gd_contact", "id", "name", "", "", "paramSet") ParamWindow.ParamList.Params(1).Required = True ParamWindow.ParamList.Params(1).Value = Array(650001) ' Присвоим список параметров отдельной переменной set ParamList = ParamWindow.ParamList call ParamList.AddParam("paramString", "prmString", "paramString") ParamList.Params(2).Required = True ParamList.Params(2).Value = Date call ParamList.AddParam("paramDate", "prmDate", "paramDate") ' Функции добавления параметров возвращают индекс параметра в массиве ParamIndex = ParamList.AddLinkParam("paramElement", _ "prmLinkElement", "gd_contact", "id", "name", _ "", "", "paramElement") ParamList.Params(ParamIndex).Required = True ParamList.Params(ParamIndex).Value = Array(650001) ' Отображение диалога и получение результата Result = ParamWindow.ExecuteWithParamList(ParamList) if not IsEmpty(Result) then call MsgBox("paramInteger = " & CStr(Result(0))) call MsgBox("paramSet (first element) = " & CStr(Result(1)(0))) call MsgBox("paramString = " & Result(2)) call MsgBox("paramDate = " & CStr(Result(3))) call MsgBox("paramElement = " & CStr(Result(4)(0))) end if end sub
[править] Присвоение транзакции управляющим элементам окна параметров
По умолчанию такие управляющие элементы окна ввода параметров, как выпадающий список выбора объекта и выпадающий список выбора множества объектов работают на своих автономных транзакциях. Если надо подключить их к некоторой общей внешней транзакции, следует использовать свойство Transaction параметра:
... Dim Transaction Set Transaction = Designer.CreateObject(nil, "TIBTransaction", "") ... ParamIndex = ParamList.AddLinkParam("paramElement", "prmLinkElement", _ "gd_contact", "id", "name", "", "", "paramElement") ParamList.Params(ParamIndex).Required = True ParamList.Params(ParamIndex).Value = Array(650001) ParamList.Params(ParamIndex).Transaction = Transaction '^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ... Designer.DestroyObject(Transaction) ...