我正在尝试获取所有sharepoint工作流程的内部状态。
无论如何以编程方式查询所有工作流程并获取其状态?通过CAML查询还是对象模型?
我意识到我可以迭代sharepoint中的所有项目,并查看是否附加了工作流程,然后获取状态。然而,这是过度的,因为有100,000个项目,只有一小部分具有工作流程。我想运行定期报告来获取所有工作流程的状态,而不会让服务器瘫痪。
谢谢!
戴夫
答案 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());
}
// ...
}
}
}