diadoc / diadocsdk-csharp

Official Diadoc SDK for C#
MIT License
35 stars 64 forks source link

Ошибка при вызове AddDocumentFromFile для договора #1157

Closed SmolinSpimex closed 1 month ago

SmolinSpimex commented 1 month ago

Добрый день!

При помощи DiadocComApiLib, в коде C#, пытаюсь отправить Исходящий документ (договор) тестовому контрагенту. Однако выполнение кода падает с исключением при вызове метода AddDocumentFromFile.

Код программы: ... IPackageSendTask2 send_task = _organizationBox.CreatePackageSendTask2(); send_task.CounteragentId = OTHER_PARTNER.ToString();

string doc_type = "Contract"; string doc_function = "default"; string doc_version = "v1"; string file_path = "test.docx";

ICustomDocumentToSend document_to_send = send_task.AddDocumentFromFile(doc_type, doc_function, doc_version, file_path); .. Текст ошибки:

System.Runtime.InteropServices.COMException: Неверный тип документа

Какой тогда тип нужно указывать для отправки договора через Диадок? Или проблема в чём-то другом?

SmolinSpimex commented 1 month ago

Если, просто, вызвать метод: ICustomDocumentToSend document_to_send = send_task.AddDocumentFromFile(doc_type, doc_function, doc_version);

То происходит уже исключение: System.Runtime.InteropServices.COMException: WIN32[0x00002EE2]WinHttpQueryDataAvailable

SmolinSpimex commented 1 month ago

При помощи программы, которая регистрирует все исходящие запросы и ответы на них, смог просмотреть что "дергает" DiadocComApiLib в момент моих попыток отправить этот "договор": (После этапа успешной авторизации) GET /V2/GetMyUser GET /GetMyOrganizations

GET /GetMyEmployee? GET /V2/GetDocumentTypes?

Причём, в ответ на этот последний запрос мне пришло (body): Nonformalized3Неформализованный документ

Что натолкнуло на идею, что не все виды документов я могу отправить со своей учетки\с этого ящика\организации. Поэтому я решил проверить выполнение команды с этим типом:

ICustomDocumentToSend document_to_send = send_task.AddDocumentFromFile("Nonformalized", doc_function, doc_version, file_path);

И, в итоге, исходящий документ отправился! Конечно, это был не договор, и подписания он там не требовал.

SmolinSpimex commented 1 month ago

Исследовав "тело" ответа на запрос "GetDocumentTypes" более тщательно, через Notepad++, я обнаружил там большее количество видом документов.

И тогда, ещё раз, попробовал отправить исходящий. Теперь, уже добавив несколько дополнительных меток метаданных. В итоге получился такой вот код, который и успешно выполнился! Исходящий договор был отправлен без каких-либо ошибок.

IPackageSendTask2 send_task = _organizationBox.CreatePackageSendTask2(); send_task.CounteragentId = OTHER_PARTNER.ToString();

string doc_type = "Contract"; string doc_function = "default"; string doc_version = "v1"; string file_path = "test.docx";

ICustomDocumentToSend document_to_send = send_task.AddDocumentFromFile(doc_type, doc_function, doc_version, file_path);

AddMetaData(document_to_send, "FileName", "test.docx"); AddMetaData(document_to_send, "ContractPrice", "500"); AddMetaData(document_to_send, "DocumentNumber", "ТСТ-Д500"); AddMetaData(document_to_send, "DocumentDate", DateTime.Now.ToString()); send_task.Send();

SmolinSpimex commented 1 month ago

Таким образом, все вопросы удалось решить!