我正在尝试在政策中心中保存一些详细信息。我正在从计费中心获取这些详细信息,并立即尝试保存它,但这给了我例外。
我调用了billingAPI的“ issuePolicyPeriod”函数并返回了一些值,我需要将其保存在策略中心中。
例外: 保存通信详细信息时出现异常:java.lang.RuntimeException:com.guidewire.pl.system.exception.TransactionException:不得在事务中调用commitBundle。
代码 / ** *在帐单中心签发保单期限 * @param period:政策期 * @param transactionID:使此调用幂等的唯一事务ID * /
覆盖函数createPolicyPeriod(period:PolicyPeriod,transactionID:String):String { var issuePolicyInfo =新的IssuePolicyInfo() issuePolicyInfo.sync(周期) 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服务呼叫中,wiredwire将保持当前的捆绑包直到响应返回? 当guidewire在Web服务调用中提交当前的包时?
答案 0 :(得分: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()称为
答案 1 :(得分:0)
尝试此代码。
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()
})
-Aravind