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

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

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


person user3716246    schedule 21.01.2015    source источник


Ответы (3)


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

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

person Derek Hunziker    schedule 22.01.2015
comment
Спасибо, Дерек. Это указало мне правильное направление. У меня есть потенциальный ответ, но я еще не проверял его. - person user3716246; 22.01.2015

Это то, что я придумал на основе ответа Дерека, но, поскольку я новичок в разработке 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();
                    }
                }
            }
        }
    }
}
person user3716246    schedule 22.01.2015

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

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

Это должно помочь вам начать работу: 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)
     …

}

person sitecoredou    schedule 23.01.2015