My_Test_Repo/force-app/main/default/classes/NotifyBatch.cls

73 lines
4.0 KiB
OpenEdge ABL

public class NotifyBatch implements Database.Batchable<sObject>,Database.stateful,Schedulable {
public Map<String,List<Id>> maplist = new Map<String,List<Id>>();
public void execute(SchedulableContext SC) {
NotifyBatch obj = new NotifyBatch() ;
Database.executeBatch(obj, 50);
}
public Database.QueryLocator start(Database.BatchableContext bc) {
String strPending = 'Pending';
String SOQL = 'SELECT Id, Status, TargetObjectId, ElapsedTimeInDays, CreatedDate from ProcessInstance where Status =:strPending' ;
return Database.getQueryLocator(SOQL);
}
public void execute(Database.BatchableContext bc, List<ProcessInstance> records){
Set<id> pids = new Set<id>();
for(ProcessInstance pLoop : records) {
if(pLoop.CreatedDate < Date.Today() || Test.isRunningTest())
pids.add(pLoop.ID);
}
if(pids.size() > 0) {
List <ProcessInstanceWorkitem> PWI = [Select ProcessInstance.CompletedDate,ProcessInstance.ElapsedTimeInDays,ProcessInstance.ElapsedTimeInHours,ProcessInstance.ElapsedTimeInMinutes,ProcessInstance.LastActorId,ProcessInstance.ProcessDefinitionId,
ProcessInstance.Status,
ProcessInstance.TargetObjectId,
ProcessInstance.ID,
ID,
ActorId,
ElapsedTimeInDays,
ElapsedTimeInHours,
ElapsedTimeInMinutes,
OriginalActor.Id,
OriginalActor.Email,
OriginalActor.LastName,
ProcessInstanceId
from ProcessInstanceWorkitem where ProcessInstanceId IN: pids ORDER BY CreatedDate Desc];
for(ProcessInstanceWorkitem op2 : PWI) {
if(maplist.ContainsKey(op2.OriginalActor.Email)) {
List<Id> lst = maplist.get(op2.OriginalActor.Email);
lst.add(op2.Id);
maplist.put(op2.OriginalActor.Email, lst);
} else {
maplist.put(op2.OriginalActor.Email, new List<Id>{op2.Id});
}
System.debug('maplist>>>>>> '+maplist.values());
}
}
}
public void finish(Database.BatchableContext bc){
if(maplist.size() > 0) {
List<Messaging.SingleEmailMessage> Singleemails = new List<Messaging.SingleEmailMessage>();
for(String iloop : maplist.keyset()) {
List<Id> records = maplist.get(iloop);
List<String> URLs = new List<String>();
for(Id rec : records) {
URLs.add(URL.getSalesforceBaseUrl().toExternalForm() + '/' + rec + '\r\n');
}
Messaging.SingleEmailMessage Singleemail = new Messaging.SingleEmailMessage();
Singleemail.settoAddresses(new List<String>{iloop});
Singleemail.setReplyTo('noreply@salesforce.com');
Singleemail.setSenderDisplayName('SFDC Administrator');
Singleemail.setSaveAsActivity(false);
Singleemail.setSubject('Waiting for Approval');
String body = 'Hello' + '<Br/>' + '<Br/>' + 'The below items are waiting for your Approval. Please Approve';
for(String key : URLs) {
body = body + '<Br/>' + key;
}
body = body + '<Br/>' + '<Br/>' + '<Br/>' + 'Thanks.';
Singleemail.setHTMLBody(body);
Singleemails.add(Singleemail);
}
if(Singleemails.Size() > 0)
Messaging.sendEmail(Singleemails);
}
}
}