咱们有遇到这种状况:可能因为某些缘由,流程发起后一直处于Running
状态,而后咱们想Stop
掉这些出问题的流程,这个时候你在Workspace
里面进行操做,这个操做是不可能完成的,Workspace
也会一直处于Loading
状态。数据库
这种状况下,您惟一的选择就是经过更新K2 Database
来中止这些流程。安全
在执行这些操做以前,应该尝试经过
Workspace
中止流程实例,只有在Workspace
处理不了的时候,才去更新K2 Database
服务器
在执行操做以前,请熟悉每一个状态的含义,这些状态能够在[ServerLog].[Status]
表找到,它的结构以下:测试
0 - Error
1 - Running
2 - Active
3 - Completed
4 - Stopped
5 - Deletedspa
Running
状态的流程实例一般意味着K2服务器仍然在尝试处理有关WF已构建的操做,此状态不须要用户输入,K2正在尝试处理待办生成前的数据。code
在执行如下步骤以前, 请确保 K2 数据库已经备份,安全第一!进程
一般有两种状况下, 您将中止进程实例:资源
Workspace
(将状态设置为中止4 - Stopped
)11 - Paused
)SELECT * FROM [K2].[Server].[ProcInst] WHERE Status = 1
/**为某一流程运行实例。能够从[Server].[ProcSet]表中抓取进程 ID**/ SELECT * FROM [K2].[Server].[ProcInst] WHERE ProcID = 3
/**更新正在运行状态中的全部流程实例为中止状态 4 - Stopped**/ UPDATE [K2].[Server].[ProcInst] SET Status = 4, ServerID = 0 WHERE Status = 1
Workspace
看到这些流程实例已经中止,也能够单独启动一个测试或删除它们。若是您试图更新数据库中的状态而不将Server ID设为0,则状态将自动更新为1(运行)。ServID=1指示K2服务仍在这个进程上运行。设置ServID=0将告诉K2服务再也不使用此服务。产品
SELECT * FROM [K2].[Server].[ProcInst] WHERE Status = 1
/**为某一流程运行实例。能够从[Server].[ProcSet]表中抓取进程 ID**/ SELECT * FROM [K2].[Server].[ProcInst] WHERE ProcID = 3
/**更新正在运行状态中的全部流程实例为中止状态 11 - Paused**/ UPDATE [K2].[Server].[ProcInst] SET Status = 11, ServerID = 0 WHERE Status = 1
SQL Management Studio
, 在SQL Management Studio
上运行上面构建的更新查询脚本。Status
)更新为 11。在方案2中,咱们将状态列更新为
11
,而不是中止4。提供11的ID提供多种好处:io
- 由于它是K2不指望的状态(
11
),K2服务会把它忽略掉,不会当作流程实例,甚至不会注意到它存在;所以,没有任何操做(action takes
)发生在它上面;11
不是特别须要的,你能够提供任何不被用做状态的数字,它也会作一样的事情(例如,你能够把它更新为666
,若是你以为有意义的话;我把它保持为11
,由于这意味着它之前是1 - Running
。- 将进程置于
Paused
状态后,将不会使用K2资源;若是您须要再次启动流程实例,能够将其更新为1,而且它将很快从上次更新到11的中断位置被拾起;请记住,已完成(completed
)的实例没法再次启动。- 若是您有一个可疑的进程,将状态设置为11将在未来帮助您,由于您能够得到在K2服务处于更好状态以后须要检查的ProcInst ID列表。而后你就能够弄明白他们为何会跑;请记住,由于它们是状态11,客户将没法经过
K2 Management
/K2 Workspace(Legacy)
看到它们,此过程仅在您检查支持时才保留选项。