如何从CAML Query获取文件夹?

时间:2010-05-27 16:14:59

标签: sharepoint caml

我有一个List,它有两级文件夹层次结构。像这样:

List
    Folder_1
       SubFolder_1
              Item 1_1_1
              Item 1_1_2
       SubFolder_2
              Item 1_2_1
              Item 1_2_2
              Item 1_2_3
    Folder_2
       SubFolder_1
              Item 2_1_1
              Item 2_1_2
              Item 2_1_3
       SubFolder_2
              Item 2_2_1
              Item 2_2_2

我想根据某些条件将列表项添加到文件夹中。我不想遍历所有文件夹,因为文件夹的数量更多。所以,我想运行一个CAML查询来获取文件夹。

CAML查询下面给出了列表中的所有文件夹:

<Where>
    <Eq>
        <FieldRef Name='FSObjType' />
        <Value Type='int'>0</Value>
    </Eq>
</Where>

如何在上述查询中添加其他条件,以便在知道确切的文件夹名称后可以获取特定文件夹?

1 个答案:

答案 0 :(得分:3)

您可以尝试使用FileLeafRef或FileDirRef作为名称。但是,我认为这不会起作用,因为您需要一个SPFolder对象来向其添加列表项,并且CAML查询返回SPListItemCollection。查看http://msdn.microsoft.com/en-us/library/bb862315.aspx以获取您可以尝试的一些字段名列表。

既然您知道文件夹的名称(我假设整个路径),为什么不使用SPWeb.GetFolder方法获取文件夹,然后使用该文件夹对象添加项目?

以下两个链接可能很有用:

第二个链接的摘录:

  

在SPFolder中创建SPListItem   使用OM

     

使用创建文件夹(SPFolder)   WSS 3.0对象模型很简单。   在a中创建列表项(SPListItem)   列表也很简单。我花了   一段时间和一些电子邮件   最后在一个列表中创建一个列表项   现有文件夹。所以这是代码   为你节省一些时间。

SPSite site = new SPSite("http://[ServerName/sitename]"); 
SPWeb web = site.OpenWeb(); 
SPList list = web.Lists["Tasks"]; 

SPFolder f = web.GetFolder("http://[ServerName/sitename]/Lists/Tasks/Test" );
if(f.Exists)
{
   SPListItemCollection itemColl = list.Items;

   SPListItem item = itemColl.Add(f.ServerRelativeUrl, 
                                  SPFileSystemObjectType.File,
                                  null);

   item["Title"] = "Added from OM";
   item.Update();
}

如果您要上传文件,第一个链接将非常有用。如果它只是一个普通的列表项,那么第二个链接(以及我在这里粘贴的代码)可能会有用。

祝你好运!