通过Powershell删除工作流后,无法从Item打开工作流

时间:2014-11-03 13:13:59

标签: sharepoint sharepoint-2010 workflow sharepoint-2013 sharepoint-workflow

我做了以下事情:

$oldWorkflow="MyOldWorkflow";
$oldAssoc=$list.WorkflowAssociations.GetAssociationByName($oldWorkflow,"en-US");
$list.RemoveWorkflowAssociation($oldAssoc);

之后我可以看到工作流程不再存在。但是在尝试显示工作流程时收到错误之前,每个项目都有工作流程:

Getting Error Message for Exception System.Web.HttpUnhandledException (0x80004005): Exception of type 'System.Web.HttpUnhandledException' was thrown. ---> System.ArgumentException: Column 'Reservat' doesn't exist

我从未有过具有该名称的专栏。手动将该列添加到列表后,错误消息更改为:

Application error when access /_layouts/15/Workflow.aspx, Error=Object reference not set to an instance of an object. 

有机会解决这个烂摊子吗? (旧的工作流程不再作为WSP存在)

更新: 我仍然可以使用Powershell找到工作流程:

     foreach ($wf in $item.Workflows) 
  if ($wf.ParentAssociation.Name -eq $oldWorkflow) 
                ...

但同时$list.WorkflowAssociations.GetAssociationByName不返回工作流程

1 个答案:

答案 0 :(得分:0)

我解决了这个问题。所有通过谷歌来到这里的人都会注意到:这不是删除工作流程的好方法,但只有在您已经搞砸了SharePoint中的工作流程时才有解决方案。 (像我一样)

   $oldWorkflow="MyOldWorkflow";
        foreach ($item in $list.Items) {
                foreach ($wf in $item.Workflows) {
                    if ($wf.ParentAssociation.Name -eq $oldWorkflow)  {
                        Write-Host ("[{0}] Workflow '{1}' will be removed" -f $item.Title, $wf.ParentAssociation.Name);                            
                        $itemsToAdd.Add($wf);
                }
            }
        }
        ForEach($item in $itemsToAdd) {
            $man.RemoveWorkflowFromListItem($item);  
        }