Как получить папку из CAML Query? - PullRequest
1 голос
/ 27 мая 2010

У меня есть список, который имеет двухуровневую иерархию папок. Примерно так:

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 Query выдает все папки в списке:

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

Как добавить еще одно условие к вышеуказанному запросу, чтобы я мог получить определенную папку, когда знаю точное имя папки?

1 Ответ

3 голосов
/ 27 мая 2010

Вы можете попробовать использовать FileLeafRef или FileDirRef в качестве имени. Я не думаю, что это будет работать, так как вам нужен объект SPFolder для добавления элемента списка к нему, а CAML-запросы возвращают SPListItemCollection. Проверьте http://msdn.microsoft.com/en-us/library/bb862315.aspx для списка некоторых имен полей, которые вы можете попробовать.

Поскольку вы знаете имя (и я предполагаю весь путь) папки, почему бы вам не использовать метод SPWeb.GetFolder , чтобы получить папку, а затем добавить элемент, используя этот объект папки

Следующие две ссылки могут быть полезны:

Фрагмент второй ссылки:

Создание SPListItem в SPFolder Использование OM

Создание папки (SPFolder) с помощью Объектная модель 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();
}

Если вы загружаете файл, первая ссылка будет полезна. Если это просто элемент списка, может пригодиться вторая ссылка (и код, который я здесь вставил).

Удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...