0

Powerapps Model Driven / Dynamics Client 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 が入力されていることがわかります。

ここに画像の説明を入力

API が 400 を返したときに応答本文が解析されないのはなぜですか? これは予期された動作ではありませんか?

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
                }
            )
    

アカウント エンティティのコードの 1 つを次に示します。

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 に答える