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

时间:2010-07-22 21:05:54

标签: sharepoint workflow

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

无论如何以编程方式查询所有工作流程并获取其状态?通过CAML查询还是对象模型?

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

谢谢!
戴夫

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

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

如果你迭代完对象模型中的项目,这里有一个片段可以滚动:

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());
            }

            // ...
        }
    }
}