Разработка компонента сервиса ответных сообщений

Далее приведена часть исходного кода (только публичные методы) примера реализации класса OutgoingMessagesService для отправки ответа на неформализованный документ.

OutgoingMessagesService outgoingMessagesService = new OutgoingMessagesService(cardControl.ObjectContext); (1)

EdiMessage messageCard = outgoingMessagesService.FindIncomingMessageCards(cardId).FirstOrDefault(); (2)

(3)


DocumentUpdaterService documentUpdaterService = new DocumentUpdaterService(objectContext); (4)

Guid newSignatureGroupId = documentUpdaterService.CreateNewSignatures(cardId, certificate, false); (5)

(6)

DataReaderService dataReaderService = new DataReaderService(objectContext); (7)

ItemCollection<DocumentFileData> signedFiles = dataReaderService.GetSignedFiles(cardId, newSignatureGroupId); (8)

if (outgoingMessagesService.CreateOutgoingSignatureReplies(cardId, signedFiles).Any())
{

} (9)
else
{
(10)
}
1 Сервис отправки исходящих событий.
2 Поиск карточки сообщений, для которой нужен ответ, для документа cardId.
3 Данный момент можно пропустить, если уже есть готовая ответная подпись.
Будьте внимательны, при пропуске существует риск отправить оригинальную подпись контрагента как ответную.
4 Сервис изменения документа.
5 X509Certificate2 certificate на входе — это сертификат, которым делаем новые подписи.
6 Конец создания новой подписи.
7 Сервис чтения данных из карточек.
8 Получаем свежеподписанные файлы.
При наличии готовой ответной подписи, newSignatureGroupId — это ID подписи из списка подписей.
9 Все хорошо, подписи отправили.
Ответные подписи успешно отправлены.
10 По карточке сообщения уже некому отправлять ответ — отработал другой скрипт, кто-то отправил руками и т.п.
Не существует связанных писем в ящике ЮЗДО, ожидающих ответных действий по ним. Отправка произведена не будет.

Далее приведён пример отправки отказа от подписи, сервисы те же, что в предыдущем примере:

outgoingMessagesService.CreateOutgoingRejectionReplies(cardId, commentText, certificate); (1)
1 commentText — причина отказа, X509Certificate2 certificate — сертификат.

Следующий пример демонстрирует отправку положительного ответа на УПД или УКД:

string invoiceReplyData = dataReaderService.GetInvoiceReplyData(cardId); (1)

if (outgoingMessagesService.CreateOutgoingInvoiceReplies(cardId, certificate, invoiceReplyData).Any()) (2)
{
(3)
}
else
{
(4)
}
1 Получение данных ответа для ответа из карточки.
2 Генерация файла ответа, подписание его сертификатом X509Certificate2 certificate, отправка.
3 Отправили успешно.
4 Не отправили, то же, что и для неформализованных.