WriteDocumentEx - Расширенный метод создания и отправки документа (ExtSdk2) — различия между версиями

Материал из razgovorov.ru
Перейти к: навигация, поиск
Строка 23: Строка 23:
 
# Проверяем вложения на наличие Ссылок
 
# Проверяем вложения на наличие Ссылок
 
## Если во всех вложениях ссылки проставлены, то записываем документ, запускаем его в документооборот и возвращаем [[ #Результат ]]
 
## Если во всех вложениях ссылки проставлены, то записываем документ, запускаем его в документооборот и возвращаем [[ #Результат ]]
## Если во вложениях проставлены не все ссылки, то возвращаем ошибку вида ExtException с кодом 308 сериализованную в строку, где в detail лежит текст "#ASYNC".  См. [[ #Исключения ]] №1. Она обозначает, что плагин сам проставит недостающие ссылки и автоматически произойдет переход к этапу 3. Во время проставления ссылок возможны следующие сообщения от плагина:
+
## Если во вложениях проставлены не все ссылки, то возвращаем ошибку вида ExtException с кодом 308 сериализованную в строку, где в detail лежит текст "#ASYNC".  См. [[ #Исключения ]] №1. Она обозначает, что плагин загрузит файлы из вложений на СБИС.Диск и проставит недостающие ссылки в соответствующий объект Файл. Во время проставления ссылок возможны следующие события от плагина:
### Сообщение о прогрессе загрузки вложений в виде объекта json сериализованного в строку
+
### Событе с именем "extsdk2.writedocumentex.progress" о прогрессе загрузки вложений в виде объекта json сериализованного в строку.
 
###:<source lang="json">
 
###:<source lang="json">
 
{
 
{
Строка 31: Строка 31:
 
}
 
}
 
</source>
 
</source>
### В случае ошибки плагин выдает соответствующее сообщение. Обработка документа плагином немедленно завершается. См. [[ #Исключения ]] №2
+
### В случае ошибки плагин пробрасывает событие с именем "extsdk2.writedocumentex.error". Оно содержит QueryID вызываемого метода и ExtException, сериализованные в строку( См. [[ #Исключения ]] №2 ). Обработка документа плагином немедленно завершается.
# Данный шаг выполняем при условии, что все ссылки во вложениях проставлены. Документ готов к обработке плагином.  
+
# Как только все ссылки во вложениях успешно расставлены, плагин автоматически создает редакцию документа и производит указанный этап документооборота, указанный в документе.
## Записываем документ, запускаем его в документооборот и возвращаем:
+
## В случае успеха плагин возвращает сообщение
 
##* {{Шаблон:ApiParam|QueryId||строка| Идентификатор запроса в плагин}}
 
##* {{Шаблон:ApiParam|QueryId||строка| Идентификатор запроса в плагин}}
 
##* {{Шаблон:ApiParam|Result||объект| [[Документ_-_Объект_ExtSdk2|объект Документ]]}}
 
##* {{Шаблон:ApiParam|Result||объект| [[Документ_-_Объект_ExtSdk2|объект Документ]]}}

Версия 15:01, 18 февраля 2021

Описание

Метод позволяет за один вызов записать и запустить документооборот по документу.

Алгоритм работы

Асинхронная загрузка файлов в WriteDocumentEx.

  1. Принимаем на вход объект Документ с массивом вложений вида объект Файл со свойствами: Путь к файлу, Строка, Двоичные данные, Ссылка, Обработчики. Дополнительные данные по текущим свойствам см.метод WriteDocument.
  2. Проверяем вложения на наличие Ссылок
    1. Если во всех вложениях ссылки проставлены, то:
      1. Выполняем СБИС.ЗаписатьДокумент.
      2. Если необходимо действие для документа, то выполняем: СБИС.ПодготовитьДействие и СБИС.ВыполнитьДействие.
    2. Если во вложениях проставлены не все ссылки, то возвращаем ошибку с текстом "#ASYNC" и кодом 308. Она обозначает, что плагин сам проставит недостающие ссылки. Необходимо подождать.
      1. Во время данного этапа возможны сообщения от плагина о проценте обработки вложений.
      2. В случае ошибки плагин выдает соответствующее сообщение. Обработка документа плагином немедленно завершается.
  3. Данный шаг выполняем при условии, что все ссылки во вложениях проставлены. Документ готов к обработке плагином.
    1. Выполняем запись документа через СБИС.ЗаписатьДокумент.
    2. Если необходимо действие для документа, то выполняем: СБИС.ПодготовитьДействие и СБИС.ВыполнитьДействие.
    3. При успешном выполнении данных операций плагин выдает сообщение с итоговым объектом документ. См. "Результат"
    4. В случае ошибки плагин выдает соответствующее сообщение.


Асинхронная загрузка файлов в WriteDocumentEx.

  1. Принимаем на вход объект Документ с массивом вложений вида объект Файл со свойствами: Путь к файлу, Строка, Двоичные данные, Ссылка, Обработчики. Дополнительные данные по текущим свойствам см.метод WriteDocument.
  2. Проверяем вложения на наличие Ссылок
    1. Если во всех вложениях ссылки проставлены, то записываем документ, запускаем его в документооборот и возвращаем #Результат
    2. Если во вложениях проставлены не все ссылки, то возвращаем ошибку вида ExtException с кодом 308 сериализованную в строку, где в detail лежит текст "#ASYNC". См. #Исключения №1. Она обозначает, что плагин загрузит файлы из вложений на СБИС.Диск и проставит недостающие ссылки в соответствующий объект Файл. Во время проставления ссылок возможны следующие события от плагина:
      1. Событе с именем "extsdk2.writedocumentex.progress" о прогрессе загрузки вложений в виде объекта json сериализованного в строку.
        {
          "QueryId": "49a7caad-5eea-4d7d-8e91-d4a4f7ff6c47",
          "Progress": "50"
        }
      2. В случае ошибки плагин пробрасывает событие с именем "extsdk2.writedocumentex.error". Оно содержит QueryID вызываемого метода и ExtException, сериализованные в строку( См. #Исключения №2 ). Обработка документа плагином немедленно завершается.
  3. Как только все ссылки во вложениях успешно расставлены, плагин автоматически создает редакцию документа и производит указанный этап документооборота, указанный в документе.
    1. В случае успеха плагин возвращает сообщение
    2. В случае ошибки плагин выдает соответствующее сообщение. См. "Исключения" №2

Параметры

Результат

Исключения

  1. Сообщение об ошибке с текстом "#ASYNC" и кодом 308
    {
      "code": 308,
      "detail": "#ASYNC",
      "dump": {},
      "message": "Ожидайте загрузки документа",
      "method_name": "ExtSdk2.AsyncWriteDocumentEx",
      "stack": [
        {
          "method_name": "AsyncWriteDocument 49a7caad-5eea-4d7d-8e91-d4a4f7ff6c47"
        }
      ]
    }
  2. Сообщение об ошибке с QueryId вызываемого метода
    {
      "QueryId": "49a7caad-5eea-4d7d-8e91-d4a4f7ff6c47",
      "Error": "Ошибка ExtException сериализованная в строку"
    }

Пример успешного вызова

Запрос

Ответ