[单据反写]---如何修复反写快照中的表名原创
金蝶云社区-eris
eris
4人赞赏了该文章 792次浏览 未经作者许可,禁止转载编辑于2022年06月15日 14:27:33

背景

     有时取业务流程节点数据按元数据表名没有取到,是因为业务流程节点中的表名来自定义表(t_bf_tableDefine),定义表的表名需要根据单据实体来确保唯一性,如果存在多张单据使用相同的表名,就会导致定义表中的表名有的后面加数字的情况,所以取业务流程节点表中的数据一定要先根据实体取到定义表,在根据定义表中的表名取数据。 如果把定义表的表名和业务流程节点的表名修改了, 反写快照中的表名没有改,会导致操作时报“同一个反写规则找到了多个源单实体,反写源单不明确,无法反写!",如果又使用了一段时间,有旧的表又有新的表,导致无法还原定义表名,这时候就只有修改报错的反写快照中的数据了。修改步骤如下。

修改步骤

下面以销售订单为例

  1. 取到单据的内码,关联实体key,表单Id, 组成反写快照主键(FCID)

    内码:假设为100939 , select FId from T_SAL_ORDER where FBillNo='销售订单编码'   ---

    表单Id:SAL_SaleOrder

    关联实体Key:FSaleOrderEntry_Link

    构建反写快照主键:FCID = “SAL_SaleOrder,FSaleOrderEntry_Link,100939


  2. 根据主键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.  得到到反写记录后,把表名替换为表定义中的表名,如下图:

image.png


   5.  如果是历史快照表和归档快照表取到数据,需要把替换后的反写快照进行压缩,如下推:

image.png


  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'


赞 4