GetNewParamWindow

Материал из GedeminWiki
(Различия между версиями)
Перейти к: навигация, поиск
 
(Пример использования)
 
(не показаны 11 промежуточных версий 2 участников)
Строка 1: Строка 1:
 
Окно ввода параметров макроса или отчета создается с помощью метода GetNewParamWindow глобального объекта System.
 
Окно ввода параметров макроса или отчета создается с помощью метода GetNewParamWindow глобального объекта System.
 
+
<source lang="delphi">
GetNewParamWindow(WindowKey: Integer): IgsParamWindow
+
GetNewParamWindow(WindowKey: Integer): IgsParamWindow
 +
</source>
  
 
где WindowKey — хэндл родительского окна.
 
где WindowKey — хэндл родительского окна.
Строка 7: Строка 8:
 
Пример:
 
Пример:
  
  dim Win
+
<source lang="vbnet">
  set Win = System.GetNewParamWindow(0)
+
dim Win
 +
set Win = System.GetNewParamWindow(0)
 +
</source>
  
 
Объект окна поддерживает интерфейс IgsParamWindow.
 
Объект окна поддерживает интерфейс IgsParamWindow.
  
==Методы IgsParamWindow==
+
==Свойства IgsParamWindow==
 +
 
 +
===ParamList===
 +
 
 +
<source lang="delphi">
 +
 
 +
property ParamList: TgsParamList;
 +
 
 +
</source>
 +
 
 +
Возвращает объект класса [[TgsParamList]], содержащий список параметров, которые должен отобразить диалог. Свойство доступно для чтения, то есть ему нельзя присвоить новый список, можно только редактировать существующий.
 +
 
 +
==Методы IgsParamWindow==
 
===AddParam===
 
===AddParam===
procedure AddParam (ParamName: String;  
+
<source lang="delphi">
          ParamType: String;  
+
 
          Comment: String)
+
procedure AddParam (ParamName: String;  
 +
          ParamType: String;  
 +
          Comment: String)
 +
 
 +
</source>
  
 
Добавляет в список параметров окна новый параметр. Например,
 
Добавляет в список параметров окна новый параметр. Например,
  
Win.AddParam "Параметр 1", "PRMDate", "Parameter 1"
+
<source lang="vbnet">
 +
Win.AddParam "Параметр 1", "PRMDate", "Parameter 1"
 +
 
 +
</source>
  
 
ParamType может иметь следующие значения:
 
ParamType может иметь следующие значения:
* PRMINTEGER
+
* prmInteger — целое число
* PRMFLOAT
+
* prmFloat — число с плавающей точкой
* PRMDATE
+
* prmDate — дата
* PRMDATETIME
+
* prmDateTime — дата и время
* PRMTIME
+
* prmTime — время
* PRMSTRING
+
* prmString — строка
* PRMBOOLEAN
+
* prmBoolean — логическое значение
* PRMNOQUERY
+
* prmNoQuery — параметр не отображается в диалоге
  
 +
* prmEnumElement
 +
* prmEnumSet
 +
* prmPeriod - период дат
 +
* prmList - список значений
 +
* prmRadioButtons - выбор значения
 +
* prmCheckBoxs - множество значений
 
===AddLinkParam===
 
===AddLinkParam===
procedure AddLinkParam(ParamName: String;  
+
<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
+
* prmLinkElement — ссылка на элемент
* PRMLINKSET
+
* prmLinkSet — множество элементов
  
 
Например,
 
Например,
Win.AddLinkParam "Параметр 2", "PRMLinkElement", "GD_USER", "ID", "NAME", "", "", ""
 
  
 +
<source lang="vbnet">
 +
Win.AddLinkParam "Параметр 2", "PRMLinkElement", "GD_USER", "ID", "NAME", "", "", ""
 +
</source>
 
===Execute===
 
===Execute===
function Execute: Variant
+
<source lang="delphi">
 +
function Execute: Variant
  
Возвращает массив Variant с введенными параметрами. Например,
+
</source>
  
Win.AddParam "Параметр 1", "PRMDate", "Parameter 1"
+
Запустить диалог с параметрами заполненными через методы AddParam, AddLinkParam или свойство ParamList. Функция возвращает массив Variant с введенными параметрами. Причем "простые" параметры возвращаются как простые элементы массива, а параметры типа prmLinkElement и prmLinkSet как массивы. Например,
Win.AddLinkParam "Параметр 2", "PRMLinkElement", "GD_USER", "ID", "NAME", "", "", ""
+
 
Result = Win.Execute
+
<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===
function ExecuteWithParam(ParamName: String;  
+
<source lang="delphi">
 +
function ExecuteWithParam(ParamName: String;  
 
                   ParamType: String;                                     
 
                   ParamType: String;                                     
 
                   Comment: String): Variant
 
                   Comment: String): Variant
 +
 +
</source>
  
 
Для единственного "простого" параметра — добавить его и вызвать окно.
 
Для единственного "простого" параметра — добавить его и вызвать окно.
  
 
===ExecuteWithLinkParam===
 
===ExecuteWithLinkParam===
function ExecuteWithLinkParam(ParamName: String;
+
<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

Получим окно следующего вида:

Paramwnd.jpg

После нажатия "ОК" получим: в 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)
  ...
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Инструменты