代码改变世界

sharepoint事件处理器EventHandler注册

2012-04-24 15:01  李帅营  阅读(255)  评论(0编辑  收藏  举报

sharepoint中事件接收器的注册可以用feature进行注册,也可以使用代码进行注册;

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using TopWin.DongFengYL.JasonP.EventReceivers;//添加事件处理器所在程序集的引用

namespace ConsoleRegisterReceiver
{
    class Program
    {
        static void Main(string[] args)
        {

            using (SPSite site = new SPSite("http://192.168.9.211/sites/DocCenter"))//网站集地址
            {
                using (SPWeb web = site.OpenWeb())
                {
                    string[] listNames = { "公司规章制度", "公用单据", "本部门资料", "资料共享区", "经验资料" };//要进行注册的列表或者文档库名称

                    foreach (string name in listNames)
                    {
                        Bind(web, name);
                    }
                }
            }
            Console.WriteLine("绑定完毕");
            Console.Read();
        }

        private static void Bind(SPWeb web, string listName)
        {
            Type receiverType = typeof(DocLibEventReceiver);//DocLibEventReceiver为定义事件处理器的类

            SPList list = web.Lists[listName];
            SPEventReceiverDefinitionCollection receivers = list.EventReceivers;

            foreach (SPEventReceiverDefinition def in receivers)
            {
                if (def.Assembly == receiverType.Assembly.FullName)
                {
                    def.Delete();
                    break;
                }
            }

            SPEventReceiverDefinition receiver = receivers.Add();
            receiver.Assembly = receiverType.Assembly.FullName;
            receiver.Class = "TopWin.DongFengYL.JasonP.EventReceivers.DocLibEventReceiver";//此处要用事件处理器的程序集名+所在的类名
            receiver.Type = SPEventReceiverType.ItemAdding;
            receiver.SequenceNumber = 10001;
            receiver.Update();
        }
    }
}

 

备注:1、注册前首先把事件处理器所在的程序集注册到gac中,即:C:\Windows\assembly中,

   2、事件处理器所在的程序集要强签名

   3、添加引用的程序集版本要和放到gac中的版本相同