Деактивировать электронную почту для шпиптов только временно (и программно)

sharepoint.stackexchange https://sharepoint.stackexchange.com/questions/18032

  •  22-10-2019
  •  | 
  •  

Вопрос

Итак, вот моя проблема:

У меня есть список, который используется для уведомления пользователя. (Объявления) Поэтому важно, чтобы уведомления по электронной почте работали большую часть времени. Объявление (элементы) сохраняется в папках, так что только конкретные группы будут информированы и могут прочитать эти объявления. Все идет нормально.

Проблема в том, что когда я добавляю новые папки программно, что иногда случается, уведомление по электронной почте также отправляется. Я не хочу, чтобы это произошло, так что есть ли способ остановить эти уведомления, пока я создаю папку программно в рамках события? (Itemaded в другом списке)

Я нашел несколько способов сделать это вручную, но не в моем коде. (И чтобы не забыть, мне нужно изменить что-то позже) Я попробовал SystemUpdate на элементе вместо нормального метода обновления и некоторых других вещей. Конечно, отключение событий тоже отключено, но ничего не работает.

PS: Это среда SharePoint Server 2010.

Это было полезно?

Решение 2

Мне удалось найти ответ сам, ну, почти по крайней мере.

Основываясь на ответе Роба Д'Ора (который не сработал, хотя это выглядело как правильное), я создал метод для включения/выключения оповещений. (Может быть, не самый эффективный способ, но это работает)

 public static void ToggleAlertStatus(SPWeb web, Guid listID,
     SPAlertType alertType, SPAlertStatus alertStatus)
 {
     SPSecurity.RunWithElevatedPrivileges(delegate()
     {
         using (SPWeb Web = new SPSite(web.Site.ID).OpenWeb(web.ID))
         {
             foreach (SPAlert alert in web.Alerts)
             {
                 if (alert.AlertType == alertType
                     && alert.ListID == listID
                     && alert.Status != alertStatus)
                 { // change the status if the current status is different,
                     // alert is set on the right list,
                     // and the alerttype is right, too.
                     web.AllowUnsafeUpdates = true;
                     alert.Status = alertStatus;
                     alert.Update();
                     web.AllowUnsafeUpdates = false;
                 }
             }
         }
     });
 }

Я знаю, что сыграл немного в безопасности с «AllowunSafeupdates» и «RunWitelevatedPrivileges», но если я узнал одну вещь (особенно) с SharePoint, то это всегда хорошо игра.

Другие советы

Я предполагаю, что у вас есть пользователи, настраивая свои собственные оповещения, поэтому вы не можете справиться с этим по мере создания оповещений, но вы можете изменить поведение существующих оповещений программатически.

Я бы порекомендовал итерацию через spweb.alerts, проверьте каждый объект Spalert, чтобы увидеть, не соответствует ли он вашему списку (alert.alerttype == spalerttype.list && alert.listid == youristid), а затем установите свойство фильтра на запрос, который будет Отфильтруйте элементы папки. Попробуйте что -то подобное (... на самом деле не тестировал, так что YMMV):

    SPList list = SPContext.Current.Web.Lists.TryGetList("My List");
    foreach (SPAlert alert in SPContext.Current.Web.Alerts)
    {
        if (alert.AlertType == SPAlertType.List && alert.ListID == list.ID)
        {
            alert.Filter = "<Query><Neq><FieldRef Name=\"ContentType\" /><Value Type=\"Computed\">Folder</Value></Neq></Query>";
            alert.Update();
        }
    }

Я не думаю, что я бы порекомендовал делать включение/выключать это каждый раз ... включайте его один раз и оставьте ... вы также можете проверить, есть ли фильтр сначала перед тем, как нанести его и обновлять Спалерт.

Надеюсь это поможет.

Обновление: я неправильно установил Тип к Целое число вместо Вычисляется. Анкет С ним настроено Вычисляется а Фильтр работает.

Разве вам не нужно просто поместить логику в свою функцию электронной почты, чтобы проверить тип контента элемента? Если это тип содержимого папки, ничего не делайте, если это объявление, отправьте электронное письмо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с sharepoint.stackexchange
scroll top