2010-02-26 24 views
2

我使用JavaScript來調用SP web服務和移交在下面的CAML的GetListItems方法:CAML從SharePoint留言板獲取的所有項目

var CAML = "<Query>" 
      + "<ViewAttributes Scope=\"Recursive\" />" 
      + "<Where>" 
      + "<Or>" 
      + "<Eq>" 
      + "<FieldRef Name=\"ID\"/>" 
      + "<Value Type=\"Counter\">" + id + "</Value>" 
      + "</Eq>" 
      + "<Eq>" 
      + "<FieldRef Name=\"ParentFolderId\" />" 
      + "<Value Type=\"Integer\">" + id + "</Value>" 
      + "</Eq>" 
      + "</Or>" 
      + "</Where>" 
      + "</Query>"; 

    var fieldinfo = "<ViewFields><FieldRef Name='Title' /><FieldRef Name='Body' /><FieldRef Name='CorrectBodyToShow' /><FieldRef Name='Created' /><FieldRef Name='Author' /><FieldRef Name='Editor' /><FieldRef Name='PersonalImage' /><FieldRef Name='DiscussionLastUpdated' /></ViewFields>" 

,我只收到了頂層項目返回...討論類型項目。有2個與ParentFolderId 1相關的消息類型項目,但它們不會被返回。另外,如果我在U2U工具中運行CAML,它會返回整個線程...一個討論和兩個消息。

回答

0

您需要設置一個屬性叫做範圍=遞歸對象。你已經在你的CAML中做了這個,但是在錯誤的地方。

如果您正在使用的對象模型,那麼你不過你正在使用的網絡服務將使用

query.ViewAttributes = "Scope=\"Recursive\"";

。在您的示例中,您已將ViewAttributes作爲查詢節點的子節點 - 但這不正確。

應該是queryOptions的一部分 paramater的GetListItems

所以除了你上面的代碼,你會東東

var queryOptions = "<QueryOptions>" + 
         "<ViewAttributes Scope='Recursive' />" + 
         "</QueryOptions>"; 

那麼你的JavaScript包裝你會叫它像這樣(注 - 這顯然不會按原樣工作,但你會明白)

listService.GetListItems("List_Name", null, 
         CAML, fieldinfo , null, 
         queryOptions, null); 
+0

由於包裝器正在滾動一切轉換爲傳遞給Web服務的SOAP信封,我應該只在SOAP主體中將新查詢選項添加爲根級別節點? – 2010-03-01 14:42:17

+0

我會認爲它是這樣的。在調用.GetListItems Web服務時,queryoptions是一個單獨的參數,它將放在SOAP請求的某個地方,但我從來沒有使用過原始SOAP請求(VS爲你完成所有的管道工作),所以不能完全確定。 – Ryan 2010-03-01 15:34:22

+0

你的依靠是營養!它是 root下的一個單獨節點...我缺少的部分是它們的QueryOptions需要「雙重包裝「像查詢節點一樣工作。 非常感謝Ryan! – 2010-03-01 15:47:57

0

我有,你需要設置recusion在SPQuery對象,而不是在查詢CAML一種預感,例如:

qry.ExpandRecurrence = true 

,但我可能是錯的:)我發現,一些排序沒有總是工作。

+0

我認爲你是在做某件事...以前的顧問創建了一個我們打算將CAML捲入SOAP信封的javascript包裝器,您是否有任何想法可以設置ExpandRecurrence的位置? – 2010-02-26 21:34:21

+0

不知道爲什麼你需要肥皂。你能在服務器上使用aspx而不是使用他的web服務嗎?如果是這樣的話,你可以在那裏使用SPQuery對象。如果不是,那麼你需要在js中編寫遞歸功能。 – Jonesie 2010-02-27 04:36:37

+0

哦,theres在這個博客文章的評論可能會幫助:http://www.u2u.info/Blogs/Patrick/Lists/Posts/Post.aspx?ID=1765 – Jonesie 2010-02-27 04:38:42

1

遞歸功能的查詢選項部分對象不是視圖選項中的Web服務