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

Kir*_*sov 5 triggers salesforce dml apex-code

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

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

正在考虑做这样的事情,但得到了一个错误,说"ApexTrigger上不允许使用DML".

ApexTrigger at = [select id from ApexTrigger where name='SomeTriggerName'];
at.status = 'Inactive';
update at;
Run Code Online (Sandbox Code Playgroud)

Mat*_*t K 4

我尝试过做类似的事情,但被卡住了。我不认为有办法在不让托管软件包的所有者更新 Apex 代码的情况下完成您所要求的操作。

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

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