背景
有时取业务流程节点数据按元数据表名没有取到,是因为业务流程节点中的表名来自定义表(t_bf_tableDefine),定义表的表名需要根据单据实体来确保唯一性,如果存在多张单据使用相同的表名,就会导致定义表中的表名有的后面加数字的情况,所以取业务流程节点表中的数据一定要先根据实体取到定义表,在根据定义表中的表名取数据。 如果把定义表的表名和业务流程节点的表名修改了, 反写快照中的表名没有改,会导致操作时报“同一个反写规则找到了多个源单实体,反写源单不明确,无法反写!",如果又使用了一段时间,有旧的表又有新的表,导致无法还原定义表名,这时候就只有修改报错的反写快照中的数据了。修改步骤如下。
修改步骤
下面以销售订单为例
取到单据的内码,关联实体key,表单Id, 组成反写快照主键(FCID)
内码:假设为100939 , select FId from T_SAL_ORDER where FBillNo='销售订单编码' ---
表单Id:SAL_SaleOrder
关联实体Key:FSaleOrderEntry_Link
构建反写快照主键:FCID = “SAL_SaleOrder,FSaleOrderEntry_Link,100939”
根据主键FCID,得到反写快照,先查询当前快照表,没有再查历史快照表,再没有再查归档快照表
当前快照表:select FXMLBODY from t_bf_instanceSnap where FCID = 'SAL_SaleOrder,FSaleOrderEntry_Link,100939'
历史快照表:select FXMLZIP from t_bf_instanceSnapHis where FCID = 'SAL_SaleOrder,FSaleOrderEntry_Link,100939'
归档快照表:select FXMLZIP from t_bf_snapBackUp where FCID = 'SAL_SaleOrder,FSaleOrderEntry_Link,100939'
3. 如果是从历史快照表和归档快照表取到数据,则需要对表中的FXMLZIP列对应的反写快照数据进行解压
解压和压缩代码:https://vip.kingdee.com/article/114425281061915136?productLineId=1
4. 得到到反写记录后,把表名替换为表定义中的表名,如下图:
5. 如果是历史快照表和归档快照表取到数据,需要把替换后的反写快照进行压缩,如下推:
6. 最后更新相应的表;当前表,更新fxmlbody字段 ;历史快照表和归档快照表,使用压缩后的数据更新FXMLZIP字段
当前表: update t_bf_instanceSnap set FXMLBODY='替换后的xml数据' where FCID='SAL_SaleOrder,FSaleOrderEntry_Link,100939'
历史快照表: update t_bf_instanceSnaphis set FXMLZIP='压缩的数据' where FCID='SAL_SaleOrder,FSaleOrderEntry_Link,100939'
归档快照表: update t_bf_snapBackUp set FXMLZIP='压缩的数据' where FCID='SAL_SaleOrder,FSaleOrderEntry_Link,100939'
推荐阅读