我在创建一个项目后我正在尝试做一些处理,但处理是两次完成的,因为在我的代码中创建项目后,我正在更新它,因此事件再次被解雇两次:首先是添加元素和我更新时的第二个。 这是代码:

if (Mode == OperationMode.New)
{
    item = ListeActions.AddItem();
    item["Client"] = new SPFieldLookupValue(myClient.ID, myClient["Name"] as string).ToString();
    //the Event Reciever ItemAdded is fired here
}
if (Mode == OperationMode.Edit)
{
    item = ListeActions.GetItemById(ActionItemID);
}
TextField ACObject = (TextField)Page.GetControlById("ACObjectID");
UserField ACAssignedTo = (UserField)Page.GetControlById("ACAssignedToID");
NoteField ACDetails = (NoteField)Page.GetControlById("ACDetailsID");

item["Object"] = ACObject.Value;
item["AssignedTo"] = ACAssignedTo.Value;
item["Details"] = ACDetails.Value;

item.Update(); 
//if we're in the case of adding new item then the event
//reciever ItemAdded is fired here for the second time
//while ItemUpdated is not fired
.

所以我如何停止逐步的第二次火焰导致item.update()但是由于我需要继续申请我的护理,因此保持第一火?

ps:在更新现有ListAeactions.item的情况下,Itemupdated也被解雇了!!

btw:此代码不是以逐项方法编写的,也不是itemupdated方法,实际上它是WebPart开发的用户控件中的代码。

有帮助吗?

解决方案

您可能会将您的活动接收器注册了两次。使用powershell了解。

$site = Get-SPSite http://myportal.com
$web = $site.OpenWeb("/path/to/my/site")
$list = $web.Lists["The List"]
$list.EventReceivers | Select Type, Class | Order Type, Class
.

其他提示

在更新项目之前禁用事件触发。

this.EventFiringEnabled = false;
item.Update();
this.EventFiringEnabled = true;
.

请注意,当Item.update()抛出异常时,这可能会导致问题,离开您的EventFiring ..您可以使用Try / Catch来解决此问题。

希望我可以帮助:)

我可以知道这个特定代码写在哪里吗?它是否在itemupdated()或itemadded()上。这些之间存在差异 二。在ItemAdded()中,才会在itemupdated()中添加新项目()事件接收器时才会触发事件接收器 无论物品如何更新,都会在您更新时更新时会被解雇。我也建议你这样做 以下事情。

在逐步的或itemupdation中,您可以默认找到此代码。

       base.ItemUpdated(properties);
       base.ItemUpdating(properties);
       base.EventFiringEnabled = false;
.

注释这些代码和更新使用以下方法,不要使用

item.update();直接。

而是使用以下方法进行更新。

           base.EventFiringEnabled = false;
           try
           {
               contractlistitem.SystemUpdate(false);
           }
           finally
           {
               base.EventFiringEnabled = true;
           }
.

感谢

为此,

您需要设置功能范围= Web以及需要在Feature.Template.xml中设置范围。

你可以在这里看到解决方案。 http://asharepointsolutions.blogspot.in/2014/10/ sharepoint-event-handler-firing-twice.html

许可以下: CC-BY-SA归因
scroll top