Я понял, как установить пакет с помощью кода программной части (учитывая, что у меня есть zip-файл). Насколько я понимаю, он устанавливает только на главную БД. Как мне затем перенести установленные элементы в веб-базу данных? Cna Я устанавливаю пакет на веб-БД? Есть ли способ получить элементы в процессе установки, а затем как-то их опубликовать? Как лучше всего этого добиться?
Установите пакет sitecore через код для всех целей
Ответы (3)
Если вы не знаете точный корневой элемент того, где вы установили элементы в мастере, лучше всего опубликовать все дерево через C # от master
до web
Раздел 2.2.2 Руководства Content API Cookbook (ссылка в формате PDF) есть этот фрагмент того, как это сделать:
var master = Sitecore.Configuration.Factory.GetDatabase("master");
var target = Sitecore.Configuration.Factory.GetDatabase("web");
Sitecore.Data.Database[] targetDatabases = { target };
var languages = master.Languages;
Sitecore.Publishing.PublishManager.PublishIncremental(master, targetDatabases, languages);
При создании пакета вы выбираете элементы из определенных баз данных. По умолчанию это мастер, но вы также можете выбрать их из ядра и из Интернета.
Элементы всегда будут устанавливаться в той же базе данных, откуда они были.
Вероятно, вы могли бы попробовать такой подход. Поскольку вы уже устанавливаете пакет из программной части, вы можете получить список измененных элементов с момента начала установки пакета и опубликовать их.
Item rootItem = Sitecore.Context.Database.GetItem(Sitecore.Context.Site.RootPath);
List<Item> modifiedItemList = rootItem.Axes.GetDescendants().
Where(item => item.Statistics.Updated >= installDateTime
|| item.Statistics.Created >= installDateTime).ToList();
// add te items in the list to the publishing queue
Это решение немного грязное, но должно решить вашу проблему.