查询所有Sharepoint工作流的内部状态

查询所有Sharepoint工作流的内部状态,sharepoint,workflow,Sharepoint,Workflow,我正在尝试获取所有sharepoint工作流的内部状态 是否仍然可以通过编程方式查询所有工作流并获取其状态?通过CAML查询或对象模型 我意识到我可以迭代sharepoint中的所有项目,查看是否附加了工作流,然后获取状态。然而,这太过分了,因为有100000个项目,只有一小部分有工作流。我想运行一个定期报告来获取所有工作流的状态,而不会让服务器崩溃 谢谢! Dave看看SPSite.WorkflowManager。这将允许您检查整个网站集的工作流定义和运行实例。CountWorkflows方法

我正在尝试获取所有sharepoint工作流的内部状态

是否仍然可以通过编程方式查询所有工作流并获取其状态?通过CAML查询或对象模型

我意识到我可以迭代sharepoint中的所有项目,查看是否附加了工作流,然后获取状态。然而,这太过分了,因为有100000个项目,只有一小部分有工作流。我想运行一个定期报告来获取所有工作流的状态,而不会让服务器崩溃

谢谢! Dave

看看SPSite.WorkflowManager。这将允许您检查整个网站集的工作流定义和运行实例。CountWorkflows方法可能就是您想要的


-Oisin

视图的核心是CAML查询。如果您不想遍历所有项目,@pst的评论是一个不错的选择;只需从显示“工作流状态”列的任何视图的视图定义中滑动CAML。虽然我通常在服务器上使用PowerShell来提取视图定义,但Lists.asmx Web服务在这里可能会派上用场

如果您确实遍历了对象模型中的项,下面是一个要滚动的片段:

using (var site = new SPSite(url))
using (var web = site.OpenWeb())
{
    var manager = site.WorkflowManager;
    var list = web.Lists[listname];
    if (list == null || list.Hidden)
    {
        return "Cannot work under these conditions.";
    }

    foreach (SPListItem item in list.Items)
    {
        foreach (SPWorkflow workflow in item.Workflows)
        {
            if ((workflow.InternalState & SPWorkflowState.Faulting) == SPWorkflowState.Faulting)
            {
                Console.WriteLine(SPWorkflowState.Faulting.ToString());
            }

            // ...
        }
    }
}

在项目上运行工作流后,是否注意到任何新列?:-你可能不得不改变观点。嗯……这对我真的没有帮助。这在gui中。我需要做一些程序化的事情,在那里我可以查询所有的工作流,并确定它们的状态。还有其他想法吗?谢谢