Разработка компонента сервиса ответных сообщений
Далее приведена часть исходного кода (только публичные методы) примера реализации класса 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 | Не отправили, то же, что и для неформализованных. |