咱們有遇到這種狀況:可能因爲某些緣由,流程發起後一直處於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)
看到它們,此過程僅在您檢查支持時才保留選項。