Sitecore 6.5 Повторная публикация перезаписанных элементов мультимедиа, настроенных на автоматическую публикацию

Мы используем Sitecore 6.5, и наш сайт настроен на автоматическую публикацию медиафайлов с помощью этого руководства. Все элементы мультимедиа используют настраиваемый рабочий процесс, для которого по умолчанию установлено состояние "Публикация", что является последним шагом рабочего процесса и для которого настроена автоматическая публикация. Он прекрасно работает, и это действительно уменьшило путаницу наших веб-редакторов.

Проблема: если редактор перезаписывает элемент мультимедиа (например, устаревший файл PDF), новый элемент не публикуется автоматически. Веб-редакторы должны помнить, чтобы опубликовать перезаписанный элемент. У нас более 500 редакторов с разным уровнем опыта, поэтому эта проблема часто возникает. Кто-нибудь знает решение для этого?

3 ответа

Если автоматическая публикация всей библиотеки мультимедиа с помощью запланированной задачи или агента отсутствует, вы можете подключиться к Sitecore. item:saved событие (подробнее о событиях здесь).

Когда происходит это событие, вы можете определить, является ли сохраняемый элемент медиа-элементом, используя item.Paths.IsMediaItemи, если это так, программно опубликовать элемент (или) вызвать желаемое состояние рабочего процесса.

Это то, что я придумал, основываясь на ответе Дерека, но так как я новичок в разработке Sitecore, имею ли я это право?

Добавить событие обработки в web.config

<event name="item:saved">
  <handler type="SomeNamespace.MediaOverwritePublisher, SomeAssembly" method="OnItemSaved" />
</event>

И тогда в сборке в нашей пользовательской папке я бы добавил:

namespace SomeNamespace
{
    public class MediaOverwritePublisher
    {
        public void OnItemSaved(Object sender, EventArgs args)
        {
            var item = Event.ExtractParameter(args, 0) as Item;

            using (new SecurityDisabler())
            {
                if (item != null)
                {
                    if (item.Paths.IsMediaItem)
                    {
                        var source = Factory.GetDatabase("master");;
                        var target = Factory.GetDatabase("web");;

                        var options = new PublishOptions(source, target, PublishMode.SingleItem, item.Language, DateTime.Now)
                                          {
                                              RootItem = item,
                                              Deep = true,
                                          };

                        var publisher = new Publisher(options);

                        publisher.PublishAsync();
                    }
                }
            }
        }
    }
}

Это то, что я придумал, основываясь на ответе Дерека.

Я бы посоветовал вам использовать второй предложенный вариант Дерека, чтобы запустить рабочий процесс. Поскольку у вас уже настроен рабочий процесс, вам нужно всего лишь перевести элемент в состояние, в котором есть действие автоматической публикации.

Это должно помочь вам начать: Sitecore: назначить рабочий процесс элементу программно

Если вы все еще хотите опубликовать, я бы посоветовал получить целевую базу данных от sitecore, если у вас больше, чем в "сети" или имя переименовано.

Item itemNotNull = Client.GetItemNotNull("/sitecore/system/publishing targets");
ArrayList arrayList = new ArrayList();
ChildList children = itemNotNull.Children;
foreach (Item item in children)
{
    string name = item["Target database"];
    Database database = Factory.GetDatabase(name, false);
    if (database != null)
     …

}

Другие вопросы по тегам