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
sukanta Anbu 7sukanta Anbu 7 

Trigger to invoke a POST callout on a certain condition. But the callout is invoked twice

I have written a trigger on a custom object which will  invoke a callout written in a seperate class. The condition on which the trigger will be invoked is when there is a change in lookup field. the trigger will compare the old value and the new value and if there is a chnage the trigger will be invoked. The following is my trigger:
trigger dmsBackup on Document_Management__c (after delete, after update) {
    Boolean folderUploadCall = false;
    if(trigger.isAfter) {
        if(trigger.isDelete)
        {
            List<Deleted_DMS_Record__c> dmsrec = new List<Deleted_DMS_Record__c>();
            for(Document_Management__c toBeDeleted : trigger.old)
            {
                system.debug('toBeDeleted' + toBeDeleted);
                Deleted_DMS_Record__c backup = new Deleted_DMS_Record__c();
                backup.DeletedAccount__c = toBeDeleted.Account__c;
                //   backup.Deleted_AccountID__c = toBeDeleted.AccountID__c;
                backup.DeletedActive_Contract__c = toBeDeleted.Active_Contract__c;
                backup.DeletedCompetitor_Contract__c = toBeDeleted.Competitor_Contract__c;
                backup.DeletedContract_LOB__c = toBeDeleted.Contract_LOB__c;
                backup.DeletedDescription__c = toBeDeleted.Description__c;
                backup.DeletedDoc_type__c = toBeDeleted.Doc_type__c;
                backup.DeletedDocument_Name__c = toBeDeleted.Name;
                backup.folders__c = toBeDeleted.folders__c;
                backup.Deletedid_reference__c = toBeDeleted.id_reference__c;
                backup.DeletedJobID__c = toBeDeleted.jobID__c;
                backup.DeletedKey_Words__c = toBeDeleted.Key_Words__c;
                backup.DeletedVersion__c = toBeDeleted.Version__c;
                dmsrec.add(backup);
                system.debug('backup '+backup); 
            }
            if(dmsrec.size()>0)
            {
                insert dmsrec;
                system.debug('list'+ dmsrec);
            }
        }
        
        else if(trigger.isUpdate){
            for (Document_Management__c docfold: Trigger.new) {
                Document_Management__c oldFolder = Trigger.oldMap.get(docfold.Id);
                if (docfold.Doc_Folder__c != oldFolder.Doc_Folder__c) {
                    FolderUploadController.FolderUpdate(docfold.Id, docfold.folders__c);
                    System.debug('docfold.Id');
                }
            }
        }
        
    }
}
 The following is my apex class:
public class FolderUploadController {
@AuraEnabled
    @future (callout=true)
    public static void FolderUpdate(id recordId, String folders) {
         system.debug(recordId);
        system.debug(folders);
        Http h = new Http();

        String url = 'https://intelligent-sfdms.herokuapp.com/salesforce/movefile/'+ recordId+'/';
        String separationString = '2a8b526b-ee1e-461b-87fe-ce69c0491b04';
        String token = 'RGLYisTnzvEIRTCOJV7G3KUgnwNhYZXgKJJaOMQkgTq97RnDz6pmwuMqd9F9GBXy';
         
        Document_Management__c dm =[select id, folders__c from Document_Management__c where id=:recordId];
        system.debug('without pretty'+JSON.serialize(dm));
        String JsonString=JSON.serialize(dm);
   
             
        HttpRequest req = new HttpRequest();
        req.setHeader('Content-Type','application/json; boundary=' +separationString);
        req.setHeader('X-CSRFToken', token);
        req.setHeader('Cookie', 'sessionid=ml0as2d28qbh8du2p5687ty2oof4axcu; csrftoken=RGLYisTnzvEYTGCOJV7G3KUgnwNhYZXgKJJaOMQkgTq97RnDz6pmwuMqd9F9GBXy');
        req.setHeader('Referer', 'https://intelligent-sfdms.herokuapp.com/salesforce/login/');
        req.setHeader('recordId', recordId);
        req.setEndpoint(url);
        req.setMethod('POST');
        req.setBody(JsonString);
        req.setTimeout(120000);
        
        system.debug('Sentbody=' + JsonString);
        system.debug('REQUEST: ' + req);

        // Send the request, and return a response
        HttpResponse res = h.send(req);
        System.debug(res.getBody());
      
    }
}
The error is that the callout is made twice. Hw do I make it to execute only once. Thanks in advance
AnudeepAnudeep (Salesforce Developers) 
You need to handle this by defining a static boolean variable. See this example