4.12. Использование Global как COM объекта

Клиентское приложение Global может выступать в качестве COM-сервера, с которым можно взаимодействовать из любого языка программирования, поддерживающего вызовы методов COM-объектов.

Для взаимодействия с Global средствами COM необходимо запустить свой экземпляр приложения Global. Подключиться к ранее запущенному экземпляру нельзя. Данное ограничение сделано в целях безопасности, чтобы стороннее приложение не могло получить доступа к системе без ввода имени пользователя и пароля.

4.12.1. Инициализация

Для регистрации приложения Global как COM-сервера необходимо через командную строку запустить приложение Global с ключом /regserver:

Global.exe /regserver

Для запуска приложения необходимо использовать метод CreateOleObject()

Приложение, запущенное в качестве сервера автоматизации, по умолчанию невидимо и способно открывать только модальные окна. Для того, чтобы запустить приложение видимым, необходимо после создания сервера автоматизации (вызова CreateOleObject()) в значении свойства CmdLine указать ключ /Visible.

Пример
var
  Instance: Variant;
begin
  Instance := CreateOleObject('btkRuntime.GlobalApplication');
  Instance.CmdLine := '/Visible';
  Instance.Initialize;
end;

Для автоматического подключения приложения к базе без ввода имени пользователя и пароля в диалоге соединения необходимо в значении свойства CmdLine указать строку подключения к БД.

Пример
var
  Instance: Variant;
begin
  Instance := CreateOleObject('btkRuntime.GlobalApplication');
  Instance.CmdLine := 'username/password@DBName#Schema /Visible';
  Instance.Initialize;
end;

Для автоматического выбора приложения необходимо указать имя главной выборки приложения через свойство ApplicationName.

Пример
var
  Instance: Variant;
begin
  Instance := CreateOleObject('btkRuntime.GlobalApplication');
  Instance.CmdLine := 'username/password@DBName#Schema /Visible';
  Instance.ApplicationName := 'SEL_BDN_MainMenu';
  Instance.Initialize;
end;

Attention

После установки свойств CmdLine и ApplicationName следует вызывать метод Initialize. Этот метод означает конец инициализации объекта (установки значений). Несмотря на то, что на данный момент на установку значений отводится 5 секунд, в будущем это ограничение может быть снято и ожидание станет бесконечным.

4.12.2. Интрефейсы

СOM-сервер Global реализует следующие интерфейсы:

class IApplication
ExecuteOperation(OperationName: OleVariant);

Позволяет выполнить операцию главной выборки приложения.

Parameters:OperationName (OleVariant) – Имя операции.
ExecuteOperationEx(OperationName: OleVariant; ParamNames: OleVariant; ParamValues: OleVariant);

Позволяет выполнить операцию главной выборки приложения и передать значения параметров.

Parameters:
  • OperationName (OleVariant) – Имя операции.
  • ParamNames (OleVariant) – Массив имён параметров.
  • ParamValues (OleVariant) – Массив значений параметров.
ApplicationName: OleVariant

Свойство позволяет получить/установить имя главной выборки текущего приложения.

Return type:OleVariant
Ready: OleVariant

Свойство позволяет определить, завершилась ли инициализация приложения.

Return type:OleVariant
Returns:
True
Приложение успешно подключилось к базе и открыло главную выборку приложения.
False
В остальных случаях.
class IApplication2
CmdLine: OleVariant

Свойство позволяет установить параметры командной строки, управляющие запуском приложения.

Return type:OleVariant
Initialize()

Метод завершает ожидание установки значений CmdLine и ApplicationName.

Attention

Метод должен быть вызван до истечения времени ожидания установки значений инициализации (5 сек.).

class IApplication3
IsSelectionActive(EntityName: OleVariant; Representation: OleVariant): OleVariant;

Метод проверяет активность выборки с указанным именем и отображением на текущей активной форме приложения.

Parameters:
  • EntityName (OleVariant) – Имя выборки.
  • Representation (OleVariant) – Отображение выборки.
Return type:

OleVariant

Returns:

1

Выборка существует и активна.

-1

Выборка не найдена.

-2

Выборка не активна.

ExecuteOperationA(EntityName: OleVariant; Representation: OleVariant; OperationName: OleVariant);

Выполняет операцию у выборки с указанным именем и отображением. Выборка должна находится на активной форме.

Parameters:
  • EntityName (OleVariant) – Имя выборки.
  • Representation (OleVariant) – Отображение выборки.
  • OperationName (OleVariant) – Имя операции.
SelectionLocate(EntityName: OleVariant; Representation: OleVariant; KeyField: OleVariant; KeyValue: OleVariant): OleVariant;

Выполняет позиционирование на запись в указанной выборке по ключевому полю.

Parameters:
  • EntityName (OleVariant) – Имя выборки.
  • Representation (OleVariant) – Отображение выборки.
  • KeyField (OleVariant) – Имя поля.
  • KeyValue (OleVariant) – Значение поля.
Return type:

OleVariant

Returns:

1

Позиционирование произведено успешно.

-1

Выборка не найдена.

-2

Выборка не активна.

-4

Запись не найдена.

Quit()

Метод закрывает приложение Global. Если в приложении имеются открытые окна, то будет показан диалог подтверждения закрытия, поэтому рекомендуется закрыть все MDI окна перед вызовом метода

SelectionSetVar(EntityName: OleVariant; Representation: OleVariant; ParamName: OleVariant; ParamValue: OleVariant);

Метод устанавливает значение параметру указанной выборки.

Parameters:
  • EntityName (OleVariant) – Имя выборки.
  • Representation (OleVariant) – Отображение выборки.
  • ParamName (OleVariant) – Имя параметра.
  • ParamValue (OleVariant) – Значение параметра.
SelectionGetVar(EntityName: OleVariant; Representation: OleVariant; ParamName: OleVariant): OleVariant;

Метод возвращает значение атрибута (параметра) указанной выборки.

Parameters:
  • EntityName (OleVariant) – Имя выборки.
  • Representation (OleVariant) – Отображение выборки.
  • ParamName (OleVariant) – Имя параметра.
Rtype OleVariant:
 
ExecuteOperationAEx(EntityName: OleVariant; Representation: OleVariant; OperationName: OleVariant; ParamNames: OleVariant; ParamValues: OleVariant);

Выполняет операцию выборки с указанным именем и отображением.

В метод можно передать параметры, управляющие режимом выполнения операции. Параметры могут понадобиться при вызове сеттеров, в которых производится анализ свойств SetterExecType, GetEditButtonName и UserActionType.

Возможные значения параметров:

Имя параметра Описание параметра Возможные значения параметра
SetterExecType Действие, в результате которого был вызван сеттер.
etUnknown
Действие не определено.
etEditBtn (по умолчанию)
Нажата кнопка Edit.
etClearBtn
Нажата кнопка Clear.
etManual
Ручной ввод.
etSetVar
Вызов SetVar.
etExecOp
Вызов операции.
etBulkUpdate
Вставка из буфера обмена.
ButtonName Наименование кнопки, нажатие на которую привело к вызову сеттера.
‘LOOKUP#’ (по умолчанию)
Кнопка выбора значения.
‘OPENCARD#’
Кнопка открытия карточки.
UserAction Направление перехода фокуса ввода после выполнения сеттера.
uaUnknown (по умочанию)
Не определено.
uaNextControl
Фокус переходит на следующий контрол (ячейку).
param OleVariant EntityName:
 Имя выборки.
param OleVariant Representation:
 Отображение выборки.
param OleVariant OperationName:
 Имя операции.
param OleVariant ParamNames:
 Массив имён параметров.
param OleVariant ParamValues:
 Массив значений параметров.
CloseActiveForm()

Метод закрывает текущую активную форму тестового приложения. Определение активной формы приложения производится в следующем порядке:

  1. Диалог (форма диалога должна быть активной).
  2. Модальная форма.
  3. MDI форма.
  4. Главное окно приложения.
CloseActiveModalForm(ModalResult: TModalResult);

Метод закрывает текущую активную модальную форму тестового приложения установкой форме соответствующего значения ModalResult Определение активной модальной формы приложения производится в следующем порядке:

  1. Диалог (форма диалога должна быть активной).
  2. Модальная форма.

Attention

Немодальные формы метод не закрывает.

Parameters:ModalResult (TModalResult) – Результат, возвращаемый модальным окном при закрытии.
CloseActiveModalWindow(ModalResult: TModalResult);

Закрывает активное модальное окно установкой ModalResult.

Parameters:ModalResult (TModalResult) – Результат, возвращаемый модальным окном при закрытии.
CloseActiveWindow;

Закрывает активное модальное окно посылкой сообщения WM_CLOSE.

Terminate;

Безусловное завершение выполнения программы.

FocusOnFieldByName(EntityName: OleVariant; Representation: OleVariant; FieldName: OleVariant);

Метод перемещает фокус ввода на контрол, являющийся редактором для указанного атрибута выборки. Для карточки это будет редактор, для списка или дерева - колонка, соответствующая указанному атрибуту.

Parameters:
  • EntityName (OleVariant) – Имя выборки.
  • Representation (OleVariant) – Отображение выборки.
  • FieldName (OleVariant) – Имя поля.
FocusOnFirstControl()

Метод устанавливает фокус ввода на первый контрол.

EnableScriptRecording(Handle: Integer);

Метод включает в тестируемом приложении режим записи тестового скрипта.

Parameters:Handle (Integer) – Handle контрола Windows, который обрабатывает сообщение WM_COPYDATA.
DisableScriptRecording()

Метод выключает режим записи тестового скрипта в тестируемом приложении.

ScriptRecording: OleVariant;

Свойство указывает на активность режима записи скрипта.

Rtype OleVariant:
 

4.12.3. Примеры

Пример запуска приложения Global на языке Object Pascal (Delphi)
var
  Instance: Variant;
  ParamNames,
  ParamValues: Variant;
begin
  try
    Instance := CreateOleObject('btkRuntime.GlobalApplication');
  except
    ShowMessage('Сервер Global.Application не зарегистрирован.' + sLineBreak
       + 'Для регистрации сервера запустите приложение Global c ключом /RegServer');
    Exit;
  end;

  try
    Instance.ApplicationName := 'SEL_DOC_MainMenu';
    Instance.Initialize;

    while not Instance.Ready do
      Sleep(100);
  except
    ShowMessage('Ошибка инициализации приложения Global');
    Exit;
  end;

   ParamNames := VarArrayCreate([1, 0], varVariant);
   ParamValues := VarArrayCreate([1, 0], varVariant);
   ParamNames[0] := 'FileName';
   ParamValues[0] := 'C:\AnyFileName.txt';

  try
    Instance.ExecuteOperationEx(OperationName, ParamNames, ParamValues);
  except
    on E:Exception do
      ShowMessage(E.Message);
  end;
end;
Пример запуска приложения Global на языке VBA (Excel)
Dim GlobalApp As Object
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub CreateGlobalDocument()
On Error GoTo errhandle
  ActiveWorkbook.Save

If ActiveWorkbook.Saved Then
  If GlobalApp Is Nothing Then
    Set GlobalApp = CreateObject("btkRuntime.GlobalApplication")
    GlobalApp.ApplicationName = "SEL_DOC_MainMenu"

    Do While Not GlobalApp.Ready
      Sleep 100
    Loop

  End If

Dim arrParamNames(0 To 1) As String
Dim arrParamValues(0 To 1) As Variant
arrParamNames(0) = "FileName"
arrParamValues(0) = ActiveWorkbook.FullName

Call GlobalApp.ExecuteOperationEx("CreateDocFromOffice", arrParamNames, arrParamValues)
  'MsgBox ("CreateGlobalDocument")
End If

GoTo EndProc

errhandle:
  Set GlobalApp = Nothing

EndProc:

End Sub