我试图获取所有Sharepoint工作流的内部状态。查询所有Sharepoint工作流的内部状态
无论如何要以编程方式查询所有工作流程并获取其状态?通过CAML查询还是通过对象模型?
我意识到我可以迭代SharePoint中的所有项目,并查看是否附加了工作流程,然后获取状态。然而,这是过度的,因为有100,000个项目,并且只有一小部分具有工作流程。我想运行一个定期报告来获取所有工作流程的状态,而不会让服务器瘫痪。
谢谢!
戴夫
我试图获取所有Sharepoint工作流的内部状态。查询所有Sharepoint工作流的内部状态
无论如何要以编程方式查询所有工作流程并获取其状态?通过CAML查询还是通过对象模型?
我意识到我可以迭代SharePoint中的所有项目,并查看是否附加了工作流程,然后获取状态。然而,这是过度的,因为有100,000个项目,并且只有一小部分具有工作流程。我想运行一个定期报告来获取所有工作流程的状态,而不会让服务器瘫痪。
谢谢!
戴夫
一个观点是,在它的心脏,一个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());
}
// ...
}
}
}
看看SPSite.WorkflowManager
。这将允许您检查整个网站集中的工作流定义和运行实例。 CountWorkflows
方法可能是你想要的。
http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.spsite.workflowmanager.aspx
-Oisin
在项目上运行的工作流程后,没有注意到任何新列? :-)你可能不得不改变视图。 – 2010-07-22 22:11:26
嗯...那真的没有帮助我。那是gui。我需要以编程方式做些事情,在那里我可以查询所有工作流程,并确定他们的状态。任何其他想法?谢谢! – 2010-07-23 13:37:02