迭代SharePoint文件夹内容时出现的问题
问题描述:
我正尝试使用C#中的Web服务访问文档库中的文件夹。 我使用SiteData的EnumerateFolder()
方法来获取子文件夹和文件。但该方法只给我每个条目3个属性。迭代SharePoint文件夹内容时出现的问题
- IsFolder
- 网址
- 最近更新日期
那么,如何才能 '修改者' 字段的值。
还有另一种枚举文件夹和子文件夹的解决方案。
谢谢。
答
您需要使用List API才能从对象中获取更多属性。
[编辑 - 完整的代码示例]
样品需要进行清理,但应该给你什么,你需要
public void SomeFunction()
{
Lists lists = new Lists(); //http://server/_vti_bin/Lists.asmx
XmlNode coll = lists.GetListCollection();
XmlNamespaceManager nsMgr = new XmlNamespaceManager(coll.OwnerDocument.NameTable);
nsMgr.AddNamespace("sp", "http://schemas.microsoft.com/sharepoint/soap/");
nsMgr.AddNamespace("z", "#RowsetSchema");
XmlDocument xmlDoc = new XmlDocument();
XmlElement query = xmlDoc.CreateElement("Query");
XmlElement viewFields = xmlDoc.CreateElement("ViewFields");
XmlElement queryOptions = xmlDoc.CreateElement("QueryOptions");
viewFields.InnerXml = "<FieldRef Name=\"Modified_x0020_By\" />";
queryOptions.InnerXml = "<ViewAttributes Scope=\"RecursiveAll\"/>";
XmlNodeList siteLists = coll.SelectNodes("//sp:List", nsMgr);
foreach (XmlNode list in siteLists)
{
if (list.Attributes["ServerTemplate"].Value != "101") continue; //101=DocLib
XmlNode listItemCollection = lists.GetListItems(list.Attributes["Name"].Value, string.Empty, query,
viewFields, "4000",
queryOptions, null);
XmlNodeList listItems = listItemCollection.SelectNodes("//z:row", nsMgr);
foreach (XmlNode listItem in listItems)
{
if (listItem.Attributes["ows_FSObjType"] == null) continue;
if (!listItem.Attributes["ows_FSObjType"].Value.EndsWith("#1")) continue;
PrintModifiedBy(listItem);
}
}
}
private void PrintModifiedBy(XmlNode listItem)
{
string modifiedBy;
if (listItem.Attributes["Modified_x0020_By"] != null)
modifiedBy = listItem.Attributes["ows_Modified_x0020_By"].Value;
else
modifiedBy = listItem.Attributes["ows_Editor"].Value;
Console.WriteLine(modifiedBy);
}
我使用的Web服务。 – Royson 2010-03-12 08:25:51
编辑我的答案与ListService的一些Caml代码。这不完整,但应该让你开始。 – 2010-03-12 09:42:23
谢谢mikael ..我会尝试CAML查询。但PLZ更新与我的问题。 ;) – Royson 2010-03-12 10:15:38