73 lines
4.0 KiB
OpenEdge ABL
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);
|
|
}
|
|
}
|
|
} |