Desactivar las notificaciones de correo electrónico para las espaldas solo temporalmente (y programáticamente)

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

  •  22-10-2019
  •  | 
  •  

Pregunta

Así que aquí está mi problema:

Tengo una lista que se utiliza para notificar al usuario. (Anuncios) Por lo tanto, es esencial que las notificaciones por correo electrónico funcionen la mayor parte del tiempo. El anuncio (elementos) se guarda en carpetas, de modo que solo los grupos específicos se informan y puedan leer estos anuncios. Hasta aquí todo bien.

El problema es que cuando agrego nuevas carpetas programáticamente, lo que ocurre ocasionalmente, la notificación por correo electrónico también se envía. No deseo que eso suceda, entonces, ¿hay alguna forma de detener estas notificaciones mientras creo la carpeta programáticamente dentro de un EventReceiver? (ItemAdded en otra lista)

He encontrado algunas formas de hacer esto manualmente, pero no dentro de mi código. (Y para no olvidar, necesito cambiar las cosas más adelante) Probé el sistema de systemUpdate en el elemento en lugar del método de actualización normal y algunas otras cosas. El relleno de eventos también está deshabilitado, por supuesto, pero nada funciona.

PD: Es un entorno de SharePoint Server 2010.

¿Fue útil?

Solución 2

Me las arreglé para encontrar una respuesta, bueno, al menos.

Basado en la respuesta de Rob D'Ora (que no funcionó, a pesar de que parecía lo correcto) creé un método para encender/desactivar las alertas. (Tal vez no sea la forma más eficiente, pero funciona)

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

Sé que jugué un poco segura con "designunSafeUpdates" y los "ejecutivos de ejecución runwithelevated", pero si aprendí una cosa (especialmente) con SharePoint, que jugar a salvo siempre es algo bueno.

Otros consejos

Supongo que tiene usuarios configurando sus propias alertas, por lo que realmente no puede manejar esto ya que las alertas se crean, pero puede cambiar el comportamiento de las alertas existentes de manera programada.

Recomendaría iterar a través de spweb.alerts, verifique cada objeto de Spalert para ver si está alcanzado en su lista (alert.alerttype == spalerttype.list && alert.listid == suListid) y luego configurar la propiedad del filtro en una consulta que lo haría Filtrar los elementos de la carpeta. Prueba algo como esto (... en realidad no probé, así que 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();
        }
    }

No creo que recomiende activar/apagar esto cada vez ... enciéndalo una vez y déjelo activo ... También podría verificar si el filtro está allí antes de aplicarlo y actualizarlo El Spalert.

Espero que esto ayude.

Actualización: había configurado incorrectamente Escribe a Entero en vez de Calculado. Con él establecido en Calculado la Filtrar obras.

¿No necesitaría solo poner algo de lógica en su función de correo electrónico para verificar el tipo de contenido del elemento? Si es de tipo de contenido de carpeta, no haga nada, si es anuncio, envíe el correo electrónico.

Licenciado bajo: CC-BY-SA con atribución
scroll top