2010-11-12 134 views
2

我有一個外部SharePoint站點,我需要更新一大組文件的元數據。執行此操作的最佳方式似乎是使用列表Web服務,並使用Lists.UpdateListItems方法。但是,這種方法需要服務器上文檔的ID,我沒有的信息。我確實有文檔的文件路徑/文件名。使用C#中的Web服務從Sharepoint獲取特定文檔ID

使用名稱/路徑獲取文檔ID的最佳方式是什麼?

+0

您是如何計劃確定要更新哪些文檔的?你想要的標識符是什麼。 – 2010-11-12 15:47:52

+0

我有文件路徑和需要更新的文檔的名稱。所以我知道需要更新http://MySharepointSite/RootFolder/November/somePDF.pdf。 – John 2010-11-12 15:54:33

回答

1

如果您需要使用Web服務,您可能必須使用SPQueries(CAML)才能獲得所需的項目。

Lists.asmx Web服務(位於http://sitecollection/_vti_bin/Lists.asmx下)具有一個名爲GetListItem的函數,它將Query作爲參數。

我真的不知道你的列表的內部工作,但像這樣的查詢應該這樣做:

XmlDocument camlDocument = new XmlDocument(); 
XmlNode queryNode = camlDocument.CreateElement("Query"); 
queryNode.InnerXml = "<Where>" 
+ "<Eq><FieldRef Name='FileName' /><Value Type='Text'>{Your Filename Here}</Value></Eq>" 
+ "</Where>"; 

XmlNode viewFieldsNode = camlDocument.CreateElement("ViewFields"); 
viewFieldsNode.InnerXml = "<FieldRef Name='ID' />"; 

XmlNode queryOptionsNode = camlDocument.CreateElement("QueryOptions"); 

resultNode = _sharepointSite.ListsWS.GetListItems(listName, viewName, 
queryNode, viewFieldsNode, rowLimit, queryOptionsNode, webID); 

的_sharepointSite和ListWS對象是您的Web serivce對象(他們應該被自動生成你當你添加你的Web引用)。

的LISTNAME是清單上的網站集的名稱

的viewname表示要在(確保你有一個觀點,如果你想查詢上顯示的所有元素查詢視圖的名稱我通常依靠隱藏視圖來確保用戶不會更改它們)

RowLimit只是一個整數。

您應該沒有問題找到您正在使用Web服務正在使用的Web的ID。

您將找回的XML不是那麼直截了當,需要特別注意。更多資料,請

請注意,如果你正在處理嵌套文件夾,你將要添加以下代碼:對我解釋here

XmlNode queryOptionsNode = camlDocument.CreateElement("QueryOptions"); 
queryOptionsNode.InnerXml = "<ViewAttributes Scope=\"Recursive\" />"; 

的更多信息。

+0

太棒了,非常感謝。我最終使用queryOptionsNode.InnerXml =「 RootFolder/aFolder/anotherFolder,只給出特定文件夾中的文檔,以處理具有相同名稱但位置不同的文檔問題。 – John 2010-11-15 14:19:42

+0

沒有listItem的ID,它可能是我想如果你有大量的數據,時間不是問題,所以許多查詢循環你的文件夾可能會很好。很高興這個解決方案爲你工作! – 2010-11-15 14:52:26

相關問題