gpt4 book ai didi

sharepoint - 从文档库中的所有子文件夹中检索所有文档-CSOM

转载 作者:行者123 更新时间:2023-12-04 02:08:42 31 4
gpt4 key购买 nike

我正在使用客户端对象模型方法C#,以便从包含子文件夹的文档库中检索所有列表项。我 checkout 了MSDN文档,并被困在为什么我无法获得字段属性,或者我什至没有正确执行此操作的问题上。

    NetworkCredential credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
ClientContext clientcontext = new ClientContext(Resources.defaultSPSite);
clientcontext.Credentials = credentials;

//Load Libraries from SharePoint
//Web site = clientcontext.Web;
clientcontext.Load(clientcontext.Web.Lists);
clientcontext.ExecuteQuery();


//List sharedDocumentsList = clientcontext.Web.Lists.GetByTitle("TestLDOCS");
//CamlQuery camlQuery = new CamlQuery();
//camlQuery.ViewXml = @"<View Scope='Recursive'><Query></Query></View>";

foreach (List list in clientcontext.Web.Lists)
{
clientcontext.Load(list);
clientcontext.ExecuteQuery();
//list.TemplateFeatureId.ToString().Equals("") &&
string baseType = list.BaseType.ToString();
string listTitle = list.Title.ToString();
if (list.BaseType.ToString().Equals("DocumentLibrary", StringComparison.InvariantCultureIgnoreCase) && list.Title.ToString().Equals("TestLDOCS", StringComparison.InvariantCultureIgnoreCase))
{
foreach (Folder subFolder in list.RootFolder.Folders)
{
foreach (File f in subFolder.Files)
{
Console.WriteLine((string) f.Title);
}
}
}
}
}

我收到的错误是“foreach(subFolder.Files中的File f)”集合可能未初始化。无论如何,是否可以使用CSOM获取文档库中每个子文件夹中所有文档的字段值?

我知道您也可以使用列表项(即(listItem [“fieldName”]))强烈键入字段值。我应该改走这条路线吗?

最佳答案

一些建议:

1)建议使用ClientRuntimeContext.LoadQuery method加载特定列表,例如:

var lists = ctx.LoadQuery(ctx.Web.Lists.Where(l => l.BaseType == BaseType.DocumentLibrary));
ctx.ExecuteQuery();

2)由于SharePoint SCOM支持 Request Batching,因此建议尽量减少对服务器的请求数。下面的示例演示如何对服务器执行一个 单个请求,以便从文档库中加载所有文件:
foreach (var list in lists)
{
var items = list.GetItems(CreateAllFilesQuery());
ctx.Load(items, icol => icol.Include(i => i.File));
results[list.Title] = items.Select( i=>i.File);
}
ctx.ExecuteQuery();

3)首选通过CAML查询加载所有文件,如下所示:
public static CamlQuery CreateAllFilesQuery()
{
var qry = new CamlQuery();
qry.ViewXml ="<View Scope=\"RecursiveAll\"><Query><Where><Eq><FieldRef Name=\"FSObjType\" /><Value Type=\"Integer\">0</Value></Eq></Where></Query></View>";
return qry;
}

然后,以下示例将返回库中的所有文件:
var items = list.GetItems(CreateAllFilesQuery());
ctx.Load(items, icol => icol.Include(i => i.File));
ctx.ExecuteQuery();
var files = items.Select( i=>i.File).ToList();

从性能角度来看,这是一种更优化的加载特定列表的方式

完整示例

如何使用SharePoint CSOM从文档库加载所有文件:
using (var ctx = new ClientContext(webUri))
{

var results = new Dictionary<string, IEnumerable<File>>();
var lists = ctx.LoadQuery(ctx.Web.Lists.Where(l => l.BaseType == BaseType.DocumentLibrary));
ctx.ExecuteQuery();
foreach (var list in lists)
{
var items = list.GetItems(CreateAllFilesQuery());
ctx.Load(items, icol => icol.Include(i => i.File));
results[list.Title] = items.Select( i=>i.File);
}
ctx.ExecuteQuery();

//Print results
foreach (var result in results)
{
Console.WriteLine("List: {0}",result.Key);
foreach (var file in result.Value)
{
Console.WriteLine("File: {0}", file.Name);
}
}
}

关于sharepoint - 从文档库中的所有子文件夹中检索所有文档-CSOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16448214/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com