Как я могу остановить выполнение управляемого триггера во время выполнения тестового класса? - PullRequest
5 голосов
/ 26 января 2012

Обычно, когда запускается триггер, мы проверяем, какой профиль у пользователя, и если это тот тип, в котором мы не хотим, чтобы триггеры запускались, то мы выходим из триггера перед запуском любого другого кода.

Проблема: у нас установлен пакет SF, который мы приобрели у какой-то другой компании, и весь его код невидим для нас и недоступен для редактирования.Как мы можем остановить запуск некоторых из этих триггеров, кроме ручного отключения их через интерфейс пользователя?Я хочу временно отключить их во время выполнения тестового класса.

Подумал о том, чтобы сделать что-то подобное, но получил сообщение об ошибке "DML не разрешен в ApexTrigger."

ApexTrigger at = [select id from ApexTrigger where name='SomeTriggerName'];
at.status = 'Inactive';
update at;

Ответы [ 2 ]

4 голосов
/ 26 января 2012

Я пытался сделать что-то подобное, и застрял.Я не верю, что есть способ выполнить то, что вы просите, без того, чтобы владелец управляемого пакета обновил код Apex.

Подход, который вы перечислили перед проблемой, является отличным решением;Тем не менее, я бы рекомендовал использовать Пользовательские настройки .Вы можете порекомендовать владельцу / разработчику триггера выполнить проверку пользовательских настроек перед выполнением триггера (ов).Это лучшее решение, которое я мог бы предложить для некоторых из моих собственных триггеров.

Было бы замечательно, если бы объект ApexTrigger мог быть обновлен, но Salesforce не позволяет этого.

1 голос
/ 26 января 2012

Я считаю, что ваши единственные варианты - удалить или отменить развертывание управляемого пакета.

...