0
我有一個相當大的Windows工作流程實現,我有時需要更新工作流程。我們現在偶爾會遇到工作流定義被破壞的情況,並因此導致拋出IndexOutOfRangeException。如果WF允許您使用Terminate()或Abort()方法終止工作流,這不會成爲問題。強制刪除Windows工作流程
我知道有兩種解決方案。第一個涉及使用Microsoft寫的.SQL腳本刪除和添加Workflow表。另一種方法是修改定義並將其保存回到過度表中 - 這是一項非常乏味的任務,不建議用於微弱的內心。
我想知道是否有第三種選擇,也許人們不敢考慮 - 從dbo.InstanceState和dbo.WorkflowInstance表中刪除記錄。下面是一個腳本,將這樣的伎倆:
DECLARE @WorkflowInstancID uniqueidentifier
-- SET @WorkflowInstancID = <Your friendly, offending Workflow Instance ID>
DELETE FROM dbo.WorkflowInstanceEvent
WHERE WorkflowInstanceInternalId IN (SELECT WorkflowInstanceInternalId FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID)
DELETE FROM dbo.UserEvent
WHERE WorkflowInstanceInternalId IN (SELECT WorkflowInstanceInternalId FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID)
DELETE FROM dbo.ActivityInstance
WHERE WorkflowInstanceInternalId IN (SELECT WorkflowInstanceInternalId FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID)
DELETE FROM dbo.ActivityExecutionStatusEvent
WHERE WorkflowInstanceInternalId IN (SELECT WorkflowInstanceInternalId FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID)
DELETE FROM dbo.InstanceState WHERE uidInstanceID = @WorkflowInstancID
DELETE FROM dbo.WorkflowInstance WHERE WorkflowInstanceId = @WorkflowInstancID
GO
這個簡單的腳本作品在我的情況。我只是想向社區提出這個方法的優點或缺點。