我一直在网上搜索这个,但没有具体参考MANAGED客户对象模型的答案。
如何迭代存储在文档库下的文档集中的文件? 我有一个名为SAMPLELIST的列表,所有文档集都存储在其中。每个文档集也可以容纳文件。我如何迭代这些文件?
到目前为止我发现的是LIST.ROOTFOLDER.FILES。但是,这将返回列表中的所有文件(引用ROOFOLDER)。
感谢您的帮助。
答案 0 :(得分:4)
您可以使用此
ClientContext clientContext = new ClientContext("http://sharepoint");
List sharedDocumentsList = clientContext.Web.Lists.GetByTitle("SAMPLELIST");
CamlQuery camlQuery = new CamlQuery();
string documentSetName = "DS1";
camlQuery.ViewXml =
@"<View>
<Query>
<Where>
<And>
<BeginsWith>
<FieldRef Name='ContentTypeId'/>
<Value Type='Text'>0x0120D5</Value>
</BeginsWith>
<Eq>
<FieldRef Name='FileLeafRef'/>
<Value Type='Text'>" + documentSetName + @"</Value>
</Eq>
</And>
</Where>
</Query>
</View>";
ListItemCollection listItems = sharedDocumentsList.GetItems(camlQuery);
clientContext.Load(sharedDocumentsList);
clientContext.Load(listItems);
clientContext.ExecuteQuery();
foreach (ListItem item in listItems)
{
clientContext.Load(item);
clientContext.ExecuteQuery();
Folder folder = clientContext.Web.GetFolderByServerRelativeUrl(item.FieldValues["FileRef"].ToString());
FileCollection files = folder.Files;
clientContext.Load(folder);
clientContext.Load(files);
clientContext.ExecuteQuery();
foreach (File file in files)
{
Console.WriteLine("{0}", file.Name);
}
}
答案 1 :(得分:0)
假设以下结构:
/ (Root Site)
|
DocCenter (Site)
|
Documents (Library)
|
2013 (Document Set)
使用Web.GetFolderByServerRelativeUrl方法
使用Web.GetFolderByServerRelativeUrl Method将文档集对象置于指定的服务器相对URL,然后Folder.Files property获取文档集中包含的所有文件的集合
var folderUrl = "/doccenter/Documents/2013";
using (var ctx = new ClientContext(webUri))
{
var files = ctx.Web.GetFolderByServerRelativeUrl(folderUrl).Files;
ctx.Load(files);
ctx.ExecuteQuery();
}
基于查询的方法
以下示例演示如何使用CAML query返回位于文档集中的文件:
var folderUrl = "/doccenter/Documents/2013";
var listTitle = "Documents";
using (var ctx = new ClientContext(webUri))
{
var list = ctx.Web.Lists.GetByTitle(listTitle);
var qry = CamlQuery.CreateAllItemsQuery();
qry.FolderServerRelativeUrl = folderUrl;
var items = list.GetItems(qry);
ctx.Load(items, icol=> icol.Include(i => i.File));
ctx.ExecuteQuery();
//print file names
foreach (var item in items)
{
Console.WriteLine(item.File.Name);
}
}
关键点: