直到现在我们学习了列表项目事件Receiver,现在我们学习一下列表事件Receiver吧。本文章中,无论何时在网站创建新列表,我们需要记录监察项到另一个列表。
Getting ready
创建自定义列表EventReceivers,添加Message栏目。
How to do it...
1. 打开VS,新建事件Receiver项目ListEventReceiver。
2. 选中部署为沙盒解决方案,点击下一步。
3. 确保选中列表事件类型的事件Receiver。选中正在添加列表事件。
4. 点击完成。
5. 添加必要的代码:
public override void ListAdding(SPListEventProperties properties)
{
AddMessage(ref properties, "Adding List");
base.ListAdding(properties);
}
private void AddMessage(ref SPListEventProperties properties, string sMessage)
{
using (SPWeb web = properties.Web as SPWeb)
{
SPList list = web.Lists["EventReceivers"];
SPListItem li = list.AddItem();
li["Title"] = properties.ListTitle;
li["Message"] = sMessage + "-" + properties.ListId;
li.Update();
li = null;
list = null;
}
}
6. F5生成并执行解决方案,或者调试--开始调试。
7. 添加新的自定义列表TestList。你应该可以看到EventReceivers列表中新项。
How it works...
它和列表项事件Receiver工作方式相同,除了列表事件Receiver有基类SPListEventReceiver。你可以比较elements.xml文件。唯一不同的是它没有ListTemplateId属性。因为它应用于网站所有列表,所以也说得通。本例事件Receiver在网站级别使用。意味着在部署的站点创建新列表,就会触发事件。
There's more...
如果你注意到base.ItemAdding方法有时首先调用,有时最后调用。规则很简单。如果你将取消事件,最后调用;否则在前面调用。对于同步事件ListAdding或ListItemAdding,我们会做数据验证,然后取消事件,所以在后面调用。