Подключение к ExtSdk2 через OLE - Сценарии ExtSdk2 — различия между версиями

Материал из razgovorov.ru
Перейти к: навигация, поиск
Строка 36: Строка 36:
 
Вызов методов ExtSdk2 выполняется через вызов методов COM-объекта. Метод '''''ole.CallMethodWithoutAuth''''' вызывается для авторизации в плагине и позволяет получить идентификатор сессии - '''account_id'''. С данным идентификаторов следует вызывать все остальные методы модуля через '''''ole.CallMethod'''''.
 
Вызов методов 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''' - полученный идентификатор сессии, с которым необходимо вызывать остальные методы модуля.
+
Для интегрируемых систем, работающих с xml, следует использовать '''''ole.CallMethodWithoutAuthXML''''' и '''''ole.CallMethodXML''''' соответственно.
 
 
По переданному query_id следует ожидать ответ от модуля.
 
 
 
Для интегрирующихся систем, работающих с xml, следует использовать '''''ole.CallMethodWithoutAuthXML''''' и '''''ole.CallMethodXML''''' соответственно. В данных методах '''parameters_module_method''' следует передавать в виде xml.
 
  
 
== Пример получения ответов от COM-объекта ==
 
== Пример получения ответов от COM-объекта ==
Строка 47: Строка 43:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
'''''ReadAllObject''''' функция COM-объекта, возвращающая json массив событий в виде строки. События бывают трех типов: '''Message''', '''Error''', '''Event''', которые следует разобрать и найти ответ по переданному '''query_id'''.
+
'''''ReadAllObject''''' функция COM-объекта, возвращающая json массив событий в виде строки.
 +
 
 +
Для интегрируемых систем, работающих с xml, следует использовать '''''ReadAllXml2'''''.
  
Для интегрирующихся систем, работающих с xml, следует использовать '''''ReadAllXml2'''''.
+
События бывают трех типов: '''Message''', '''Error''', '''Event''', которые следует разобрать и найти ответ по переданному '''query_id'''
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">

Версия 18:20, 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.

Для интегрируемых систем, работающих с xml, следует использовать ole.CallMethodWithoutAuthXML и ole.CallMethodXML соответственно.

Пример получения ответов от COM-объекта

json_string = ole.ReadAllObject()

ReadAllObject функция COM-объекта, возвращающая json массив событий в виде строки.

Для интегрируемых систем, работающих с xml, следует использовать ReadAllXml2.

События бывают трех типов: Message, Error, Event, которые следует разобрать и найти ответ по переданному query_id

xml_string = ole.ReadAllXml2()

Примеры событий от модуля

Событие Message

Событие типа Message содержит queryID вызываемого метода и результат работы в поле 'Result'.

{
  'type': 'Message',
  'queryID': '15e79572-b1be-4dc2-a0e9-3652ecb187c5',
  'data': {
    'Result': ...,
    'Stat': ...
    }
  }
}

Событие Error

Событие типа Error содержит queryID вызываемого метода и объект ошибки в поле 'data'.

{
  'type': 'Error',
  'queryID': '15e79572-b1be-4dc2-a0e9-3652ecb187c5',
  'data': {
    'code': ...,
    'detail': ...,
    'dump': {},
    'message': ...,
    'method_name': 'ExtSdk2....',
    ...
  }
}

Событие Event

Событие типа Event содержит queryID вызываемого метода и имя события в поле 'eventName'.

{
  'type': 'Event',
  'data': {
    'channelName': 'SbisPluginEvent',
    'eventName': 'connected',
    'type': 'object',
    'data': ...
  }
  'queryID': '15e79572-b1be-4dc2-a0e9-3652ecb187c5'
}