You need to sign in to do that
Don't have an account?
sukanta 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
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
Anudeep (Salesforce Developers)
You need to handle this by defining a static boolean variable. See this example