Guidewire Financials 作废检查会导致“没有要保存的交易”Java.Financials.Exception.EmptyTransactionSet

问题描述 投票:0回答:1

我们遇到了作废检查的问题。此场景是索赔处理人员手动按下作废检查按钮。然后我们运行这个逻辑

 function voidCheck() {
      try {
        gw.api.util.CCLocationUtil.runAndCommit(\-> {
          if (Check.isInternalCostPayment or Check.isFrontingPayment) {
            Logger.info("Voiding Internal Cost Check" + Check.PublicID)
            Check.voidCheck()
            Check.updateCheckStatus(Check.CheckNumber, Date.CurrentDate.toCalendar(), TransactionStatus.TC_VOIDED)
            Logger.info("Voided Internal Cost Check" + Check.PublicID)
          } else {
            Logger.info("Voiding Check and Triggering Disbursement" + Check.PublicID)
            DisbursementVoidDetails.Instance.invokeVoidService(Check)
            Logger.info("Triggerred Disbursement service and got response" + Check.PublicID)
            Check.voidCheck()
            Logger.info("Check set to Pending void (${Check.Status})")
          }
        }, CurrentLocation)
      } catch (e : IllegalStateException) {
        throw new gw.api.util.DisplayableException(DisplayKey.get("Web.Financials.CheckCancel.Error.IllegalFinancialsStatus"), e)
      } catch (all : Exception){
        Logger.error("Exception encountered during voiding of check: ${Check.PublicID} for claim ${Check.Claim.ClaimNumber} with message ",#voidCheck(),all)
        throw new gw.api.util.DisplayableException(DisplayKey.get("Web.Financials.CheckCancel.Error.void"))
      }
    }

在日志中,我可以看到这样的消息:检查已创建,通过集成确认,然后在用户手动作废检查但出现异常 30 秒后。我无法在较低的环境中重现相同的错误。我可以在哪里放置断点。

我怀疑是 runAndCommit() 函数,因为我无法在本地重现该场景,我无法确认确切的错误。

有什么推荐吗?

exception transactions guidewire
1个回答
0
投票

我不能确定你的根本原因是什么,但有一件事编码不正确。

此片段违反了仅更新消息传递插件中的检查状态的规则。您可以致电

voidCheck()
,这会将支票状态更新为 Pending Void。但不允许从 PCF 调用
updateCheckStatus
。当您从支票打印或下游系统收到支票已作废的肯定确认后,您应该从消息传递插件(请求插件或回复插件)调用
updateCheckStatus

if (Check.isInternalCostPayment or Check.isFrontingPayment) {
  Logger.info("Voiding Internal Cost Check" + Check.PublicID)
  Check.voidCheck()
  Check.updateCheckStatus(Check.CheckNumber, Date.CurrentDate.toCalendar(), TransactionStatus.TC_VOIDED)
  Logger.info("Voided Internal Cost Check" + Check.PublicID)
}

查看我从此处链接的 GW 文档复制的警告(需要登录)

https://docs.guidewire.com/self-management/cc/1023/integration/integration/cc/topics/c_oq3079348.html

您只能在以下特定上下文中使用这些方法。在其他上下文中使用这些方法不受支持,并且会产生不可预测的结果。

  • 仅来自消息插件。切勿使用规则集或其他 Gosu 或 Java 上下文中的这些方法。
  • 仅在提交消息确认后。如果此消息与仅通过调用财务确认 API 发生的状态转换关联,请先调用这些 API,然后再尝试其他状态更改。在同步发送和确认后在 MessageTransport 插件中进行调用,或者在异步确认消息后在 MessageReply 插件中进行调用。
© www.soinside.com 2019 - 2024. All rights reserved.