2012-01-26 1 views
5

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

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

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

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

У вас есть веская причина для его отключения? Я знаю, что тестовое покрытие - это боль, но он должен тестировать сценарий реального мира - если триггер будет запущен в реальном мире, вы хотите убедиться, что ваш код работает с ним! –

+0

Причина, по которой мне нужно ее отключить, состоит в том, что тестовый класс проверяет многие сценарии, а запущенные триггеры запускают несколько инструкций SOQL, выполнение которых я не могу контролировать. Прежде чем я смогу получить покрытие для теста до 100%, количество запросов SOQL достигнет предел регулятора 100 в упакованном пространстве имен. –

ответ

4

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

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

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

1

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