Виды событий - Сценарии ExtSdk2 — различия между версиями

Материал из razgovorov.ru
Перейти к: навигация, поиск
(Новая страница: «<syntaxhighlight lang="python" line='line'> ole = win32com.client.Dispatch("Tensor.SbisPluginClientCOM") guid_module = ole.GetModule(name) query_id…»)
 
Строка 1: Строка 1:
 +
== Пример функции обработки ответов от плагина ==
 
<syntaxhighlight lang="python" line='line'>
 
<syntaxhighlight lang="python" line='line'>
  
Строка 37: Строка 38:
  
  
В ответ на команды СБИС3 Плагин отправляет события, кроме этого аналогичным образом передаются события из СБИС. Таким образом в любой момент времени вы можете получать события как на свои вызовы, так и просто события ExtSdk2
 
  
События бывают трех типов: '''Message''', '''Error''', '''Event''', которые следует разобрать и найти ответ по переданному '''query_id'''
+
== Примеры ответов от модуля ==
 
 
=== Примеры событий от модуля ===
 
  
 
=== Событие Message ===
 
=== Событие Message ===

Версия 09:53, 2 июня 2021

Пример функции обработки ответов от плагина

    ole = win32com.client.Dispatch("Tensor.SbisPluginClientCOM")

    guid_module = ole.GetModule(name)

    query_id = str(uuid.uuid4())
    module_method = "ExtSdk2.AuthByPassword"
    parameters_module_method = json.dumps({"Login": "login", "Password": "password"}, ensure_ascii=True)
    domain = online.sbis.ru

    CallMethodWithoutAuth( query_id, guid_module, module_method, parameters_module_method, domain )

    answer = read_all_object( query_id )

    session_id = answer[ 'Result' ]

    def read_all_object( query_id ):
        
        # Словарь с функциями обработки событий по типу
        supported_events = {
            'Message': parse_Message,
            'Error': parse_Error,
            'Event': parse_Event
        }

        json_string = ole.ReadAllObject()
        events = json.loads(json_string)

        for event in events:
            event_type = event.get('type')
            supported_events[event_type](event)
            if( event[ 'queryID' ] == query_id )
               return event[ 'data' ]


Примеры ответов от модуля

Событие 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....',
    ...
  }
}

Событие Error #ASYNC

{
  'type': 'Error',
  'queryID': 'b3e310ec-7d85-4026-bfad-228690f38d55',
  'data': {
    'code': 308,
    'detail': '#ASYNC',
    'dump': {},
    'message': 'Ожидайте загрузки документа',
    'method_name': 'ExtSdk2.WriteDocumentEx',
    'stack': [
      {
        'method_name': 'AsyncUploadAttachments b3e310ec-7d85-4026-bfad-228690f38d55'
      }
    ]
  }
}

Событие Event

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

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

Событие Event #ASYNC

{
  'type': 'Event',
  'data': {
    'channelName': 'SbisPluginEvent',
    'eventName': 'extsdk2.async.complete',
    'type': 'object',
    'data': {
      'QueryId': '4fb98709-0264-4e01-a0aa-e4d30b4b65a7',
      'Result': {...},
      'Stat': {...}
    }
  }
}