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

Triggers 在运行测试类时,如何停止托管触发器的执行?,triggers,salesforce,apex-code,dml,Triggers,Salesforce,Apex Code,Dml,通常,当触发器运行时,我们检查用户的配置文件类型,如果是我们不希望触发器运行的配置文件类型,则在运行任何其他代码之前退出触发器 问题:我们安装了一个从其他公司购买的SF软件包,它的所有代码对我们来说都是不可见的,并且不可编辑。除了通过UI手动禁用这些触发器之外,我们如何停止其中一些触发器的运行?我想在运行测试类时暂时禁用它们 正在考虑这样做,但出现了一个错误,说“不允许在ApexTrigger上使用DML。” 我也试过做类似的事情,但还是被卡住了。我不相信有一种方法可以在不让托管包的所有者更新A

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

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

正在考虑这样做,但出现了一个错误,说“不允许在ApexTrigger上使用DML。”


我也试过做类似的事情,但还是被卡住了。我不相信有一种方法可以在不让托管包的所有者更新Apex代码的情况下实现您的要求

你在问题之前列出的方法是一个很好的解决方案;不过,我建议您另外使用。您可以建议触发器的所有者/开发人员在执行触发器之前执行自定义设置检查。这是我能为我自己的一些触发器想出的最好的解决方案


如果ApexTrigger对象可以更新,那就太好了,但是Salesforce不允许更新。

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

您有什么理由想禁用它吗?我知道测试覆盖率是一件痛苦的事情,但它应该测试一个真实世界的场景——如果触发器将在真实世界中运行,那么您需要确保您的代码能够与它一起工作!我需要禁用它的原因是,测试类检查许多场景,打包的触发器运行多个SOQL语句,我无法控制这些语句的执行。在我能够将测试覆盖率提高到100%之前,SOQL查询计数在打包的名称空间中达到了调控器限制的100%。
ApexTrigger at = [select id from ApexTrigger where name='SomeTriggerName'];
at.status = 'Inactive';
update at;