GetNewParamWindow
Окно ввода параметров макроса или отчета создается с помощью метода 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) ...