iBizModel 实体映射模型(PSDEMAP)详解
iBizModel 实体映射模型(PSDEMAP)详解
引言
在iBizModel模型体系中,实体映射模型(PSDEMAP)是实现实体间功能映射的核心机制。它允许开发者在不同实体之间建立属性、行为、数据集和查询的映射关系,从而实现数据的转换、同步和功能复用。实体映射在现代企业应用系统中具有重要作用,特别是在系统集成、数据迁移、多版本兼容等场景下。本文将全面介绍实体映射模型及其相关组件,包括PSDEMAP、PSDEMAPDETAIL、PSDEMAPACTION、PSDEMAPDS和PSDEMAPDQ,通过详细的图例和DSL示例展示其应用方式。
实体映射模型体系概述
实体映射模型是iBizModel中PSDATAENTITY实体的重要组成部分,它定义了一个完整的映射框架,支持从源实体到目标实体的全方位功能映射。整个映射体系采用分层结构,PSDEMAP作为根模型,包含四个主要的成员模型,共同构成完整的映射解决方案。
核心模型关系图
PSDEMAP模型详解
基本定义与属性
PSDEMAP是实体映射的根模型,定义了映射的基本配置和目标关系。其主要属性包括:
- codename(必填):映射的代码标识,在所在实体中必须唯一
- name(必填):映射名称,在所在实体中具备唯一性
- psdeid(必填):引用源实体PSDATAENTITY
- dstpsdeid:引用目标实体PSDATAENTITY
- maptarget(必填):映射目标类型,当前仅支持"SYSCUR"(当前系统实体)
- mapmode:处理映射模式,支持"DEFAULT"(默认)和"INNER"(内部处理)
- autodefieldmap:是否自动进行属性映射(1:是,0:否)
- autodeactionmap:是否自动进行行为映射
- autodedsmap:是否自动进行数据集映射
- autodedqmap:是否自动进行数据查询映射
- defaultmode:是否为默认映射
枚举类型详解
逻辑所有者(logicholder)
1
:后台 - 逻辑具备在前端模板执行的能力2
:前台 - 逻辑具备在后台模板执行的能力3
:后台及前台 - 逻辑同时具备执行能力
实体映射处理映射模式(mapmode)
DEFAULT
:默认处理,在入口处进行映射,不附加当前实体的处理逻辑INNER
:内部处理,仅映射的实际处理操作,在当前实体中完成逻辑附加操作
实体映射目标类型(maptarget)
SYSCUR
:当前系统实体,映射到当前系统实体
自动映射机制
PSDEMAP支持四种自动映射模式,极大地简化了映射配置:
- 属性自动映射:自动将当前实体未映射属性与目标实体相同标识的属性进行映射,主键与主信息属性优先映射
- 行为自动映射:自动映射相同行为标识的实体行为
- 数据集自动映射:自动映射相同标识的数据集
- 数据查询自动映射:自动映射相同标识的数据查询
PSDEMAPDETAIL属性映射模型
模型定义与属性
PSDEMAPDETAIL定义了属性级别的映射关系,支持双向映射:
- dstfieldname:目标实体属性名称
- srctype(枚举):源值类型,包括FIELD、VALUE、EXPRESSION等
- srcpsdefid:引用源属性PSDEFIELD
- srcvalue:直接值或表达式
- pssystranslatorid:引用值转换器PSSYSTRANSLATOR
源值类型详解
FIELD(属性等价)
源属性与目标属性直接等价映射,适用于属性名称和类型相同的情况。
VALUE(直接值到目标属性)
将固定的直接值设置到目标属性,适用于常量赋值场景。
EXPRESSION(计算值到目标属性)
通过表达式计算值设置到目标属性,支持动态计算逻辑。
VALUE_SRC(直接值到源属性)
将直接值设置回源属性,支持反向映射。
EXPRESSION_SRC(计算值到源属性)
通过表达式计算值设置回源属性,支持复杂的反向计算逻辑。
值转换器应用
通过pssystranslatorid引用PSSYSTRANSLATOR,可以实现复杂的值转换逻辑,如数据类型转换、格式转换、业务规则转换等。
PSDEMAPACTION行为映射模型
模型定义与属性
PSDEMAPACTION定义实体行为之间的映射关系:
- psdeactionid:引用源行为PSDEACTION
- dstpsdeactionid:引用目标行为PSDEACTION
- mapmode:行为处理映射模式
- name(必填):映射行为名称
映射模式应用
行为映射支持两种模式,与实体映射的mapmode保持一致,但可以单独配置覆盖实体级别的设置。
PSDEMAPDS数据集映射模型
模型定义与属性
PSDEMAPDS定义实体数据集之间的映射关系:
- psdedatasetid(必填):引用源数据集PSDEDATASET
- dstpsdedatasetid:引用目标数据集PSDEDATASET
- enabledqcond:是否转换查询条件
- mapmode:数据集处理映射模式
- name(必填):映射数据集名称
查询条件转换
当enabledqcond启用时,系统会自动将源数据集的查询条件转换为目标数据集的等效条件。
PSDEMAPDQ数据查询映射模型
模型定义与属性
PSDEMAPDQ定义数据查询之间的映射关系:
- psdedataqueryid(必填):引用源数据查询PSDEDATAQUERY
- dstpsdedataqueryid(必填):引用目标数据查询PSDEDATAQUERY
- enabledqcond:是否转换查询条件
- mapmode:查询处理映射模式
- name(必填):映射查询名称
实体映射应用场景详解
场景一:系统集成与数据同步
在企业系统集成中,经常需要将本地实体数据映射到外部系统实体。例如,将本地员工实体映射到云端HR系统的员工实体。
场景二:版本升级与数据迁移
系统升级时,新旧版本实体结构可能发生变化,通过实体映射可以实现平滑的数据迁移。
场景三:多租户数据隔离
在SaaS系统中,不同租户可能需要不同的数据视图,通过映射实现数据隔离和定制。
场景四:业务流程自动化
将不同实体的行为进行映射,实现跨实体的业务流程自动化。
完整DSL示例
以下是一个完整的实体映射DSL示例,展示如何定义从本地员工实体到云端员工实体的映射:
//iBizModelDSL建模指令,目标:定义本地员工到云端员工的完整映射
def emp_id = "Demo.SYS_EMP"
def cloud_emp_id = "Cloud.EMP"psdemap(name: "本地员工到云端员工映射",codename: "LocalToCloudEmpMap",psdeid: emp_id,dstpsdeid: cloud_emp_id,maptarget: "SYSCUR",mapmode: "DEFAULT",autodefieldmap: 1,autodeactionmap: 1,autodedsmap: 1,autodedqmap: 1,defaultmode: 1,logicholder: 1 //仅后台支持
){// 属性映射配置psdemapdetail(name: "姓名映射",srctype: "FIELD",srcpsdefid: emp_id + ".NAME",dstfieldname: "FULL_NAME")psdemapdetail(name: "部门映射",srctype: "FIELD" ,srcpsdefid: emp_id + ".DEPT_ID",dstfieldname: "DEPARTMENT_ID")psdemapdetail(name: "设置默认状态",srctype: "VALUE",srcvalue: "ACTIVE",dstfieldname: "STATUS")psdemapdetail(name: "职级转换",srctype: "EXPRESSION",srcvalue: "entity.get(\"level\") * 10",dstfieldname: "GRADE")psdemapdetail(name: "使用转换器处理日期格式",srctype: "FIELD",srcpsdefid: emp_id + ".HIRE_DATE",dstfieldname: "EMPLOYMENT_DATE",pssystranslatorid: "DateFormatter")// 行为映射配置psdemapaction(name: "创建员工行为映射",psdeactionid: emp_id + ".CREATE",dstpsdeactionid: cloud_emp_id + ".CREATE_EMP",mapmode: "DEFAULT")psdemapaction(name: "更新员工行为映射" ,psdeactionid: emp_id + ".UPDATE",dstpsdeactionid: cloud_emp_id + ".UPDATE_EMP",mapmode: "INNER")// 数据集映射配置psdemapds(name: "员工列表数据集映射",psdedatasetid: emp_id + ".EMP_LIST",dstpsdedatasetid: cloud_emp_id + ".EMPLOYEE_LIST",enabledqcond: 1,mapmode: "DEFAULT")// 数据查询映射配置psdemapdq(name: "按部门查询映射",psdedataqueryid: emp_id + ".QUERY_BY_DEPT",dstpsdedataqueryid: cloud_emp_id + ".QUERY_BY_DEPARTMENT",enabledqcond: 1,mapmode: "DEFAULT")
}
高级映射技巧
条件映射实现
通过表达式类型的映射,可以实现基于条件的动态映射:
//iBizModelDSL建模指令,目标:实现条件性属性映射
psdemapdetail(name: "条件性状态映射",srctype: "EXPRESSION",srcvalue: "entity.get(\"local_status\") == 1 ? \"ACTIVE\" : \"INACTIVE\"",dstfieldname: "CLOUD_STATUS"
)
复杂类型转换
利用值转换器处理复杂的数据类型转换:
//iBizModelDSL建模指令,目标:使用转换器处理复杂数据类型
psdemapdetail(name: "地址信息转换",srctype: "FIELD",srcpsdefid: emp_id + ".ADDRESS",dstfieldname: "FULL_ADDRESS",pssystranslatorid: "AddressTransformer"
)
反向映射支持
通过VALUE_SRC和EXPRESSION_SRC类型实现双向数据同步:
//iBizModelDSL建模指令,目标:实现双向数据同步映射
psdemapdetail(name: "状态反向映射",srctype: "EXPRESSION_SRC",srcvalue: "entity.get(\"cloud_status\") == \"ACTIVE\" ? 1 : 0",srcpsdefid: emp_id + ".STATUS"
)
总结
实体映射模型(PSDEMAP)是iBizModel体系中功能强大的数据转换和集成工具。通过PSDEMAP及其成员模型的组合使用,可以实现从简单属性映射到复杂业务流程映射的全方位功能。本文详细介绍了各个模型的属性、枚举类型、应用场景,并通过完整的DSL示例展示了实际应用方式。
实体映射的核心价值在于:
- 提高开发效率:通过自动映射机制减少重复配置
- 增强系统灵活性:支持动态映射和条件映射
- 保证数据一致性:通过双向映射实现数据同步
- 降低集成复杂度:简化系统间的数据交换
在实际项目中,建议根据具体业务需求合理选择映射模式和配置参数,平衡功能需求与性能要求。随着业务的发展,实体映射模型可以持续演进,支持系统的平滑升级和扩展。