0

我试图在政策中心保存一些细节。我从计费中心获取这些详细信息并立即尝试保存它,但它给了我例外。

我调用了 billingAPI 的“issuePolicyPeriod”函数并返回了一些值,我需要将其保存在策略中心。

异常: 保存佣金详细信息时出现异常:java.lang.RuntimeException:com.guidewire.pl.system.exception.TransactionException:不得在事务中调用commitBundle。

Code /** * 在计费中心发布一个策略周期 * @param period:策略周期 * @param transactionID:唯一的事务ID,使这个调用幂等 */

override function createPolicyPeriod(period: PolicyPeriod, transactionID : String) : String { var issuePolicyInfo = new IssuePolicyInfo() issuePolicyInfo.sync(period) PCLoggerCategory.BILLING_SYSTEM_PLUGIN.info("发送策略 ${period} 到计费系统")

 var commissionList = callUpdate(\ b -> b.issuePolicyPeriod(issuePolicyInfo, transactionID))

gw.transaction.Transaction.runWithNewBundle(\ bundle -> {
  var commission = new CommissionDetails()
  bundle.add(commission)
  commission.Commission_SI = new BigDecimal( commissionList.get(1))
  commission.CommissionGST_SI = new BigDecimal(commissionList.get(2))
  commission.CommissionRate_SI = commissionList.get(3).toString()

})

return  commissionList.get(0)

}

我正在使用 BillingAPI 从 PC 调用 issuePolicyPeriod() 函数并从 BC 返回佣金详细信息并尝试立即将其保存在 PC 实体中。

你好,谢谢你的回答。我尝试了上面的代码,但它没有保存到实体,也没有给出任何异常。我在这里怀疑当前的捆绑包是否仍然可用?因为我们在这里打电话给计费中心,不知道 BC 什么时候回复。在 Web 服务调用中,guidewire 会保留当前包,直到响应返回?guidewire 何时在 Web 服务调用中提交当前捆绑包?

4

3 回答 3

1

尝试使用当前事务而不是创建新事务。

var commissionList = callUpdate(\ b -> b.issuePolicyPeriod(issuePolicyInfo, transactionID))

var bundle = gw.transaction.Transaction.Current
var commission = new CommissionDetails(bundle)
commission.Commission_SI = new BigDecimal( commissionList.get(1))
commission.CommissionGST_SI = new BigDecimal(commissionList.get(2))
commission.CommissionRate_SI = commissionList.get(3).toString()

return  commissionList.get(0)

当您使用runWithNewBundle时,块执行结束后 bundle.commit() 它被称为

于 2018-11-28T15:05:12.467 回答
0

我在捆绑包中遇到了类似的错误(java.lang.RuntimeException: com.guidewire.pl.system.exception.TransactionException: commitBundle must not be called in a transaction),我可以通过以下步骤解决

  1. 退出或评论:gw.transaction.Transaction.runWithNewBundle(\ bundle -> {})

  2. 问题是我有一个现有的包,所以我只需要用 getCurrent() 调用它

var bundle = gw.transaction.Transaction.getCurrent()

于 2022-02-08T14:27:59.497 回答
-1

试试这个代码。

    gw.transaction.Transaction.runWithNewBundle(\ bundle -> {
       var commission =  bundle.add(new CommissionDetails())
       commission.Commission_SI = new BigDecimal( commissionList.get(1))
       commission.CommissionGST_SI = new BigDecimal(commissionList.get(2))
       commission.CommissionRate_SI = commissionList.get(3).toString()
    })

-阿拉文德

于 2019-04-11T08:34:54.487 回答