2013-04-12 1 views
0

J'ai deux déclencheurs sur un objet.Séquence de déclenchement Salesforce

Un paquet est géré dont je n'ai pas pu voir ou modifier le contenu à l'intérieur du déclencheur.

On est design par moi.

Je souhaite exécuter mon propre déclencheur avant le déclenchement du package géré. Pourrais-je contrôler la séquence de l'exécution du déclencheur. Parce qu'il exécute maintenant toujours le déclencheur de package géré en premier. Je voudrais lancer ma gâchette en premier. Je pense depuis quelques jours. Tous les collègues de mon entreprise ne pouvaient pas savoir comment atteindre cet objectif. Sans résoudre ce problème, je ne pourrais pas continuer mon travail. Sil te plait aide moi.

+1

Le déclencheur géré s'exécute avant ou après? Généralement nous n'avons aucun contrôle sur l'ordre, c'est pourquoi c'est une mauvaise idée d'avoir plus d'un déclencheur sur le même "avant insertion" par exemple. Dans des scénarios vraiment complexes, j'utilise même http://www.embracingthecloud.com/2010/07/08/ASimpleTriggerTemplateForSalesforce.aspx. Avez-vous essayé de contacter l'auteur de votre paquet? – eyescream

Répondre

0

Dans le système il n'y a aucun moyen de contrôler la séquence des déclencheurs d'appels, je pense que cette limitation de la programmation non sécurisée. Avez-vous accès au déclencheur du paquet? C'est une très mauvaise approche d'avoir plusieurs déclencheurs sur un seul objet, une meilleure solution est d'avoir un seul déclencheur qui va appeler différents gestionnaires. Ensuite, au niveau des gestionnaires, vous pouvez gérer la séquence de ce handlers ..

Par exemple, c'est déclencheur simple, qui est invoquée sur différents événements et appelle des méthodes différentes avec différentes logiques:

trigger ContactTrigger on Contact (before insert, before update) { 

    /* Before Update*/ 
    if(Trigger.isUpdate && Trigger.isBefore){ 
     /* 
     here you can invoke different methods of different classes 
     (trigger handlers) in different sequences 
     */ 
    } 

    /* Before Insert*/ 
    if(Trigger.isInsert && Trigger.isBefore){ 
     //on other events you can use it too 
    } 
} 
} 

Pour Assurez-vous qu'un gestionnaire ne peut être appelé qu'après avoir terminé l'exécution du gestionnaire précédent, vous pouvez utiliser les variables d'état dont les valeurs seront modifiées à la fin du gestionnaire, et vous pouvez vérifier avant d'appeler d'autres gestionnaires. J'espère que cela vous aidera à l'avenir :)

Questions connexes