Dynamics CRM 2015/Online 2015 更新プログラム 新しいフィールドの種類 : ロールアップ列 詳細
みなさん、こんにちは。
今回は前回に続きロールアップ列の詳細を紹介します。新しいフィールドの
概要とロールアップ列の概要については以下の記事をご覧ください。
新しいフィールドの種類 : 概要
新しいフィールドの種類 : ロールアップ列 入門
内部で利用する追加列
ロールアップ列を作成すると追加で 2 つ列が追加されます。列名はそれぞれ
ロールアップ列名に _Date および _State がついている列となります。
_Date 列には最後に計算した時間が格納されます。
_State 列の値は意味は以下の通りで、値が更新されていない場合に確認します。
値 | 内容 |
0 | 未計算: 値はまだ一度も計算されていません。 |
1 | 計算済み: _Date 列に格納された日時に計算済みです。 |
2 | オーバーフローエラー: 計算結果で桁溢れが発生しました。 |
3 | その他のエラー: 内部的な問題で計算に失敗しました。通常は次回の計算時に問題は解消されます。 |
4 | 再試行上限でエラー: 再試行の回数が既定値 (3) を超えました。計算時に発生したエラーが再試行時に解消されませんでした。通常同時実行数が多すぎるか、ロックの競合が原因です。 |
5 | 階層計算の上限に到達: 計算時に階層の上限 (100) に到達しました。 |
6 | ループの検知: 計算時に階層のループを検知しました。 |
ロールアップ列の利用
フォームへの配置
フォーム上へはロールアップ列だけでなく、上記で説明した内部で利用する
列も追加が行えます。特に最終計算日は便利なフィールドです。
ビューでの利用
ビューの配置したロールアップ列は、並べ替えを行うこともできます。
その他の場所
ワークフロー、プラグイン、グラフ、スクリプトで利用が可能です。
※一部後述する制限があります。
ロールアップ列の計算 : 非同期
ロールアップ列は実際に列としてデータベースのテーブルに作成され、値は
非同期で計算されます。計算は以下の 2 つのジョブで実行されます。
ロールアップ フィールドの一括計算
このジョブは 1 つのロールアップフィールドにつき 1 つ作成されるもので
始めに 1 度だけ実行されるジョブです。初期の集計は全てのレコードに
対して実行されるため負荷が大きい可能性が高く個別のジョブとして作成
されます。既定でフィールド作成から 12 時間後に実行されます。
ロールアップ フィールドの計算
このジョブはエンティティごとに 1 つ作成されるもので、エンティティに
存在する全てロールアップフィールドの差分更新を行います。既定では
1 時間毎に実行されます。
ロールアップ列の計算 : 同期
ジョブの実行が待てない場合や、最新の値を確認したい場合は以下方法で
計算をリアルタイムに実行できます。
レコードフォームより手動計算
前回の記事で紹介したとおり、レコードフォーム上のフィールドをマウス
オーバーすることで再計算アイコンが表示され、これをクリックする事で
リアルタイムに手動計算ができます。
SDK を利用した計算
CalculateRollupField 要求/応答を使用して任意の列を計算できます。
制限
最後に現時点でのロールアップ列の制限事項を以下に紹介します。
- エンティティ毎に 10 個、組織全体で 100 個まで追加できます。
- ロールアップ列の更新はプラグインやワークフローのトリガーにできません。
- ロールアップ列の値をワークフローの待機条件にはできません。
- ロールアップ列を別のロールアップ列に含めることはできません。
- 複雑な計算列をロールアップ列の計算に含める事はできません。
※複雑な計算列については計算列を紹介する記事で説明します。
- N:N 関連をロールアップ列の計算対象にすることはできません。
- 業務ルール、ワークフロー、計算列にロールアップ列が含まれる場合、常に
最後に集計計算された値が利用されます。
- ロールアップ列の計算はシステムユーザーアカウントによって実施されます。
これはレコードを表示しているユーザーによって値が変化
しないようにするためです。
- プラグインでロールアップ列の値を参照する場合、最後に計算された値が
利用されますが、CalculateRollupField で最新の値に更新できます。
- ロールアップ列は監査対象にできません。
まとめ
ロールアップ列は実装されたばかりの新機能であり、いくつかの制限が存在
しますが、これまで開発が必須であった内容を手軽に設定できる上フォーム、
ビュー、グラフ、ワークフロー、プラグイン等の様々な場所で利用できます。
次回から計算列を紹介します。ロールアップ列は計算列と連携もできるため、
そのあたりも今後紹介していきますのでお楽しみに!
- 中村 憲一郎