2010-07-22 83 views
1

我试图获取所有Sharepoint工作流的内部状态。查询所有Sharepoint工作流的内部状态

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

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

谢谢!
戴夫

+0

在项目上运行的工作流程后,没有注意到任何新列? :-)你可能不得不改变视图。 – 2010-07-22 22:11:26

+0

嗯...那真的没有帮助我。那是gui。我需要以编程方式做些事情,在那里我可以查询所有工作流程,并确定他们的状态。任何其他想法?谢谢! – 2010-07-23 13:37:02

回答

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

      // ... 
     } 
    } 
}