Salesforce DLRS (Declarative Lookup Roll-up Summaries) のガイド

[DLRS(Declarative Lookup Rollup Summaries Tool)のまとめに戻る](https://qiita.com/Keiji_otsubo/items/0ff46ce12ec5ab1be257)


[Guide to Salesforce DLRS (Declarative Lookup Roll-up Summaries)](https://www.salesforceben.com/guide-to-salesforce-dlrs-declarative-lookup-roll-up-summaries/)

[Declarative Lookup Roll-up Summaries (DLRS)管理パッケージ](https://github.com/SFDO-Community/declarative-lookup-rollup-summaries#declarative-rollups-for-lookup-field-relationships)は、参照関係間のロールアップ サマリーを作成するための必須パッケージです。Andy Fawcett のオープンソース ツールは贈り物であり、標準 UI を宣言的に使用してロールアップを定義できます。コーディングは必要ありません。

# 参照関係間の積み上げ集計が困難な理由

積み上げ集計フィールドを作成するための多くのユース ケースに遭遇します。構成の途中で困惑するのはとてもイライラします。1 つの例は、積み上げ集計フィールドを作成する 2 つのオブジェクトが、主従関係を介して関連付けられていないことを認識することです。それらは参照関係を介して関連付けられています。

+ 主従関係：積み上げ集計項目の作成が可能。 
+ 参照関係：不可…

…と思うかもしれません。確かに、標準の Salesforce 機能では積み上げ集計で可能なことは制限されますが、要件を満たす他のオプションがあります。

+ Apex トリガーを作成する:「従来の」ルート。これは、宣言型 (ローコード) の管理者やコンサルタントにとって使いやすいオプションではありません。開発者を巻き込むと、余分な手間がかかる可能性があり、プロジェクトでは予算に達する可能性があります。 
+ Salesforce フローを使用する
+ Declarative Lookup Roll-up Summaries (DLRS): Salesforce コミュニティの Andy Fawcett によって開発されたオープンソース ツール。Salesforce の DLRS についてもう少し調べてみましょう…

# 宣言型ルックアップ ロールアップ サマリー (DLRS) とは何ですか?

DLRS を使用すると、ローコードの専門家は、コードに触れることなく、ルックアップ関係にある 2 つのオブジェクト間のロールアップ サマリーを作成できます。設定にアクセスするには、管理パッケージが組織にインストールされます。

# DLRS の使用方法

DLRS は慣れるまでに時間がかかります。数回使用すると、含まれているインターフェイスとフィールドがどのように Apex トリガーを分解するかが分かり始めます (その魔法はバックグラウンドで発生します)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/b424265c-8c06-2c81-e882-dc20155fa56e.png)


DLRS には、アプリ ランチャー (ワッフル アイコン、左上) からアクセスします。 
次の 3 つのタブがあります。

+ ルックアップ ロールアップ サマリーの管理: 新しいロールアップを作成し、既存のロールアップを更新します。 
+ ルックアップ ロールアップ サマリー ログ: サマリーの実行時にエラーを見つけます。 
+ ルックアップ ロールアップ サマリー ツール: オプティマイザーにアクセスします。オプティマイザーは、自動化をより効率的に構成する方法の改善を推奨します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/a40c745d-ad5e-1261-06de-8b927a8a0f94.png)

上: ルックアップ ロールアップ サマリー ログ

[ルックアップ ロールアップ サマリーの管理] タブに移動します。[Select Lookup Rollup Summary] ドロップダウンには、[create new] オプションと、作成した以前のすべての宣言型ロールアップの両方が表示されます (これにより、新しいユーザーが離れてしまう可能性があります)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/6dba9a93-700b-b3f1-8099-f26fe304d265.png)

# 簡単な DLRS の例

単純な DLRSは、親レコードに関連する  すべてのレコードに基づいてロールアップ サマリーを計算します。つまり、尊重すべき基準はありません (後で「複雑な」例の違いを確認します)。

これから説明する例は一般的ではありませんが (2 つのカスタム オブジェクトを使用)、オブジェクト名を独自のものに置き換えます。

例: 広告を表示するすべてのスペース (当社のサイトおよび電子メール) からの合計クリック数を計算します。マスター オブジェクト = 広告、子オブジェクト = 広告スペース

DLRS の設定中は、オブジェクト マネージャーを別のタブで開いたままにして、簡単にすばやく参照できるようにすることをお勧めします。 

注: 次の手順は、下の画像に反映されています。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/99bff2cb-e497-0d3c-a965-c8aaa33b0ba0.png)


1.新しい宣言型ロールアップを作成する

2.親オブジェクト: オブジェクトの API 名を挿入します (これを見つけるには、オブジェクト マネージャーに移動します)。子オブジェクトについても同じことを行います。 

3.関係フィールド: 子オブジェクトの関係フィールドの API 名を挿入します。親レコードを「参照」するフィールド。 

4.集計するフィールド: 計算のベースとなるフィールド。金額、クリック数、スコアなど 

5.集計操作: 合計、平均、カウント、およびその他のオプションから選択します (これは、標準のロールアップ集計設定の [ロールアップ タイプの選択] セクションを反映しています)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/da89030b-8179-58d9-d41a-acbaf7a6bf1e.png)


6.集計結果フィールド: 計算値を挿入するフィールド。これは、事前に作成した新しいカスタム フィールドです。

7.計算モード: DLRS をリアルタイム(子レコードが更新されるたび)、スケジュール(レコードがバッチに収集されてから実行される)、開発者(独自のトリガーから DLRS を自由に呼び出すことができる) のいずれで実行するかを選択します。 /Classes)、またはProcess Builder (PB から DLRS レコードを呼び出します)。通常、小さなデータセットには [リアルタイム] を選択し、使用頻度の高いオブジェクトには [スケジュール] を選択します。

8.計算共有モード:ユーザーまたはシステムを選択します。ユーザーは共有ルールを尊重します。計算は、DLRS をトリガーしたユーザーのアクセスに基づいて行われます。システムはすべての記録を可視化します。

9.[保存] をクリックし、子トリガーをデプロイしてから、完全な計算ジョブを実行します (注: 子レコードの大規模なデータセットを使用する使用頻度の高い組織ではタイミングを慎重に選択してください。そうしないと、組織のパフォーマンスが低下する危険があります!) 追加できます。特定のレコードに対してのみジョブを実行する句。

10.失敗したロールアップは、[ロールアップ サマリー ログ] タブに表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/6755acad-edff-212f-5209-37e921290c30.png)


# 複雑な DLRS の例

次に、基準をミックスに追加する方法を見てみましょう。条件は、ロールアップ サマリーの計算に含める (したがって除外する) 関連する子レコードを DLRS に指示します。  

繰り返しますが、この例は一般的ではありません (2 つのカスタム オブジェクトを使用) が、オブジェクト名を独自のものに置き換えます。 

例: 連絡先のコンテンツの数を計算します。これには、「公開済み」ステータスのコンテンツのみが含まれます。マスター オブジェクト = 連絡先、子オブジェクト = コンテンツ

+ 簡単な例の手順 1 ～ 6 を繰り返します。今回は集計操作がCountであることに注意してください。単に関連するレコードの総数が必要なためです。集計するフィールドは単に「Id」です。
+ 関係基準: どのレコードを含める必要があるかを定義するステートメントを作成します。Status__c = 'Published' (この数式を任意の選択リスト項目に適用できます)
+ 関係基準フィールド: 概説した基準に含まれるフィールドを指定します。ステータス__c
+ 簡単な例の手順 7 ～ 9 を続行します。