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/

  • 相关阅读:
    selenium+python自动化测试--读取配置文件(.ini)
    http请求体与响应体参数说明
    selenium+python自动化测试--参数化上传文件
    selenium+python自动化测试--中文使用文档
    selenium+python自动化测试--隐藏元素
    selenium+python自动化测试--读取excel数据
    读取csv文件(含中文)报错解决方法
    函数(一)
    基础知识点
    基本数据类型(一)
  • 原文地址:https://www.cnblogs.com/ycc/p/836832.html
Copyright © 2011-2022 走看看