function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
ashu 6112ashu 6112 

Help in Trigger

Hi,

I have wrote a trigger to send an attachment once the Account Field 'Status' field value changed to 'Approved/Submitted to BA' OR 'Paperwork Complete'.
All is working fine except it is attaching the document 2 times, we have to attach only one time.

trigger SendAttachmentonAccount on Account (after update) 

    List<Account> lstGreensheet = new List<Account>();
    system.debug('======= AccountAttachment Started =============');
    Account AccountOld = trigger.old[0];
    Account AccountNew = trigger.new[0];
    system.debug('AccountOld '+ AccountOld.get('Status__c'));   
    system.debug('AccountNew '+ AccountNew.get('Status__c'));
        
    if((AccountOld.get('Status__c') != AccountNew.get('Status__c')) && 
       (AccountNew.get('Status__c') == 'Approved/Submitted to BA' ||
        AccountNew.get('Status__c') == 'Paperwork Complete' ))
        {
        
            generateAccountPDF.attachingPDFOnStatusChange((String)AccountNew.get('Id'),(String)AccountNew.get('Name'));    
               
        }
        system.debug('======= Account Attachment Completed =============');  
}
Nishad KNishad K
Hi ashu,
I think nothing wrong with the trigger!
Maybe some problem on your class"generateAccountPDF", can u share the class?
ashu 6112ashu 6112
public without sharing class generateGreensheetPDF {
 
    private Greensheet__c greensheet{get;set;} 
    public String idGreensheet {get;set;}
    
      public generateGreensheetPDF(){    }
    
    
    public generateGreensheetPDF(ApexPages.StandardController cntrll){
        idGreensheet = ApexPages.currentPage().getParameters().get('id');
        greensheet = (Greensheet__c)cntrll.getRecord();
        System.debug('idGreensheet '+idGreensheet);
    }
    
    @Future(callout=true)
    public static void attachingPDFOnStatusChange(String id,String name){
           system.debug('==== Executing attachingPDFOnStatusChange Started============');
            String pdfName = name+'.pdf';
     PageReference pgPDFAtachment = Page.greensheetpdf;
        pgPDFAtachment.getParameters().put('id',id);
        Blob blobPDF = pgPDFAtachment.getContent();
        String tmpName = '';
        
        Attachment attachPDF = new Attachment(parentid= id,Name=pdfName,body=blobPDF);
        insert attachPDF;
       system.debug('==== Executing attachingPDFOnStatusChange Completed============');
    }   
   
     @Future(callout=true)
    public static void attachingPDFOnStatusChange(String idGreensheetrec,String strTitle,String statusCurr){
           system.debug('==== Executing attachingPDFOnStatusChange Started============');
            String pdfName = '';
     PageReference pgPDFAtachment = Page.greensheetpdf;
        pgPDFAtachment.getParameters().put('id',idGreensheetrec);
        Blob blobPDF = pgPDFAtachment.getContent();
        String tmpName = '';
        pdfName = genFileNameForGreensheetAtt(idGreensheetrec,strTitle, statusCurr);
        Attachment attachPDF = new Attachment(parentid= idGreensheetrec,Name=pdfName,body=blobPDF);
        insert attachPDF;
       system.debug('==== Executing attachingPDFOnStatusChange Completed============');
    }   

    public static String genFileNameForGreensheetAtt(String idGreensheetrec,String strTitle,String statusCurr){
        //idGreensheetrec = 'a1IV00000018Uy7MAE';
        //strTitle = 'Fox Movie Package';
        //statusCurr = 'Paperwork Complete%';
        system.debug('idGreensheetrec '+idGreensheetrec+'====strTitle :'+strTitle+'=====statusCurr :'+statusCurr);
        String strSearchQuery = strTitle +'_'+ statusCurr;
        
        String strFileName ='';
        /*
        List<Attachment> lstAtt = [SELECT count(Name) FROM Attachment    //SELECT Id,Name,ParentId,SystemModstamp FROM Attachment 
                                   WHERE ParentId =:idGreensheetrec  AND Name LIKE :strSearchQuery 
                                   ORDER BY SystemModstamp DESC NULLS FIRST ];
        if(lstAtt!=null && lstAtt.size()>0){
            //tmpName = lstAtt.get(0).Name;
            //pdfName = lstAtt.get(0).Name.split('_')[0]
        }else{
            
        }*/
        
        AggregateResult[] aresult = [select count(ParentId) attatchmentCnt From Attachment Where ParentId=:idGreensheetrec AND Name LIKE :strSearchQuery ];
        if(aresult!=null && aresult.size()>0){
          for(AggregateResult ar : aresult){
            strFileName = strSearchQuery+'_'+ar.get('attatchmentCnt')+'.pdf';
        }    
        }else{
            strFileName = strSearchQuery+'.pdf';
        }
        
        system.debug('FileName Generated :'+strFileName);
       return strFileName;
    }
    
    public PageReference attachingPDF(){
        String pdfName = [select Name from Greensheet__c where Id=:idGreensheet limit 1][0].Name+'.pdf';
     PageReference pgPDFAtachment = Page.greensheetpdf;
        pgPDFAtachment.getParameters().put('id',idGreensheet);
        Blob blobPDF = pgPDFAtachment.getContent();
       // Attachment attachPDF = new Attachment(parentid= greensheet.Id,Name=pdfName,body=blobPDF);
        Attachment attachPDF = new Attachment(parentid= idGreensheet,Name=pdfName,body=blobPDF);
        insert attachPDF;
         
        PageReference redirectToPage = new ApexPages.StandardController(greensheet).view();
        redirectToPage.setRedirect(true);
        return redirectToPage;
    }   
    
    
}
ashu 6112ashu 6112
Now I am getting on thing, it is attaching doc one time for some record, two times for some records..
Nishad KNishad K
Here "generateGreensheetPDF " is your class name then why u use      generateAccountPDF.attachingPDFOnStatusChange((String)AccountNew.get('Id'),(String)AccountNew.get('Name'));on the trigger ?
 
trigger SendAttachmentonAccount on Account (after update) 
{ 
    List<Account> lstGreensheet = new List<Account>();
    system.debug('======= AccountAttachment Started =============');
    Account AccountOld = trigger.old[0];
    Account AccountNew = trigger.new[0];
    system.debug('AccountOld '+ AccountOld.get('Status__c'));   
    system.debug('AccountNew '+ AccountNew.get('Status__c'));
        
    if((AccountOld.get('Status__c') != AccountNew.get('Status__c')) && 
       (AccountNew.get('Status__c') == 'Approved/Submitted to BA' ||
        AccountNew.get('Status__c') == 'Paperwork Complete' ))
        {
        
           generateGreensheetPDF.attachingPDFOnStatusChange((String)AccountNew.get('Id'),(String)AccountNew.get('Name'));    
               
        }
        system.debug('======= Account Attachment Completed =============');  
}

From me this working fine

Regards,
 
ashu 6112ashu 6112
Actually i told u according to standard obj, our custon obj is greensheet..dats y, not go to the name...