Подключение к ExtSdk2 через OLE - Сценарии ExtSdk2 — различия между версиями
Строка 7: | Строка 7: | ||
Получение COM-объекта занимает одну строку '''''ole = win32com.client.Dispatch("Tensor.SbisPluginClientCOM")''''' с использованием библиотеки pywin32. | Получение COM-объекта занимает одну строку '''''ole = win32com.client.Dispatch("Tensor.SbisPluginClientCOM")''''' с использованием библиотеки pywin32. | ||
− | Далее Плагин подготавливает необходимые внутренние инструменты для подключения и в случае успеха пробрасывает событие | + | Далее Плагин подготавливает необходимые внутренние инструменты для подключения и в случае успеха пробрасывает событие '''Event''' в виде json сериализованного в строку. У данного события в объекте 'data' лежит поле 'eventName' со значением 'connected'. |
== Пример вызовов методов плагина через COM-объект == | == Пример вызовов методов плагина через COM-объект == | ||
Строка 55: | Строка 55: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | == Примеры событий от модуля == | ||
+ | |||
+ | === Событие '''Message''' === | ||
+ | <syntaxhighlight lang="json"> | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | === Событие '''Error''' === | ||
+ | |||
+ | === Событие '''Event''' === | ||
+ | <syntaxhighlight lang="json"> | ||
+ | { | ||
+ | 'type': 'Event', | ||
+ | 'data': { | ||
+ | 'channelName': 'SbisPluginEvent', | ||
+ | 'eventName': 'connected', | ||
+ | 'type': 'object', | ||
+ | 'data': { | ||
+ | 'Version': '21.1241.45' | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
[[Категория:Сценарии ExtSdk2]] | [[Категория:Сценарии ExtSdk2]] |
Версия 17:23, 21 апреля 2021
Для работы со СБИС3 Плагин из внешних систем, таких как 1С или SAP, требуется получить COM-объект, зарегистрированный Плагином в Вашей системе. Его название "Tensor.SbisPluginClientCOM". Все примеры кода указаны на языке Python.
Содержание
Получение COM-объекта
ole = win32com.client.Dispatch("Tensor.SbisPluginClientCOM")
Получение COM-объекта занимает одну строку ole = win32com.client.Dispatch("Tensor.SbisPluginClientCOM") с использованием библиотеки pywin32. Далее Плагин подготавливает необходимые внутренние инструменты для подключения и в случае успеха пробрасывает событие Event в виде json сериализованного в строку. У данного события в объекте 'data' лежит поле 'eventName' со значением 'connected'.
Пример вызовов методов плагина через COM-объект
# Получение модуля
guid_module = ole.GetModule(name)
# Вызов методов модуля через COM-объект
query_id = str(uuid.uuid4())
module_method = "ExtSdk2.AuthByPassword"
parameters_module_method = json.dumps({"Login": "login", "Password": "password"}, ensure_ascii=True)
host = online.sbis.ru
ole.CallMethodWithoutAuth( query_id, guid_module, module_method, parameters_module_method, host )
account_id = ********@plugin.sbis.ru
ole.CallMethod( query_id, guid_module, module_method, parameters_module_method, account_id )
Для вызова методов модуля ExtSdk2 необходимо сначала получить его guid с помощью функции COM-объекта ole.GetModule(name).
Вызов методов ExtSdk2 выполняется через вызов методов COM-объекта. Метод ole.CallMethodWithoutAuth вызывается для авторизации в плагине и позволяет получить идентификатор сессии - account_id. С данным идентификаторов следует вызывать все остальные методы модуля через ole.CallMethod.
Методы на вход принимают: query_id вызываемого метода, guid_module - guid полученного модуля, module_method - метод модуля ExtSdk2, который хотим позвать, parameters_module_method - параметры вызываемого метода, а так же либо host на котором мы хотим работать( online.sbis.ru ), либо account_id - полученный идентификатор сессии, с которым необходимо вызывать остальные методы модуля.
По переданному query_id следует ожидать ответ от модуля.
Для интегрирующихся систем, работающих с xml, следует использовать ole.CallMethodWithoutAuthXML и ole.CallMethodXML соответственно. В данных методах parameters_module_method следует передавать в виде xml.
Пример получения ответов от COM-объекта
json_string = ole.ReadAllObject()
ReadAllObject функция COM-объекта, возвращающая json массив событий в виде строки. События бывают трех типов: Message, Error, Event, которые следует разобрать и найти ответ по переданному query_id.
Для интегрирующихся систем, работающих с xml, следует использовать ReadAllXml2
xml_string = ole.ReadAllXml2()
Примеры событий от модуля
Событие Message
Событие Error
Событие Event
{
'type': 'Event',
'data': {
'channelName': 'SbisPluginEvent',
'eventName': 'connected',
'type': 'object',
'data': {
'Version': '21.1241.45'
}
}
}