Электрический приемник элемент добавлен дважды
-
10-12-2019 - |
Вопрос
Я пытаюсь сделать ваше достопримечательность после создания элемента, но обращение выполняется дважды, потому что в моем коде после создания элемента я обновляю его, поэтому прицел события уволен дважды: сначала, когда я добавляю элементА второй, когда я его обновил. Вот код:
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
.
Так как я могу остановить второй огонь itemAddeddend, что приведет к тому, что oot.update (), но держите первый огонь, поскольку мне нужно продолжать применять мое обращение?
PS: В случае обновления существующих вкладов. Item The Iteupdated уволен дважды !!
BTW: Этот код не записан в ThetAdded Method ни в методе ITEUDUPDATED, на самом деле это код в управлении пользователем для разработки веб-панели.
Решение
У вас, вероятно, зарегистрированы ваш приемник событий дважды.Используйте 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 () бросает исключение, оставляя свой EventFiry Off .. Вы можете использовать попытку / ловить, чтобы решить это.
Надеюсь, я могу помочь :)
Могу ли я знать, где этот конкретный код написан?это на itemupdated () или itemAdded ().Существует разница между этим два.В itemAdded () приемник событий будет уволен только тогда, когда добавляется новый элемент в ItemUpdated () приемник событий Будет уволен всякий раз, когда товар обновляется, независимо от того, как время, когда вы обновляете.Также я предлагаю вам сделать следующие вещи.
либо в itemAdded или itemupdated Вы можете найти этот код доступен по умолчанию.
base.ItemUpdated(properties);
base.ItemUpdating(properties);
base.EventFiringEnabled = false;
.
Комментировать этот код и обновление Используйте следующий метод и не используйте
item.update ();напрямую.
вместо этого используйте следующий метод обновления.
base.EventFiringEnabled = false;
try
{
contractlistitem.SystemUpdate(false);
}
finally
{
base.EventFiringEnabled = true;
}
.
Спасибо
для этого,
Вам нужно установить объем функции= Web, а также вам нужно установить объем в функции. Template.xml также.
Вы можете увидеть решение здесь. http://asharepointsolutions.blogspot.in/2014/10/sharepoint-event-handler-firing-twice.html