2010-06-03 48 views
1

我遇到的情況,我需要更新列表項,但我不知道該列表項的內部ID - 因此下面將不會爲我工作:SharePoint,如何使用where子句從Web服務更新列表項?

batchElement.InnerXml = "<Method ID='1' Cmd='Update'>" + 
      "<Field Name='ID'>" + id + "</Field>" + 
      "<Field Name='DeliveryStatus'>" + newStatus.ToString() + "</Field></Method>"; 

相反,我有另一種列表中的域名爲的ProcessID:

所以我想更新交貨狀態,其中的ProcessID = X

這是可能使用SharePoint Web服務。

我想到的一個解決方案是首先根據ProcessID進行ID選擇 - 然後根據這個ID進行更新,但這看起來像是一個瘋狂的解決方案,肯定MOSS CAML的發明者會提供一種方式通過where子句的某種方式更新列表項,或使用另一個字段進行過濾而不僅僅是簡單的舊ID?

感謝

+0

我只注意到一個SharePointOverflow網站存在,我怎麼可以遷移這個問題? – 2010-06-03 15:58:57

回答

1

我不相信你可以做一個UPDATE WHERE。您將需要獲得與您的給定ProcessID相匹配的所有項目以獲取每個單獨的項目ID。

由於您使用的是Web服務,因此使其更有效的一種方法是確保在執行選擇時設置ViewFields屬性,以便將其限制爲僅限於感興趣的列(在此情況下, ID)。

例子:

XmlDocument xmlDoc = new System.Xml.XmlDocument(); 
XmlNode ndQuery = xmlDoc.CreateNode(XmlNodeType.Element, "Query", ""); 
XmlNode ndViewFields = xmlDoc.CreateNode(XmlNodeType.Element, "ViewFields", ""); 
XmlNode ndQueryOptions = xmlDoc.CreateNode(XmlNodeType.Element, "QueryOptions", ""); 

ndQueryOptions.InnerXml = "<ViewAttributes Scope='Recursive' />"; 
ndViewFields.InnerXml = "<FieldRef Name='ID' />"; 
ndQuery.InnerXml = query; 
+0

感謝您的確認。你知道SharePoint非常糟糕。 – 2010-06-04 03:57:00

+0

呵呵,它肯定有缺陷。祝你好運 :) – 2010-06-04 13:08:23

相關問題