【问题标题】:How to get a folder from CAML Query?如何从 CAML 查询中获取文件夹?
【发布时间】:2010-05-28 00:50:45
【问题描述】:

我有一个包含两级文件夹层次结构的列表。像这样的:

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>

如何在上述查询中添加另一个条件,以便在知道确切文件夹名称的情况下获取特定文件夹?

【问题讨论】:

  • 对您的 CAML 查询进行小修正,如果您检查“FSObjType”的值,您会看到 0 返回所有文件,但 1 将返回所有文件夹 msdn.microsoft.com/en-us/library/…

标签: sharepoint caml


【解决方案1】:

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

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

以下两个链接可能有用:

来自第二个链接的sn-p:

在 SPFolder 中创建 SPListItem 使用 OM

使用 WSS 3.0 对象模型很简单。 在一个列表中创建一个列表项 (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();
}

如果您要上传文件,第一个链接会很有用。如果它只是一个简单的列表项,那么第二个链接(以及我在此处粘贴的代码)可能会有用。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-07
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-18
    相关资源
    最近更新 更多