• harsha nandam 8
  • NEWBIE
  • 0 Points
  • Member since 2018

  • Chatter
    Feed
  • 0
    Best Answers
  • 0
    Likes Received
  • 1
    Likes Given
  • 0
    Questions
  • 1
    Replies
Hi Everyone,

Requirenment: Every user should recall the approval process.

I follow this link for email service - https://salesforce.stackexchange.com/questions/122989/recall-approval-process-from-apex-for-non-admin-profile

I configured the email service and wrote the apex classes also ( code as below)
 
global class RecallEmailServiceNST implements Messaging.InboundEmailHandler 
{
    public RecallEmailServiceNST(ApexPages.StandardController controller){}
    global Messaging.InboundEmailResult handleInboundEmail(Messaging.InboundEmail email,Messaging.InboundEnvelope envelope)
    {  
        Messaging.InboundEmailResult emailresult = new Messaging.InboundEmailResult();
        system.debug(email.plainTextBody);
        if(email.subject.containsIgnoreCase('Recall NST'))
        {
            String str = email.subject.normalizeSpace();
            String NSTNumber = str.substring(str.indexOf('-')+1,str.length());
            System.debug('NSTNumber :'+NSTNumber);            
            NST__c con = [Select Id,Name From NST__c WHERE Name=:NSTNumber];
            try
            {        
            List<ProcessInstance> pi = [SELECT Id FROM ProcessInstance WHERE TargetObjectId=:con.Id AND Status='Pending'];  
              System.debug('pi :'+pi );  
            if(pi.size()==0)
                return emailresult;
            List<ProcessInstanceWorkitem> piw = [SELECT Id,ActorId,ProcessInstanceId FROM ProcessInstanceWorkitem WHERE Actor.Email=:email.fromAddress and ProcessInstanceId=:pi[0].Id];            
           System.debug('piw :'+piw ); 
            if(piw.size()==0)
                return emailresult;
            Approval.ProcessWorkitemRequest req = new Approval.ProcessWorkitemRequest();                        
      /*      if(email.plainTextBody.containsIgnoreCase('<approved>'))
            {
                req.setComments('Request Approved by Email Approval..!!');
                req.setAction('Approve');
            }                                    
            else if(email.plainTextBody.containsIgnoreCase('<rejected>'))
            {
                req.setComments('Request Rejected by Email Approval..!!');
                req.setAction('Reject');
            }
            else */if(email.plainTextBody.containsIgnoreCase('<recalled>'))
            {
                req.setComments('Request Recalled by Email Approval..!!');
                 System.debug('Request Recalled by Email Approval..!!' ); 

                req.setAction('Removed');        
                 System.debug('Removed' ); 
            }
            req.setWorkitemId(piw[0].Id);                                  
            Approval.ProcessResult result = Approval.process(req);
            FeedItem a = new FeedItem(ParentId=con.Id,Type='TextPost');  
            if(result.isSuccess())                                    
            {
                a.Body='Email received from Approver and the process was '+result.getInstanceStatus();                
            }
            else if(!result.isSuccess())
            {
                a.Body='Email received from Approver but some error occured, please contact sys admin';
            }
            a.Body+=email.plainTextBody;
            Insert a;
            }
            catch(Exception e)
            {
                system.debug(e);
            }            
        }
        return emailresult;       
    } 
}

Error: 
A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed:

>>> recallemailservicenst@y-1sgjk0kf5kumx9gjf0ri0ajl9jp654aldvztnd1l5a4q
>>> vbjq7y.0q-cuhyeas.cs64.apex.sandbox.salesforce.com (Undelivered): 
>>> 550 An internal error occured

couls you please assist us to fix the internal server error.

Thanks
sivapriyaa  M S
Hi Everyone,

Requirenment: Every user should recall the approval process.

I follow this link for email service - https://salesforce.stackexchange.com/questions/122989/recall-approval-process-from-apex-for-non-admin-profile

I configured the email service and wrote the apex classes also ( code as below)
 
global class RecallEmailServiceNST implements Messaging.InboundEmailHandler 
{
    public RecallEmailServiceNST(ApexPages.StandardController controller){}
    global Messaging.InboundEmailResult handleInboundEmail(Messaging.InboundEmail email,Messaging.InboundEnvelope envelope)
    {  
        Messaging.InboundEmailResult emailresult = new Messaging.InboundEmailResult();
        system.debug(email.plainTextBody);
        if(email.subject.containsIgnoreCase('Recall NST'))
        {
            String str = email.subject.normalizeSpace();
            String NSTNumber = str.substring(str.indexOf('-')+1,str.length());
            System.debug('NSTNumber :'+NSTNumber);            
            NST__c con = [Select Id,Name From NST__c WHERE Name=:NSTNumber];
            try
            {        
            List<ProcessInstance> pi = [SELECT Id FROM ProcessInstance WHERE TargetObjectId=:con.Id AND Status='Pending'];  
              System.debug('pi :'+pi );  
            if(pi.size()==0)
                return emailresult;
            List<ProcessInstanceWorkitem> piw = [SELECT Id,ActorId,ProcessInstanceId FROM ProcessInstanceWorkitem WHERE Actor.Email=:email.fromAddress and ProcessInstanceId=:pi[0].Id];            
           System.debug('piw :'+piw ); 
            if(piw.size()==0)
                return emailresult;
            Approval.ProcessWorkitemRequest req = new Approval.ProcessWorkitemRequest();                        
      /*      if(email.plainTextBody.containsIgnoreCase('<approved>'))
            {
                req.setComments('Request Approved by Email Approval..!!');
                req.setAction('Approve');
            }                                    
            else if(email.plainTextBody.containsIgnoreCase('<rejected>'))
            {
                req.setComments('Request Rejected by Email Approval..!!');
                req.setAction('Reject');
            }
            else */if(email.plainTextBody.containsIgnoreCase('<recalled>'))
            {
                req.setComments('Request Recalled by Email Approval..!!');
                 System.debug('Request Recalled by Email Approval..!!' ); 

                req.setAction('Removed');        
                 System.debug('Removed' ); 
            }
            req.setWorkitemId(piw[0].Id);                                  
            Approval.ProcessResult result = Approval.process(req);
            FeedItem a = new FeedItem(ParentId=con.Id,Type='TextPost');  
            if(result.isSuccess())                                    
            {
                a.Body='Email received from Approver and the process was '+result.getInstanceStatus();                
            }
            else if(!result.isSuccess())
            {
                a.Body='Email received from Approver but some error occured, please contact sys admin';
            }
            a.Body+=email.plainTextBody;
            Insert a;
            }
            catch(Exception e)
            {
                system.debug(e);
            }            
        }
        return emailresult;       
    } 
}

Error: 
A message that you sent could not be delivered to one or more of its recipients. This is a permanent error. The following address(es) failed:

>>> recallemailservicenst@y-1sgjk0kf5kumx9gjf0ri0ajl9jp654aldvztnd1l5a4q
>>> vbjq7y.0q-cuhyeas.cs64.apex.sandbox.salesforce.com (Undelivered): 
>>> 550 An internal error occured

couls you please assist us to fix the internal server error.

Thanks
sivapriyaa  M S