2009-03-13 5 views
1

У меня есть следующая структура в моей библиотеке Sitecore медиаУдаление дочерних элементов рекурсивно в Sitecore CMS.NET

изображения/Отдел/суб-отдел/продукта/

И я хочу, чтобы удалить все изображений в коде за один раз. На данный момент у меня есть

Item[] items = database.SelectItems("/sitecore/media library/images/department1//*");    

Sitecore.Data.Engines.DataEngine engine = new Sitecore.Data.Engines.DataEngine(database); 

using (new SecurityDisabler()) 
{ 
    foreach (Item item in items) 
    { 
     engine.DeleteItem(item)) 
    } 
} 

Проблема заключается только в удалении дочерних образов отдела 1 и ничего под ним?

ответ

7

DataEngine - API очень низкого уровня, который нельзя использовать без причины.

Удаление всех подразделов одновременно легко:

Пункт department1 = database.GetItem ("/ Sitecore/медиа-библиотека/изображения/department1"); department1.DeleteChildren();

Это будет оставить элемент отдела1, но все под ним будет удалено.

+0

Благодарим вас за ответ, за какую причину вы используете DataEngine? –

+1

Быстрый ответ никогда, если вы не знаете, что делаете. Более длинный ответ заключается в том, что иногда людям нужна хардкорная настройка или обходной путь, чего нельзя достичь с использованием более высоких уровней публичных API. Но даже тогда, скорее всего, это будет сделано с поддержкой Sitecore, это не то, что мы документируем. –

+2

Могу ли я также предложить использовать расширение Sitecore Rocks для Visual Studio. Вы можете просмотреть свое дерево контента прямо из VS и выполнить «commandy», щелкнув правой кнопкой мыши в любом месте дерева данных и выбрав анализатор запросов. Один из них используется для этого случая: delete from/sitecore/media library/images/department1/* Вы также можете использовать атрибуты Item, такие как [@@ templateid = ""] и т. Д. Желаем удачи , –