You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:15:04