2012-01-26 25 views
5

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

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

还想着做这样的事情,却得到了一个错误说“DML不允许ApexTrigger。”

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

你有很好的理由想禁用它吗?我知道测试覆盖率是一个痛苦,但它应该测试一个真实的世界场景 - 如果触发器要在真实世界中运行,您要确保您的代码与它一起工作! –

+0

我需要禁用它的原因是因为测试类检查了很多场景,并且打包的触发器运行多个SOQL语句,我无法控制其执行。在我能够将测试覆盖率提高到100%之前,SOQL查询计数在打包的名称空间中达到100的管理限制。 –

回答

4

我试过做类似的事情,并卡住了。如果不让托管软件包的所有者更新Apex代码,我不相信有一种方法可以解决您的问题。

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

这将是巨大的,如果ApexTrigger对象可以被更新,但Salesforce的不允许它。

1

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