Проблема в реализации интерфейса IAlertUpdateHandler - PullRequest
0 голосов
/ 07 апреля 2010

Я реализовал IAlertUpdateHandler интерфейс в классе и использовал его для обработки создания и обновления оповещений. Код запускается, но он входит в бесконечный цикл, вызывая себя снова и снова.

На самом деле я хочу подавить уведомление по электронной почте, поэтому я звоню a.Update(false);, но это снова вызывает метод PreUpdate или PostUpdate, и есть StackOverFlowException :(

Я пытался вернуть true / false из обоих методов, но ничего не помогало.

Ответы [ 2 ]

0 голосов
/ 03 июня 2010

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;
    }

}

Я проверил и, похоже, добился цели, надеюсь, это кому-нибудь поможет :)

0 голосов
/ 07 апреля 2010

Согласно документации , вы должны просто возвращать true или false. Попробуйте закомментировать вызов Update и просто верните либо true, либо false. Если вы вызовете Update, вы просто войдете в рекурсивный цикл, и ваш оператор return никогда не будет оценен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...