通常,当触发器运行时,我们检查用户具有哪种类型的配置文件,如果它是我们不希望触发器运行的类型,那么我们在运行任何其他代码之前退出触发器。
问题:我们安装了从其他公司购买的SF软件包,其所有代码对我们来说都是不可见的,并且不可编辑。除了通过UI手动禁用它们之外,我们如何阻止其中一些触发器运行?我想在运行测试类时暂时禁用它们。
正在考虑做这样的事情,但得到一条错误,说“ApexTrigger上不允许使用DML。”
ApexTrigger at = [select id from ApexTrigger where name='SomeTriggerName'];
at.status = 'Inactive';
update at;
答案 0 :(得分:4)
我尝试过做类似的事情,然后陷入困境。如果没有托管软件包的所有者更新Apex代码,我不相信有办法做你所要求的。
您在问题出现之前列出的方法是一个很好的解决方案;不过,我建议另外使用Custom Settings。在执行触发器之前,您可以向Trigger的所有者/开发者推荐实现自定义设置检查。这是我能为自己的触发器提出的最佳解决方案。
如果可以更新ApexTrigger对象,那会很棒,但Salesforce不允许这样做。
答案 1 :(得分:1)
我相信您唯一的选择是卸载或取消部署托管包。