关于sharepoint 中ItemAdding事件的取消

jingqianbao123 2010-01-06 05:29:00
我现在写了一个 SPItemEventReceiver里面重写了一个ItemAdding,我希望当我判断符合了一定的条件话就不让他增加了,并且报出错误的原因。

我现在是模仿ItemDeleting里面写的,貌似没什么作用.

public override void ItemAdding(SPItemEventProperties properties)
{
if(XXXX)
{
properties.ErrorMessage = "此时间段内已被确定使用!";
properties.Cancel = true;
}
}

如果像工作流那样直接删除的话感觉不是太好,我希望报出那个错误信息。不知道可有什么方法。
...全文
212 7 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xllyjj 2010-02-21
  • 打赏
  • 举报
回复
最近有用到这个方面的。
使用ItemAdding的时候,properties的ListItem是null,所以如果按照正常的去使用listitem就会出异常,后面的代码不执行,就看不到任何结果了。这就是为什么上面的同学加了try catch的原因吧。在不使用properties的ListItem的前提下和其他的事件就没太大区别了。
使用ItemAdded的时候,properties的ListItem就不再是null了,尽管使用,但是这个时候properties.Cancel = true;
properties.ErrorMessage = ex.Message;
这两句就没有任何的意义了,不如干脆执行:properties.ListItem.Delete();其实效果差不多就是没有提示,只要不合要求的一新建就被删。

另外授人以鱼不如授人以渔:其实出现这些问题的时候给大家提供一个解决问题的方法:
1.打开你已经添加事件的列表所在页面(必须的操作,不然第三步时就没有相应的w3wp.exe进程)
2.使用vs2008打开你编写的事件类,在需要的地方断点。
3.在vs2008中菜单栏有工具项,工具项的第一个选项就是附加进程,点开。
4.在附加到那一栏选自动确定。。。的那个(如果你想调试工作流就选workflow),双击w3wp.exe这个。(如果不止一个w3wp.exe时,关闭已经打开的所有sharepoint页面,再直接使用命令行iisreset,再从第一步执行)
5.在页面中,列表中新建项开始调试(系统根据具体使用的事件来决定何时激活调试)如果是用的ItemAdding,那么新建项点击确定后就开始调试了。
6.接下来就简单了,如果遇到要修改的地方直接修改事件类,然后重新丢GAC中,重启下iis继续测试。
time_is_life 2010-01-07
  • 打赏
  • 举报
回复
public override void ItemAdding(SPItemEventProperties properties)
{
try
{
// DO SOMETHING
}
catch (Exception ex)
{
properties.Cancel = true;
properties.ErrorMessage = ex.Message;
// LOG ERROR
}

base.ItemAdding(properties);
}
HugoWong 2010-01-07
  • 打赏
  • 举报
回复
public override void ItemAdding(SPItemEventProperties properties)
{
try
{
// your method
base.ItemAdding(properties);
}
catch (Exception ex)
{
properties.Cancel = true;
properties.ErrorMessage = ex.Message;
}
}
HugoWong 2010-01-07
  • 打赏
  • 举报
回复
ItemAdding的cancel肯定是可以的,SP2下,注意在CANCEL前加上base.ItemAdding(properties);
jingqianbao123 2010-01-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 forever_kingdom 的回复:]
如果不是部署的问题,试试
properties.Cancel = true;
properties.ErrorMessage = "此时间段内已被确定使用!";
       
将那两行代码调换一下顺序,一般情况下都是先Cancel,然后给出具体的error message
[/Quote]

ItemDeleting中可以对要删除的动作进行禁止,貌似ItemAdding不可以,不起任何作用。
  • 打赏
  • 举报
回复
如果不是部署的问题,试试
properties.Cancel = true;
properties.ErrorMessage = "此时间段内已被确定使用!";

将那两行代码调换一下顺序,一般情况下都是先Cancel,然后给出具体的error message
  • 打赏
  • 举报
回复
然后将你的dll添加到GAC中,然后需要使用程序添加到某个列表或文档库中,或者使用Feature部署到某种列表或文档库上,才能生效,查看一下是否EventHandler没有部署成功啊
相关推荐
发帖
SharePoint

3239

社区成员

企业开发 SharePoint
社区管理员
  • SharePoint社区
  • 霖雨
加入社区
帖子事件
创建了帖子
2010-01-06 05:29
社区公告
暂无公告