Dynamics CRM Online 2015 Update 1 SDK: クライアントサイドスクリプト その他の新機能

みなさん、こんにちは。

今回は Dynamics CRM Online 2015 Update 1 で提供される SDK の
新機能より、フォームスクリプトでのサブグリッド操作以外の
その他の新機能を紹介します。

サブグリッドの操作については、以下の記事をご覧ください。

フォームスクリプトのサブグリッドの制御 その 1
フォームスクリプトのサブグリッドの制御 その 2
フォームスクリプトのサブグリッドの制御 その 3

追加された機能

今回のリリースは、以下のクライアントサイドスクリプトの機能が
追加されています。

- 簡易作成フォームを開く
- レコードを別のウィンドウで開く
- 日付列で時刻が出ているかを確認する
- スクリプトを実行しているデバイスの種類を取得する

簡易作成フォームを開く

ユーザーに新規レコードを作成させたい場合、簡易作成フォームを
明示的に開くことができます。

Xrm.Utility.openQuickCreate 関数

openQuickCreate 関数を利用することで、簡易作成フォームを開く
事ができます。この関数は以下のパラメーターを取ります。

Xrm.Utility.openQuickCreate(entityLogicalName,createFromEntity,parameters).then(successCallback, errorCallback);

パラメーター名: entityLogicalName
型: String
必須項目か: はい
説明: 作成するエンティティの論理名

パラメーター名: createFromEntity
型: Lookup
必須項目か: いいえ
説明: 元となるエンティティ。関連のマッピングを利用したい場合は
指定してください。

パラメーター名: parameters
型: Object
必須項目か: いいえ
説明: 既定値の設定。フィールド名/値の配列

パラメーター名:successCallback
型: Function
必須項目か: いいえ
説明: 作成に成功した場合に実行される関数。引数として作成された
レコードが Lookup 型で返ります。

パラメーター名: errorCallback
型: Function
必須項目か: いいえ
説明: 作成に失敗した場合に実行される関数

フォームスクリプトの開発と設定

1. ブラウザで Dynamics CRM Online に接続します。

2. 設定 | カスタマイズ | システムのカスタマイズより Web リソース
を選択して、新規ボタンをクリックします。

image

3. 名前と表示名に「quickcreate.htm」と入力し、「種類」より
「Web ページ (HTML)」 を選び、「テキストエディター」をクリック
します。

image

4. ソースタブをクリックして、以下の HTML 貼り付けます。OK を
クリックして画面を閉じます。

<html>
<head>
<meta charset="utf-8">
</head>
<body>
<script type="text/javascript">
function quickcreate(){
  // 元の取引先企業レコードを指定
  var thisAccount = {
  entityType: "account",
  id: parent.Xrm.Page.data.entity.getId()
  };

  // 成功時のコールバック関数を作成
  var callback = function (lookup) {
    // 結果を「説明」に表示
    parent.Xrm.Page.getAttribute("description").setValue("新しい取引先担当者: " + lookup.savedEntityReference.name + "、id: " + lookup.savedEntityReference.id + " が作成されました!");
  }

  // 失敗時のコールバック関数を作成
  var failurecallback = function (lookup) {
    alert("操作に失敗しました。");
  }

  // 初期値をセット
  var setName = { lastname: "サンプル", firstname: "取引先担当者"};

  // 簡易作成フォームを開く
  parent.Xrm.Utility.openQuickCreate("contact", thisAccount, setName).then(callback, failurecallback);
}
</script>
<input onclick="quickcreate()" type="button" value="取引先担当者を作成">
</body>
</html>

5. 「上書き保存」をクリックしてから、「公開」をクリックします。
公開が終わったら画面を閉じます。

6. エンティティ | 取引先企業 | フォームを選択します。「取引先企業」
フォームを開きます。

image

7. 挿入タブより Web リソースをクリックします。

image

8. 作成した Web リソースを指定して、以下のように設定します。

image

image

9. 「OK」をクリックします。フォームを保存してから公開します。

動作確認

1. 任意の取引先企業レコードを開きます。

2. 配置した「取引先担当者を作成」ボタンをクリックします。

image

3. 簡易作成が表示され、既定値や関連のマッピングが正しく設定
されている事を確認します。

image

4. 必要に応じて名前を編集して、「上書き保存」をクリックします。
結果が説明欄に表示されていることを確認します。

image

レコードを別のウィンドウで開く

Dynamics CRM 2013 よりレコードはインラインで開きますが、UI
からは必要に応じて別画面にすることができました。今回の機能
拡張により、openEntityForm 関数に windowOptions パラメーター
がサポートされ、true を渡すことで別ウィンドウでレコードを
開くことができます。

Xrm.Utility.openEntityForm(name,id,parameters,windowOptions)

日付列で時刻が出ているかを確認する

日付型フィールドにおいて、時間コントロールの表示有無を
スクリプトで確認出来るようになりました。

var showsTime = Xrm.Page.getControl(arg).getShowTime();

スクリプトを実行しているデバイスの種類を取得する

デバイスの種類によって処理を変更したい場合、Xrm.Page.context
オブジェクトの getFormFactor 関数を利用出来ます。

返り値は以下の通りです。

0: 不明なデバイス
1: デスクトップ
2: タブレット
3: 携帯端末

まとめ

今回のリリースではクライアントサイドスクリプトも強化
されました。特に簡易フォームの利用など新機能の不随する
機能のサポートは便利だと思います。

是非おためしください!

- 中村 憲一郎