Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 迭代sharepoint文件夹内容时出现问题_C#_Web Services_Sharepoint Api - Fatal编程技术网

C# 迭代sharepoint文件夹内容时出现问题

C# 迭代sharepoint文件夹内容时出现问题,c#,web-services,sharepoint-api,C#,Web Services,Sharepoint Api,我正在尝试使用C#中的web服务访问文档库中的文件夹。 我正在使用SiteData的EnumerateFolder()方法获取子文件夹和文件。但是该方法只为每个条目提供3个属性 IsFolder 网址 上次修改日期 那么,我们如何获得“修改人”字段值。 或者还有另一种用于枚举文件夹和子文件夹的解决方案 谢谢。您需要使用列表API才能从对象中获取更多属性 [编辑-完成代码示例] 样品需要清理,但应能满足您的需要 public void SomeFunction() { Lists list

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

  • IsFolder
  • 网址
  • 上次修改日期
  • 那么,我们如何获得“修改人”字段值。

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


    谢谢。

    您需要使用列表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);
    }
    
    public函数()
    {
    列表=新列表()//http://server/_vti_bin/Lists.asmx
    XmlNode coll=lists.GetListCollection();
    XmlNamespaceManager nsMgr=新的XmlNamespaceManager(coll.OwnerDocument.NameTable);
    nsMgr.AddNamespace(“sp”http://schemas.microsoft.com/sharepoint/soap/");
    nsMgr.AddNamespace(“z”,“RowsetSchema”);
    XmlDocument xmlDoc=新的XmlDocument();
    xmlementquery=xmlDoc.CreateElement(“查询”);
    xmlement viewFields=xmlDoc.CreateElement(“viewFields”);
    xmlement queryOptions=xmlDoc.CreateElement(“queryOptions”);
    viewFields.InnerXml=“”;
    queryOptions.InnerXml=“”;
    XmlNodeList SiteList=coll.SelectNodes(//sp:List,nsMgr);
    foreach(站点列表中的XmlNode列表)
    {
    如果(list.Attributes[“ServerTemplate”].Value!=“101”)继续;//101=DocLib
    XmlNode listItemCollection=lists.GetListItems(list.Attributes[“Name”]。值,字符串。空,查询,
    视场,“4000”,
    查询选项,空);
    XmlNodeList listItems=listItemCollection.SelectNodes(//z:row),nsMgr);
    foreach(listItems中的XmlNode listItem)
    {
    如果(listItem.Attributes[“ows_FSObjType”]==null)继续;
    如果(!listItem.Attributes[“ows_FSObjType”].Value.EndsWith(“#1”))继续;
    PrintModifiedBy(列表项);
    }
    }
    }
    私有void PrintModifiedBy(XmlNode listItem)
    {
    字符串被修改;
    if(listItem.Attributes[“被”]!=null修改的\u x0020\u)
    modifiedBy=listItem.Attributes[“ows\u已修改\u x0020\u由”]。值;
    其他的
    modifiedBy=listItem.Attributes[“ows_编辑器”].Value;
    Console.WriteLine(由修改);
    }
    
    使用ListService的一些caml代码编辑了我的答案。它还不完整,但应该可以让您开始。谢谢mikael..我将尝试CAML查询。但请更新我的问题。;)