如何在运行测试类时停止执行托管触发器?

时间:2012-01-26 18:35:17

标签: triggers salesforce apex-code dml

通常,当触发器运行时,我们检查用户具有哪种类型的配置文件,如果它是我们不希望触发器运行的类型,那么我们在运行任何其他代码之前退出触发器。

问题:我们安装了从其他公司购买的SF软件包,其所有代码对我们来说都是不可见的,并且不可编辑。除了通过UI手动禁用它们之外,我们如何阻止其中一些触发器运行?我想在运行测试类时暂时禁用它们。

正在考虑做这样的事情,但得到一条错误,说“ApexTrigger上不允许使用DML。”

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

2 个答案:

答案 0 :(得分:4)

我尝试过做类似的事情,然后陷入困境。如果没有托管软件包的所有者更新Apex代码,我不相信有办法做你所要求的。

您在问题出现之前列出的方法是一个很好的解决方案;不过,我建议另外使用Custom Settings。在执行触发器之前,您可以向Trigger的所有者/开发者推荐实现自定义设置检查。这是我能为自己的触发器提出的最佳解决方案。

如果可以更新ApexTrigger对象,那会很棒,但Salesforce不允许这样做。

答案 1 :(得分:1)

我相信您唯一的选择是卸载或取消部署托管包。