Sharepoint 2010 Sharepoint 2010事件接收器项已更新两次

Sharepoint 2010 Sharepoint 2010事件接收器项已更新两次,sharepoint-2010,sharepoint-workflow,event-receiver,Sharepoint 2010,Sharepoint Workflow,Event Receiver,我将三个事件附加到我的CustomList: 添加项目 项目更新 项目删除 在一个列表中,我有一个工作流,它正在更改该列表中的列。因此,当我编辑该列表中的条目时,ItemUpdated事件会触发两次。在其他列表中(没有任何工作流),我的接收器工作正常 如何确定工作流是否调用了我的事件接收器 触发事件的工作流与触发事件的用户之间有区别吗?回答第一个问题: 是的,您可以找到您的工作流程。最简单的方法是使用SharePointManager 2010和 导航到您所在的网站集 列表->[您的列表]-

我将三个事件附加到我的CustomList:

  • 添加项目
  • 项目更新
  • 项目删除
在一个列表中,我有一个工作流,它正在更改该列表中的列。因此,当我编辑该列表中的条目时,ItemUpdated事件会触发两次。在其他列表中(没有任何工作流),我的接收器工作正常

如何确定工作流是否调用了我的事件接收器


触发事件的工作流与触发事件的用户之间有区别吗?

回答第一个问题:
是的,您可以找到您的工作流程。最简单的方法是使用SharePointManager 2010和

  • 导航到您所在的网站集
  • 列表->[您的列表]->事件接收器
  • 检查每个事件接收器的属性并删除触发两次的事件接收器
  • 我不知道我是否正确地理解了你的第二个问题,但下面是:
    工作流可以由用户手动启动,也可以在列表项不可用时自动启动

    • 增加
    • 更新或
    • 删除

    除此之外,没有太大区别。

    您可以将隐藏字段添加到列表中,该列表始终由工作流设置(并且仅由工作流设置)。然后您将看到工作流是否调用了事件接收器

    您可以在工作流项目中创建HandleEventFiling类,并在工作流更新之前和之后使用DisableAllEventFiling和EnableAllEventFiling

    public class HandleEventFiring : SPItemEventReceiver
    {
    
      public void DisableAllEventFiring()
      {
       this.DisableEventFiring();
      }
    
     public void EnableAllEventFiring()
     {
      this.EnableEventFiring();
     }
    
    }
    

    问题不是如何查找我的工作流,问题是“如何查找称为我的事件接收器的工作流?”示例:用户编辑一个项目,然后工作流编辑同一个项目,因为用户编辑了该项目。(困惑?!)-->因此事件接收器被调用了2次。(我的工作流总是在编辑项目时启动)只需在浏览器中打开列表项目,单击工作流按钮并查看工作流历史记录。我们应该看看发生了什么。但是你也可以使用我回答中的信息来添加评论或查看工作流。隐藏字段将是一个很好的解决方法。HandleEventFireing将是一个问题,因为我没有工作流的项目。工作流是使用Sharepoint Designer 2010创建的…然后隐藏字段就是解决方案