Dynamics CRM Online 2015 Update 1 SDK 新機能: フォームスクリプトのサブグリッドの制御 その 2

みなさん、こんにちは。

前回に引き続き Dynamics CRM Online 2015 Update 1 で提供される
フォームスクリプトのサブグリッド制御を紹介します。

前回記事からの続きとなりますので、まだご覧になっていない場合
以下のリンクよりご確認ください。

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

今回は Grid、GridRow、GridRowData、GridEntity  オブジェクトを
紹介します。

Grid オブジェクト

Grid オブジェクトは GridControl オブジェクトより getGrid 関数で
取得します。Grid オブジェクトは以下の関数を持ちます。

- getRows : サブグリッド内の行を取得します。
- getSelectedRows : サブグリッド内で選択している行を取得します。
- getTotalRecordCount : サブグリッドの行数を取得します。これは
表示されている件数ではなく、ビュー定義の対象となる件数です。
※上限 5000 件

早速試してみましょう。

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

1. 前回作成した Web リソースを開きます。

image

2. 新しく以下の関数を追加します。

function gridSample()
{
  // グリッドの取得
  var contactGrid = Xrm.Page.getControl("Contacts").getGrid();
  // グリッドのレコード数取得
  alert("取引先担当者グリッドにはレコードが " + contactGrid.getTotalRecordCount() + " 件あります。");
}

3. Web リソースを保存して、公開します。

4. 取引先企業のフォームより、任意の列の OnChange に gridSample
関数を割り当てます。ここでは説明列にしました。

image

5. 変更を保存してカスタマイズを公開します。

6. 任意の取引先企業レコードを開き、説明の内容を変更します。
カーソルが外れたタイミングで以下のメッセージが出ます。

image

7. 次に getTotalRecordCount 関数がビュー定義に相当する
レコード数を取得しているか確認するために、取引先担当者
サブグリッドで、取引先担当者を 6 人以上追加します。

8. 再度説明の内容を変更して OnChange を発生させます。
ビュー定義の該当するすべてのレコード数がカウンタされる
ことを確認します。

image

※関連が 5000 件以上ある場合は、以下のように表示されます。

image

GridRow オブジェクトと GridRowData オブジェクト

これらのオブジェクトはグリッドの列データを取得するための
橋渡し役になるためまとめて紹介します。

GridRow オブジェクトは Grid オブジェクトより getRows 関数
または getSelectedRows 関数で取得します。GridRow は以下の
関数を持ちます。

- getData : GridRowData を取得します。

GridRowData オブジェクトは GridRow の getData 関数で取得
します。GridRowData は以下の関数を持ちます。

- getEntity: GridEntity を取得します。

GridEntity オブジェクト

GridEntity オブジェクトは GridRowData の getEntity 関数で
取得します。GridEntity は以下の関数を持ちます。

- getEntityName: エンティティ名を取得します。
- getEntityReference: レコード (参照) を取得します。
- getId: レコードの ID を取得します。
- getPrimaryAttributeValue: レコードの主列の値を取得します。

※ getEntityReference を利用すると getPrimaryAttributeValue の
結果と getId の結果および getEntityName の結果を一度に取得
出来ます。

早速試してみましょう。

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

1. 先ほど利用した Web リソースを開きます。

2. 新しく以下の関数を追加します。

function gridEntitySample()
{
  var result = "";
  // サブグリッド内の列を取得
  var rows = Xrm.Page.getControl("Contacts").getGrid().getRows();
  // 1行ずつ処理
  rows.forEach(function (row, i) {
    // Grid Entity の取得
    var gridEntity = row.getData().getEntity();
    result = result + gridEntity.getEntityReference().id + "\n";
  });
  alert(result);
}

3. Web リソースを保存して、公開します。

4. 取引先企業のフォームより、上記同様に OnChange に追加した
gridEntitySample 関数を割り当てます。

image

5. 変更を保存してカスタマイズを公開します。

6. 任意の取引先企業レコードを開き、説明の内容を変更します。
初めの 6 件のレコードの GUID が取得できます。

image

まとめ

今回はサブグリッド内のレコードの取得について紹介しました。
次回はサブグリッドビューの操作について紹介します。
お楽しみに!

- 中村 憲一郎