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

Материал из razgovorov.ru
Перейти к: навигация, поиск
 
(не показано 16 промежуточных версий этого же участника)
Строка 1: Строка 1:
== Пример функции обработки ответов от плагина ==
+
При работе с модулем ExtSdk2 Вы можете получить ряд событий. Информация из событий варьируется в зависимости от типа пришедшего сообщения. Это может быть успешное как успешное выполнение метода, так и ошибка. Предложенные события в этой статье приходят при вызове методов [[ReadAllObject|ReadAllObject]] и [[ReadAllXml2|ReadAllXml2]]. Рекомендуем ознакомиться с видами событий и их обработкой ниже в статье.
<syntaxhighlight lang="python" line='line'>
 
  
    ole = win32com.client.Dispatch("Tensor.SbisPluginClientCOM")
+
== Примеры ответов от модуля ==
  
    guid_module = ole.GetModule(name)
+
=== Событие Message ===
 
 
    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' ]
 
 
 
</syntaxhighlight>
 
  
 +
Ответ такого типа содержит в себе результат работы вызываемого метода по переданному queryID при синхронной работе с плагином. Поле 'Result' содержит результат работы метода.
  
 
== Примеры ответов от модуля ==
 
 
=== Событие Message ===
 
Событие типа Message содержит '''queryID''' вызываемого метода и результат работы в поле 'Result'.
 
 
<syntaxhighlight lang="json">
 
<syntaxhighlight lang="json">
 
{
 
{
Строка 55: Строка 19:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
=== Событие Error ===
 
=== Событие Error ===
Событие типа Error содержит '''queryID''' вызываемого метода и объект ошибки в поле 'data'.
+
 
 +
Событие типа Error приходит когда при вызове метода происходит ошибка. Данные об ошибке лежат в поле 'data'.
 +
 
 
<syntaxhighlight lang="json">
 
<syntaxhighlight lang="json">
 
{
 
{
Строка 72: Строка 38:
  
 
=== Событие Error #ASYNC ===
 
=== Событие Error #ASYNC ===
 +
 +
Событие типа Error #ASYNC приходит когда при вызове асинхронного метода необходимо сообщить пользователю, что метод начал асинхронную работу и необходимо ждать одно из событий [[Обработка_ответов_от_плагина_-_Сценарии_ExtSdk2#События Event #ASYNC|Event #ASYNC]]. Данные об ошибке лежат в поле 'data'. Такую ошибку можно легко отличить от других по ключевому слову '#ASYNC' в поле 'detail'.
 +
 
<syntaxhighlight lang="json">
 
<syntaxhighlight lang="json">
 
{
 
{
Строка 92: Строка 61:
  
 
=== Событие Event ===
 
=== Событие Event ===
Событие типа Event содержит '''queryID''' вызываемого метода и имя события в поле 'eventName'.
+
Данный ответ от плагина можно получить при взаимодействии с плагином. Например при подключении к плагину, где в объекте ответа в поле 'eventName' лежит 'connected'.
 
<syntaxhighlight lang="json">
 
<syntaxhighlight lang="json">
 
{
 
{
Строка 102: Строка 71:
 
     'data': ...
 
     'data': ...
 
   }
 
   }
  'queryID': '15e79572-b1be-4dc2-a0e9-3652ecb187c5'
 
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
=== Событие Event #ASYNC ===
+
=== События Event #ASYNC ===
 +
 
 +
==== Событие extsdk2.async.complete ====
 +
 
 +
Данное событие приходит при успешном выполнении асинхронного метода. Это можно понять по полю 'eventName' со значением 'extsdk2.async.complete'. Идентификатор ответа следует смотреть в поле 'QueryId'.
 +
 
 
<syntaxhighlight lang="json">
 
<syntaxhighlight lang="json">
 
{
 
{
Строка 118: Строка 91:
 
       'Result': {...},
 
       'Result': {...},
 
       'Stat': {...}
 
       'Stat': {...}
 +
    }
 +
  }
 +
}
 +
</syntaxhighlight>
 +
 +
 +
==== Событие extsdk2.async.error====
 +
 +
Данное событие приходит при не успешном выполнении асинхронного метода. Это можно понять по полю 'eventName' со значением 'extsdk2.async.error'. Идентификатор ответа следует смотреть в поле 'QueryId'.
 +
 +
<syntaxhighlight lang="json">
 +
{
 +
  'type': 'Event',
 +
  'data': {
 +
    'channelName': 'SbisPluginEvent',
 +
    'eventName': 'extsdk2.async.error',
 +
    'type': 'object',
 +
    'data': {
 +
      'QueryId': '4fb98709-0264-4e01-a0aa-e4d30b4b65a7',
 +
      'Error': {...}
 +
    }
 +
  }
 +
}
 +
</syntaxhighlight>
 +
 +
 +
==== Событие extsdk2.async.progress====
 +
 +
Данное событие приходит при длительном выполнении асинхронного метода. Это можно понять по полю 'eventName' со значением 'extsdk2.async.progress'. Идентификатор ответа следует смотреть в поле 'QueryId'. В поле 'Progress' можно увидеть прогресс выполнения метода в процентах.
 +
 +
<syntaxhighlight lang="json">
 +
{
 +
  'type': 'Event',
 +
  'data': {
 +
    'channelName': 'SbisPluginEvent',
 +
    'eventName': 'extsdk2.async.progress',
 +
    'type': 'object',
 +
    'data': {
 +
      'QueryId': '4fb98709-0264-4e01-a0aa-e4d30b4b65a7',
 +
      'Progress': {...}
 
     }
 
     }
 
   }
 
   }

Текущая версия на 11:43, 11 ноября 2021

При работе с модулем ExtSdk2 Вы можете получить ряд событий. Информация из событий варьируется в зависимости от типа пришедшего сообщения. Это может быть успешное как успешное выполнение метода, так и ошибка. Предложенные события в этой статье приходят при вызове методов ReadAllObject и ReadAllXml2. Рекомендуем ознакомиться с видами событий и их обработкой ниже в статье.

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

Событие Message

Ответ такого типа содержит в себе результат работы вызываемого метода по переданному queryID при синхронной работе с плагином. Поле 'Result' содержит результат работы метода.

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

Событие Error

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

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

Событие Error #ASYNC

Событие типа Error #ASYNC приходит когда при вызове асинхронного метода необходимо сообщить пользователю, что метод начал асинхронную работу и необходимо ждать одно из событий Event #ASYNC. Данные об ошибке лежат в поле 'data'. Такую ошибку можно легко отличить от других по ключевому слову '#ASYNC' в поле 'detail'.

{
  '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

Данный ответ от плагина можно получить при взаимодействии с плагином. Например при подключении к плагину, где в объекте ответа в поле 'eventName' лежит 'connected'.

{
  'type': 'Event',
  'data': {
    'channelName': 'SbisPluginEvent',
    'eventName': 'connected',
    'type': 'object',
    'data': ...
  }
}

События Event #ASYNC

Событие extsdk2.async.complete

Данное событие приходит при успешном выполнении асинхронного метода. Это можно понять по полю 'eventName' со значением 'extsdk2.async.complete'. Идентификатор ответа следует смотреть в поле 'QueryId'.

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


Событие extsdk2.async.error

Данное событие приходит при не успешном выполнении асинхронного метода. Это можно понять по полю 'eventName' со значением 'extsdk2.async.error'. Идентификатор ответа следует смотреть в поле 'QueryId'.

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


Событие extsdk2.async.progress

Данное событие приходит при длительном выполнении асинхронного метода. Это можно понять по полю 'eventName' со значением 'extsdk2.async.progress'. Идентификатор ответа следует смотреть в поле 'QueryId'. В поле 'Progress' можно увидеть прогресс выполнения метода в процентах.

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