Sharepoint 2010 - 托管客户端对象模型 - 如何访问文档集(文件夹)中的文件

时间:2013-04-02 11:28:58

标签: sharepoint object model client

我一直在网上搜索这个,但没有具体参考MANAGED客户对象模型的答案。

如何迭代存储在文档库下的文档集中的文件? 我有一个名为SAMPLELIST的列表,所有文档集都存储在其中。每个文档集也可以容纳文件。我如何迭代这些文件?

到目前为止我发现的是LIST.ROOTFOLDER.FILES。但是,这将返回列表中的所有文件(引用ROOFOLDER)。

感谢您的帮助。

2 个答案:

答案 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)

如何通过SharePoint CSOM获取文档集的文件

假设以下结构:

/ (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);
   }
}

关键点: