# 关于协同升级到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
中新的接口,接口说明,见方法上的备注:
导出应用相关的接口
/**
* <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){}
安装相关的接口
/**
* 只是获取编码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
中查看。
编撰人:yinyanting
