2013-04-12 54 views
0

我在对象上有两个触发器。Salesforce触发序列

一个是托管包,我无法看到或修改触发器内的内容。

一个是由我设计的。

我想在托管包触发器之前运行自己创建的触发器。我可以控制触发器执行的顺序吗?

因为它现在总是首先运行托管软件包触发器。我想先运行我的触发器。我已经想了几天。我公司的所有同事都无法知道如何实现这一目标。没有解决这个问题,我无法继续我的工作。请帮助我。

+1

托管触发器之前或之后运行?一般来说,我们无法控制订单,这就是为什么在一个“插入之前”触发多于一个触发器是一个不好的主意。在真正复杂的场景中,我甚至使用http://www.embracingthecloud.com/2010/07/08/ASimpleTriggerTemplateForSalesforce.aspx。你有没有试过联系你的软件包的作者? – eyescream

回答

0

在系统中没有办法控制调用触发器的顺序,我认为这种不安全编程的局限性。你有权使用包装触发器吗?这对于在一个对象上有几个触发器是一个非常糟糕的方法,更好的解决方案是有一个触发器来调用各种处理程序。然后,在处理器级别,你可以管理这个处理程序的顺序..

例如,这是简单的触发器,它调用不同的事件,并调用各种逻辑不同的方法:

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 
    } 
} 
} 

为了确保只有在完成执行前一个处理程序之后才能调用处理程序,则可以使用状态变量的值在处理程序结束时更改,并且可以在调用其他处理程序之前进行检查。我希望这将在未来帮助你:)