function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion

Best Practice for Managing Products our Customers Purchase

Hey everybody,


I'm hoping some other folks have had similar needs as this and come across some creative ways to solve the problem.  I am trying to come up with a way that we can track what products our clients are using at the account level.  I was hoping to keep this fairly automated, which meant a multi-select picklist is out since you can't update that with a workflow rule.


We have conservatively 10 different products a client could be leveraging.  What are some of the ways you have found to help automate the management of that list depending on closed/won opportunities or some other data elements?


Any ideas or feedback anyone can provide would be greatly appreciated.  Let me know if there's any other detail I can provide.





Jeff MayJeff May

You can use Product Families to group the products as appropriate.  Then,  As long as you have fewer than 10, you can use Rollup count fields on the Opp, each Rollup field will be the number of OppProducts in a particular family.  This number is then available on the Opp record.   You can then have a Rollup Count on the Account that sums the Opp.Rollup for each family.  The restriction here is that you can only have 10 rollup fields on any object.


If you have more than 10 different things you want to 'summarize' on an Account, things get more complicated.  Since Products are not really assigned to Opps, instead OpportunityProduct records are created.


(Messiness alert!) You could have a related list on the Account page of all the OpportuntityProducts (but it will not de-dupe them so the list could contain multiple lines for the same Product)   You would create a Lookup(Account) field on the Opp Product, and then write a trigger that sets the Lookup(Account) to the Opportunity.AccountId on each OppProduct insert and update.  


(Complexity alert!) You could create a 'junction object' that contains a Lokup(Account), a Lookup(Product), and a NumberOfTimes field.  You would then have to create a trigger on OppProduct to check to see if this Account/Product combo already exists.  If not, create a record and set its NumberOfTimes field to 1.  If the record does exist, increase its 'NumberOfTimes' +1.  On OppProduct delete, decrease the NumberOfTimes - 1, and if the result is 0, remove the 'junction object' record.