2013-05-13 81 views
1

你好計算器社區CAML- WebService Sharepoint

我從這個論壇得到了很多幫助。雖然這次我找不到。

我做了一個ASP.NET應用程序,我嘗試使用SharePoint WebService來獲取列表的某些項目。

到目前爲止,我在獲得使用CAML請求整個列表成功,但是我必須選擇2個指定的日期

之間的項目

我發現了很多的幫助,解決這個,我用這個方法格式化ISO 8601日期字符串:

private string FormatDateForCAML(DateTime theDate) 
{ 
    string result = theDate.ToString("yyyy-MM-ddTHH:mm:ssZ"); 
    return result; 
} 

這裏是CAML要求建設:

System.Xml.XmlElement query = xmlDoc.CreateElement("Query"); 
query.InnerXml = 
     "<Where>"+ 
      "<And>"+ 
       "<Geq>"+ 
        "<FieldRef Name=\"startdate\" />"+ 
        "<Value Type=\"DateTime\" IncludeTimeValue=\"True\">" + theStart + "</Value>" + 
       "</Geq>"+ 
       "<Lt>" + 
        "<FieldRef Name=\"enddate\" />" + 
        "<Value Type=\"DateTime\" IncludeTimeValue=\"True\">" + theEnd+ "</Value>" + 
       "</Lt>" + 
      "</And>"+ 
     "</Where>"; 

我沒有這個查詢任何錯誤返回:

System.Xml.XmlNode nodeListItems = listService.GetListItems(listName, viewName, query, viewFields, rowLimit, queryOptions, null); 

但返回的列表爲空雖然shoudn't

感謝您的幫助。

編輯:我終於成功了,問題從這裏一個錯誤的請求來到的是正確的版本

System.Xml.XmlElement query = xmlDoc.CreateElement("Query"); 
query.InnerXml = 
     "<Where>"+ 
      "<And>"+ 
       "<Geq>"+ 
        "<FieldRef Name=\"startdate\" />"+ 
        "<Value Type=\"DateTime\" IncludeTimeValue=\"True\">" + theStart + "</Value>" + 
       "</Geq>"+ 
       "<Lt>" + 
        "<FieldRef Name=\"startdate\" />" + 
        "<Value Type=\"DateTime\" IncludeTimeValue=\"True\">" + theEnd+ "</Value>" + 
       "</Lt>" + 
      "</And>"+ 
     "</Where>"; 

感謝Roqz我使用的CAML觀衆,我可以得到這個問題:我有比較開始僅限日期!

謝謝兩位的幫助:)

+0

你有沒有試過用U2U CAML Query Builder這樣的工具來建立你的請求來檢查它是否以這種方式運行? http://www.codeproject.com/Articles/458008/CAML-Query-Builder – roqz 2013-05-13 09:41:09

+0

Thx回覆。我會嘗試今天下午使用它,並在這裏帶回結果。雖然我嘗試添加元左右,現在把整個名單,無視我的「where」子句 – Deunz 2013-05-13 09:47:35

+0

根據的SharePoint您也可以使用RSS feeds的列表,如果使用CAML +本地Web在所有查詢的版本服務不鍛鍊。 – 2013-05-13 10:02:11

回答

2

在我的CAML Builder工具中,類似於你的查詢確實返回它應該的結果。 查詢看起來像:

<Query> 
    <Where> 
     <And> 
      <Geq> 
      <FieldRef Name="Created" /> 
      <Value IncludeTimeValue="TRUE" Type="DateTime">2013-04-01T19:35:49Z</Value>     
      </Geq> 
      <Lt> 
      <FieldRef Name="Modified" /><Value IncludeTimeValue="TRUE" Type="DateTime">2013-05-24T19:36:46Z</Value> 
      </Lt> 
     </And> 
    </Where> 
</Query> 

但我記得,如果你想使用此查詢代碼比你不需要周圍的標籤。 您是否檢查過日期格式是否正確?在你的例子中,我看不到最後的「Z」。

+0

問題很多解決了!我編輯了原文。我只是添加了一個問題,我必須只比較startdate,而不是startdate + enddate。 Newb我!對不起:) – Deunz 2013-05-13 15:47:04

0

嘗試在使用全SharePoint對象模型你想要的任何條款像你想的日期過濾控制檯應用程序運行你的CAML查詢。如果您的CAML以完整的SharePoint對象模型工作,那麼當您嘗試使用SharePoint Native Web Services獲取數據時,理想情況下也應該可以正常工作。

+0

Himan喜舒,我的電腦上沒有安裝Sharepoint服務器。我可能會做錯事。我對Sharepoint完全陌生。我沒有訪問Sharepoint服務器的權限。那麼我還可以使用Sharepoint對象模型嗎? – Deunz 2013-05-13 14:42:18

+0

如果您還沒有訪問SharePoint服務器不使用SharePoint對象的唯一方法是通過遠程您,當您使用SharePoint本地Web服務,但服務不公開所有SP對象模型的能力已經在這樣做。另一種方式可以是爲您的列表使用RSS提要,只要它符合您的要求。 – 2013-05-14 08:30:44

0

我想補充一點,這個方法:

private string FormatDateForCAML(DateTime theDate) 
{ 
    string result = theDate.ToString("yyyy-MM-ddTHH:mm:ssZ"); 
    return result; 
} 

等同於:

private string FormatDateForCAML(DateTime theDate) 
{ 
    string result = theDate.ToString("s"); 
    return result; 
} 

date.ToString( 「S」)返回一個ISO.8601日期格式字符串。