0

在向Powerapps 模型驱动/动态客户端 API发出请求时,如果您在任何查询字符串中出现错误,则会返回一个空白错误对象。即使响应正文包含错误对象,它也不会被解析。

按照上面链接的文档中的示例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,以一种有用的方式描述错误:

在此处输入图像描述

为什么在返回 400 时 API 没有解析响应正文,这不是预期的行为吗?

4

1 回答 1

0

我相信你的代码中有 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);
    }
);
于 2019-07-31T06:48:27.427 回答