1)启动Event Handler支持。
首先打开SharePoint 3.0 Central Administration,打开Application Managerment治理页面,点击Web application settings,则进入Web Application Settings页面。在Web Application Settings页面中,找到Event Handlers项,并将其设置为On,然后单击Ok按钮保存设置。
2)EventHandler的实现:
a)在VS中创建类库里面的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using System.IO;
namespace Czh.EventHandler.Demo
{
public class EventHandlerDemo:SPItemEventReceiver
{
string url = "http://ds01:6020/";
public override void ItemAdded(SPItemEventProperties properties)
{
SPListItem sPListItem = properties.ListItem;//获取添加信息
//string title = sPListItem["Title"].ToString();
string title = sPListItem.Title;
string content=sPListItem["Content"].ToString();
using (SPWeb sPWeb = new SPSite(url).OpenWeb())
{
sPWeb.AllowUnsafeUpdates = true;
SPList sPList = sPWeb.Lists["EventHandlerBack"];//获取备份列表
SPListItem item = sPList.Items.Add();
item["Title"] = title;
item["Content"] = content;
try
{
item.Update();
}
catch(Exception ex)
{
WriteLog(ex.ToString());
}
}
}
public override void ItemDeleting(SPItemEventProperties properties)
{
SPListItem sPListItem = properties.ListItem;
int id = sPListItem.ID;
using (SPWeb sPWeb = new SPSite(url).OpenWeb())
{
sPWeb.AllowUnsafeUpdates = true;
SPList sPList = sPWeb.Lists["EventHandlerBack"];
sPList.Items.DeleteItemById(id);
try
{
sPList.Update();
}
catch (Exception ex)
{
WriteLog(ex.ToString());
}
}
}
public override void ItemUpdated(SPItemEventProperties properties)
{
SPListItem sPListItem = properties.ListItem;
int id = sPListItem.ID;
string title=sPListItem.Title;
string content=sPListItem["Content"].ToString();
using (SPWeb sPWeb = new SPSite(url).OpenWeb())
{
sPWeb.AllowUnsafeUpdates = true;
SPList sPList = sPWeb.Lists["EventHandlerBack"];
SPListItem item = sPList.GetItemById(id);
item["Title"] = title;
item["Content"] = content;
try
{
item.Update();
}
catch (Exception ex)
{
WriteLog(ex.ToString());
}
}
}
private void WriteLog(string message)
{
string directoryPath = @"c:/logs";//目录路径
string fileName = "EventHandlerDemo.log";//日志名
string path = directoryPath + "//" + fileName;//日志路径
//判断是否存在目录
if (!Directory.Exists(directoryPath))//不存在目录
{
Directory.CreateDirectory(directoryPath);//创建目录
}
StreamWriter sw = new StreamWriter(path, true);
sw.WriteLine("{0} {1}", System.DateTime.Now, message);
sw.Close();
}
}
}
运行类库生成dll文件用软件reflector生成assName如Czh.EventHandler.Demo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ff95989902165f67,同时将dll文件放到C:/WINDOWS/assembly中。
b)部署EventHandler:
新建控制台应用程序代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
namespace Deploy
{
class Program
{
static void Main(string[] args)
{
try
{
string url = "http://ds01:6020/";
using (SPWeb sPWeb = new SPSite(url).OpenWeb())
{
sPWeb.AllowUnsafeUpdates = true;
SPList sPList = sPWeb.Lists["EventHandlerDemo"];
string assName = "Czh.EventHandler.Demo, Version=1.0.0.0, Culture=neutral, PublicKeyToken=ff95989902165f67";
string className = "Czh.EventHandler.Demo.EventHandlerDemo";
sPList.EventReceivers.Add(SPEventReceiverType.ItemAdded, assName, className);
sPList.EventReceivers.Add(SPEventReceiverType.ItemDeleting, assName, className);
sPList.EventReceivers.Add(SPEventReceiverType.ItemUpdated, assName, className);
}
Console.WriteLine("部署成功!");
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
Console.ReadLine();
}
}
}
}
部署完EventHandler后重启iis(iisreset)。EventHandler部署完成。
c)回收EventHandler
新建控制台应用程序代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
namespace CallBack
{
class Program
{
static void Main(string[] args)
{
string url = "http://ds01:6020/";
using (SPWeb sPWeb = new SPSite(url).OpenWeb())
{
SPList sPList = sPWeb.Lists["EventHandlerDemo"];
Console.WriteLine("共有" + sPList.EventReceivers.Count + "个");
if (sPList.EventReceivers.Count >= 1)
{
for (int i = 0; i < sPList.EventReceivers.Count; i++)
{
sPList.EventReceivers[i].Delete();
}
Console.WriteLine("回收成功!");
Console.ReadLine();
}
else
{
Console.WriteLine("已经为空!");
Console.ReadLine();
}
}
}
}
}
回收完EventHandler后重启iis(iisreset)。EventHandler回收完成。