ESAP达摩院 思想有多远,我们就能走多远

ESAP前传 ES工作流扫描恢复


概述

ES工作流是其能成为OA的一个重要因素,但是工作流要慎用,尤其是表单带有大量明细(假设平均N节点),会导致该模板的附属WI表成N倍体积增大。

ES工作流另一个不利于应用的因素是:在办理时如果未正常关闭会出现卡在进行中待办的现象,此问题不易发现,若出现在订单类模板上,可能造成交期延误进而造成重大损失。

本文将针对工作流卡在进行中待办的问题进行探讨并提供一种解决办法。

问题呈现

  • 新建任意含工作流的表单-暂存

  • 在待办中双击办理

  • 强制结束任务

4.重新登录时会发现待办中无项目

5.工作流卡在“进行汇总待办”中,必须右键恢复

解决办法

  • 在数据库中定义视图(扫描进行中待办)
CREATE VIEW dbo.v_WiCKOut
AS
SELECT A1.wiId AS 工作流序号,
	A1.CreByName AS 创建人, 
	A1.State AS 工作流状态, 
	A1.CheckOutByName AS 进行人, 
	A1.ComByName AS 暂存人,
	A1.state1 AS 暂存状态,
	A3.pName AS 描述, 
	A4.IP, A1.CreDate AS 创建时间
FROM dbo.ES_WorkItem A1 INNER JOIN
      dbo.ES_WfCase A2 ON A1.piId = A2.piId INNER JOIN
      dbo.ES_WorkFlow A3 ON A2.pId = A3.pId LEFT OUTER JOIN
      ESSystem.dbo.ES_SesLog A4 ON A1.CheckOutBy = A4.UserId
WHERE (A1.State = 1)  --1表示进行中,0表示待办,2表示完成

————–执行效果————

  • 在管理控制台中注册该视图

  • 创建模板定义提数公式

  • 定义回写公式保存时恢复工作流状态(为确保安全仅恢复不在线用户的进行中待办)

  • 设置定时自动任务自动扫描

小结

通过该办法可以有效控制进行中待办不被一直卡住,当然,示例中的视图也可以定义为存储过程,由SQL代理作业定时自动完成。

村长补记:自动任务偶尔会挂掉,SQL代理作业设为自动启动后可以作为最后一道防线!