計算およびロールアップ属性

計算およびロールアップ属性を使用すると、手動で計算を実行する必要がなくなるので、作業に集中できます。 システム管理者は、開発者と協力しないで、多くの共通計算の値を含むフィールドを定義できるようになりました。 開発者も、自分のコード内ではなく、プラットフォーム機能を活用してこれらの計算を実行できます。

ビデオ: ロールアップおよび Microsoft Dynamics CRM 2015 の計算フィールド

共通の要素と特性

計算属性とロールアップ属性には、次のような共通の要素と特性があります。

  • 読み取り専用です。

  • ユーザー固有ではありません。 計算はシステム ユーザー アカウントを使用して実行されるため、その値は、フィールド レベルのセキュリティが有効な属性など、ユーザーが表示する特権を持たないレコードに基づく場合があります。

    AttributeMetadata から継承するすべての属性には、次の表に示されている値を含む SourceType プロパティがあります。

価値 説明設定
null 計算またはロールアップ属性となるには、無効な属性の種類です。
0 単純な属性です。 この属性は、計算またはロールアップ属性として定義されていません。
1 計算属性
2 ロールアップ属性

計算属性とロールアップ属性は、AttributeMetadata から継承される既存の属性の種類に基づいています。 次の種類の属性には、新しいプロパティがあります。

プロパティ 定義
FormulaDefinition 計算やロールアップの実行時に使用される数式の XAML 定義が含まれます。 この値を変更できる唯一の方法は、アプリケーション数式エディターを使用する方法です。

これらの属性の数式を構成する方法については、『カスタマイズ ガイド』のトピック「ロールアップ フィールドの定義」と「計算フィールドの定義」を参照してください。
SourceTypeMask この読み取り専用プロパティのビットマスク値は、計算属性の数式で使用されるソースの種類を記述するか、計算属性またはロールアップ属性の数式が無効かどうかを示します。

- 0: 未定義。 単純な属性およびロールアップ属性の既定値です。
- 1: 簡易。 計算属性は、同じレコードの属性を参照します。
- 2: 関連。 計算属性は、関連レコードの属性を参照します。
- 4: Logical。 計算属性は、同じレコードにあるものの、実際には異なるデータベース テーブルに格納されている属性を参照します。 詳細: 論理的属性
- 8: Calculated。 計算属性は、別の計算属性を参照します。
- 16: Rollup。 計算属性は、ロールアップ属性を参照します。
- 32: Invalid。 計算またはロールアップ フィールドが無効です。
通常は、フィールドの参照する属性が存在しない場合です。 注意: これらの条件の 1 つ以上が計算またはロールアップ フィールドにあてはまる場合があります。 これはビットマスク値であるため、ビットごとの操作を実行する際には SourceTypeMasks 列挙体 を使用すると便利な場合があります。

計算属性

計算属性は、取得時にリアルタイムに計算されます。 計算属性は、異なるデータの種類を使用して構成できます。 たとえば、整数の計算属性は、小数または通貨属性から値を参照できます。 詳細: 計算フィールドの定義

計算属性の値は、取得プラグイン パイプラインで使用できます。 エンティティ レコードの更新または作成のポスト イメージには、ステージ 40 の計算属性値が含まれます。 詳細: イベント実行パイプライン

制限

関連エンティティ、別の計算属性、または同じエンティティの論理値を参照する計算属性の値を使用して、クエリによって返されるデータを並べ替えることはできません。 計算属性を使用して結果を並べ替えるようクエリで指定することはできますが、並べ替えの向きは無視され、エラーはスローされません。 計算属性が同じレコードの単純な値のみを参照する場合、並べ替えは正常に機能します。 計算フィールドで使用されているソースを確認するには、属性のメタデータに対して SourceTypeMask プロパティを使用します。 詳細: 論理的属性

計算属性では、直接の親エンティティの属性のみを使用できます。

保存されたクエリ、グラフ、およびビジュアル化には、固有の計算属性を最大 10 まで含めることができます。

計算属性は、数式に含まれる他の計算属性を参照することはできますが、自分自身を参照することはできません。

Dynamics 365 for Outlook のユーザーがオフラインのとき、計算属性には値がありません。

MaxValue および MinValue メタデータ プロパティは、計算属性に対して設定できません

詳細情報: その他の制限

ロールアップ属性

ロールアップ属性はデータベースで保持されるため、通常の属性と同じように、フィルタリングや並べ替えに使用できます。 どの種類のプロセスやプラグインも、最後に計算した属性の値を使用します。 ロールアップ属性値はスケジュールしたシステム ジョブで非同期に計算されます。 管理者がジョブを実行またはジョブを一時停止する時を設定します。 既定では、各属性は毎時間更新されます。 詳細: ロールアップ フィールドの定義

ロールアップ属性の作成または更新時に、ロールアップ フィールドの一括計算ジョブは 12 時間以内に実行するようにスケジュールされます。 12 時間の遅れは、リソースを大量に必要とするこの操作をユーザーに影響しない時に実行するのが目的です。 ジョブが完了すると、このジョブは、次回は約 10 年後に実行されるように自動的にスケジュールされます。 計算に問題がある場合は、システム ジョブとして報告されます。 設定>システム ジョブにあるシステム ジョブで、ロールアップ フィールドでのエラーを探します。

チップ

展開環境のソリューションをテストする開発者の中には、12 時間も待ちたくない開発者もいます。 もっと早く実行すことも可能です。 システム ジョブ一覧で定期システム ジョブビューを使用して、一覧をフィルター処理し、ロールアップ フィールドの一括計算ジョブを見つけます。 ジョブを選択して、その他の操作>延期を使用して、もっと早い時間に設定します。

新しいロールアップ フィールドの一括計算ジョブのプログラムでの作成を起動するには、RetrieveAttributeRequestを使用してロールアップ属性の AttributeMetadata を取得し、UpdateAttributeRequest を使用して、実際には何も変更せずに属性を更新します。

ロールアップ フィールドの一括計算ジョブは、ロールアップ属性を含むソリューションがインポートされるとすぐに実行されます。 これは、ユーザーに悪影響を与えない時間にソリューションをインストールすることが前提です。

エンティティの各ロールアップ属性には、ロールアップ属性に 2 つのサポートされている属性が含まれます。

  • <SchemaName 属性>_Date: DateTime – ロールアップが最後に計算された時間。

  • <SchemaName の属性>_State: 整数 – ロールアップ計算の状態 詳細: ロールアップ状態値

ロールアップ状態値

ロールアップ フィールド計算の状態は、対応する <SchemaName の属性>_State 属性および CalculateRollupFieldResponse で利用できます。FieldState プロパティ。 状態を示す値を次の表に示します。

状態値 説明
0 NotCalculated: 属性値はまだ計算されていません。
1 Calculated: 属性値は、<SchemaName の属性 >_Date 属性の最終更新時間ごとに計算されています。
2 OverflowError: 属性値の算定はオーバーフロー エラーにつながります。
3 OtherError: 属性値の算定は、内部エラーが原因で発生しており、次回の計算ジョブ実行時にはたいてい修正されます。
4 RetryLimitExceeded: 属性値の算定は、多数のコンカレンシーとロックの競合により、値を計算するための再試行の最大回数を超えた可能性があるため失敗しました。
5 HierarchicalRecursionLimitReached: 属性値の算定は、計算の最大階層深さが制限に達したので失敗しました。
6 LoopDetected: 属性値の算定は、レコードの階層で再帰ループが検出されたので、失敗しました。

計算ロールアップ フィールドの値をすぐに取得する

ロールアップ属性は、オンデマンドでロールアップ属性値を計算するのに開発者が使用するCalculateRollupField メッセージをサポートします。 要求と応答をメンバーと共に、次の表に示します。

要求/応答 メンバー
CalculateRollupFieldRequest Target: レコードの EntityReference

FieldName: 属性の論理名を表す文字列。
CalculateRollupFieldResponse Entity: ロールアップ属性を含む Entity およびサポートする <SchemaName の属性 >_Date<SchemaName の属性 >_State 属性。

このメッセージは、要求で指定した属性のみの同期操作です。 このレコードの値が他ロールアップ フィールドの一部として含まれている場合、これらの計算を実行する定期的にスケジュールされた非同期ジョブが発生するまでこのメソッドを考慮するので、それらのフィールド値は可能な値変更を行いません。

制限

ロールアップ属性はワークフロー イベントまたは待機状態として使用することはできません。 これらの属性はワークフローをトリガーするイベントを発生させません。

エンティティの ModifiedBy と ModifiedOn 属性は、ロールアップが更新されたときには、更新されません。

ロールアップ属性は最大 100 まで組織内で定義できます。 各エンティティには 10 未満のロールアップ属性を設定できます。

ロールアップ属性の式は、他のロールアップ属性を参照できません。

ロールアップ属性の式は、複雑に計算された属性を参照できません。 同じレコードの簡単な属性を参照する計算属性だけがロールアップで使用できます。

ロールアップ属性式には、多対多(N: N)の関連付けのレコードを含めることはできません。 一対多(1: N)の関連付けのレコードのみを含めることができます。

ロールアップ属性式は一対多(1:N)関連付けをActivityPointer または ActivityParty エンティティで使用できません。

詳細情報: その他の制限

SourceTypeMasks 列挙体

計算属性およびロールアップ フィールドをサポートするこれらの属性のSourceTypeMask プロパティは、ビットマスク値を含みます。 値から関連情報を取得するには、ビットごとの操作を実行する際に、列挙体があると便利です。 SourceTypeMask プロパティ値を比較する際は、次のSourceTypeMasks列挙体を使用します。

 public enum SourceTypeMasks  
{  
    /// <summary>  
    /// Undefined: 0 - The default value for simple and rollup attributes.  
    /// </summary>  
    Undefined = 0,  
    /// <summary>  
    /// Simple: 1 - The calculated attribute refers to an attribute in the same record.  
    /// </summary>  
    Simple = 1,  
    /// <summary>  
    /// Related: 2 - The calculated attribute refers to an attribute in a related record.  
    /// </summary>  
    Related = 2,  
    /// <summary>  
    /// Logical: 4 - The calculated attribute refers to a logical attribute.  
    /// </summary>  
    Logical = 4,  
    /// <summary>  
    /// Calculated: 8 - The calculated attribute refers to another calculated attribute.  
    /// </summary>  
    Calculated = 8,  
    /// <summary>  
    /// Rollup: 16 - The calculated attribute refers a rollup attribute.   
    /// </summary>  
    Rollup = 16,  
    /// <summary>  
    /// Invalid: 32 - The calculated or rollup attribute is invalid.  
    /// Typically this would be where a field refers to an attribute that no longer exists.   
    /// </summary>  
    Invalid = 32  
}  

その他の制限

これらの追加制限は、ロールアップ属性と計算属性の両方に適用されます。

ソリューション内の計算フィールド、またはロールアップ フィールドのアクティブなレイヤーは、アクティブなカスタマイズの削除で削除できません。 しかし、アクティブなレイヤーの変更は、以下の手順で削除できます。

  1. ソリューション レイヤーフィールドを開きます。

  2. アクティブなレイヤーを開き、アクティブなカスタマイズの削除を選択します。 これにより、アクティブなレイヤーは削除されませんが、その中の変更点はすべて削除されます。

  3. フィールドを開き、フィールドタイプ ドロップダウンのとなりにある、編集/変更 ボタンを使用して、式デザイナーページに移動します。

  4. 式に変更を加えて保存します。 数式を元の数式に更新して保存します。 システムは最新の定義でフィールドを再生成し、フィールドは期待通りに動作します。

関連情報

ビデオ: ロールアップおよび Dynamics 365 Customer Engagement (on-premises) の計算フィールド
エンティティ属性の概要
計算フィールドの定義
ロールアップ フィールドを定義する