Dynamics CRM 2011 SDK.REST.js サンプルライブラリ


みなさん、こんにちは。

今回は開発者向けの情報として、REST エンドポイントを利用する
JScript で利用できる、SDK.REST.js サンプルライブラリを紹介します。

SDK.REST.js サンプルライブラリ

このライブラリには、以下のパブリック メソッドが含まれます。

  • SDK.REST.createRecord
  • SDK.REST.retrieveRecord
  • SDK.REST.updateRecord
  • SDK.REST.deleteRecord
  • SDK.REST.retrieveMultipleRecords
  • SDK.REST.associateRecords
  • SDK.REST.disassociateRecords

これらの各メソッドには、successCallback および errorCallback パラメーターがあり、
データ操作の成功または失敗時に呼び出される関数への参照を指定できます。

このライブラリを利用することで、REST エンドポイントを利用した
CRUD 操作がより完結にかけるようになります。

ライブラリを利用したサンプル

SDK.REST.js  を利用したサンプルはいくつかありますが、今回はまずシンプルな
CRUD 操作のサンプルを紹介します。

サンプルは、sdk\samplecode\js\restendpoint\jscriptrestdataoperations\
にあるものを利用します。動作を試すために、事前にこのフォルダにある
jscriptrestdataoperations_1_0_0_1_managed.zip ファイルを、
ソリューションとしてインポートしておいてください。

サンプル解説

このサンプルは以前から存在していますが、前はサンプルライブラリを
利用していませんでした。今回のバージョンでは、レコード操作の箇所で
それぞれ以下のようにコードを記述しています。

//Create the Account
SDK.REST.createRecord(
account, // 実際に作成するレコードの情報
"Account", // エンティティ名
function (account) {
writeMessage("The account named \"" + account.Name + "\" was created with the AccountId : \"" + account.AccountId + "\".");
writeMessage("Retrieving account with the AccountId: \"" + account.AccountId + "\".");
retrieveAccount(account.AccountId)
}, // 成功時に実行する関数
errorHandler // 失敗時に実行する関数);

メソッドの第 1 引数には作成する取引先企業の各種情報を持った
オブジェクトを指定し、第 2 引数にエンティティを指定しています。
第 3 引数は成功時に実行する関数を、最後の引数はエラー発生時
に実行される関数です。errorHandler 関数は以下のように定義
されています。

function errorHandler(error) { writeMessage(error.message); }

その後ボタンを連続で押せないように、以下のコードでボタンを
無効にしています。

createRecord メソッド

サンプルライブラリ内では、REST エンドポイントの作成や、各種
パラメーターのチェック、XMLHttpRequest の作成やオブジェクト
の JSON のエンコード処理等を行っています。よって再利用も
容易ですが、必要に応じて変更もまた容易です。

その他のメソッドもほぼ同様の内容となっています。

まとめ

サンプルライブラリの説明自体はあまり行いませんでしたが、今まで
毎回記述する必要のあった内容をライブラリ化することで、生産性の
向上とメンテナンス性の向上が見込めます。

すでにライブラリ化されている方は多いと思いますが、まだの方は
是非こちらのサンプルをお試しください。

- Dynamics CRM サポート 中村 憲一郎

Comments (2)

  1. motoki より:

    コメント失礼いたします。

    処理がなかなか上手くいかず悩んでおります。

    予定を作成時、通知1というフィールドにはユーザの上司が自動でセットされている状態が理想です。

    下記がサンプル等を参考にしながら作成したプログラムなのですが、デバッグをすると

    Xrm.Page.getAttribute("new_notice1").setvalue(lookup);

    の部分でどうしてもエラーになるのですが、lookupフィールドをセットする方法が間違っているのでしょうか。

    もし、宜しければご教授願います。

    —————————————————————————–

    if (typeof (YoteiForm) == "undefined")

    { YoteiForm = { __namespace : true }; };

    /*

    * 処理概要

    * ユーザの「上司」(lookup型)を予定の「通知1」(lookup型)へ表示する

    */

    YoteiForm.Yotei = function () {

    // ユーザーIDを取得する

    var userid = Xrm.Page.context.getUserId();

    // 組織のデータサービスを利用して現在のユーザの情報を取得する

    SDK.REST.retrieveRecord(

    userid,

    "SystemUser",

    "ParentSystemUserId",

    null,

    function (retrieved) {

    var lookup = new Array();

    lookup[0] =  new Object();

    lookup[0].Id = retrieved.ParentSystemUserId.Id;

    lookup[0].Name = retrieved.ParentSystemUserId.Name;

    lookup[0].entityType = retrieved.ParentSystemUserId.LogicalName;

    // レスポンスが返ってきた場合、上司の内容を取得する

    /*

    * 前処理で取得した情報を元に

    * 上司の値を予定の通知1へ表示させる

    */

    Xrm.Page.getAttribute("new_notice1").setvalue(lookup);

    },

    function (error) {

    // レスポンスがない場合、アラートを表示する

    alert(error.message);

    }

    )

    };

    —————————————————————–

  2. コメントありがとうございます。

    SDKには以下のサンプルコードがございます。

    var lookupReference = [];

      lookupReference[0] = {};

      lookupReference[0].id = Id;

      lookupReference[0].entityType = Type;

      lookupReference[0].name = Name;

      Xrm.Page.getAttribute(LookupId).setValue(lookupReference);

    ここでの違いを見る限りプロパティ名の大文字小文字のようですが、念のためご確認ください。

    またそれぞれの値が意図した型であるかもご確認ください。

    – 中村 憲一郎

Skip to main content