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
这个简单的脚本作品在我的情况。我只是想向社区提出这个方法的优点或缺点。