Skip to content

Instantly share code, notes, and snippets.

@Sunil02kumar
Created January 30, 2020 07:03
Show Gist options
  • Save Sunil02kumar/efc445404810df8094f76962aea8c805 to your computer and use it in GitHub Desktop.
Save Sunil02kumar/efc445404810df8094f76962aea8c805 to your computer and use it in GitHub Desktop.
string sessionId= UserInfo.getSessionID();
string domainUrl=URL.getSalesforceBaseUrl().toExternalForm();
system.debug('********domainUrl:'+domainUrl);
string objectId ='Contact'; //for custom objects, provide 15 digit or 18 digit object id
HttpRequest req = new HttpRequest();
req.setHeader('Authorization', 'Bearer ' + sessionId);
req.setHeader('Content-Type', 'application/json');
req.setEndpoint(domainUrl+'/services/data/v47.0/tooling/query/?q=select+id,SenderType,templateId+from+WorkflowAlert+where+EntityDefinitionId=\''+objectId+'\'');
req.setMethod('GET');
Http h = new Http();
HttpResponse res = h.send(req);
system.debug(res.getBody());
List<string> workflowEmailAlertIds= new List<string>();
String response=res.getBody();
JSONParser parser = JSON.createParser(Response);
while (parser.nextToken() != null) {
if ((parser.getCurrentToken() == JSONToken.FIELD_NAME)){
String fieldName = parser.getText();
parser.nextToken();
String fieldValue=parser.getText();
if(fieldName == 'Id') {
workflowEmailAlertIds.add(fieldValue);
}
}
}
system.debug('***workflowEmailAlertIds size:'+workflowEmailAlertIds.size());
system.debug('***workflowEmailAlertIds size:'+workflowEmailAlertIds);
string csvString='Workflow Email Alert Id,WorkFlow Email Alert Developer Name,Description,ccEmails,recipients,senderAddress,senderType,Email template Name,Email template Id\n';
//as there is limit of 100 callouts in single transaction, I am restricting it to 90. Assuming there will not be more than
//90 email alert on single object
if(workflowEmailAlertIds.size()<90){
for(string ss:workflowEmailAlertIds){
system.debug('***workflowEmailAlertId :'+ss);
HttpRequest req = new HttpRequest();
req.setHeader('Authorization', 'Bearer ' +sessionId );
req.setHeader('Content-Type', 'application/json');
req.setEndPoint(domainUrl+'/services/data/v41.0/tooling/sobjects/WorkflowAlert/'+ss);
req.setMethod('GET');
Http h = new Http();
HttpResponse res = h.send(req);
system.debug(res.getBody());
String response=res.getBody();
response = response.replace('type', 'type_z');
response = response.replace('protected','protected_z');
response = response.replaceAll(',\r\n','\r\n');
SK_EmailAlertJSONParser emailAlertDetails=new SK_EmailAlertJSONParser();
try{
emailAlertDetails =(SK_EmailAlertJSONParser) System.JSON.deserialize(response, SK_EmailAlertJSONParser.class);
system.debug('******emailAlertDetails:'+emailAlertDetails);
csvString = csvString + emailAlertDetails.Id+ ',' + emailAlertDetails.DeveloperName.escapeCSV() + ','+ emailAlertDetails.Description.escapeCSV();
string ccEmails ='';
if(emailAlertDetails.Metadata!=null){
if(emailAlertDetails.Metadata.ccEmails.size()>0){
ccEmails = string.join(emailAlertDetails.Metadata.ccEmails,',');
csvString = csvString + ','+ ccEmails.escapeCSV();
}else{
csvString = csvString + ',';
}
if(emailAlertDetails.Metadata.recipients!=null){
if(emailAlertDetails.Metadata.recipients.size()>0){
string recString='';
for(SK_EmailAlertJSONParser.Recipients rec: emailAlertDetails.Metadata.recipients){
recString = recString + rec.toString();
}
csvString = csvString + ','+ recString.escapeCSV();
system.debug('****recipients:'+recString);
}else{
csvString = csvString + ',';
}
}else{
csvString = csvString + ',';
}
if(emailAlertDetails.Metadata.senderAddress!=null){
csvString = csvString + ','+ emailAlertDetails.Metadata.senderAddress.escapeCSV() ;
}else{
csvString = csvString + ',';
}
if(emailAlertDetails.Metadata.senderType !=null){
csvString = csvString + ','+ emailAlertDetails.Metadata.senderType.escapeCSV() ;
}else{
csvString = csvString + ',';
}
if(emailAlertDetails.Metadata.template !=null){
csvString = csvString + ','+ emailAlertDetails.Metadata.template.escapeCSV() ;
}else{
csvString = csvString + ',';
}
}
csvString = csvString + ','+emailAlertDetails.TemplateId+'\n';
}catch(exception ex){
system.debug('****exception for email alertid-'+ss);
csvString = csvString +ss+','+ex.getmessage().escapeCSV()+'\n';
}
}
}
Messaging.EmailFileAttachment csvAtt = new Messaging.EmailFileAttachment();
blob csvBlob = Blob.valueOf(csvString);
csvAtt.setFileName(domainUrl+'-Email Alerts info for '+objectId+'.csv');
csvAtt.setBody(csvBlob);
Messaging.SingleEmailMessage email =new Messaging.SingleEmailMessage();
String[] toAddresses = new list<string> {UserInfo.getUserEmail()};
string subject=domainUrl+'-Email Alerts info for '+objectId;
email.setSubject(subject);
email.setToAddresses( toAddresses );
email.setPlainTextBody(subject);
email.setFileAttachments(new Messaging.EmailFileAttachment[]{csvAtt});
Messaging.sendEmail(new Messaging.SingleEmailMessage[] { email });
// ===========================================================================
// Entity: SK_EmailAlertJSONParser
// Author: Sunil Kumar
// Purpose: wrapper class to parse emailalert response JSON using tooling api
// '/services/data/v47.0/tooling/sobjects/WorkflowAlert/01W380000xxxxbs'
// ===========================================================================
public class SK_EmailAlertJSONParser {
public string Id;
public String CcEmails ;
public String Description ;
public String DeveloperName ;
public String SenderType ;
public String EntityDefinitionId ;
public Metadata Metadata ;
public String FullName ;
public string TemplateId;
public class Metadata {
public List<String> ccEmails ;
public String description ;
public Boolean protected_Z ;// in json: protected
public List<Recipients> recipients ;
public String senderAddress ;
public String senderType ;
public String template ;
public Object urls ;
}
public class Recipients {
public String field ;
public Object recipient ;
public String type_Z ;// in json: type
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment