Dynamics CRM Online 2015 Update 1 SDK 新機能: フォームスクリプトのサブグリッドの制御 その 2
みなさん、こんにちは。
前回に引き続き Dynamics CRM Online 2015 Update 1 で提供される
フォームスクリプトのサブグリッド制御を紹介します。
前回記事からの続きとなりますので、まだご覧になっていない場合
以下のリンクよりご確認ください。
今回は Grid、GridRow、GridRowData、GridEntity オブジェクトを
紹介します。
Grid オブジェクト
Grid オブジェクトは GridControl オブジェクトより getGrid 関数で
取得します。Grid オブジェクトは以下の関数を持ちます。
- getRows : サブグリッド内の行を取得します。
- getSelectedRows : サブグリッド内で選択している行を取得します。
- getTotalRecordCount : サブグリッドの行数を取得します。これは
表示されている件数ではなく、ビュー定義の対象となる件数です。
※上限 5000 件
早速試してみましょう。
フォームスクリプトの開発と設定
1. 前回作成した Web リソースを開きます。
2. 新しく以下の関数を追加します。
function gridSample()
{
// グリッドの取得
var contactGrid = Xrm.Page.getControl("Contacts").getGrid();
// グリッドのレコード数取得
alert("取引先担当者グリッドにはレコードが " + contactGrid.getTotalRecordCount() + " 件あります。");
}
3. Web リソースを保存して、公開します。
4. 取引先企業のフォームより、任意の列の OnChange に gridSample
関数を割り当てます。ここでは説明列にしました。
5. 変更を保存してカスタマイズを公開します。
6. 任意の取引先企業レコードを開き、説明の内容を変更します。
カーソルが外れたタイミングで以下のメッセージが出ます。
7. 次に getTotalRecordCount 関数がビュー定義に相当する
レコード数を取得しているか確認するために、取引先担当者
サブグリッドで、取引先担当者を 6 人以上追加します。
8. 再度説明の内容を変更して OnChange を発生させます。
ビュー定義の該当するすべてのレコード数がカウンタされる
ことを確認します。
※関連が 5000 件以上ある場合は、以下のように表示されます。
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 関数を割り当てます。
5. 変更を保存してカスタマイズを公開します。
6. 任意の取引先企業レコードを開き、説明の内容を変更します。
初めの 6 件のレコードの GUID が取得できます。
まとめ
今回はサブグリッド内のレコードの取得について紹介しました。
次回はサブグリッドビューの操作について紹介します。
お楽しみに!
- 中村 憲一郎