未选择律师作为首要收款人时抛出Displayable Exception - ClaimCenter
修复方案
你的代码逻辑错误在于遍历所有律师收款人候选,只要有一个律师不是当前首要收款人就抛出异常——这会导致哪怕你已经选了另一个律师作为首要,代码依然会报错。同时也没考虑“只有当存在律师候选时才需要验证”的场景(如果没有律师可选,就不需要强制要求首要收款人是律师)。
正确的逻辑应该是:
- 先判断收款人候选中是否存在律师角色的联系人
- 如果存在律师,再检查首要收款人是否为律师类型
- 若存在律师但首要收款人不是律师,才抛出异常
修改后的代码如下:
uses gw.api.locale.DisplayKey uses gw.api.util.DisplayableException uses typekey.Contact class CheckUIHelper { static function validateAttorneyAsPrimaryPayee(check: Check) { var claimContacts = check.Claim.PayeeCandidates // 判断是否存在律师类型的收款人候选 var hasAttorneyCandidate = any(payee in claimContacts where payee.Subtype == Contact.TC_ATTORNEY) // 如果有律师候选,且首要收款人不是律师,抛出异常 if (hasAttorneyCandidate && check.FirstPayee.Payee.Subtype != Contact.TC_ATTORNEY) { throw new DisplayableException(DisplayKey.get("Check.Contact.Primary.Payee.Message")) } } }
关键修改点
- 使用
any()函数判断是否存在律师候选,避免遍历每个律师导致的误判 - 直接检查首要收款人的类型是否为律师,而不是和某个特定律师对比,解决多律师候选场景下的错误触发问题
- 只有当存在律师候选时才执行验证逻辑,避免对无律师的场景错误触发提示
内容的提问来源于stack exchange,提问作者Anubhav Singh
相关产品推荐
相关产品推荐

