获取子文件和文件夹'id -客户端对象模型

本文关键字:id 客户端 对象模型 文件 文件夹 获取 | 更新日期: 2023-09-27 17:53:29

我想要一些文件夹-子文件。我有一个列表中的所有文件夹SharePoint ID。我的代码是工作的,但它的性能非常糟糕,因为有很多的context.ExecuteQuery;

我想用Caml Query。

using (var context = new ClientContext("http://xxx/haberlesme/"))
{
    var web = context.Web;
    var list = context.Web.Lists.GetById(new Guid(target));
    int[] siraliIdArray;
    //siraliIdArray = loadSharePointIDList(); think like this
    for (var j = 0; j < siraliIdArray.Count; j++)
    {
        var folderName = listItemCollection[j]["Title"].ToString();//Folder Name
        var currentFolder = web.GetFolderByServerRelativeUrl("/haberlesme/Notice/" + folderName);
        var currentFiles = currentFolder.Files;
        context.Load(currentFiles);
        //I don't want to execute for n folder n times. I want to execute n folder 1 time.
        context.ExecuteQuery();
        var ek = new LDTOTebligEk();
        //I don't want to add one - one 
        foreach (var file1 in currentFiles)
        {
            ek.DokumanPath = urlPrefix + folderName + "/" + file1.Name;
            ek.DokumanAd = file1.Name;
            ekler.Add(ek);
        }
    }
}

例如,我有100个文件夹,但我想在一个文件夹中得到10个文件夹执行

获取子文件和文件夹'id -客户端对象模型

由于CSOM API支持请求批处理:

CSOM编程模型是围绕请求批处理构建的。当你与CSOM一起工作,您可以在上面执行一系列的数据操作ClientContext对象。将这些操作提交给服务器一个请求,当你调用ClientContext.BeginExecuteQuery方法。

你可以重构代码,如下所示:

var folders = new Dictionary<string,Microsoft.SharePoint.Client.Folder>();
var folderNames = new[] {"Orders","Requests"};
foreach (var folderName in  folderNames)
{
   var folderKey = string.Format("/Shared Documents/{0}", folderName);
   folders[folderKey] = context.Web.GetFolderByServerRelativeUrl(folderKey);
   context.Load(folders[folderKey],f => f.Files);
}
context.ExecuteQuery();  //execute request only once


//print all files
var allFiles = folders.SelectMany(folder => folder.Value.Files);
foreach (var file in allFiles)
{
   Console.WriteLine(file.Name);
}

使用Caml查询:

Microsoft.SharePoint.Client.List list = clientContext.Web.Lists.GetByTitle("Main Folder");
Microsoft.SharePoint.Client.CamlQuery caml = new Microsoft.SharePoint.Client.CamlQuery();
caml.ViewXml = @"<View><Query><Where><Eq><FieldRef Name='FileLeafRef'/><Value Type='Folder'>SubFolderName</Value></Eq></Where></Query></View>";
caml.FolderServerRelativeUrl = " This line should be added if the main folder is not in the site layer";
Microsoft.SharePoint.Client.ListItemCollection items = list.GetItems(caml);
clientContext.Load(items);
//Get your folder using items[0]