我有一个外部sharepoint站点,我需要更新大量文件的元数据。最好的方法是使用列表Web服务,并使用Lists.UpdateListItems
方法。但是,此方法需要服务器上的文档的ID,我没有的信息。我确实有文件的文件路径/文件名。
使用名称/路径获取文档ID的最佳方法是什么?
答案 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的内容的更多信息。