我想在政策中心保存一些细节。我从计费中心获取这些详细信息,并立即尝试保存,但它给了我例外。
我已经调用了billingAPI的“issuePolicyPeriod”函数并返回了一些值,我需要将其保存在Policy Center中。
例外:保存commision detais时出现异常:java.lang.RuntimeException:com.guidewire.pl.system.exception.TransactionException:不得在事务中调用commitBundle。
代码/ ** *在结算中心发布保单期限* @param期间:保单期限* @param transactionID:使此调用成为幂等的唯一交易ID * /
覆盖函数createPolicyPeriod(句点:PolicyPeriod,transactionID: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会保留当前的bundle,直到响应回来吗?当guidewire在Web服务调用中提交当前包时?
尝试使用当前事务而不是创建新事务。
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()
试试这个代码。
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