イベント受信機アイテムが2回起動されました
-
10-12-2019 - |
質問
アイテムを作成した後にいくつかの処置をしようとしていますが、アイテムを作成した後のコードではテレメントが2回行われています。そして私がそれを更新したときに2番目の。 これがコードです:
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:既存のListeActionsを更新する場合は、ItemUpdatedが2回発生しています!!
BTW:このコードはitemAddedメソッドでもItemUpdatedメソッドでも書かれていません。実際には、WebPart開発のためのユーザーコントロールのコードです。
解決
あなたはおそらくあなたのイベント受信者が2回登録されています。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 Offを離れたときに問題が発生する可能性がある場合は、これを解決するためにTry / Catchを使用できます。
私が助けることができることを願っています:)
この特定のコードが書かれたのか知っていますか?ItemUpdated()またはitemAdded()上のものです。これらの間には違いがあります 二。itemAdded()では、イベント受信者はItemUpdated()Event Receiverに新しいアイテムが追加された場合にのみ起動されます。 アイテムが更新されたときにどのようにしてもかまいいであればいつでも更新されるたびに解雇されます。また、やることをお勧めします 以下のこと。
ItemAddedまたはItemUpdatedのどちらかで、デフォルトで利用可能なこのコードを見つけることができます。
base.ItemUpdated(properties);
base.ItemUpdating(properties);
base.EventFiringEnabled = false;
.
これらのコードと更新のために、次の方法を使用し、を使用しないでください。
item.update();直接
代わりにアップデートする方法を使用してください。
base.EventFiringEnabled = false;
try
{
contractlistitem.SystemUpdate(false);
}
finally
{
base.EventFiringEnabled = true;
}
.
ありがとう
これには
Feature= WebおよびWebの範囲を設定する必要があります。
ここで解決策を見ることができます。 http://asharepointsolutions.blogspot.in/2014/10./sharePoint-event-handler-firing-twice.html