Wise BOS审批流异常单据数据修复方法

栏目:k3wise知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

Wise BOS审批流异常单据数据修复方法

背景:有些客户的审批流设计的非常复杂,元素非常多,可能会出现加载审批流之后再保存时(目前未能找到原因),部分节点的数据丢失,混乱。导致了状态为审批中的单据无法审核也无法反审核。又不能重新调整审批流。导致业务操作中断。

因此使用下面这个方法来清除正在审核中的单据的审批记录,让他们恢复到制单人刚保存的状态。

--审批流编辑再加载过程中发生了异常导致界面上的节点加载不完全,再保存时出现了数据丢失的情况,需要重新编辑审批流;如果存在审核中的单据审批流无法反启用,

--用下面的脚本来清除所有正在审核中的单据的审核过程,将它们返回到未提交状态(刚保存状态)

--以费用报销单为例

--执行前先通过这个脚本查看一下是否你需要改动的单据Select * from icclasstype where FName_CHS = '费用报销单'

--下面是正文

set  nocount on

declare @name as nvarchar(50)

set @name = '费用报销单'

declare @classtypeid as int 

declare @TableName as nvarchar(50)

declare @sql as nvarchar(4000)

Select @classtypeid = FID,@TableName = FTableName from icclasstype where FName_CHS = '费用报销单'

if isnull(@classtypeid,0) <> 0 

begin

Create Table #T1(FID int)

set @sql = N'insert into #T1(FID) select FID from ' + Quotename(@TableName) +N' Where FMultiCheckStatus = 4'

exec(@sql)

set @sql = N'delete ' + Quotename('ICClassMCRecord'+Convert(nvarchar(10),@classtypeid))  + ' Where FBillID in(select FID from #T1)'

--print @sql

exec(@sql)

set @sql = N'delete ' +Quotename('ICClassMCStatus'+Convert(nvarchar(10),@classtypeid))+' Where FBillID in(select FID from #T1)'

--print @sql

exec(@sql)

set @sql = N'Delete ICClassMCTemplateMap where FClassTypeID = '+ Convert(nvarchar(10),@classtypeid) +' and  FBillID in(select FID from #T1)'

--print @sql

exec(@sql)

set @sql = N'Update ' + Quotename(@TableName) +N' Set FMultiCheckStatus = 2  Where FMultiCheckStatus = 4'

--print @sql

exec(@sql)

Drop Table #T1

end

Go

执行完上述脚本后,再去调整审批流配置;重新启动审批流再让制单人重新提交审批那些单据。


另外可以增加下面的触发器来避免类似事情发生(无法找到此bug产生的原因,暂时先用此触发器做保存检查避免出现数据丢失的情况)

还是以费用报销单为例

执行脚本Select FID from icclasstype where FName_CHS = '费用报销单',获取到单据的类别ID:1000050

执行脚本select FID,* from ICClassMCTemplate where FClassTypeID = 1000050查找到你正在使用的审批流的模板ID

image.webp不同改的账套审批流模板ID各不相同,并且有些账套可能有多个,可以根据FName_Chs来确定现在用的是哪个?

if exists(select * from sysobjects where name ='tr_WatchMC_7' and xtype='tr')

begin

drop Trigger tr_WatchMC_7

end

go

Create Trigger tr_WatchMC_7 on ICClassMCTableInfo

for update,insert

as

begin

declare @name as nvarchar(50)

select @name = FName_CHS from ICClassMCTableInfo

where FTemplateID = 7 and FTagIndex in( select FTagIndex from inserted Where FTemplateID = 7

and (datalength(FCheckRight)=0 or datalength(FCheckRight) is null or datalength(FUnCheckRight)=0 or datalength(FUnCheckRight) is null)

and FObjectType = 304

if isnull(@name,'') <> ''

begin    

   set @name = @name +  '节点审核人、反审核人不能设置为空'

   RAISERROR(@name,18,18)  

   return  

end

end

Go

把这段脚本中数字7(已经用红字标识出来)替换成上一段脚本刚查出来的FID.然后执行创建这个检查触发器;

这样可以保证再审批流编辑过程中发生异常导致数据丢失时(数据异常大概率导致节点审核人反审核人数据丢失)能够限制保存成功。


提示保存失败后,用户应重新打开界面编辑(数据丢失这种情况大概率是审批流UI再读取后台存储的二进制数据异常引起的)




Wise BOS审批流异常单据数据修复方法

背景:有些客户的审批流设计的非常复杂,元素非常多,可能会出现加载审批流之后再保存时(目前未能找到原因),部分节点的数据丢失,混乱。...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息