DLRS(Declarative Lookup Rollup Summaries Tool)のまとめ

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめA～M](https://qiita.com/Keiji_otsubo/items/f3ddedee6793bf1576f8)

日本語の情報は案あまり見ないです。

+ [DLRSのヒント集](https://qiita.com/Keiji_otsubo/items/1978c287bf339ac8e03f)
+ [DLRS よくある質問:日本語訳](https://qiita.com/Keiji_otsubo/items/228ee50e1b400dc6465a)
+ [Salesforce DLRS (Declarative Lookup Roll-up Summaries) のガイド](https://qiita.com/Keiji_otsubo/items/22ea11352692304627da)
+ [DLRS Too many SOQL query の考察](https://qiita.com/Keiji_otsubo/items/4592ac9a02533bd73398)
+ [DLRS fix for Multi-currency?](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000G5NKcSAN)
+ [How to change schedule of scheduled DLRS?](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000Bswl9)
+ [Can I report on DLRS "records"](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000BtZn6SAF)

+ [積み上げ集計項目において、検索条件に指定できない項目について](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000H2uTdSAJ)
+ [Rollup Not Calculating Correctly](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000ISJwe)
+ [古いフィールドを削除できません: dlrs__LookupRollupSummary__c](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000BqVdh)
+ [Can we do a Task rollup using custom fields from the Activity object?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000079RsmT)
+ [DLRL での重複値エラー](https://qiita.com/Keiji_otsubo/items/dcd7ed1dbbbfe586b568)
+ [DLRS(Declarative Lookup Rollup Summaries Tool)のエラー](https://qiita.com/Keiji_otsubo/items/d8e6624f4da92bcd7c3a)



+ [Anyone experiencing dlrs not working after the latest version?](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54V00007cmN5p)

:::note alert
dlrs_Service_UserTrigger: execution of AfterInsert caused by: System.QueryException: No such column 'User_has_review_notes__c' on entity 'Service_User__c'. If you are attempting to use a custom field, be sure to append the '__c' after the custom field name. Please reference your WSDL or the describe call for the appropriate names. (dlrs) Trigger.dlrs_Service_UserTrigger: line 7, column 1
:::

:::note
消した項目が残っていた？別の場所に保存されている？
:::


+ [テストのためにいくつかのサンドボックスに DLRS をインストールしましたが、「セッションを発信元の IP アドレスにロックする」セッション設定を有効にすると、次のエラー メッセージが表示されます。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZBQAI)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/479a70d5-1d73-76cc-7c45-240fe6a0d5f7.png)

:::note
I can explain what is happening, long story short we borrow a session from the UI and use it to talk to the Salesforce API's from the server, thus it is a different IP address than the client's browser that originated the session. 

I can say the team is actively working on some alternative workflows, watch this space over the next month or two.

何が起こっているのか説明できます。簡単に言えば、UI からセッションを借用し、それを使用してサーバーから Salesforce API と通信するため、セッションを開始したクライアントのブラウザとは異なる IP アドレスになります。 

チームはいくつかの代替ワークフローに積極的に取り組んでいると言えます。今後 1 ～ 2 か月間この分野に注目してください。
:::




# WHERE は指定しなくてもよさそう

+ [Exclude records starting with "Inspection"](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000JfeyL)

Error:
Relationship Criteria: Relationship Criteria 'WHERE Name NOT LIKE 'Inspectie%'' is not valid, see SOQL documentation http://www.salesforce.com/us/developer/docs/soql_sosl/Content/sforce_api_calls_soql_select_conditionexpression.htm, error is 'unexpected token: 'WHERE''

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/455d476b-ada2-79a9-445f-968ad70165f3.png)

+ [Salesforce Metadata API connection failure, click link below to configure](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007OWIS4)

:::note
Please check this article.

https://github.com/SFDO-Community/declarative-lookup-rollup-summaries/issues/697
:::

# alesforce では、SOQL クエリでフィールド間の直接比較は許可されません。

+ [宣言型ルックアップ ロールアップ サマリーで SOQL が機能しない](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007cm9dL)

:::note
代わりに数式項目を作って対応する

SOQL WHERE 句でのフィールド間の比較
https://help.salesforce.com/s/articleView?id=000386076&type=1
:::




# レコードタイプでの検索

+ [【未解決】RecordType のトラブルシューティングを手伝ってもらえますか?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Yw8EV)

---------------------------------
# Rollup Helper

+ [Rollup Helper - The Trusted, Scalable, Roll-Up Engine for Salesforce](https://appexchange.salesforce.com/appxListingDetail?listingId=a0N30000009i3UpEAI)
+ [実行モードは、手動実行のみとオブジェクトトリガーがすでに有効になっていることを示しています](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000E9ULdSAN)
+ [RollupHelperをアンインストールできません](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000FxALT)


# __MISSING LABEL__ PropertyFile - val WorkflowLogOnlyException_desc not found in section Exception : INTERNAL_ERROR ()

基準としたいトリガで起動するFlowを作ってその中からDLRSをキックすることで回避したようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/8f1f0ef4-2808-d8b5-5904-9c997831f6ce.png)

+ [Rollups Not Calculating](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000FUwS5)
+ [Troubleshooting DLRS 101](https://dandonin.com/2017/10/19/troubleshooting-dlrs-101/)

# 相対日付

+ [Creating a Roll-Up Summary Field using "Smart Date" Filters](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000A7SLkSAN)
+ [DLRS query- Status = 'Fundraiser' AND Campaign_Name__c = '%example%' AND CreatedDate = LAST_N_MONTHS:12](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000G2e7C)
+ [DLRS-相対日付が機能しない](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000A8oHqSAJ)

# Error

+ [FIELD_CUSTOM_VALIDATION_EXCEPTION, Field does not exist.: [dlrs__AggregateResultField__c] Stack Trace: (dlrs)](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000G4kdfSAB)

FIELD_CUSTOM_VALIDATION_EXCEPTIONは、レコードの処理中にカスタムエラーが発生したことを示すエラーメッセージです。これは、検証ルール、またはこの場合はApexトリガーのいずれかです。

+ [FIELD_CUSTOM_VALIDATION_EXCEPTION、アカウントの検証エラー：ロールアップヘルパーは親レコードを更新できません](https://salesforce.stackexchange.com/questions/298011/field-custom-validation-exception-validation-error-on-account-rollup-helper-ca)

+ ["We can't save this record because the "Assign Case Closed By User" process failed. ](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000HEhup)



# Error: Active: Apex Trigger dlrs_ContactTrigger has not been deployed. Click Manage Child Trigger and try again.

+ [trigger deployment error in recently refreshed sandbox](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007FT4kL)

:::note
It's Setup > Custom Metadata Types > Lookup Rollup Summary then to left of that click the Manage Records link. Then I edited the particular rollup and set Active = True.

The Manage Lookup Rollup Summaries page is basically the UI for creating/editing these metadata records.

Directly setting Active = True on the metadata record won't work though if the trigger wasn't already deployed.  In my case we already had a Contact to Account rollup and in Setup > Apex Triggers I could see that the trigger that the Managed Lookup Rollup Summaries page claims does not exist does in fact exist.  So all I needed to do was get Active = True on the new rollup.

「ルックアップ ロールアップ概要の管理」ページは、基本的に、これらのメタデータ レコードを作成/編集するための UI です。

ただし、トリガーがまだデプロイされていない場合、メタデータ レコードに Active = True を直接設定しても機能しません。私の場合、取引先責任者から取引先へのロールアップがすでにあり、[設定] > [Apex トリガー] で、管理検索ロールアップ概要ページに存在しないと主張されているトリガーが実際に存在することがわかりました。したがって、必要なのは、新しいロールアップで Active = True を取得することだけでした。
:::

+ [子トリガーをデプロイしてデータをnpsp__Allocation__cからOpportunitiesにロールアップしようとすると、エラーが発生します。](https://qiita.com/Keiji_otsubo/items/ff68385a7606ba2a8993)

+ [Salesforce Metadata API connection failure, click link below to configure](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007OWIS4)

:::note 
After some digging it turns out I had to add the Modify Metadata Through Metadata API Functions permission and that resolved the issue.

いくつか調べた結果、メタデータ API 関数を使用してメタデータを変更する権限を追加する必要があることがわかり、これで問題は解決されました。
:::

# you have exceeded the maximum number (100) of apex scheduled jobs

+ [Managing dozens of scheduled DLRS jobs](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Ghw3ASAR)


# 積み上げ集計項目

https://help.salesforce.com/s/articleView?id=sf.fields_about_roll_up_summary_fields.htm&type=5

次の場所で積み上げ集計項目を作成します。
+ 主従関係の主側にあるカスタムオブジェクト
+ カスタムオブジェクトとの主従関係の主側にあるすべての標準オブジェクト
+ 関連する商談商品の値を使用する商談
+ 関連する商談の値を使用する取引先
+ キャンペーンメンバーの状況またはキャンペーンメンバーのカスタム項目の値を使用するキャンペーン

ただし、ロールアップサマリーを使用してアカウントに関連する連絡先をカウントすることはできません（多くの人は機会の例外のみを理解していません）： [Roll-up Summary Fields for Account - Contact Standard Relationship](https://ideas.salesforce.com/s/idea/a0B8W00000GdlXmUAJ/rollup-summary-fields-for-account-contact-standard-relationship)

# dlrs パッケージをアンインストールできない

+ [dlrs パッケージをアンインストールしようとしていますが、できません。dlrs レコードがなく、ワークベンチを使用してクラスを削除しようとしましたが、それも機能しませんでした。助けてください](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000JdLu8)

最後に、Workbench と破壊的な変更 xml スキーマを使用して Prod から厄介な dlrs トリガーを削除することができた

+ [Unable to uninstall a managed package: Declarative lookup Summaries](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000A8gLlSAJ)

これが、パッケージのインターフェイスを介して DLRS ロールアップを削除し、同じ UI を使用して関連付けられているトリガーを削除しないというばかげた間違いを犯した私のような他の人に役立つことが判明した場合は、これをどのように機能させたかを示します。
 
私の手順:

1. アンインストールを妨げていた同じ DLRS クラスとトリガーを持つアクティブなサンドボックスが既にあったため、サンドボックスで非アクティブ化するために必要な TRIGGER を編集しました。
+ トリガーのステータスをアクティブから非アクティブに変更しました。
+ 次に 、トリガーのアクティブな部分 (削除前、挿入前などのステートメントの後の実際のコマンドを含むビット) をコメントアウトしました。コマンドの前 に /** と * を追加することで、その部分をコメントアウトできます。  */ コマンドの後 （これにより、トリガーが実行された場合、トリガーが実行された場合、本質的に何も起こらないため、他の何かに干渉する機能が削除されます。）

2./ 次に、サンドボックスでも非アクティブ化する必要があるクラスを編集しました。
+ サンドボックスでクラスのステータスを変更できなかったので、文字通り、トリガー内で実行されているコマンドを削除しました。これを行うには、コードの中括弧の間に表示されるコマンドを削除するだけです。

3./ 両方の変更を保存した後、サンドボックスのアウトバウンド変更セットに CLASS と TRIGGER を追加し、それを本番環境にアップロードし、検証して正常にデプロイし、 最終的に エラーなしで Declarative Lookup Rollup Summaries パッケージをアンインストールできました。

これを見た人がこれを試してうまくいった場合は、私に知らせてください! これを試してもうまくいかない場合は、ご連絡ください。
 

最後に、これは単純なプロセスではなく 、この作業を行う前に何度か失敗したため、 フラストレーションを軽減するために、失敗したいくつかのことを以下に示します。
 

1. 以下の記事の手順に従って、Workbench を使用して (コードを編集する前に) クラスだけを削除しましたが、うまくいきませんでした。クラスとトリガーの両方を一緒に試していればうまくいったかもしれませんが、この記事ではトリガーに対してこれを行う方法について説明していなかったので、私はしませんでした。

https://www.salesforceben.com/way-to-delete-apex-classes-from-production/

2./サンドボックスでトリガーとクラスを編集し、それらを別々に本番環境に送信しようとしました（理論的根拠：一方が他方を失敗させ、一方を非アクティブ化できる場合、他方は機能するはずです）が、それも機能しませんでした。
 

3./ Eclipse のような IDE を使用することの推奨事項を検討し始めましたが、Eclipse のインストール手順だけでは複雑すぎるように見えたので、Workbench を使用してから直接サンドボックス ルートを使用しました。

私からは以上です - これがこの問題を抱えている 1 人でも役立つなら、これを書く価値がありました :) そして、これをすべて読んで、組織から DLRS を削除しようとしていて、まだ DLRS ロールアップを削除していない場合は、自分で行ってください:)パッケージのインターフェースを介してトリガーと一緒にロールアップを優先して削除することで、これらの問題を回避できます。

# This version of the tool no longer requires the field dlrs__LookupRollupSummary__c on dlrs__LookupRollupSummaryScheduleItems__c. For optimum configuration and performance please delete it after reading the further information provided.

+ [How do I figure out which rollups are implicated in the message copied below?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000NQ7v5)

:::note

https://github.com/SFDO-Community/declarative-lookup-rollup-summaries/wiki/Attention:-Need-to-delete-unused-field-on-dlrs__LookupRollupSummaryScheduleItems__c

What do I do? 

+ Run a report or create list view on the Lookup Rollup Summary Schedule Items object that filters for records that do not contain a value in the Lookup Rollup Summary 2 field. If you have records like this its possible they are very old, since this field has been being populated since v1.15 and beyond. If you want you can delete these records and re-run a full calculate for the associated Rollups.
+ Next you need to go to the Object Manager in Setup and find the Lookup Rollup Summary Schedule Items object. Locate the field Lookup Rollup Summary (its a Master-Detail) with the API name dlrs__LookupRollupSummary__c.
+ Delete this field and don't worry about accidentally deleting others the platform will block this. This will not effect any other data in your org as it is was purely used for the operation of the tool in prior releases and is now no longer needed.

Note: If you do not see the Delete option for the above field - try switching to Salesforce Classic UI mode.

https://trailhead.salesforce.com/ja/trailblazer-community/topics/deletefielddlrslookuprollupsummary?sort=LAST_MODIFIED_DATE_DESC

+ レポートを実行するか、ルックアップ ロールアップ サマリー 2 フィールドに値を含まないレコードをフィルターするルックアップ ロールアップ サマリー スケジュール アイテム オブジェクトのリスト ビューを作成します。このようなレコードがある場合、このフィールドは v1.15 以降から入力されているため、非常に古いレコードである可能性があります。必要に応じて、これらのレコードを削除し、関連するロールアップの完全な計算を再実行できます。
+ 次に、[設定] の [オブジェクト マネージャー] に移動し、[ルックアップ ロールアップ サマリー スケジュール アイテム] オブジェクトを見つける必要があります。 API 名が dlrs__LookupRollupsummary__c のフィールド Lookup Rollup Summary (Master-Detail) を見つけます。
+ このフィールドを削除すると、他のフィールドを誤って削除するとプラットフォームがこれをブロックすることを心配する必要はありません。このデータは、以前のリリースではツールの操作にのみ使用されており、現在は不要になっているため、組織内の他のデータには影響しません。

注: 上記のフィールドに [削除] オプションが表示されない場合は、Salesforce クラシック UI モードに切り替えてみてく
:::

# アップグレードのエラー

+ [2.17 MDAPI response error](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Jgi97)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/f79565f5-f32e-6e64-7b9c-1a2b0ad8cd04.png)

:::note
When was your sandbox last refreshed? If a retry fails, I would probably clone this Dev sandbox and try to reproduce this error. If the error persists, try to upgrade to the next version, which is either 2.11.1 or 2.12

https://sfdo-community-sprints.github.io/DLRS-Documentation/ReleaseNotes/Release_history.html

I guess one of the reasons for getting this error is if there is something obsolete on the current packages (this may apply to Remote Site Settings as well), which is not so surprising because your current version is outdated.


サンドボックスが最後に更新されたのはいつですか?再試行が失敗した場合は、おそらくこの Dev サンドボックスのクローンを作成して、このエラーを再現しようとします。エラーが解決しない場合は、次のバージョン (2.11.1 または 2.12) にアップグレードしてみてください。

このエラーが発生する理由の 1 つは、現在のパッケージに古いものがある場合だと思います (これはリモート サイトの設定にも当てはまる可能性があります)。現在のバージョンが古いため、これはそれほど驚くべきことではありません。
:::

# 子のフィールドを使っているからエラー？

+ [ContactID=Related Object Contact ID?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000OtkZs)

Your current setup won't work because we can only reference Relationship Criteria and fields from the child object. An exception applies to the parent if we decide to schedule the rollup. Then and only then can we add a filter for the parent. My solution is to create a formula checkbox field on the Activity object (Buyer__c= true), which checks if the Economic Buyer is the same as the Event contact. I have tested this in my Dev org, and it should work (screenshot below).

子オブジェクトからはリレーションシップ基準とフィールドしか参照できないため、現在の設定は機能しません。ロールアップのスケジュールを決定した場合、例外が親に適用されます。そうして初めて、親のフィルターを追加できます。私の解決策は、Activity オブジェクト (Buyer__c= true) に数式チェックボックス フィールドを作成することです。これは、Economic Buyer が Event 連絡先と同じかどうかをチェックします。私は自分の開発組織でこれをテストしましたが、うまくいくはずです (下のスクリーンショット)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/9317be3e-4c7c-77af-4f6e-f31e4af6cf08.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/daaf4b03-8a17-1f0b-b26e-c75e88497b0d.png)

# Error occured processing component dlrs__LookupRollupSummary2.Case_Note__Total_Hrs. Cannot create a new component with the namespace: Case_Note. Only components in the same namespace as the organization can be created through the API (FIELD_INTEGRITY_EXCEPTION).

+ [Error: Cannot create new componet with namespace](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V000074qWx8)

:::note
I just encountered the same namespace error, and I think the issue was that the API name of the Lookup Rollup Summary I was trying to save started with "Account_".

This was being interpreted by the system as a namespace prefix.

When I renamed the API name so it didn't start with "Account_", I was able to save successfully.

同じ名前空間エラーが発生しました。保存しようとしたルックアップ ロールアップ サマリの API 名が「Account_」で始まっていたことが問題だったと思います。

これは、システムによって名前空間プレフィックスとして解釈されていました。

API名を「Account_」で始まらないように名前を変更したところ、正常に保存できました。
:::


# 未解決

+ [DLRS Questions (Service Appointments and Product Items)](https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000Jdr3b)

```
dlrs_ServiceAppointmentTest.testTrigger System.DmlException: Insert failed. First exception on row 0; first error: CANNOT_INSERT_UPDATE_ACTIVATE_ENTITY, FSL.TR001_Service_BeforeInsert: execution of BeforeInsert caused by: System.NullPointerException: Attempt to de-reference a null object (System Code): [] (dlrs) Class.dlrs_ServiceAppointmentTest.testTrigger: line 11, column 1
```

+ [Fixing "Unable to connect to the Salesforce Metadata API." WITHOUT changing "Lock sessions to the IP address from which they originated" setting](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ZBQAI)

:::note
I can explain what is happening, long story short we borrow a session from the UI and use it to talk to the Salesforce API's from the server, thus it is a different IP address than the client's browser that originated the session. 

I can say the team is actively working on some alternative workflows, watch this space over the next month or two.

何が起こっているのか説明できます。簡単に言えば、UI からセッションを借用し、それを使用してサーバーから Salesforce API と通信するため、セッションを開始したクライアントのブラウザとは異なる IP アドレスになります。 

チームはいくつかの代替ワークフローに積極的に取り組んでいると言えます。今後 1 ～ 2 か月間この分野に注目してください。
:::

+ [ You must select an Apex class that has a parameterless constructor.](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007er3b1)