Веб-API Dynamics CRM 8.2 «Неправильный XML в файле cookie пейджинга»

Я использую файл JavaScript веб-ресурса для извлечения нескольких записей из CRM.

var fetchXML = `
            <fetch mapping = "logical" output-format = "xml-platform" version = "1.0" page = "1">
              <entity name = "account" >
                <attribute name = "name" />
              </entity>
            </fetch>`;

var query = "accounts?fetchXml = " + fetchXML;

callWebAPI(query);

После того, как я получаю пейджинговый файл cookie в первом запросе, я пытаюсь отправить его во второй запрос, чтобы получить данные для второй страницы:

<fetch mapping = "logical" output-format = "xml-platform" version = "1.0" page = "2" paging-cookie = "cookie i get from first request"
     ...
</fetch>`;

Оригинальный файл cookie из ответа выглядит так:

%253ccookie%2520page%253d%25221%2522%253e%253cname%2520last%253d%2522Deco%2520Voyages%2522%2520firstnull%253d%25221%2522%2520%252f%253e%253caccountid%2520last%253d%2522%257b9AFBEAA6-9EA7-E711-8103-70106FAA4841%257d%2522%2520first%253d%2522%257b0A86656D-BEA7-E711-8103-70106FAA4841%257d%2522%2520%252f%253e%253c%252fcookie%253e

Я пытался преобразовать и отправить cookie в соответствии с документацией: https://docs.microsoft.com/en-us/dynamics365/customer-engagement/developer/org-service/page-large-result-sets-with-fetchxml

var transformedCookie1 = GetDecodedCookie1(decodeURIComponent(decodeURIComponent(pagingcookie)));

var transformedCookie2 = GetDecodedCookie2(decodeURIComponent(decodeURIComponent(pagingcookie)));

function GetDecodedCookie1(cookie) {
    return cookie.replace(/</g, "&lt;")
                 .replace(/>/g, "&gt;")
                 .replace(/"/g, "&quot;")
}

function GetDecodedCookie2(cookie) {
    return cookie.replace(/</g, "%26lt;")
                 .replace(/>/g, "%26gt;")
                 .replace(/"/g, "%26quot;")
}

1) В первом случае, когда я использую GetDecodedCookie1, я получаю:

Script error. in  at 0:0  null

Веб-API Dynamics CRM 8.2 «Неправильный XML в файле cookie пейджинга»

Мои параметры строки запроса не работают.

2) Во втором случае, когда я использую параметры строки запроса GetDecodedCookie1, все выглядит нормально, но я получаю:

Malformed XML in the Paging Cookie

В чем здесь проблема?

ты решил это?

Marcelo Acosta Díaz 21.03.2019 15:04

К сожалению, нет, ошибка остается, даже когда я добавляю идентификатор учетной записи в fetchXML.

Milos 21.03.2019 16:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
2
597
2

Ответы 2

куки-файлу пейджинга нужен идентификатор последней записи, включите «accountid» в качестве атрибута в ваш fetchxml

Надеюсь, это поможет - M.Acosta.D

Является ли использование FetchXML обязательным для запросов к веб-API? В противном случае вы можете упростить себе жизнь, используя OData. Ваш FetchXML, переведенный в запрос OData:

https://[Organization URI]/api/data/v8.2/accounts?$select=name

Что вернет ответ, аналогичный приведенному ниже, ЕСЛИ в Dynamics будет более 5000 учетных записей, иначе он не будет содержать атрибут @odata.nextLink (я свернул коллекцию значений для лучшей читаемости):

{
     "@odata.context": "https://[Organization URI]/api/data/v8.2/$metadata#accounts(name)",
     "value": [],
     "@odata.nextLink": "https://[Organization URI]/api/data/v8.2/accounts?$select=name&$skiptoken=%3Ccookie%20pagenumber=%222%22%20pagingcookie=%22%253ccookie%2520page%253d%25221%2522%253e%253caccountid%2520last%253d%2522%257b92655027-054C-E911-A817-000D3ABA3F3F%257d%2522%2520first%253d%2522%257b93C71621-BD9F-E711-8122-000D3A2BA2EA%257d%2522%2520%252f%253e%253c%252fcookie%253e%22%20istracking=%22False%22%20/%3E"
}

После получения этого ответа вам просто нужно проанализировать его и выполнить запрос к ссылке, заданной атрибутом @odata.nextLink, для получения следующего пакета записей, в моем случае эта ссылка будет получать учетную запись с 5001 по 10000.

Для получения дополнительной информации о том, как запрашивать данные с помощью веб-API, нажмите здесь для получения официальной документации.

Другие вопросы по теме