zoukankan      html  css  js  c++  java
  • MOSS的ItemUpdated执行了10次,您碰到了吗?

    在网上看到一篇文章说跟踪ItemUpdated,执行了10次,特验证一次,结果真的是执行10次。代码如下:

     1public class ListEventTest : SPItemEventReceiver
     2    {
     3        public override void ItemUpdated(SPItemEventProperties properties)
     4        {
     5            try
     6            {
     7                //using (SPWeb web = properties.OpenWeb())
     8                //{
     9                //    SPList list = web.Lists["testlist"];
    10                //    SPListItem item = list.GetItemById(properties.ListItemId);
    11                //    item["Title"] = "updated_" + item["Title"].ToString();
    12                //    item.Update();
    13                //    System.Diagnostics.EventLog.WriteEntry("test event", item["Title"].ToString() + "is updated.");
    14                //}
    15                SPListItem item = properties.ListItem;
    16                item["Title"= "updated_" + item["Title"].ToString();
    17                item.Update();
    18                System.Diagnostics.EventLog.WriteEntry("test event", item["Title"].ToString() + "is updated.");
    19            }

    20            catch (Exception ex)
    21            {
    22                System.Diagnostics.EventLog.WriteEntry("test event", ex.ToString());
    23            }

    24        }

    25    }


    我以为是不同代码调用造成的,就像SPSecurity.RunWithElevatedPrivileges,结果使用注释掉和没有注释掉的代码实验,结果是一样的。
    更新一次item系统事件记录了10次。
    更新前样子:



    更新后样子:



    恩,就是10次。。。不知道您是否在意过这个地方呢,呵呵。
    我想,是不是SPListItem的Update方法重新引发了ItemUpdated事件导致了死循环,而MOSS又有某种机制,使得这种循环只发生10次就退出。
    当然,这只是我的猜想,没有真凭实据,如果您知道,麻烦您告诉我,谢谢。

    这个问题的解决方法也是很简单,就是使用DisableEventFiring和EnableEventFiring这两个方法,在那篇文章中有说明,下面的留言也有参考URL,代码就象下面这样:

    1SPListItem item = properties.ListItem;
    2item["Title"= "updated_" + item["Title"].ToString();
    3this.DisableEventFiring();
    4    item.Update();
    5this.EnableEventFiring();

    更改代码后,再试,正常。

    相关文章在这里:
    http://www.sharepointsecurity.com/blog/sharepoint/sharepoint-2007-development/sp-event-recievers-firing-10-times-on-purpose/

  • 相关阅读:
    前台加请求头token,后台接收
    MD5加密工具类
    SpringBoot实现请求拦截(@Aspect切面类和自定义拦截器)
    Swagger2添加统一header-token
    idea + groovy + mybatis 自动生成 Dao、mappings 和 实体类
    JAVA算法编程题50题及答案
    Python 1基础语法一(注释、行与缩进、多行语句、空行和代码组)
    ENVI 安装
    Python之GUI编程(Tkinter))
    Python 0(安装及初步使用+学习资源推荐)
  • 原文地址:https://www.cnblogs.com/ycc/p/836832.html
Copyright © 2011-2022 走看看