Miałem dzisiaj dość pisania za każdym razem tego samego kodu, więc napisałem sobie coś takiego:

namespace Gutek.SharePoint.Common.Extensions
{
    public static class SPListEx
    {
        public static void Register<T>(this SPList list, params SPEventReceiverType[] receiverTypes)
            where T : SPItemEventReceiver
        {
            if (receiverTypes == null || receiverTypes.Length == 0)
            {
                return;
            }

            Type type = typeof(T);
            string assemblyFullName = type.Assembly.FullName;
            string typeFullName = type.FullName;

            foreach (var receiverType in receiverTypes)
            {
                list.EventReceivers.Add(receiverType, assemblyFullName, typeFullName);
            }

            list.Update();
        }

        public static void Unregister<T>(this SPList list, params SPEventReceiverType[] receiverTypes)
            where T : SPItemEventReceiver
        {
            if (receiverTypes == null || receiverTypes.Length == 0)
            {
                return;
            }

            var toBeDeleted = new List<Guid>();

            Type type = typeof(T);
            string assemblyFullName = type.Assembly.FullName;
            string typeFullName = type.FullName;

            foreach (SPEventReceiverDefinition eventReceiverDef in list.EventReceivers)
            {
                foreach (var receiverType in receiverTypes)
                {
                    if (eventReceiverDef.Type == receiverType)
                    {
                        if (eventReceiverDef.Assembly == assemblyFullName && eventReceiverDef.Name == typeFullName)
                            toBeDeleted.Add(eventReceiverDef.Id);
                    }
                }
            }

            foreach (var id in toBeDeleted)
            {
                list.EventReceivers[id].Delete();
            }

            list.Update();
        }
    }
}

Kożystam z params ze względu na to iż lubie podawać rzeczy po przecinku a nie pisać new [] {1,2}.

Teraz robimy tak i kłopot z głowy :)

SPContext.Current.List.Register<MyItemEventReceiver>(SPEventReceiverType.ItemAdded,
                                                     SPEventReceiverType.ItemUpdated);

2 KOMENTARZE

Comments are closed.