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
()¶ Метод закрывает текущую активную форму тестового приложения. Определение активной формы приложения производится в следующем порядке:
- Диалог (форма диалога должна быть активной).
- Модальная форма.
- MDI форма.
- Главное окно приложения.
-
CloseActiveModalForm(ModalResult: TModalResult);
Метод закрывает текущую активную модальную форму тестового приложения установкой форме соответствующего значения ModalResult Определение активной модальной формы приложения производится в следующем порядке:
- Диалог (форма диалога должна быть активной).
- Модальная форма.
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. Примеры¶
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;
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