トピックス

知識創造研究室 by CRM(xRM)

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を使用したレコード取得を書きたいと思います。

※ 記事の内容は個人発信の参考情報です。記事内容のご利用は、ご自身の判断でお願いします。

この記事を書いた人
原田 研吾

文系プログラマ(.NET Framework、Java)。
25歳から始めたプログラムは死ぬ気で頑張った(誰も褒めてくれないので自分で誉めてます)。
気が付けば製品開発部のマネージャー・・・
弊社Dynamics CRM トレーニングの講師をやったりもします。
事業部やら役職やらありますが、『事業部内の便利屋』が一番フィットする肩書です。
アーカス・ジャパン株式会社 CRM製品
CRM製品に関するお問い合わせ
TEL 06-6195-7501
お問い合わせはこちら

同じカテゴリの記事

Translate »