替代sharepoint列表中的foreach项目

时间:2014-05-23 14:06:34

标签: sharepoint foreach caml

我修改了CAML,它现在正在工作,并没有通过列表中的所有项目循环。

我正在寻找工作流状态等于“发生错误”的列表项。我有以下代码,它工作正常。但是,我的列表中有124,000个项目,代码遍历列表中的每个项目。有没有办法将此限制为工作流状态(工作流名称为“存档数据”)为“发生错误”的项目。请建议。我添加了以下CAML并更改了代码,但它仍然返回所有记录。我用u2u测试了CAML,它返回了144条记录。我添加了write-host来获取计数并注释了foreach以进行测试。

    # Terminates all workflow in a give list
    Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

    $web = Get-SPWeb "http://inside.nov.com/sales/SouthEast"
    $web.AllowUnsafeUpdates = $true
    # $list name is list display name
    $list = $web.Lists["New Orders"]
    $CAML = '<Where>
              <Eq>
                 <FieldRef Name="ArchiveData" />
                 <Value Type="WorkflowStatus">3</Value>
              </Eq>
           </Where>'

$query = new-object Microsoft.SharePoint.SPQuery
$query.Query = $CAML
$listitems = $list.GetItems($query)
Write-Host "Count: " $listitems.Count

    #foreach ($item in $listItems) 
    #{
    #   foreach ($wf in $item.Workflows)
    #   {
    #       #Cancel Workflows        
    #       [Microsoft.SharePoint.Workflow.SPWorkflowManager]::CancelWorkflow($wf)   
    #   }
    #}
    $web.Dispose()

1 个答案:

答案 0 :(得分:0)

我更新了原始代码并且它正在运行。使用SPQuery对象时,关键字“Query”不需要在CAML中。 SPQuery自动用关键字包装CAML。

由于