4.2. Обработчики событий

Обработчики событий

Обработчики событий позволяют выполнять собственный код, как до возникновения события так и после того, как события произойдет. Для данного руководства необходима установка Umbraco со стартовым набором Fanoe.

Подписывание на событие

Необходимо добавить строку текста в лог, когда публикуется документ.
Начнем с того, что добавим новый класс в проект. Назовем его LogWhenPublished. Для обработки событий необходимо подключить сервис using Umbraco.Core; , а затем создать класс обработчика, который будет наследоваться от обработчика событий приложения  : ApplicationEventHandler
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Umbraco.Core;

public class LogWhenPublished : ApplicationEventHandler
{
    ///Здесь мы будем подписываться на событие
}
В первую очередь в нашем классе LogWhenPublished необходимо переопределить метод ApplicationStarted а затем подписаться на событие Umbraco.Core.Services.Contentservice.Published.
protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
{
    Umbraco.Core.Services.ContentService.Published += ContentService_Published;
} 
Для обработки события необходимо добавить соответствующий метод:
void ContentService_Published(Umbraco.Core.Publishing.IPublishingStrategy sender, Umbraco.Core.Events.PublishEventArgs<Umbraco.Core.Models.IContent> e)
{
    // Здесь будет находиться код обработчика
}
Добавить сообщение в лог, когда событие произойдет. Для этого будем использовать LogHelper, поэтому добавим using Umbraco.Core.Logging; :
LogHelper.Info(typeof(LogWhenPublished), "Something has been published");
Окончательно класс будет выглядеть следующим образом:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Umbraco.Core;
using Umbraco.Core.Logging;

public class LogWhenPublished : ApplicationEventHandler
{
    protected override void ApplicationStarted(UmbracoApplicationBase umbracoApplication, ApplicationContext applicationContext)
    {
        Umbraco.Core.Services.ContentService.Published += ContentService_Published;
    }

    void ContentService_Published(Umbraco.Core.Publishing.IPublishingStrategy sender, Umbraco.Core.Events.PublishEventArgs<Umbraco.Core.Models.IContent> e)
    {
        // LogHelper запишет в tracelog.txt
        LogHelper.Info(typeof(LogWhenPublished), "Something has been published");
    }
}
Перейдите в бэк-офис и опубликуйте какой-нибудь контент. Далее откройте tracelog.txt, который располагается в App-Data/Logs/, перейдите в конец документа, и и далее вы увидите, что сообщение попало в лог.
Message in tracelog.txt

До события и после

Выше было продемонстрировано, как выполняется код, когда публикуется какой-то контент. Код выполняется уже после того, как контент был опубликован, потому что используется событие Published. Если необходимо выполнять обработчик до возникновения события, то необходимо использовать Publishing. Точно также можно использовать и другие события Saving : SavedCopying : Copied и так далее.