使用c#中的Web服务从sharepoint获取特定文档ID

时间:2010-11-12 15:44:46

标签: c# web-services sharepoint

我有一个外部sharepoint站点,我需要更新大量文件的元数据。最好的方法是使用列表Web服务,并使用Lists.UpdateListItems方法。但是,此方法需要服务器上的文档的ID,我没有的信息。我确实有文件的文件路径/文件名。

使用名称/路径获取文档ID的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您需要使用网络服务,您可能需要使用SPQueries(CAML)来获取所需的项目。

Lists.asmx网络服务(位于http://sitecollection/_vti_bin/Lists.asmx下)有一个名为GetListItem的函数,它将查询作为参数。

我真的不知道你的列表的内部工作原理,但像这样的查询应该这样做:

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服务对象(添加Web引用时,应自动为它们生成它们。)

listName是网站集上列表的名称

viewName是您要查询的视图的名称(如果要查询所有内容,请确保您有一个显示所有元素的视图。我通常依赖隐藏的视图来确保用户不会更改它们)

RowLimit只是一个int。

使用网络服务查找您正在使用的网址时,您应该没有问题。

您将获得的XML不是那么直接,需要特别注意。更多信息

请注意,如果您要处理嵌套文件夹,则需要添加以下代码:

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

有关我解释here的内容的更多信息。