迭代共享点文件夹内容时出现问题

发布于 2024-08-25 01:22:41 字数 280 浏览 12 评论 0原文

我正在尝试使用 C# 中的 Web 服务访问文档库中的文件夹。 我正在使用 SiteData 的 EnumerateFolder() 方法来获取子文件夹和文件。但该方法只为每个条目提供 3 个属性。

  1. 是文件夹
  2. 网址
  3. 最后修改日期

那么我们如何获取“修改者”字段值。

或者还有另一种枚举文件夹和子文件夹的解决方案。

谢谢。

I am trying to access Folder from Document Library using web services in C#.
I am using SiteData's EnumerateFolder() method to get sub folders and files. But the method gives me only 3 properties for each entry.

  1. IsFolder
  2. Url
  3. Last modified date

So how can we get 'Modified By' field value.

Or there is another solution for enumerating folders and subfolders.

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

靑春怀旧 2024-09-01 01:22:41

您需要使用 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);
}

You need to use the List API in order to get more properties from your objects.

[Edit - complete code sample]

The sample needs to be cleaned up, but should give you what you need

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);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文