Open ethaniel opened 4 years ago
Разобрался в проблеме, забыл заэкранировать параметр GET documentFunction через urlencode. Но вопрос остается - почему нужно указывать documentFunction в GET, если он уже есть в XML?
Привет.
Потому что методы Generate(Sender/Recipient)TitleXml
универсальные, а полный тип в Диадоке находится по связке "тип-функция-версия".
Не всегда функция может быть указана в контенте документа, случай с УПД лишь частный.
Привет! JSON по GenerateSenderTitleXml не вернули? Модет из-за передачи JSON возвращаться ошибка "Document type UniversalTransferDocument-%D0%A1%D0%A7%D0%A4%D0%94%D0%9E%D0%9F-utd820_05_01_01 is not allowed to send"?
Добрый день! Метод GenerateSenderTitleXml не принимает JSON. В теле запроса должен содержаться заполненный XML-файл.
Добрый день! Метод GenerateSenderTitleXml не принимает JSON. В теле запроса должен содержаться заполненный XML-файл.
А чем было вызвано решение резко перейти на XML? Почему вы не перевели все остальные методы вашего API на XML?
А чем было вызвано решение резко перейти на XML?
Решение вызвано тем, что не было универсальности в генерации и парсинге абсолютно любого типа, вместо этого были отдельные методы, которые необходимо развивать и поддерживать.
резко
Обобщённые методы GenerateSenderTitleXml
и GenerateRecipientTitleXml
доступны в API по меньшей мере с лета 2018-го года.
820-й формат по факту первый, в котором мы отказались от старой парадигмы с отдельными методами на тип. И возможность его генерации через xml в Диадоке появилась в конце мая 2019-го года.
Почему вы не перевели все остальные методы вашего API на XML?
Со всеми предыдущими форматами (155, 83 и т.д.) можно также работать и универсально, через новые методы и упрощенные xml (хотя сейчас с устаревшими форматами в этом смысла нет, конечно). Точечные старые методы, работающие через json или протобуфер, будут удалены, когда интеграции будут готовы отказаться от их использования (т.е. никогда :) )
Для вас же по идее не должно быть разницы - парсить данные из упрощенного xml, или из json. Объем работы для вас абсолютно одинаковый.
А для нас, разработчиков, уже начавших разработку под json, который является стандартом api во всех крупных системах (и на котором работает 95% вашего собственного api), переход на xml является очень сложной задачей.
Особенно когда вы не предоставляете примеров, как это раньше вы делали под protobuf/json.
Что делать с этой ошибкой? Мало того, что вы отказались от JSON, переименовали BoxId в BoxGuid
А можно чуть подробнее про Guid? Я в примерах вижу BoxId в виде строки без -, в вашем примере это guid, а диадок возвращает строку с @diadoc.ru, и где тут правда – не ясно. И в документации об этом ни слова.
Ошибка у меня сейчас "The 'BoxId' attribute is invalid - The value 'xxxxxxxxx@diadoc.ru' is invalid according to its datatype 'guid' - The Pattern constraint failed."
Видимо разработчики СКБ Контур ставят свое удобство превыше удобства своих пользователей. BoxId в XML = BoxIdGuid в json/protobuf. Если вы не хранили BoxIdGuid у себя, то попадос, придется синхронизировать вашу локальную базу с базой диадока еще раз.
@denlapaev guid содержится в BoxId до @diadoc.ru, поэтому в коде вы можете получить гуид через Guid.Parse(), предварительно откинув часть @diadoc.ru.
Так же обращаю внимание, что во всех методах, где мы на вход требуем boxId, мы для поддержания обратной совместимости так же принимаем и boxId с @diadoc.ru
@OlgaPetushina
Вы лукавите:
@diadoc.ru не принимается вообще.
Line: 9, Position: 39, /UniversalTransferDocument[1]/Sellers[1]/Seller[1]/OrganizationReference[1]/@BoxId: The 'BoxId' attribute is invalid - The value '002868b606a247a68852f4af3fe6ba21@diadoc.ru' is invalid according to its datatype 'guid' - The Pattern constraint failed."
И нельзя просто взять и вырезать часть до @diadoc.ru тоже:
Line: 9, Position: 39, /UniversalTransferDocument[1]/Sellers[1]/Seller[1]/OrganizationReference[1]/@BoxId: The 'BoxId' attribute is invalid - The value '002868b606a247a68852f4af3fe6ba21' is invalid according to its datatype 'guid' - The Pattern constraint failed."
я не говорила про контракты для генерации. я говорила про параметры в запросах. это не ваш кейс. соглашусь, что информация в контексте вопроса была лишней.
Что делать с этой ошибкой? Мало того, что вы отказались от JSON, переименовали BoxId в BoxGuid, создав нереальную головную боль, так теперь непонятно как правильно генерировать и подавать XML.
Подаем на
Так вы умудрились еще русские символы запихать в GET, что является жутким моветоном, так как непонятно в какой кодировке вы работаете, то UTF-8, то Windows-1251.
Зачем передавать documentFunction в GET, если он уже и так присутствует в XML?!