2017-10-05 7 views
0

J'ai créé, après déclenchement de mise à jour, mais je suis incapable d'avoir à sauver, je ne pas tout à fait undetstand pourquoi il ne fonctionne pasSalesforce après mise à jour Trigger

trigger Adhoc_Approval_process_trigger on Ad_Hoc_Approval__c (after update) { 

    list<Ad_Hoc_Approval__c> ladh= new list<Ad_Hoc_Approval__c>(); 
    list<Ad_Hoc_Approval__c> query=[select Status__c,Submitted_for_Approval_Date__c from Ad_Hoc_Approval__c]; 
    for(Ad_Hoc_Approval__c adh : query) 
    { 
     if(adh.Status__c =='Submitted for Approval') 
     { 
      adh.Submitted_for_Approval_Date__c=Date.today(); 
      ladh.add(adh); 
     } 

    } 

    update ladh; 

} 

J'ai aussi converti à un avant déclenchement de mise à jour, et il fonctionne très bien, quelqu'un peut-il me s'il vous plaît aider à comprendre pourquoi,

trigger Adhoc_Approval_process_trigger on Ad_Hoc_Approval__c (before update) { 

     for(Ad_Hoc_Approval__c adh : trigger.new) 
     { 
      if(adh.Status__c =='Submitted for Approval') 
      { 
       adh.Submitted_for_Approval_Date__c=Date.today(); 

      } 

     } 



    } 

Merci beaucoup

Répondre

1

Vous voulez dire ne parvient pas à sauver car il ne compile pas? Hm, regarde bien d'un coup d'oeil, a des erreurs? Votre première version finirait par être une boucle sans fin :) update -> update -> mise à jour ... Sans oublier que la requête n'a pas de clause WHERE donc elle finira par exploser quand vous atteindrez 10,0001 enregistrements ...

2ème version est beaucoup mieux :) Fonctionne uniquement sur la portée du déclencheur actuel et "avant la mise à jour" vous obtenez la sauvegarde de la base de données gratuitement.

+0

Merci pour votre réponse, corrigez-moi si je me trompe, vous ne pouvez pas utiliser une mise à jour DML dans un après déclenchement pour le même objet, si la mise à jour DML autres objets, nous devrions être bon, correct? – Sam

+0

Normalement, vous ne pouvez pas obtenir l'erreur "UNABLE TO LOCK ROW". Il y a une astuce si vous en avez vraiment vraiment besoin, mais alors c'est votre travail de vous assurer qu'il n'entrera pas dans une boucle infinie et finira par être terminé à cause des limites du gouverneur. Mais vous êtes libre d'insérer, mettre à jour, supprimer tous les autres objets qui ne sont pas dans la portée de 'trigger.new'. – eyescream

+0

Ca a du sens maintenant, merci beaucoup – Sam