企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 关于协同升级到V5 8.0版本之后,自定义控件适配的说明 ***特别说明,本说明适用于场景:自定义控件基于V5 8.0以前版本开发的,并且需要在V5 8.0既以上版本使用的需要适配,如果是继续在V5 8.0版本以前使用,不需要进行这个适配。另外,如果是基于V5 8.0既以上版本开发的,则不需要适配。*** 应公司最新的战略需求,CAP4应用需要支持同一个应用重复安装多次,并能用原始包对这些已安装的包都能进行升级。所以在这期间CAP4对应用包的安装和导出(包括单表单导出和导入)进行了改造,重新设计了各元数据ID的编码映射机制,保证应用重复安装之后,可以平滑进行数据升级。 - **为什么要适配**:如果不进行处理,可能自定义控件上的数据定义就不是有效的内容,这样会影响运行时的数据。首先说下为什么需要自定义控件开发进行适配,原因是:新的编码映射机制设计了三张表,分别存放应用上的数据,表单上的数据,公共数据(包括枚举和常量等),如果不进行适配,原来的接口不知道该将数据映射落位到什么地方,也不知道该从那个地方获取其他模块已经重置的元数据ID。 - **怎么判断是否需要适配**:检查自己实现`FormFieldCustomCtrl`接口的所有自定义控件,是否重写了`getJson4Export`、`importExtInfo`、`importInfoAfterBizImport`这几个方法,并且检查这几个方法内,是否用到了`BusinessDataBean`中被标注为过时(`@Deprecated`)的方法,比如:`genNewIdByOldId`,`getEnumMapOld2New`,`getRealId4Export`,`getRealId4Upgrade`等方法。 - **怎么改**:将上述被标记过时的方法,替换为`BusinessDataBean`中新的接口,接口说明,见方法上的备注: ```java 导出应用相关的接口 /** * <p>通过当前资源id,获取业务编码。</p> * <p>注:该方法仅用于获取应用id,表单id,枚举id对应的编码 * 其他id编码请调用{@link #lookupBizKey(MappingField,Long,Long)}</p> * @param table 映射表分类 * @param sourceId 资源id,应用id,表单id,枚举id * @return */ public Long lookupBizKey(MappingTable table, Long sourceId){} /** * <p>通过当前资源id,获取业务编码。需要传递</p> * <p>注:该方法仅用于公共数据,比如枚举和常量函数使用 * 其他id编码请调用{@link #lookupBizKey(MappingField,Long,Long)}</p> * @param table 映射表分类 * @param sourceId 资源id,应用id,表单id,枚举id * @param orgAccountId 枚举和常量的单位id,如果为集团公用的,没有单位id的,直接传null * @return */ public Long lookupBizKey4CommonData(MappingTable table,Long sourceId,Long orgAccountId){} /** * <p>通过当前二级数据id和资源id,获取对应业务编码。</p> * 其他id编码请调用{@link #lookupBizKey(MappingTable,Long)}</p> * @param field 字段分类枚举 * @param sourceId 资源id,应用id,表单id,枚举id * @param dataId 二级数据id * @return */ public Long lookupBizKey(MappingField field,Long sourceId,Long dataId){} ``` ```java 安装相关的接口 /** * 只是获取编码id对应的资源Id,如果没有返回null * @param table 表分类 * @param bizKey JSON中解析出来的资源Id * @return */ public Long onlyGetRootId(MappingTable table,Long bizKey){} /** * 只获取编码id对应的当前数据id,没有返回null,不会生成新id返回 * @param field 映射表字段分类 * @param sourceId 资源id * @param bizKey 原二级数据id * @return */ public Long onlyGetSubId(MappingField field,Long sourceId,Long bizKey){} ``` 此处仅写了几个比较通用的接口,其他的接口请移步`BusinessDataBean`中查看。