try catch finally and inserting records
我们有一个错误日志对象,存储错误,我有一个简单的try catch,如下所示。。。我的问题是,在finally中插入似乎没有发生。有什么建议吗?或者这是try-catch错误
解答动态
所以您试图在catch块中抛出一个异常。这不会起作用,因为新的抛出不直接在try块中,这意味着它将被抛出到层次结构中的下一个try catch中。
如果允许异常从代码中传播未经处理的内容,则在catch块的末尾执行此操作,您将导致Salesforce平台将会话视为失败,因此所有DML都将回滚。这意味着即使错误日志插入也将被撤消。
第一个选项是更改通知组件错误的方式。或者,您可以确保在单独的会话中处理错误日志。
后者的一个选项是将错误详细信息打包到“立即发布”平台事件中,您可以在finally中的事件总线上发布该事件。如果立即发布,则此事件在当前会话之外运行,并且不会因为会话失败而回滚。
然后可以实现基于触发器的平台事件订阅服务器,该订阅服务器将平台事件转换为错误日志记录并执行DML插入。这个DML在一个单独的会话中运行,因此尽管最初的会话失败,它仍然可以成功。
由于所有DML都是在一个未处理的异常上回滚的,所以我的典型解决方案是将错误返回给客户机,然后让客户机在一个单独的调用中记录异常。我们在LWC有“无限”通话,所以没有必要过于保守。你只需要一个单独的方法:
@AuraEnabled(cacheable=false)public static logError(Error\u Log\uu c Log){insert Log;} 在大多数情况下,您或您的用户都会注意到单独调用所需的额外毫秒数。
在代码中,finally代码被执行,但在finally完成后,结果会被回滚,因为它仍然在引发异常的同一事务中。- End
免责声明:
本页内容仅代表作者本人意见,若因此产生任何纠纷由作者本人负责,概与琴岛网公司无关。本页内容仅供参考,请您根据自身实际情况谨慎操作。尤其涉及您或第三方利益等事项,请咨询专业人士处理。