Guidewire中Exportable实体是什么?如何创建?三类实体差异解析
Guidewire中的Exportable实体详解及三类实体对比
一、Exportable实体是什么
Exportable是Guidewire专为跨系统数据同步设计的实体类型,它继承自Extendable实体,内置了完整的导出能力——包括字段映射、触发规则、目标系统适配等。简单来说,如果你需要把Guidewire内的业务数据(比如保单、理赔记录)导出到外部CRM、财务系统,用Exportable实体可以直接复用框架的导出逻辑,不用从零开发。
二、如何创建Exportable实体
步骤1:定义实体类
在对应模块的实体目录(比如PolicyCenter的src/gw/pl/policy/entity)创建.gs文件,继承框架提供的Exportable基类(比如业务模块的pl.entity.PolicyExportableEntity,或者通用的gw.entity.ExportableEntity):
class CustomClaimExport extends pl.entity.ClaimExportableEntity { // 自定义需要导出的额外字段 String externalClaimId Date exportTimestamp }
步骤2:配置导出字段映射
重写getExportDefinition()方法,指定内部字段到外部系统字段的映射规则:
@Override ExportDefinition getExportDefinition() { return ExportDefinition.create() .addField("claimNumber", "external_claim_id") // 内部字段名 -> 外部系统字段名 .addField("lossDate", "loss_occurrence_date") .addField("externalClaimId") // 直接导出字段,内外字段名一致 }
步骤3:配置导出触发器
在模块的export-config.xml中设置触发导出的事件(比如实体状态变更)和目标系统信息:
<export-task entity="CustomClaimExport"> <trigger event="ClaimFinalized"/> <!-- 理赔状态变为终态时触发导出 --> <destination type="REST" url="https://thirdparty-system.com/api/claims"/> <!-- 导出目标地址 --> </export-task>
步骤4:自定义导出逻辑(可选)
如果需要添加校验、加密等自定义逻辑,重写export()方法:
@Override void export() { // 导出前校验必填字段 if (!externalClaimId) { throw new ExportException("External claim ID cannot be empty for export") } super.export() // 调用父类默认导出逻辑 }
三、Extendable、Exportable、Final Entities三类实体的区别
1. 核心定位
- Extendable实体:Guidewire的基础可扩展实体,是绝大多数业务实体的父类,核心目标是支持客户化定制——允许添加字段、重写业务方法,适配不同客户的业务需求,无内置导出能力。
- Exportable实体:在Extendable基础上扩展了数据导出能力,专门用于需要和外部系统同步数据的场景,自带导出规则、触发器等框架支持。
- Final Entities:标记为
final的系统核心实体,禁止继承或修改,用于保证Guidewire底层核心逻辑的稳定性(比如内置的PolicyPeriod、User实体)。
2. 定制能力
- Extendable:完全开放定制——可添加字段、重写方法、扩展业务流程。
- Exportable:继承Extendable的定制能力,额外支持自定义导出规则、导出逻辑。
- Final Entities:无任何定制权限——不能继承,不能添加/修改字段,只能通过关联其他Extendable实体间接扩展功能。
3. 使用场景
- Extendable:用于需要客户化的业务实体,比如自定义保单附加信息、理赔备注实体。
- Exportable:用于需要跨系统同步的实体,比如导出到财务系统的账单、导出到CRM的客户信息。
- Final Entities:用于Guidewire内置的核心基础实体,确保系统底层逻辑不被随意修改。
4. 代码示例对比
Extendable实体示例
class CustomPolicyTag extends pl.entity.PolicyExtendableEntity { String policyTag Date tagAddedDate }
Final实体示例(系统内置,用户无法修改)
final class PolicyPeriod extends gw.entity.FinalEntity { Date effectiveDate Date expirationDate // 系统内置方法,用户无法重写或扩展 boolean isActive() { ... } }
内容的提问来源于stack exchange,提问作者sumanth
相关产品推荐
相关产品推荐

