smemo

技術メモです。

【Dynamics】WebAPIの機能拡張 作成または更新プログラム上のリターン エンティティ データ

WebAPIでエンティティレコードを作成、更新した際に以前までは作成したレコードのGUIDのみがリターンされていました。今回のアップデートでエンティティのフィールドをリターンすることができるようになりました。


以下、MSDNのサンプルの抜粋です。
Web API を使用してエンティティを作成する



リクエストのサンプル

POST [Organization URI]/api/data/v8.2/accounts?$select=name,creditonhold,address1_latitude,description,revenue,accountcategorycode,createdon HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
Content-Type: application/json; charset=utf-8
Prefer: return=representation

{
    "name": "Sample Account",
    "creditonhold": false,
    "address1_latitude": 47.639583,
    "description": "This is the description of the sample account",
    "revenue": 5000000,
    "accountcategorycode": 1
}

レスポンスのサンプル

{
  "@odata.context":"https://orgname.api.crm7.dynamics.com/api/data/v8.2/$metadata#accounts(name,creditonhold,address1_latitude,description,revenue,accountcategorycode,createdon)","value":[
    {
      "@odata.etag":"W/\"635745\"","name":"001","creditonhold":false,"address1_latitude":null,"description":null,"revenue":null,"accountcategorycode":null,"createdon":"2017-01-07T12:07:42Z","_transactioncurrencyid_value":"eee7fb82-6fc8-e611-80fc-c4346bc52044","accountid":"7ccb8ce3-d1d4-e611-80fd-c4346bad16b0"
    }
}

この機能を使うことでCREATEやUPDATE後に何か処理を行う場合に、取得処理を省くことができるようになりました。

追記:リターンエンティティデータを試した際のサンプルコード(備忘)

function CreateRecord(entitySetName, data) {
    return new Promise(function (resolve, reject) {
        var req = new XMLHttpRequest();
        req.open("POST","api/data/v8.2/accounts?$select=name,creditonhold,address1_latitude,description,revenue,accountcategorycode,createdon", true);
        req.setRequestHeader("Accept", "application/json");
        req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        req.setRequestHeader("OData-MaxVersion", "4.0");
        req.setRequestHeader("OData-Version", "4.0");
        req.setRequestHeader("Prefer", "return=representation");
        req.onreadystatechange = function () {
            if (this.readyState == 4 /* complete */) {
                req.onreadystatechange = null;
                if (this.status == 201) {
                    console.log("JSON.parse:", JSON.parse(this.responseText));
                    resolve(JSON.parse(this.responseText));
                }
                else {
                    reject(Common.WebAPI.ErrorHandler(req.response));
                }
            }
        };
        req.send(JSON.stringify(data));
});