2014-05-23 17 views
0

我修改了CAML,現在它正在運行,並且不會通過列表中的所有項目循環。替代在分享點列表中的foreach項目

我正在尋找工作流狀態等於「發生錯誤」的列表項。我有以下代碼,它工作正常。但是,我的列表中有124,000個項目,代碼會遍歷列表中的每個項目。有沒有辦法將此限制爲工作流狀態(工作流名稱爲「存檔數據」)爲「發生錯誤」的項目。請建議。我添加了以下CAML並更改了代碼,但它仍然返回所有記錄。我用u2u測試了CAML,它返回了144條記錄。我添加了寫主機來獲得一個計數,並將該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() 
+0

你不能循環通過具有特定屬性的項目,直到你知道該屬性......嗯,我猜。因此我覺得沒有辦法做到這一點,除了可能有保存元素ID或其他內容的輔助列表。 – Kilazur

回答

0

我更新了原來的代碼,它的工作。使用SPQuery對象時,關鍵字「查詢」不需要在CAML中。 SPQuery用關鍵字自動包裝CAML。

謝謝