在Guidewire ContactManager中如何实现‘软异常’?
解决方案:Guidewire ContactManager 软异常实现
核心思路
通过在Contact实体上新增一个布尔型标记字段,记录用户是否已确认软异常,结合校验规则或Enhancement类实现「首次触发异常、二次提交忽略异常并保存」的逻辑。
方案一:优先使用Rule(.grs文件)实现
1. 新增自定义标记字段
在Contact实体中添加布尔型字段 IsSoftExceptionAcknowledged,默认值设为false,用于标记用户是否已确认过软异常。
2. 编写校验规则(.grs)
创建或修改Contact的校验规则文件,添加如下规则逻辑:
rule ContactSoftExceptionValidation { // 绑定到Contact的Create和Update操作的校验阶段 applies to Create, Update of Contact when { // 替换为你的特定触发条件,比如联系人邮箱格式错误、必填字段为空等 Contact.Email != null and not Contact.Email matches "^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$"; // 未确认软异常时触发校验 not Contact.IsSoftExceptionAcknowledged; } then { throw DisplayableException("邮箱格式不符合要求,确认后可继续提交"); } }
3. 前端交互处理
在Contact编辑/创建屏幕中配置交互逻辑:
- 当校验抛出DisplayableException时,界面展示异常信息,并提供确认选项(如复选框或「确认并保存」按钮)
- 用户确认后,将
IsSoftExceptionAcknowledged设为true,再次触发保存操作,此时规则会跳过异常校验
方案二:使用ABContact Enhancement类实现
当Rule无法覆盖复杂业务逻辑时,可通过继承ABContact编写Enhancement类:
1. 新增自定义标记字段
同方案一,添加IsSoftExceptionAcknowledged布尔字段。
2. 编写Enhancement类
public class EnhancedContact extends ABContact { @Override public void validate() { // 先执行父类默认校验逻辑 super.validate(); // 自定义软异常触发条件 boolean triggerSoftException = getEmail() != null && !getEmail().matches("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$"); if (triggerSoftException && !getIsSoftExceptionAcknowledged()) { throw new DisplayableException("邮箱格式不符合要求,确认后可继续提交"); } // 已确认则跳过校验,允许保存 } }
3. 注册Enhancement类
在Guidewire配置文件中,将Contact实体的enhancement类指定为EnhancedContact,确保逻辑生效。
注意事项
- 可根据业务需求,在保存成功后将
IsSoftExceptionAcknowledged重置为false,避免后续更新操作持续跳过校验 - 标记字段建议设置为内部字段,前端仅通过交互触发赋值,避免用户手动修改
- 若涉及多场景的软异常,可扩展规则或Enhancement类的逻辑,添加多个触发条件判断
内容的提问来源于stack exchange,提问作者Matt Campbell
相关产品推荐
相关产品推荐

