Проблема в реализации интерфейса 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 никогда не будет оценен.

Другие вопросы по тегам