We can achieve dynamic approval by creating a custom object and upload all the approve rs related to your business logic. In this example first create a custom object Position Approval Matrix and create list of records related to each department.The class and trigger looks like this
public class PositionApproval {
// Author: Mike Dannenfeldt, Etherios
static final Map<String,Position_Approval_Matrix__c> APPROVAL_MAP_CONST;
static {
APPROVAL_MAP_CONST = getPositionApprovalMap();
}
private static Map<String,Position_Approval_Matrix__c> getPositionApprovalMap(){
// build a Map from Department --> Approval Matrix record
Map<String,Position_Approval_Matrix__c> results = new Map<String,Position_Approval_Matrix__c>();
List<Position_Approval_Matrix__c> records = [select id,name,department__c,approver_1__c,approver_2__c,approver_3__c from Position_Approval_Matrix__c];
for(Position_Approval_Matrix__c record : records){
if (!results.containsKey(record.department__c)) results.put(record.department__c, record);
}
return results;
}
public static void setPositionApprovers(Position__c[] positions){
for (Position__c p:positions){
if (p.Department__c != null) {
if (APPROVAL_MAP_CONST.containsKey(p.Department__c)){
p.approver_1__c = APPROVAL_MAP_CONST.get(p.Department__c).approver_1__c;
p.approver_2__c = APPROVAL_MAP_CONST.get(p.Department__c).approver_2__c;
p.approver_3__c = APPROVAL_MAP_CONST.get(p.Department__c).approver_3__c;
} else {
p.approver_1__c = null;
p.approver_2__c = null;
p.approver_3__c = null;
}
}
}
}
}
trigger PositionApprovalTrigger on Position__c (before insert, before update) {
PositionApproval.setPositionApprovers(Trigger.new);
}
Position record after insert looks like this
No comments:
Post a Comment