Approve/Reject Records at once with Apex

Sample code to bulk approve/reject records using apex code.

Set<Id> oppIds = (new Map<Id, Opportunity>([SELECT Id FROM Opportunity])).keySet();
Set<Id> pIds = (new Map<Id, ProcessInstance>([SELECT Id,Status,TargetObjectId FROM ProcessInstance where Status='Pending' and TargetObjectId in :oppIds])).keySet();
Set<Id> pInstanceWorkitems = (new Map<Id, ProcessInstanceWorkitem>([SELECT Id,ProcessInstanceId FROM ProcessInstanceWorkitem WHERE ProcessInstanceId in :pIds])).keySet();
List<Approval.ProcessWorkitemRequest> allReq = new List<Approval.ProcessWorkitemRequest>(); 
for (Id pInstanceWorkitemsId:pInstanceWorkitems){
    system.debug(pInstanceWorkitemsId);
        Approval.ProcessWorkitemRequest req2 = new Approval.ProcessWorkitemRequest();
        req2.setComments('mRequest.');
        req2.setAction('Approve'); //to approve use 'Reject'
        req2.setNextApproverIds(new Id[] {UserInfo.getUserId()});
        // Use the ID from the newly created item to specify the item to be worked
        req2.setWorkitemId(pInstanceWorkitemsId);
        allReq.add(req2);
}

Approval.ProcessResult[] result2 =  Approval.process(allReq);

Keep blogging :)

Post a Comment

0 Comments