Ever come across the need of a large approval process where you do not know who the approver of the next stage will be? We all do don’t we?
In a recent project requirement, I had to work on a big approval process. My basic requirement was:
1. One approval process for child object
2. Once child is approved, it should trigger the master object approval process
Both the approval process had around 5 steps and the Approvers were determined by the role hierarchy and the region of the submitter.
For this recipe, you need
1. Basic knowledge of APEX and trigger
2. Basic knowledge of Approval process
So let us begin with the Child Object Dynamic Approval process!
Steps for Child Object Dynamic Process:
i) Approval_step__c: Text field to determine which step the approval is.
ii) Next_approval__c: A user field to store the approver.
i) Initial submission action will be field update: Approval_step__c=’Submitted for approval’
ii) In approver step, select related user and add the Next_approval__c
iii) In the approval Step Action, field update for Approval_step__c with the next step of Approval. Keep a note of these keywords.
iv) Repeat the ii) and iii) till you finish all the approval steps.
i) Check if Trigger.old.Approval_step__c != Trigger.new.Approval_step__c (this is a pseudo code, you will have to iterate through trigger.new and old and compare all values, if you do not know how to do this, add a comment below)
ii) Now based on the value in Approval_step__c fetch the respective user from Role Hierarchy or anywhere else. Better option would be to use custom settings for this. Add this user in Next_approval__c
iii) Repeat step ii) till you finish all the approval steps. The final approval step would be to either empty the Next_approval__c field or set it back to manager of the user.
i) In the approval process, set the final approval action to ‘Approved’
ii) In the trigger if the field value is ‘Approved’ then submit the Master in Approval process using Apex Code. (There are many links which give you direct code, the code on my blog will come in next post.)
That’s it. It is easily understood that you need to repeat the whole process for master if he needs dynamic approval.
After you done everything take a deep breath and test your code. If it doesn’t the way it should, take an aspirin and debug. Since this uses hand-shake between trigger and approval steps make sure you don’t miss out on any step.
It works and I did not need Aspirin, thank God for that.
Note: As this approval process updates back-end, the visual process manager won’t be able to visualize it.
Hope it helps,