GetNewParamWindow

Материал из GedeminWiki
Версия от 12:58, 30 августа 2022; SYSDBA (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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

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