gpt4 book ai didi

error-handling - 触发后引发错误的问题

转载 作者:行者123 更新时间:2023-12-03 07:53:49 25 4
gpt4 key购买 nike

我在后触发器中引发错误时遇到问题,我看不出有任何理由可以以一种方式引发错误,但不能以另一种方式引发错误。让我给你举个例子。

以下触发器将失败并引发以下错误:

Error:Apex trigger tstTrigger2 caused an unexpected exception, contact your administrator: tstTrigger2 : execution of AfterUpdate caused by: System.FinalException: SObject row does not allow errors: Trigger.tstTrigger2 : line 19, column 1


trigger tstTrigger2 on Account (after update) 
{


Set<Id> AccountIds = Trigger.newMap.keySet();


List<Account > accountsToProcess = [Select Id, Name from Account Where Id IN : AccountIds];


for(Account act: accountsToProcess)
{

act.addError('doesn't work');

}

}

但是,以这种方式引发错误是可行的。请注意, key 集中总是只有 1 条记录,至少在这个测试场景中是这样。
trigger tstTrigger on Account (after update) 
{


Set<Id> AccountIds = Trigger.newMap.keySet();


List<Account > accountsToProcess = [Select Id, Name from Account Where Id IN : AccountIds];


Trigger.new[0].addError('However, this works?');

}

非常感谢任何解释为什么第一个失败而第二个失败的原因。同样,如果您能指出实现这一点的最佳方法,以便将其放大,那就太好了。谢谢!

最佳答案

addError() 不会回滚您的插入,它只会阻止脚本的进一步执行,因此如果您在 UI 上抛出错误,则永远不会插入数据。

通过做这个

Trigger.new[0].addError('However, this works?');

您只是在列表中的第一条记录上抛出错误,从而停止任何处理。

这样的事情将解决您的第一个代码片段
trigger tstTrigger2 on Account (after update) 
{
Map<ID, Account> accountMap = Trigger.newMap;

for(ID act: accountMap.keySet())
{
accountMap.get(act).addError('doesnt work');
}
}

您正在查询帐户 ID,到那时它们已经提交到数据库,这将不允许在记录上标记错误

关于error-handling - 触发后引发错误的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38880827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com