Dynamics 365(Dynamics CRM) Web API レコード削除・関連付け編
みなさん、こんにちは。
あつい、アツイ、暑い、熱い~(笑)
こんなに暑いので、大好物のマクドがデリバリーできるUberEATSを調べましたw
でも、現金払いが出来ないので却下ですwww
Web API シリーズもそろそろ終盤に差し掛かってまいりました。そんな今回は、レコードの削除、関連付け、関連付けの解除を書いていこうと思います
Dynamics 365 レコード削除の基本
レコードの削除はとっても単純です。HTTPメソッド"DELETE"を使用してレコードを特定するURLにリクエストするだけです。
というわけで、下記のようになります。
var requestUrl = "https://<orgname>.crm7.dynamics.com/api/data/v8.2/accounts(394BD9A2-3945-E711-8110-C4346BC53068)";
var req = new XMLHttpRequest();
req.open("DELETE", encodeURI(requestUrl), 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.onreadystatechange = function () {
if (this.readyState == 4 /* complete */) {
req.onreadystatechange = null;
if (this.status == 204) {
Xrm.Utility.alertDialog("レコードを削除しました!", null);
} else {
var error = JSON.parse(this.response).error;
Xrm.Utility.alertDialog(error.message, null);
}
}
};
req.send(null);
削除したいレコードを特定できればとても簡単ですね。
Dynamics 365 レコード関連付けの基本
レコードの関連付けとは1:N、N:1、N:Nの関連付けを行う事です。N:1の関連付けを実現するのに使用するのが単一値ナビゲーションプロパティ、1:N、N:Nの関連付けを実現するのに使用するのがコレクション値ナビゲーションプロパティとなります。
単一値ナビゲーションプロパティはレコード作成編、更新編で検索フィールドの設定方法で実現できているので、ここではコレクション値ナビゲーションプロパティを使用した関連付け方法のサンプルを記載します。
ここでは、取引先企業(account)の1:Nに存在する取引先担当者(contact)関連付けを行いたいと思います。それではサンプルをどうぞ~
var contact = {};
// 関連付けしたい取引先担当者のGUID
contact["@odata.id"] = "/contacts(5d4936f4-c95e-e711-80f6-480fcff207f1)";
var apiUrl = "https://ORGNAME.crm7.dynamics.com/api/data/v8.2";
var record = "/accounts(7d612113-c75e-e711-80f6-480fcff207f1)";
// ここでナビゲーションプロパティ名を指定します。
var navProp = "/contact_customer_accounts/$ref";
var requestUrl = apiUrl + record + navProp;
var req = new XMLHttpRequest();
req.open("POST", encodeURI(requestUrl), 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.onreadystatechange = function () {
if (this.readyState == 4 /* complete */) {
req.onreadystatechange = null;
if (this.status == 204) {
Xrm.Utility.alertDialog("関連付け成功!", null);
} else {
var error = JSON.parse(this.response).error;
Xrm.Utility.alertDialog(error.message, null);
}
}
};
req.send(JSON.stringify(contact));
てな感じになります。この1:Nの関連付けは、取引先担当者(contact)側から見ればN:1の関連になるので、レコード作成編、更新編で検索フィールドの値の設定と同じ結果となります。この方法でN:Nの関連付けも可能となるのでお試しあれ~!笑
単一値ナビゲーションプロパティの場合は、HTTPメソッドを"PUT"とすることで同じように実現できます。
Dynamics 365 レコード関連付け解除の基本
関連付けができたので次は関連付けの解除です。早速サンプルをどうぞ~!
var apiUrl = "https://ORGNAME.crm7.dynamics.com/api/data/v8.2";
var record = "/accounts(7d612113-c75e-e711-80f6-480fcff207f1)";
// ここでナビゲーションプロパティ名と対象のレコードのGUIDを指定します。
var navProp = "/contact_customer_accounts(5d4936f4-c95e-e711-80f6-480fcff207f1)/$ref";
var requestUrl = apiUrl + record + navProp;
var req = new XMLHttpRequest();
req.open("DELETE", encodeURI(requestUrl), 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.onreadystatechange = function () {
if (this.readyState == 4 /* complete */) {
req.onreadystatechange = null;
if (this.status == 204) {
Xrm.Utility.alertDialog("関連付け解除成功!", null);
} else {
var error = JSON.parse(this.response).error;
Xrm.Utility.alertDialog(error.message, null);
}
}
};
req.send(null);
HTTPメソッドを"DELETE"として、解除対象のGUIDを指定するURLに修正することで関連付けの解除はできます。単一値ナビゲーションプロパティの場合は上記のサンプルの解除対象のURLが不要になります。
次回予告
これまでWeb API を数回にわたりご説明してきました。何点か要望もいただきましたので、次回はレコード取得編の拡張としてページングとFetchXMLを使用したレコード取得を書きたいと思います。
※ 記事の内容は個人発信の参考情報です。記事内容のご利用は、ご自身の判断でお願いします。