流程一直处于Running状态,应该怎么停止?

概述

我们有遇到这种情况:可能由于某些原因,流程发起后一直处于Running状态,然后我们想Stop掉这些出问题的流程,这个时候你在Workspace里面进行操作,这个操作是不可能完成的,Workspace也会一直处于Loading状态。

这种情况下,您唯一的选择就是通过更新K2 Database来停止这些流程。

在执行这些操作之前,应该尝试通过Workspace停止流程实例,只有在Workspace处理不了的时候,才去更新K2 Database

在执行操作之前,请熟悉每个状态的含义,这些状态可以在[ServerLog].[Status]表找到,它的结构如下:

0 - Error

1 - Running

2 - Active

3 - Completed

4 - Stopped

5 - Deleted

Running状态的流程实例通常意味着K2服务器仍然在尝试处理有关WF已构建的操作,此状态不需要用户输入,K2正在尝试处理待办生成前的数据。

通过更新 K2 数据库来停止进程的步骤

在执行以下步骤之前, 请确保 K2 数据库已经备份,安全第一!

通常有两种情况下, 您将停止进程实例:

  1. 只是需要停止某些实例, 但它不会让用户通过Workspace(将状态设置为停止4 - Stopped)
  2. 通过调查, 您发现运行的实例会导致 K2 产品的不良行为。(将状态设置为暂停11 - Paused)

方案1

  1. 标识需要停止的运行实例
SELECT * FROM [K2].[Server].[ProcInst]
WHERE Status = 1
  1. 确定是否需要停止所有这些进程实例, 或仅对其中的某个子集进行停止。
/**为某一流程运行实例。可以从[Server].[ProcSet]表中抓取进程 ID**/
SELECT * FROM [K2].[Server].[ProcInst]
WHERE ProcID = 3
  1. 运行查询, 将所需的流程实例更新为停止状态, 例如:
/**更新正在运行状态中的所有流程实例为停止状态 4 - Stopped**/
UPDATE [K2].[Server].[ProcInst]
SET Status = 4, ServerID = 0
WHERE Status = 1
  1. 现在应该能在过Workspace看到这些流程实例已经停止,也可以单独启动一个测试或删除它们。

如果您试图更新数据库中的状态而不将Server ID设为0,则状态将自动更新为1(运行)。ServID=1指示K2服务仍在这个进程上运行。设置ServID=0将告诉K2服务不再使用此服务。

方案2

  1. 首先计算出如果没有完成的话,有多少个运行实例:
SELECT * FROM [K2].[Server].[ProcInst]
WHERE Status = 1
  1. 确定是否需要停止所有这些过程实例,或者仅仅是其中的一个子集。
/**为某一流程运行实例。可以从[Server].[ProcSet]表中抓取进程 ID**/
SELECT * FROM [K2].[Server].[ProcInst]
WHERE ProcID = 3
  1. 一旦您建立了 ProcInst 表中的哪些条目需要更新, 我们需要构建更新查询脚本:
/**更新正在运行状态中的所有流程实例为停止状态 11 - Paused**/
UPDATE [K2].[Server].[ProcInst]
SET Status = 11, ServerID = 0
WHERE Status = 1
  1. 现在启动SQL Management Studio, 在SQL Management Studio上运行上面构建的更新查询脚本。
  2. 运行更新查询并确认状态列(Status)更新为 11。

在方案2中,我们将状态列更新为11,而不是停止4。提供11的ID提供多种好处:

  1. 因为它是K2不期望的状态(11),K2服务会把它忽略掉,不会当做流程实例,甚至不会注意到它存在;因此,没有任何操作(action takes)发生在它上面;11不是特别需要的,你可以提供任何不被用作状态的数字,它也会做同样的事情(例如,你可以把它更新为666,如果你觉得有意义的话;我把它保持为11,因为这意味着它以前是1 - Running
  2. 将进程置于Paused状态后,将不会使用K2资源;如果您需要再次启动流程实例,可以将其更新为1,并且它将很快从上次更新到11的中断位置被拾起;请记住,已完成(completed)的实例无法再次启动。
  3. 如果您有一个可疑的进程,将状态设置为11将在将来帮助您,因为您可以获得在K2服务处于更好状态之后需要检查的ProcInst ID列表。然后你就可以弄明白他们为什么会跑;请记住,因为它们是状态11,客户将无法通过K2 Management/K2 Workspace(Legacy)看到它们,此过程仅在您检查支持时才保留选项。

最新文章

  1. Navisworks 2014 Api 简单的使用
  2. ThinkPHP3.2.3使用cli命令行模式
  3. Debian下配置网络的方法
  4. httpsclient 自动获取证书 无证书访问 验证过能直接用
  5. eCos驱动分析 之 ISR是如何与硬件中断联系起来的?
  6. H5小内容(四)
  7. sqoop1.4.6导出oracle实例
  8. MySQL高性能优化规范建议,速度收藏
  9. Java享元模式
  10. Spring中ClassPathXmlApplication与FileSystemXmlApplicationContext的区别
  11. piwik获取访客头像,自定义显示访问者头像(URL)和描述(标题和替代)
  12. golang curl
  13. 让.aspx同样实现.ashx文件的功能: IHttpHandler
  14. Can't use Subversion command line client: svn. Errors found while svn working copies detection.
  15. SQL语句平时不注意的那些小知识点总结
  16. GPL & Apache License
  17. 基于 HTML5 Canvas 的 3D 渲染引擎构建生产管控系统
  18. 捕获enter键盘事件绑定到登录按钮
  19. Java jdbc入门
  20. Red Hat Enterprise Linux

热门文章

  1. BZOJ3672: [Noi2014]购票(dp 斜率优化 点分治 二分 凸包)
  2. 如何将钉钉集成到FineReport插件中
  3. screen 状态为Attached 连不上
  4. button的OnClickListener的三种实现方法
  5. Redis学习---Redis操作之其他操作
  6. PHP-7的FPM服务的启动
  7. The expression of type Integer is unboxed into int
  8. 'Table is Marked as crashed and should be repaired Error'.Mysql表损坏解决方案
  9. UI(三)
  10. JS和css实现检测移动设备方向的变化并判断横竖屏幕