Тело ответа не анализируется, когда 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 ошибки,
- Ваш запрос, вероятно, неверен, поле
new_OfferedBy
это поиск для Systemuser, но вам не нужен /systemuser, вы можете напрямую дать Guid пользователя. 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);
}
);