zoukankan      html  css  js  c++  java
  • 使用SharePoint EventHandler added与updated 事件遇到的错误与解决方法

    之前遇到这样的功能需求:增加/更新 库中的数据时,同时要更新本身一些column,发现偶尔报错的情况,经过不断查找资料与调试,啃代码,终于找问题与解决方法,现在分享出来。


    Added问题: 例如:添加一个wiki page之后,将其URL访问地址,加到当前Item数据的指定column中,(为了可读取URL,做成<a>的href,点击访问)
    做法:库加EventHandler,监听added事件,获取url,之后将url保存在指定column中。
    偶尔出现错误信息: the document is modified by the SharePoint\System user. 更新信息失败

    Updated问题: 在调试之后发现listItem.Update()和listItem.SystemUpdate()都会递归调用updated事件,形成死循环。

    对这两种情况的解释与解决方法:

    Added问题分析解决:
    SharePoint 默认情况,如adding 事件以同步方式执行,added事件以异步方式执行;还有修改数据时,使用了数据库事件,加lock,提高数据一致性。所以added默认是使用异步方式,而碰到之前的数据的lock没放开,added报错。所以改为同步方式,等待lock释放之后,再执行,就可以解决。

    feature XML 修改如下:

    <Receiver>
    <Name>NoticeEventReceiverItemAdded</Name>
    <Type>ItemAdded</Type>
    <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
    <Class>TianjinProject.NoticeEventReceiver.NoticeEventReceiver</Class>
    <SequenceNumber>10000</SequenceNumber>
    <Synchronization>Synchronous</Synchronization>
    </Receiver>

    Updated问题分析解决:

    循环自调用,注意13与16行代码

     1 public override void ItemUpdated(SPItemEventProperties properties)
     2 {
     3            try
     4                {
     5                    using (SPWeb web = properties.OpenWeb())
     6                    {
     7                         web.AllowUnsafeUpdates = true;
     8                      SPList list = properties.List;
     9                         SPListItem listItem = properties.ListItem;
    10                      string url = list.Fields.GetField("网页地址").InternalName;
    11                      listItem[url]= "http://aa.com";
    12                      //截断事件监听,解决循环自调用,
    13                         this.EventFiringEnabled = false;
    14                         listItem.SystemUpdate();
    15                      //更新完后加回事件
    16                         this.EventFiringEnabled = true;
    17                      web.AllowUnsafeUpdates = true;
    18            }
    19         }
    20 }
  • 相关阅读:
    剑指 Offer 55
    剑指 Offer 55
    剑指 Offer 22. 链表中倒数第k个节点
    剑指 Offer 29. 顺时针打印矩阵
    剑指 Offer 17. 打印从1到最大的n位数
    剑指 Offer 57
    剑指 Offer 59
    B. Han Solo and Lazer Gun 暴力 水
    C. Number of Ways 思维
    C. Destroying Array 并查集/线段树 Intel Code Challenge Elimination Round (Div. 1 + Div. 2, combined)
  • 原文地址:https://www.cnblogs.com/xzwen/p/EventHandler_Added_Updated_Error.html
Copyright © 2011-2022 走看看