zoukankan      html  css  js  c++  java
  • SharePoint 2010 用Event Receiver将文件夹自动变成approved状态 (2)

    接上篇,先贴ItemUpdated的代码:

    		base.ItemUpdated(properties);
    
                    if (properties.ListItem.FileSystemObjectType != SPFileSystemObjectType.Folder)
                        return;
    
                    if (properties.ListItem.ModerationInformation.Status == SPModerationStatusType.Approved)
                        return;
    
                    SPSecurity.RunWithElevatedPrivileges(delegate
                    {
                        SPListItem item = properties.ListItem;
                        SPModerationInformation approverInfo = item.ModerationInformation;
                        if (approverInfo != null)
                        {
                            if (approverInfo.Status != SPModerationStatusType.Approved)
                            {
                                approverInfo.Status = SPModerationStatusType.Approved;
                                try
                                {
                                    this.EventFiringEnabled = false;
                                    item.Update();
                                }
                                finally
                                {
                                    this.EventFiringEnabled = false;
                                }
                            }
                        }
                    });


    代码里需要注意的地方,是调用了EventFiringEnabled属性,作用是防止重复触发ItemUpdated事件,其他的很好理解。如果就此将该代码部署到环境中,会发现修改文件夹名称后,文件夹的状态依然是draft状态,调式代码,会发现当运行到item.Update() 这行时,会提示找不到该item!原因是什么呢?

    首先ItemAdded,ItemUpdated从字面上理解,都是过去时,即对象被添加之后和被更新之后才运行该代码,都是异步运行时,当文件夹修改了名称后,它的版本会更新,但是代码里取的还是修改名称之前的版本,这样就会找不到该item,而ItemAdded就没有版本问题。

    解决方法是在Event Receiver 对应的elements.xml里将该事件强制切换成同步事件。

        <Receiver>
          <Name>EventReceiver2ItemUpdated</Name>
          <Type>ItemUpdated</Type>
          <Assembly>$SharePoint.Project.AssemblyFullName$</Assembly>
          <Class>AutoApproveFolder.EventReceiver2.EventReceiver2</Class>
          <SequenceNumber>10000</SequenceNumber>
          <Synchronization>Synchronous</Synchronization>
        </Receiver>


     

  • 相关阅读:
    树状数组
    hibernate hql where语句拼接工具类
    Unit Testing of Spring MVC
    Unit Testing of Spring MVC Controllers1
    查询时间不能超过90天
    实现日期比较
    Criteria查询
    楼房重建 线段树
    [SDOI2009]HH去散步 矩阵乘法
    [SDOI2014]数表 莫比乌斯反演
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3165797.html
Copyright © 2011-2022 走看看