Domanda

Quindi, ecco il mio problema:

Ho una lista che viene utilizzato per utente notificate. (Avvisi) quindi è essenziale che le notifiche e-mail di lavoro per la maggior parte del tempo. L'annuncio (articoli) vengono salvati in cartelle, in modo che solo i gruppi specifici vengono informati e in grado di leggere questi annunci. Fin qui tutto bene.

Il problema è che quando aggiungo nuove cartelle di programmazione, cosa che accade di tanto in tanto, la notifica e-mail viene inviare, anche. Non voglio che ciò accada, quindi non v'è alcun modo per fermare queste notifiche mentre creo la cartella a livello di codice all'interno di un EventReceiver? (ItemAdded su un'altra lista)

Ho trovato alcuni modi per farlo manualmente, ma non nel mio codice. (E non dimenticare, ho bisogno di cambiare le cose di nuovo in seguito) Ho provato lo SystemUpdate sulla voce al posto del normale Update-metodo e alcune altre cose. Evento-combustione è disabilitato, naturalmente, anche, ma non funziona nulla.

P.S:. E 'un ambiente SharePoint Server 2010

È stato utile?

Soluzione 2

Sono riuscito a trovare una risposta me stesso, o quasi atleast.

In base alla risposta di Rob D'Ora (che non ha funzionato, anche se sembrava che la cosa giusta) ho creato un metodo per trasformare avvisi on / off. (Forse non è il modo più efficiente, ma funziona)

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

Lo so ho giocato una cassaforte po 'con "AllowUnsafeUpdates" e le "RunWithElevatedPrivileges", ma se ho imparato una cosa (soprattutto) con SharePoint di quello che è sicuro che il gioco è sempre una buona cosa.

Altri suggerimenti

sto assumendo che abbiate chi desidera allestire i propri avvisi, quindi non si può veramente gestire questo come si creano gli allarmi, ma è possibile modificare il comportamento di avvisi esistenti programmaticamente.

mi sento di raccomandare scorrendo SPWeb.Alerts, controllare ogni oggetto SPAlert per vedere se è ambito alla tua lista (alert.AlertType == SPAlertType.List && alert.ListID == YourListID), e quindi impostando la proprietà Filter per un query che sarebbe filtrare cartella Posta. Provare qualcosa di simile (... in realtà non prova, in modo 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();
        }
    }

Non credo che consiglierei di fare la svolta sulla / disattivare questo ogni volta ... accenderla una volta e lasciare sul ... si potrebbe anche verificare se il filtro è lì prima di applicare e l'aggiornamento del SPAlert.

Spero che questo aiuti.

UPDATE: avevo erroneamente impostato Tipo a Intero al posto di computerizzata . Con esso impostato su computerizzata Filtro lavori.

Non ti basta mettere un po 'di logica nella funzione e-mail per verificare il tipo di contenuto della voce? Se è di cartella tipo di contenuto, non fare nulla, se si tratta di Annuncio, inviare l'e-mail.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top