一些已被索赔处理程序作废的检查在我们的一个工作流程中遇到了非法状态异常。支票处于“已请求”状态,单击“无效”时不会设置为“待处理无效”,而是显示错误This operation could not be completed because the check's status has changed. The status may have been updated by the system or another user. If so, it may take several minutes before you see the update.
void 按钮正在调用 Check.VoidCheck() 我希望此函数在某个时刻将检查设置为挂起的 void,但它不会发生。
我无法在较低的环境中重现该错误。
我无法找到将检查设置为待处理无效的逻辑,并重新运行工作流程或再次触发无效检查会产生相同的结果。支票是否有可能以某种方式卡在某个地方?
为什么 Check.voidCheck() 不将检查设置为挂起无效?有什么条件吗?
小智 5
如果 Check.voidCheck() 抛出 IllegalStateException,则会向您传播此错误。那么让我们来探讨一下这个方法。
Check.cancelCheck() 只是委托给 CancelCheckMethods 实现的 voidCheck() 方法。此方法的默认实现位于名为 CancelCheckMethodsImpl.gs 的类中。不过,客户可以自由地覆盖和自定义此行为,因此您需要了解是否进行了任何更改。如果是这样,这可能是根本原因。
如果没有对该类进行任何修改,那么您将必须更深入地研究并研究该方法委托的三个方法。
_check.unlinkDeductibles()
_check.unlinkServiceRequestInvoicesForVoid()
_check.coreVoidCheck()
Run Code Online (Sandbox Code Playgroud)
不幸的是,这是一个没有明显解决方案的问题,需要进行一些调查。我建议的第一件事是通过修改 CancelCheckMethodsImpl.voicCheck() 中的行为(特别是 catch() 中的行为)来捕获日志中的堆栈跟踪。该异常只是被捕获并重新抛出,这不会让您在日志中了解哪一行实际上抛出了 IllegalStateException。
添加 logger.error() (或 warn()、log(),无论您的偏好是什么,重要的是您使用的记录器和级别实际上会显示在您的应用程序服务器日志中) e.stackTraceAsString()。它应该看起来像这样。
} catch ( e : java.lang.Throwable ) {
_logger.error(e.StackTraceAsString)
throw e
}
Run Code Online (Sandbox Code Playgroud)
您可能还想向上述三种方法添加类似的日志记录。然后,您需要重新部署和重新测试,并在发生故障后,记下发生故障的时间、发生故障的集群节点,并在该时间附近从服务器拉取 cclog.log。如果您将堆栈跟踪的内容发布到此处,我可以帮助您进行更深入的调查。
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |