/declarative-lookup-rollup-summaries

Declarative Rollup Summaries for Lookups

Primary LanguageApexBSD 3-Clause "New" or "Revised" LicenseBSD-3-Clause

Declarative Rollups for Lookups!

Build Status

Features Summary

  • Rollup information between Lookup relationships not previously possible without writing Apex Triggers
  • Define rollups using standard UI declaratively, no coding required
  • Define filter criteria on rollups for example Rollup Amount on Opportunity onto Account for Closed Won
  • Supports Realtime, Scheduled and Developer API modes
  • Open source, available in code and managed package form.
  • Managed package has passed Salesforce Security Review and is Aloha enabled
  • NEW Supports Custom Metadata, rollups can be included in Change Sets and Packages for easier deployment

Please refer to the blog posts below for more detailed information.

Community

This is a community driven tool, please help support it, share your experiences in this Chatter group.

Documentation

In addition to the Wiki the tool has been featured in a number of blog entries as it has evolved...

NOTE: The links are in chronological order, if your new to the tool, read from the bottom upwards

There is also an early releaes video demonstration here...

Implementation Considerations

  • Professional Edition. Professional Edition is supported only when using Process Builder or a Scheduled Full Recalculation. Ignore prompts to setup the Remote Site for Metadata API callouts, as this will not be needed. You can use either the new Manage Lookup Rollup Summaries tab (recommended) or the older Lookup Rollup Summaries tab. Make to select Calculation Mode as Process Builder when setting up your rollup (this will not require an Apex Trigger deployment). Please note that record deletion is not captured using Process Builder. For more information on using Process Builder with this tool see here.
  • Check Existings Apex Tests. This tool dynamically deploys Apex Triggers and Apex tests, please make sure your Sandbox and Production org tests are all fully working before you attempt to use this tool. Otherwise usage of this tool will be blocked until you resolve such errors. If you have an org with triggers on the sObject that will contain the roll up result, installation into sandbox is VERY HIGHLY recommended so that after Lookup Rollup Summary records are added/enabled, you should rerun all testmethods to ensure nothing has broken as your before/after update triggers on the parent sObject will re-execute.
  • Existing Tests on Parent Objects. This tool will update the indicated fields on your Parent objects when it senses activity on Child objects. Ensure an Apex Triggers you have written on your Parent objects are written with best practices around bulkification in mind. If in doubt be sure to perform significant testing.

Usage Information and Known Issues

  • Platform SOQL Limits. This tool uses SOQL Aggregate queries and is subject to platform limitations. This basically means...
  • Deployment issues into Production. This tool dynamically deploys a small trigger and test class to the org. This is subject to the same rules and compliances as as a regular human developer. The generate test class, can in some cases be to simplisitc to get code coverage, requiring at present a developer to assist with the deployment, especially to production. There is more details on how to look for this scenario and how to workaround it, as well as future thoughts here.
  • Volume Considerations. For each rollup, there is a maximum of 50,000 child relation records that can be summarised each time child record/s insert/update/delete operations are made (which may process several configured rollups). The rollup processes children to rollup by their parent record relationship and an optional further filter if provided. Meaning so long as this relationship does not result in more than 50,000 child records per parent parent record it will be successful. Take a look at this blog post which describes some new configuration settings (see bottom of blog post) to help calibrate the tool when running the Scheduled or Calculate jobs to help work within the 50,000 row limit.
  • Indexing Fields. For performance reasons ensure the fields used are indexed (lookups are by default) and also any fields used in the filter criteria. This can be very important as without this, a full table scan will occur when the platform executes the SOQL and cause performance issues. For more information from Salesforce please see here and here.
  • Realtime Mode and Formula Fields. When using the Realtime mode, certain Formula field expressions need more consideration. If your formula field refereces other fields defined on the object the formula field is defined on, please state the fields these formulas reference in the Realtionship Field Criteria fields (the tool does not monitor changes in formula fields). If your formulas reference fields on related records (via lookup fields) see this blog. If your formula field uses formula functions that are date sensitive like YEAR the tool will not auto recacluate in realtime (as no field has changed). To work around this, either switch to Scheduled mode or in Relatime mode use a Workflow Field Update to copy the formula field value to a physical field and reference that.
  • Sandbox Testing. While the tool can be installed and enabled directly in production, sandbox testing is still strongly recommended.
  • INVALID_SESSION_ID: Invalid Session ID found in SessionHeader: Illegal Session faultcode=sf:INVALID_SESSION_ID faultactor=. This can occur when your using the Manage Child Trigger button or editing rollups via the Manage Lookup Rollup Summaries tab. Solution is to disable the 'Lock sessions to the IP address from which they they originated.' setting under Session Settings under Setup. Salesforce documentation notes the following 'This option can inhibit various applications and mobile devices.'. Note this issue only applies while configuration changes are being made with the tool, especially via the Manage Lookup Rollup Summaries (see release notes v2.0). Once rollups are configured this issue does not apply during rollup calculations.
  • Schedule Mode Setup. This is not so much a know issue, but a known source of confusion with the current tool. If you want to use the schedule mode features please read this first

Please feel free to raise feedback and issues via the Github Issues page here.

Packaged Release History

You can install a packaged version of the tool into your production org (sandbox testing as always recommended). Check the limatations and known issues above first!

Latest Release Version 2.11


Package Production URL, Sandbox URL

Release Version 2.10


Package Production URL, Sandbox URL

UPGRADE NOTE: If you access the Rollup definitions via the standard Salesforce Custom Metadata UI under the Setup menu. Make sure to remove 'Test Code (Depricated)' (small one) from the layout and add the new 'Test Code' field (large one). If you only ever use the Manage Rollup Summaries tab you do not need to worry about this. Also note that any test code placed in the original smaller field will be automatically migrated to the new field on next edit (via Manage Rollup Summaries tab).

Release Version 2.9


Package Production URL, Sandbox URL

IMPORTANT NOTES:

  • Please check your Rollup Calculate Job records and if needed (no jobs are actually running) delete them.
  • There is a new Delete Log button on the Summary Logs List View layout please add it

Release Version 2.8


Package Production URL, Sandbox URL

IMPORTANT NOTE: Please check your Rollup Calculate Job records and if needed delete them.

Release Version 2.7


Package Production URL, Sandbox URL

Release Version 2.6


Package Production URL, Sandbox URL

Release Version 2.5


Package Production URL, Sandbox URL

Release Version 2.4.2


Package Production URL, Sandbox URL

Release Version 2.4.1


Package Production URL, Sandbox URL

Documentation: See Declarative Rollup Tool Summer (2016) Release

Version 2.3


Package Production URL, Sandbox URL

Version 2.2


Package Production URL, Sandbox URL

Version 2.1


Package Production URL, Sandbox URL

Version 2.0


Package Production URL, Sandbox URL

UPGRADE NOTE: There is a new Manage Lookup Rollup Summaries tab to support Custom Metadata support.

Known Current Limitiations of Custom Metadata Support

  • Ability to override the generated Apex Test code is not supported (due to platform restriction)
  • Aesthetic case adjustment for object field API names will not be performed, e.g. account would not change to Account
  • When you Undeploy via Manage Child Triggers button, Active Custom Metadata based rollups are not automatically deactivated, please deactivate manually via unticking the Active checkbox.
  • Advanced Rollup UI is not currently available, this will be integrated at a later date
  • Description field is limited to only 255 characters (due to platform restriction)
  • List View support is available under Setup, Custom Metadata Types, Manage Records but does not invoke the new UI for editing

Version 1.25


Package Production URL, Sandbox URL

UPDATE NOTE: There is a new Schedule Calculate button to add to the object Layout, see screenshots below.

New Calc Screen Button

This will show the following UI related to the enhancement above.

New Calc Screen

Version 1.24


Package Production URL, Sandbox URL

IMPORTANT NOTE: This release improves the query optimisation within the tool when there are multiple rollups. There is also a small change in behaviour from previous releases, relating to default ordering. If you have been using concat, first or last operations and have not specified explicit order by on the rollup, you must do from now on, it no longer defaults to the field to rollup. In prior releases the behaviour of this operation may or may not have been consistantly working as expected, depending on the existance of one or more rollups.

Version 1.23


Package Production URL, Sandbox URL

Version 1.22


Package Production URL, Sandbox URL

If you are upgrading, you will need to make the following changes to the Layout.

  • Add Test Code See All Data field to the layout

Version 1.21


Package Production URL, Sandbox URL

If you are upgrading, you will need to make the following changes to the Layout.

  • Add Test Code field to the layout

Version 1.20


Package Production URL, Sandbox URL

If you are upgrading, you will need to make the following changes to the Layout.

  • Add Calculation Sharing Mode field to the layout

Calculation Sharing Mode

Version 1.19


Package Production URL, Sandbox URL

Version 1.18


Read more about this releae here.

Package Production URL, Sandbox URL

If you are upgrading, you will need to make the following changes to the Layout and Picklists.

  • Add Lookup Rollup Summary Unique Name, Concatenate Delimiter, Field to Order By fields to the layout
  • Add Count Distinct, Concatenate, Concatenate Distinct, First and Last picklist items to Aggregate Operation
  • Add Process Builder picklist item to Calculation Mode

Version 1.17


Package Production URL, Sandbox URL

Version 1.16


Package Production URL, Sandbox URL

Version 1.15


Package Production URL, Sandbox URL

Version 1.14


Package Production URL, Sandbox URL

Version 1.13


Package Production URL, Sandbox URL

Version 1.12


Package Production URL, Sandbox URL

KNOWN ISSUE: Apex Error Query Exception, please use version v1.11 below if you encounter this issue.

  • Fix for Currency Conversion?, special thanks to Anthony Heber for submitting the enhancement to LREngine to fix this. The result of the child aggregation is converted to the parent record currency if the child field being aggregated is a Currency type and the org is using Multi-Currency. Note currently dated exchanged rates (available through Advanced Mulit-Currency) are currently not supported.

Version 1.11


Package Production URL, Sandbox URL

Version 1.10


Package Production URL, Sandbox URL

Version 1.9 - Community Powered!


Read more about this release here

Package Production URL, Sandbox URL

KNOWN INSTALL ISSUE There appears to be an install issue identified when installing into orgs without Ideas installed for v1.9, if you encourter this enable Ideas if you can, otherwise use v1.7 until the issue is resolved.

Version 1.8


Not released

Version 1.7


Package Production URL, Sandbox URL

  • Fix for Issue 14, relating to null pointer exception

Version 1.6 - Spring'14 Release - 9th February 2014


Package Production URL, Sandbox URL

  • Enhancements to support Schedule mode, Calculate historic records, Developer API and more, see here.
  • Fix for Issue 10
  • Fix for Issue 11

Version 1.5


Package Production URL, Sandbox URL

  • Fix for Issue 7 and Issue 8, relating to failure to report test execution errors in production org.

Version 1.4


  • Fix for Issue 3, relating to issue when deleting last child record not updating rollup fields to 0.

Version 1.3


  • Fix for Issue 2, relating to error 'purgeOnDelete option can only be used on a non-active org'

Version 1.2


  • Support for Realtime calculations
  • Validation of valid fields and field types on Declarative Rollup definition fields
  • Optimisation during update of child records to only apply rollup when field to aggregate changes
  • More extensive unit tests, also those around use of limits such as queries, rows etc.

Upload Review Passed

Version Beta 6


  • Support for Realtime calculations
  • Limited validation on Declarative Rollup definition fields
  • Limited testing on multiple lookups
  • Fixed issue with multiple lookups

Installing the Source Code (Developers)

This project now uses Salesforce DX for development and packaging. Clone this org and deploy the code to a scratch org to develop and contribute back changes via Pull Requests. If you want to deploy the unmanaged version of this to your sandbox or production org you can use the Salesforce DX convert and deploy commands to do so. However the recommended deployment for these orgs is via the managed package links above.