GetNewParamWindow
SYSDBA (обсуждение | вклад) |
SYSDBA (обсуждение | вклад) (→Пример использования) |
||
| (не показаны 11 промежуточных версий 2 участников) | |||
| Строка 1: | Строка 1: | ||
Окно ввода параметров макроса или отчета создается с помощью метода GetNewParamWindow глобального объекта System. | Окно ввода параметров макроса или отчета создается с помощью метода GetNewParamWindow глобального объекта System. | ||
| − | + | <source lang="delphi"> | |
| − | + | GetNewParamWindow(WindowKey: Integer): IgsParamWindow | |
| + | </source> | ||
где WindowKey — хэндл родительского окна. | где WindowKey — хэндл родительского окна. | ||
| Строка 7: | Строка 8: | ||
Пример: | Пример: | ||
| − | + | <source lang="vbnet"> | |
| − | + | dim Win | |
| + | set Win = System.GetNewParamWindow(0) | ||
| + | </source> | ||
Объект окна поддерживает интерфейс IgsParamWindow. | Объект окна поддерживает интерфейс IgsParamWindow. | ||
| − | ==Методы | + | ==Свойства IgsParamWindow== |
| + | |||
| + | ===ParamList=== | ||
| + | |||
| + | <source lang="delphi"> | ||
| + | |||
| + | property ParamList: TgsParamList; | ||
| + | |||
| + | </source> | ||
| + | |||
| + | Возвращает объект класса [[TgsParamList]], содержащий список параметров, которые должен отобразить диалог. Свойство доступно для чтения, то есть ему нельзя присвоить новый список, можно только редактировать существующий. | ||
| + | |||
| + | ==Методы IgsParamWindow== | ||
===AddParam=== | ===AddParam=== | ||
| − | + | <source lang="delphi"> | |
| − | + | ||
| − | + | procedure AddParam (ParamName: String; | |
| + | ParamType: String; | ||
| + | Comment: String) | ||
| + | |||
| + | </source> | ||
Добавляет в список параметров окна новый параметр. Например, | Добавляет в список параметров окна новый параметр. Например, | ||
| − | + | <source lang="vbnet"> | |
| + | Win.AddParam "Параметр 1", "PRMDate", "Parameter 1" | ||
| + | |||
| + | </source> | ||
ParamType может иметь следующие значения: | ParamType может иметь следующие значения: | ||
| − | * | + | * prmInteger — целое число |
| − | * | + | * prmFloat — число с плавающей точкой |
| − | * | + | * prmDate — дата |
| − | * | + | * prmDateTime — дата и время |
| − | * | + | * prmTime — время |
| − | * | + | * prmString — строка |
| − | * | + | * prmBoolean — логическое значение |
| − | * | + | * prmNoQuery — параметр не отображается в диалоге |
| + | * prmEnumElement | ||
| + | * prmEnumSet | ||
| + | * prmPeriod - период дат | ||
| + | * prmList - список значений | ||
| + | * prmRadioButtons - выбор значения | ||
| + | * prmCheckBoxs - множество значений | ||
===AddLinkParam=== | ===AddLinkParam=== | ||
| − | + | <source lang="delphi"> | |
| + | procedure AddLinkParam(ParamName: String; | ||
ParamType: String; | ParamType: String; | ||
TableName: String; | TableName: String; | ||
| Строка 41: | Строка 70: | ||
LinkLanguage: String; | LinkLanguage: String; | ||
Comment: String) | Comment: String) | ||
| + | |||
| + | </source> | ||
Добавляет в список параметров окна новый параметр типа ссылка. Константы типов: | Добавляет в список параметров окна новый параметр типа ссылка. Константы типов: | ||
| − | * | + | * prmLinkElement — ссылка на элемент |
| − | * | + | * prmLinkSet — множество элементов |
Например, | Например, | ||
| − | |||
| + | <source lang="vbnet"> | ||
| + | Win.AddLinkParam "Параметр 2", "PRMLinkElement", "GD_USER", "ID", "NAME", "", "", "" | ||
| + | </source> | ||
===Execute=== | ===Execute=== | ||
| − | + | <source lang="delphi"> | |
| + | function Execute: Variant | ||
| − | + | </source> | |
| − | + | Запустить диалог с параметрами заполненными через методы AddParam, AddLinkParam или свойство ParamList. Функция возвращает массив Variant с введенными параметрами. Причем "простые" параметры возвращаются как простые элементы массива, а параметры типа prmLinkElement и prmLinkSet как массивы. Например, | |
| − | + | ||
| − | + | <source lang="vbnet"> | |
| + | Win.AddParam "Параметр 1", "PRMDate", "Parameter 1" | ||
| + | Win.AddLinkParam "Параметр 2", "PRMLinkElement", "GD_USER", "ID", "NAME", "", "", "" | ||
| + | Result = Win.Execute | ||
| + | |||
| + | </source> | ||
Получим окно следующего вида: | Получим окно следующего вида: | ||
| Строка 62: | Строка 101: | ||
[[Изображение:Paramwnd.jpg]] | [[Изображение:Paramwnd.jpg]] | ||
| − | После нажатия "ОК" получим: в Result(0) — дата, в Result(1) — ID администратора. Если нажать "Отмена", Result будет Empty! | + | После нажатия "ОК" получим: в Result(0) — дата, в Result(1)(0) — ID администратора. Если нажать "Отмена", Result будет Empty! |
===ExecuteWithParam=== | ===ExecuteWithParam=== | ||
| − | + | <source lang="delphi"> | |
| + | function ExecuteWithParam(ParamName: String; | ||
ParamType: String; | ParamType: String; | ||
Comment: String): Variant | Comment: String): Variant | ||
| + | |||
| + | </source> | ||
Для единственного "простого" параметра — добавить его и вызвать окно. | Для единственного "простого" параметра — добавить его и вызвать окно. | ||
===ExecuteWithLinkParam=== | ===ExecuteWithLinkParam=== | ||
| − | + | <source lang="delphi"> | |
| + | function ExecuteWithLinkParam(ParamName: String; | ||
ParamType: String; | ParamType: String; | ||
TableName: String; | TableName: String; | ||
| Строка 81: | Строка 124: | ||
Comment: String): Variant | Comment: String): Variant | ||
| − | + | </source> | |
| + | Для единственного параметра-ссылки — добавить его и вызвать окно. | ||
| + | ===ExecuteWithParamList=== | ||
| + | <source lang="delphi"> | ||
| + | function ExecuteWithLinkParam(ParamList: TgsParamList): Variant | ||
| + | |||
| + | </source> | ||
| + | |||
| + | Запустить диалог с переданным списком параметров. | ||
| + | |||
| + | ==Особенности работы с параметром Ссылка на множество== | ||
| + | |||
| + | Для параметра Ссылка на множество свои правила построения запроса. В запросе таблица получает алиас gg1. | ||
| + | |||
| + | Пример настройки: | ||
| + | |||
| + | Таблица: gd_contact | ||
| + | Поля: id, name | ||
| + | Условие: ID IN (тут любой запрос) | ||
| + | |||
| + | или | ||
| + | |||
| + | <source lang="sql"> | ||
| + | EXISTS( SELECT * FROM GD_CONTACT c......... WHERE c.ID = gg1.ID) | ||
| + | </source> | ||
| + | |||
| + | ==Пример использования== | ||
| + | |||
| + | <source lang="vbnet"> | ||
| + | |||
| + | 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 | ||
| + | </source> | ||
| + | |||
| + | ===Присвоение транзакции управляющим элементам окна параметров=== | ||
| + | |||
| + | По умолчанию такие управляющие элементы окна ввода параметров, как выпадающий список выбора объекта и выпадающий список выбора множества объектов работают на своих автономных транзакциях. Если надо подключить их к некоторой общей внешней транзакции, следует использовать свойство '''Transaction''' параметра: | ||
| + | |||
| + | <syntaxhighlight lang="vbnet"> | ||
| + | ... | ||
| + | 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) | ||
| + | ... | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | [[Category:VBScript]] | ||
| + | [[Category:Руководство разработчика]] | ||
| + | [[Category:Учебный курс]] | ||
| + | |||
| + | __NOTOC__ | ||
Текущая версия на 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) ...
