2013-04-12 4 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 
    } 
} 
} 

Для того, чтобы убедитесь, что обработчик может быть вызван только после завершения выполнения предыдущего обработчика, вы можете использовать переменные состояния, значения которых будут изменены в конце обработчика, и вы можете проверить их до вызова других обработчиков. Я надеюсь, что это поможет вам в будущем :)