2010-05-27 39 views
1

我有一个列表,其中有一个两级层次的文件夹。类似这样的:如何从CAML查询中获取文件夹?

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> 

我如何可以添加其他条件,上述查询,这样我可以得到一个特定的文件夹时,我知道确切的文件夹名称?

+0

对您的CAML查询进行小修改,如果您检查“FSObjType”的值,您将看到0返回所有文件,但1将返回所有文件夹 https://msdn.microsoft.com/zh-cn/ -us /库/ microsoft.sharepoint.client.filesystemobjecttype.aspx – Mathieu 2018-01-18 12:11:17

回答

3

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

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

以下两个链接可能是有用的:

从第二个链接一个片段:

克雷亚创建SPFolder中的SPListItem 使用OM

使用 WSS 3.0对象模型创建文件夹(SPFolder)非常简单。 在 列表中创建列表项(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(); 
} 

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

祝你好运!

相关问题