2010-05-27 2 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 Query дает мне все папки в списке:

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

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

+0

Небольшая коррекция вашего запроса CAML, если вы проверите значения для «FSObjType», вы увидите, что 0 возвращает все файлы, но 1 вернет все папки https://msdn.microsoft.com/ru -us/библиотека/microsoft.sharepoint.client.filesystemobjecttype.aspx – Mathieu

ответ

3

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

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

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

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

Crea ting a 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(); 
} 

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

Удачи вам!

Смежные вопросы