Внутренний обмен - Synerdocs/synerdocs-sdk GitHub Wiki

Обмен документами между подразделениями одной организации можно реализовать двумя способами – используя SendMessage и SendInternalMessage.

При использовании SendMessage можно выделить следующие плюсы:

  • Стандартные механизмы и методы
  • Возможность отправки в несколько подразделений
  • Возможность аннулирования
  • Работа с сообщениями
  • Используется в большинстве случаев, все нововведения направлены именно на этот метод

При использовании SendInternalMessage можно выделить следующие плюсы:

  • Возможность отправить документ конкретному сотруднику
  • Пользователи, использующие веб-клиент видят четкое разграничение между внутренними и внешними документами – они отображаются на разных вкладках

Минусы:

  • Работа исключительно с документами, а не с сообщениями
  • Необходимость использования уникальных методов, что усложнит интеграцию в случае, если требуется работать как с внешним, так и с внутренним документооборотом
  • Редко используется абонентами. Развитие данного и сопутствующих методов не входит в ближайшие планы

В рамках внутреннего обмена рассмотрим сценарий с использованием ПЭП, где подразделение-отправитель использует API, а подразделение-получатель работает в веб-клиенте.

SendMessage:

  1. Для аутентификации в сервисе используем метод Authenticate. Токен полученный в результате аутентификации действует в течение 24 часов. Поэтому можно выбрать два варианта реализации аутентификации:
    • Раз в сутки. Например, в начале рабочего дня.
    • Каждый раз при подписании документа.
  2. Для определения подразделения-получателя используем метод GetOrganizationStructure. Здесь также возможно два варианта реализации:
    • Сохранять полученные идентификаторы подразделений в своей базе данных. Вызывать GetOrganizationStructure только в случаях, когда получателем выбрано подразделение с неизвестным ИД.
    • Вызывать GetOrganizationStructure перед отправкой (если нет возможности сохранять ИД подразделений)
  3. Перед отправкой документ необходимо подписать, для этого используем CreateSimpleSignature
  4. Отправка и получение документов и подписей реализовано за счет отправки сообщений, в которые вкладывается контент. Отправка сообщений реализована за счет метода SendMessage.
  5. Управление списком сообщений и документов в случае использования SendMessage
  6. Подразделение-получатель, при необходимости, может «ответить» на документ, отправив, например, документ с информацией об установленных расхождениях связав его с первоначальным документом. В этом случае, связь отразится в поле RelatedDocumentIds.
  7. Если потребуется аннулировать документ, последовательность действий будет такой: GenerateRevocationOffer (генерируем ПОА) - CreateSimpleSignature (подписываем ПОА) - SendMessage (отправляем ПОА)

SendInternalMessage:

  1. Для аутентификации в сервисе используем метод Authenticate. Токен полученный в результате аутентификации действует в течение 24 часов. Поэтому можно выбрать два варианта реализации аутентификации:
    • Раз в сутки. Например, в начале рабочего дня.
    • Каждый раз при подписании документа
  2. Для определения подразделения-получателя используем метод GetOrganizationStructure. Здесь также возможно два варианта реализации:
    • Сохранять полученные идентификаторы подразделений в своей базе данных. Вызывать GetOrganizationStructure только в случаях, когда получателем выбрано подразделение с неизвестным ИД.
    • Вызывать GetOrganizationStructure перед отправкой (если нет возможности сохранять ИД подразделений)
  3. Перед отправкой документ необходимо подписать, для этого используем CreateSimpleSignature
  4. Отправка и получение документов и подписей реализовано за счет отправки сообщений, в которые вкладывается контент. Отправка сообщений внутри одной организации может быть реализована при помощи метода SendInternalMessage.
  5. При управлении списком сообщений возникают сложности, т.к. метод GetMessages не позволяет получить информацию о сообщениях отправленных с использованием SendInternalMessage. В качестве альтернативы можно использовать GetInternalDocuments, возвращающий перечень документов (не сообщений) и GetDocumentContent для получения контента документов, размер которых превышает 1Мб.
  6. Подразделение-получатель, при необходимости, может отправить документ с информацией об установленных расхождениях связав его с первоначальным документом. В этом случае, связь отразится в поле RelatedDocumentIds.