业务流程-还原流程实例节点报下面错误原创
金蝶云社区-eris
eris
1人赞赏了该文章 292次浏览 未经作者许可,禁止转载编辑于2022年09月20日 17:12:46

image.png

错误分析

此错误说明:历史流程实例节点的FTTableId在定义表t_bf_tabledefine中的 FSeq列找不到;

直接原因是:当前流程实例节点在归档时需要把表名转换为定义表中的FSeq列对应的序号值,如果没有转换成功,归档的数据就会有问题。

根本原因是:当前流程实例节点的产生有问题,可能是手工增加的时不符合规范(没有取定义表中的表名),可能是迁移的,没有迁移(定义表中的数据)等。

相关表
定义表:t_bf_tabledefine

历史流程实例节点表:t_bf_instanceEntryHis    

关联表:单据关联配置中的关联表名

如何修复

以应付单为示例

1. 首先根据报错单据formId,查询定义表中相关的表信息,主要取到表名和序号

select * from t_bf_tableDefine where FFormId ='AP_PAYABLE'

2. 再根据报错单据信息,把历史流程实例节点数据全部查询出来,大概脚本如下:

select * from t_bf_instanceEntryHis    

where FInstanceid in(select FInstanceid from t_bf_instanceEntryHis    

where FTTableId=' 定义表中的序号' and FTId in(select t0.FEntryId from T_AP_PAYABLEENTRY t0

inner join T_AP_PAYABLE t1 on t0.FId= t1.FId

where t1.FBillNo='单据编码'))  

3. 再根据2中得到的流程实例内码,查询有问题的节点,如下脚本

select * from t_bf_instanceEntryHis where FFirstNode=1 and FTTableId=0
select * from t_bf_instanceEntryHis where FFirstNode=0 and (FTTableId=0 or FSTableId=0)

4. 找到问题节点后,根据上下节点和LK表(单据的关联表),确定它的来源单据或目标单据,

到定义表中找到对应的FSeq序号值

5. 最后把FTTableId和FSTableId为0的值改成序号值,相关脚本如下:

update tt set FTTableId='序号值'

from (select * from t_bf_instanceEntryHis  where FRouteId in('FRouteId 1','FRouteId 2',...) tt

update tt set FSTableId='序号值'

from (select * from t_bf_instanceEntryHis  where FRouteId in('FRouteId 1','FRouteId 2',...) tt


赞 1