Проблема в реализации интерфейса IAlertUpdateHandler
Я реализовал IAlertUpdateHandler
интерфейс в классе и использовать его для обработки создания и обновления оповещений. Код запускается, но он входит в бесконечный цикл, вызывая себя снова и снова.
На самом деле я хочу, чтобы подавить уведомление по электронной почте, поэтому я звоню a.Update(false);
но это снова вызывает PreUpdate
или же PostUpdate
метод и естьStackOverFlowException
:(
I've tried returning true/false from both the methods but nothing is helping.
2 ответа
1
Я знаю, что это может быть немного поздно для этого, но я подумал, что в любом случае, чтобы помочь следующему.
Я нашел решение / взломать для этой проблемы.
Я полагаю, что когда оповещение создается из пользовательского интерфейса, система запускает SPAlert.update(), поэтому я придумал сделать аналогичное, но игнорировать обновление, вызванное из пользовательского интерфейса, чтобы добавить добавленное свойство в SPAlert имущественная сумка.
public bool PreUpdate(SPAlert a, SPWeb web, bool newAlert, string properties)
{
if (CHECK_IF_SUPPRESSING_EMAIL && !a.Properties.ContainsKey("CustomUpdate"))
{
//add a property to identify this update
a.Properties.Add("CustomUpdate", ""); //can be called anything :)
a.Update(false);
//return false to ignore the update sent by the UI
return false;
}
else
{
//no changes here proceed with custom behaviour
return true;
}
}
Я проверил, и, кажется, сделать трюк надеюсь, что это кому-то помогает:)
Согласно документации, вы должны просто вернуть true или false. Попробуйте закомментировать вызов Update и просто верните либо true, либо false. Если вы вызовете Update, вы просто войдете в рекурсивный цикл, и ваш оператор return никогда не будет оценен.