Тело ответа не анализируется, когда API возвращает http 400

Если вы делаете запросы к API-интерфейсу Powerapps Model Driven / Dynamics, если вы допустили ошибку в любой из строк запроса, вы получите пустой объект ошибки. Даже если тело ответа содержит объект ошибки, он не анализируется.

Следуя примеру из документации, указанной выше для retrieveMultipleRecords, У меня есть объект с полем поиска для пользователя с именем new_OfferedBy, Чтобы отфильтровать это для конкретного пользователя, вам необходимо отфильтровать /systemuserid, Если вы неправильно указали имя какого-либо свойства (с учетом регистра), вы получите 400 ответов. Пример ниже вернет ответ 400.

// this query looks for the systemuser property when it should look for systemuserid
// this.currentUser returns the guid of the current user

var query = "?$filter=new_OfferedBy/systemuser eq (" + this.currentUser() +")";

Xrm.WebApi
    .retrieveMultipleRecords("new_lastaskswap", query)
    .then(
        function success(result) {
            console.log("Result Success:");
            console.log(result);
            // perform additional operations on retrieved records
        },
        function (error) {
            console.log("Error from .then():");
            console.log(error);
            // handle error conditions
        }
    )

Он выводит следующую информацию в консоль, которая совсем не полезна.

{errorCode: 2147951872, message: "", code: 2147951872, innerror: undefined}

Однако, если вы посмотрите на фактический ответ на запрос в Chrome devtools, вы увидите, что тело ответа заполнено JSON, описывающим ошибку полезным способом:

Почему тело ответа не анализируется API, когда он возвращает 400. Разве это не ожидаемое поведение?

1 ответ

Я полагаю, в вашем коде 2 ошибки,

  1. Ваш запрос, вероятно, неверен, поле new_OfferedBy это поиск для Systemuser, но вам не нужен /systemuser, вы можете напрямую дать Guid пользователя.
  2. Xrm.WebApi.online.retrieveMultipleRecords и нет Xrm.WebApi .retrieveMultipleRecords

    var query = "?$filter=new_OfferedBy eq (" + this.currentUser().replace(/[{}]/g, "") +")";

        Xrm.WebApi.online.retrieveMultipleRecords("new_lastaskswap", query)
            .then(
                function success(result) {
                    console.log("Result Success:");
                    console.log(result);
                    // perform additional operations on retrieved records
                },
                function (error) {
                    console.log("Error from .then():");
                    console.log(error);
                    // handle error conditions
                }
            )
    

Вот один из моих кодов для учетной записи

Xrm.WebApi.online.retrieveMultipleRecords("account", "?$select=accountid,accountnumber&$filter=_createdby_value eq 1234567897").then(
    function success(results) {
        for (var i = 0; i < results.entities.length; i++) {
            var accountid = results.entities[i]["accountid"];
            var accountnumber = results.entities[i]["accountnumber"];
        }
    },
    function(error) {
        Xrm.Utility.alertDialog(error.message);
    }
);
Другие вопросы по тегам