记录:MOSS:EventHandler部署和使用
2009-07-24 16:36
351 查看
1.利用 Feature来实现 EventHandler与 SPList的绑定:
public class FeatureReceiver : SPFeatureReceiver {
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
try
{
using (SPSite site = new SPSite(((SPSite)properties.Feature.Parent).Url))
{
SPList list = site.RootWeb.Lists[TestListName.TestA];
// 将 list.EventReceiver.Class==ListEventHandler的事件删除
DeleteEventHandler(list, typeof(ListEventHandler));
// 重新添加:事件类型、事件程序集名、事件程序集下的事件类名
list.EventReceivers.Add(SPEventReceiverType.ItemAdded, typeof(FeatureReceiver).Assembly.FullName, typeof(TestEventHandler2.ListEventHandler).FullName);
list.EventReceivers.Add(SPEventReceiverType.ItemUpdated, typeof(FeatureReceiver).Assembly.FullName, typeof(TestEventHandler2.ListEventHandler).FullName);
list.EventReceivers.Add(SPEventReceiverType.ItemDeleting, typeof(FeatureReceiver).Assembly.FullName, typeof(TestEventHandler2.ListEventHandler).FullName);
}
}
catch (Exception ex)
{
}
}
public override void FeatureDeactivating(SPFeatureReceiverProperties properties) {
/* no op */
}
public override void FeatureInstalled(SPFeatureReceiverProperties properties) {
/* no op */
}
public override void FeatureUninstalling(SPFeatureReceiverProperties properties) {
/* no op */
}
/// <summary>
/// 删除指定SPList的事件句柄
/// </summary>
/// <param name="list">列表</param>
/// <param name="type">事件类的类型</param>
private void DeleteEventHandler(SPList list, Type type)
{
try
{
for (int i = list.EventReceivers.Count; i > 0; i--)
{
SPEventReceiverDefinition receiver = list.EventReceivers[i - 1];
if (receiver.Class.ToLower().Equals(type.FullName.ToLower()))
{
receiver.Delete();
}
}
}
catch (Exception ex)
{
}
}
}
2.事件操作:
public class ListEventHandler:SPItemEventReceiver
{
private static readonly string testA = TestListName.TestA;
private static readonly string testB = TestListName.TestB;
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
}
public override void ItemDeleting(SPItemEventProperties properties)
{
// Prevents events from being raised:阻止其他事件被调用
// 对应的是:EnableEventFiring()
this.DisableEventFiring();
int id = properties.ListItemId;
try
{
using (SPSite site = new SPSite(properties.SiteId))
{
using (SPWeb web = site.OpenWeb())
{
SPListCollection lists = web.Lists;
bool flag = web.AllowUnsafeUpdates;
web.AllowUnsafeUpdates = true;
for (int i = 0; i < lists.Count; i++)
{
if (lists[i].Title.Equals(testB))
{
SPList tempList = lists[i];
for (int j = 0; j < tempList.ItemCount; j++)
{
if (tempList.Items[j].ID.Equals(id))
{
tempList.Items[j].Delete();
tempList.Update();
}
}
}
}
web.AllowUnsafeUpdates = flag;
}
}
}
catch (Exception ex)
{
}
finally
{
}
}
public override void ItemUpdated(SPItemEventProperties properties)
{
base.ItemUpdated(properties);
}
}
常用的EventHandler事件有:
ItemAdding:添加前;
ItemAdded:添加后;
ItemUpdating:更新前;
ItemUpdated:更新后;
ItemDeleting:删除前;
ItemDeleted:删除后;
最常用的是:ItemAdded、ItemUpdating、ItemDeleting;
this.DisableEventFiring();是为了避免调用ItemEventReceiver事件。
可以参照以下资料:http://www.nanmu.net/keli/blog/Lists/Posts/Post.aspx?ID=38
(1).在开发SharePoint的EventHandler也许你会有这样的需求:在ItemUpdated事件中修改当前记录的某个字段的值,这样在修改的时候又会触发ItemUpdated事件,为了避免在此触发ItemUpdated事件,可以用this.DisableEventFiring()方法;
try
{
this.DisableEventFiring();
...
...
Item.Update();
}
finally
{
this.EnableEventFiring();
}
注:
也可以使用 SPItem.SystemUpdate()方法来更改,这样也不会触发ItemUpdated事件;
(2).在 SPItemEventReceiver.ItemUpdating, ItemAdding events:
properties.AfterProperties["Title"] = "the Title changed at " + DateTime.Now.ToString();
这样就可以更改SPItem.Title的内容,且不会触发任何的 ItemEventReceiver事件。
public class FeatureReceiver : SPFeatureReceiver {
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
try
{
using (SPSite site = new SPSite(((SPSite)properties.Feature.Parent).Url))
{
SPList list = site.RootWeb.Lists[TestListName.TestA];
// 将 list.EventReceiver.Class==ListEventHandler的事件删除
DeleteEventHandler(list, typeof(ListEventHandler));
// 重新添加:事件类型、事件程序集名、事件程序集下的事件类名
list.EventReceivers.Add(SPEventReceiverType.ItemAdded, typeof(FeatureReceiver).Assembly.FullName, typeof(TestEventHandler2.ListEventHandler).FullName);
list.EventReceivers.Add(SPEventReceiverType.ItemUpdated, typeof(FeatureReceiver).Assembly.FullName, typeof(TestEventHandler2.ListEventHandler).FullName);
list.EventReceivers.Add(SPEventReceiverType.ItemDeleting, typeof(FeatureReceiver).Assembly.FullName, typeof(TestEventHandler2.ListEventHandler).FullName);
}
}
catch (Exception ex)
{
}
}
public override void FeatureDeactivating(SPFeatureReceiverProperties properties) {
/* no op */
}
public override void FeatureInstalled(SPFeatureReceiverProperties properties) {
/* no op */
}
public override void FeatureUninstalling(SPFeatureReceiverProperties properties) {
/* no op */
}
/// <summary>
/// 删除指定SPList的事件句柄
/// </summary>
/// <param name="list">列表</param>
/// <param name="type">事件类的类型</param>
private void DeleteEventHandler(SPList list, Type type)
{
try
{
for (int i = list.EventReceivers.Count; i > 0; i--)
{
SPEventReceiverDefinition receiver = list.EventReceivers[i - 1];
if (receiver.Class.ToLower().Equals(type.FullName.ToLower()))
{
receiver.Delete();
}
}
}
catch (Exception ex)
{
}
}
}
2.事件操作:
public class ListEventHandler:SPItemEventReceiver
{
private static readonly string testA = TestListName.TestA;
private static readonly string testB = TestListName.TestB;
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
}
public override void ItemDeleting(SPItemEventProperties properties)
{
// Prevents events from being raised:阻止其他事件被调用
// 对应的是:EnableEventFiring()
this.DisableEventFiring();
int id = properties.ListItemId;
try
{
using (SPSite site = new SPSite(properties.SiteId))
{
using (SPWeb web = site.OpenWeb())
{
SPListCollection lists = web.Lists;
bool flag = web.AllowUnsafeUpdates;
web.AllowUnsafeUpdates = true;
for (int i = 0; i < lists.Count; i++)
{
if (lists[i].Title.Equals(testB))
{
SPList tempList = lists[i];
for (int j = 0; j < tempList.ItemCount; j++)
{
if (tempList.Items[j].ID.Equals(id))
{
tempList.Items[j].Delete();
tempList.Update();
}
}
}
}
web.AllowUnsafeUpdates = flag;
}
}
}
catch (Exception ex)
{
}
finally
{
}
}
public override void ItemUpdated(SPItemEventProperties properties)
{
base.ItemUpdated(properties);
}
}
常用的EventHandler事件有:
ItemAdding:添加前;
ItemAdded:添加后;
ItemUpdating:更新前;
ItemUpdated:更新后;
ItemDeleting:删除前;
ItemDeleted:删除后;
最常用的是:ItemAdded、ItemUpdating、ItemDeleting;
this.DisableEventFiring();是为了避免调用ItemEventReceiver事件。
可以参照以下资料:http://www.nanmu.net/keli/blog/Lists/Posts/Post.aspx?ID=38
(1).在开发SharePoint的EventHandler也许你会有这样的需求:在ItemUpdated事件中修改当前记录的某个字段的值,这样在修改的时候又会触发ItemUpdated事件,为了避免在此触发ItemUpdated事件,可以用this.DisableEventFiring()方法;
try
{
this.DisableEventFiring();
...
...
Item.Update();
}
finally
{
this.EnableEventFiring();
}
注:
也可以使用 SPItem.SystemUpdate()方法来更改,这样也不会触发ItemUpdated事件;
(2).在 SPItemEventReceiver.ItemUpdating, ItemAdding events:
properties.AfterProperties["Title"] = "the Title changed at " + DateTime.Now.ToString();
这样就可以更改SPItem.Title的内容,且不会触发任何的 ItemEventReceiver事件。
相关文章推荐
- 使用ICallbackEventHandler接口实现页面无刷新
- 使用xshell远程部署Tomcat简单记录
- Linux下使用rsyslog部署日志服务器 && 记录history并发送到rsyslog服务器
- C# EventHandler and Delegate(委托的使用)
- 使用fuel部署openstack时遇到的问题记录一下
- resin3.10 resin4:多实例部署使用记录。
- 使用ICallBackEventHandler接口,后台使用Response.End问题的解决
- C# EventHandler and Delegate(委托的使用)
- 记录下使用Ambari部署HDP集群的过程
- 使用Exchange 2007部署邮件记录管理
- 分享并记录云服务器上部署Web项目使用公网IP访问的jing
- MOSS Search学习记录(十):MOSS Visual How To使用SharePoint Server 2007搜索对象模型编程创建搜索查询
- Windows使用Node.js自动生成Vue.js模版环境部署步骤-----记录
- C# EventHandler and Delegate(委托的使用)
- VS2010开发和部署Sharepoint EventHandler。
- axios踩坑记录+拦截器使用+vue cli代理跨域proxy+webpack打包部署到服务器
- C# EventHandler and Delegate(委托的使用)
- 使用ICallbackEventHandler接口实现的轻量级下拉框联动
- 关于使用ICallbackEventHandler接口 ,传递中文时的错误
- C# EventHandler and Delegate(委托的使用)