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/

  • 相关阅读:
    pandas基础
    博客迁移公告!
    JavaScript: 认识 Object、原型、原型链与继承。
    微信小程序学习
    WEB安全
    webpack
    《JavaScript 高级程序设计》第四章:变量、作用域和内存问题
    NodeJS学习:搭建私有NPM
    《JavaScript 高级程序设计》第三章:基本概念
    Promise 基础学习
  • 原文地址:https://www.cnblogs.com/ycc/p/836832.html
Copyright © 2011-2022 走看看