蓝凌EKP产品:属性转换器系统优化
EKP 中的 ModelToForm和FormToModel是页面Form对象和实例Model对象的重要转换环节,传统方式需逐个手动设置属性映射,复杂而繁琐。EKP提供一套机制,自动将页面填写Form对象映射为实例Model对象,然后就能拿Model对象和数据库进行交互。顾名思义FormToModel转换就是将页面对象页面填写的Form对象转换为实例Model对象,FormToModel是将数据库实例对象转换为Form对象。在转换的过程中,有简单对象和复杂对象,比如String,Integer 直接可以映射,但是对于集合,引用对象,就需要写转换器,在EKP里面内置了很多转换器。
toFormPropertyMap = new ModelToFormPropertyMap();toFormPropertyMap.putAll(super.getToFormPropertyMap());toFormPropertyMap.addNoConvertProperty("checkTemplates");// 类别
// toFormPropertyMap.put("docCategory.fdName", "fdCategoryName");
// toFormPropertyMap.put("docCategory.fdId", "fdCategoryId");toFormPropertyMap.put("docCategory",new ModelConvertor_ObjectToString("fdId:fdName","fdCategoryId:fdCategoryName", SysCategoryMain.class));// 相关岗位toFormPropertyMap.put("fdPosts",new ModelConvertor_CollectionToString("fdPostIds:fdPostNames", "fdId:fdName", SysOrgElement.class));// 相关属性toFormPropertyMap.put("docProperties",new ModelConvertor_CollectionToString("docPropertyIds:docPropertyNames", "fdId:fdName", SysCategoryProperty.class));// 流程标签可阅读者toFormPropertyMap.put("fdLabelReaders",new ModelConvertor_CollectionToString("fdLabelReaderIds:fdLabelReaderNames","fdId:deptLevelNames", SysOrgElement.class));// 可反馈者toFormPropertyMap.put("fdFeedback",new ModelConvertor_CollectionToString("fdFeedBackIds:fdFeedbackNames", "fdId:deptLevelNames", SysOrgElement.class));// 关键字toFormPropertyMap.put("docKeyword",new ModelConvertor_CollectionToString("fdKeywordIds:fdKeywordNames", "fdId:docKeyword", KmReviewTemplateKeyword.class));// 模板创建者
// toFormPropertyMap.put("docCreator.fdName", "docCreatorName");
// toFormPropertyMap.put("docCreator.fdId", "docCreatorId");toFormPropertyMap.put("docCreator",new ModelConvertor_ObjectToString("fdId:fdName","docCreatorId:docCreatorName", SysOrgPerson.class));// 创建时间toFormPropertyMap.put("docCreateTime", new ModelConvertor_Common("docCreateTime").setDateTimeType(DateUtil.TYPE_DATETIME));// 模板修改者toFormPropertyMap.put("docAlteror.fdName", "docAlterorName");// 修改时间toFormPropertyMap.put("docAlterTime", new ModelConvertor_Common("docAlterTime").setDateTimeType(DateUtil.TYPE_DATETIME));
常用的转换案例
传统的转换器ModelConvertor_ModelListToString在集合中使用比较多,这一次针对V17针对集合转换器特别做了相关优化,引入 ModelConvertor_ObjectToString 和ModelConvertor_CollectionToString,支持批量属性聚合转换,极大地提升了效率。
一、使用优势
- 批量转换多个属性,一行代码胜多行
- 支持字典、对象属性、集合属性统一转换
- 替换原有繁杂的 Common / ListToString 方案
二、使用示例
1. 对象属性转换
toFormPropertyMap.put("docCreator",
new ModelConvertor_ObjectToString("fdId:fdName", "docCreatorId:docCreatorName", SysOrgperson.class));
等价于传统两行写法:
toFormPropertyMap.put("docCreator.fdId", "docCreatorId");
toFormPropertyMap.put("docCreator.fdName", "docCreatorName");
2. 集合属性转换
toFormPropertyMap.put("authReaders",
new ModelConvertor_CollectionToString("fdId:fdName", "authReaderIds:authReaderNames", SysOrgElement.class));
三、使用注意
- 每个转换器源属性、目标属性数量必须一致,否则抛出异常
- 同一类型属性建议统一使用一种转换器,避免混用
- 若使用 Hibernate 表继承(table per subclass),还需配置 JSON 数据字典的 inheritColumn 与 tableJoinKey
通过以上优化,表单属性转换更加统一清晰,也让开发工作大幅减负。