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/

  • 相关阅读:
    C#遍历DataSet中数据的几种方法总结
    angularjs作用域
    SQL 语句日期用法及函数
    Sublime Text3 快捷键汇总
    AngularJS 最常用的功能
    C#中如何排除/过滤/清空/删除掉字符串数组中的空字符串
    AngularJS的指令用法
    [WCF REST] Web消息主体风格(Message Body Style)
    泛型
    语法补充
  • 原文地址:https://www.cnblogs.com/ycc/p/836832.html
Copyright © 2011-2022 走看看