Come aggiornare la versione di assemblaggio SPItemEventReceiver per un elenco in SharePoint?

StackOverflow https://stackoverflow.com/questions/382535

  •  23-08-2019
  •  | 
  •  

Domanda

Abbiamo uno SPItemEventReceiver compilato nella sua propria assemblea.

Stiamo usando STSDev per confezionare una soluzione SharePoint con questo EventReceiver come una caratteristica. Non sto assegnando lo SPItemEventReceiver ad un ListTemplateId specifico all'interno del Elements.xml, ma sto invece collegando un ReceiverAssembly nel Feature.xml e programmaticaly assegnando lo SPItemEventReceiver a più elementi SPList.

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        foreach (SPWeb web in site.AllWebs)
        {
            SPListCollection webListCollection = web.Lists;

            foreach (SPList myList in webListCollection)
            {
                if (myList.Title == "Lab Reports")
                {
                    SPEventReceiverDefinitionCollection receivers = myList.EventReceivers;
                    SPEventReceiverDefinition receiver = receivers.Add();
                    receiver.Name = "PostUpdateLabReport";
                    receiver.Assembly = "LabReportEventHandlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1111111111111";
                    receiver.Class = "LabReportEventHandlers.LabReportsHandler";
                    receiver.Type = SPEventReceiverType.ItemUpdated;
                    receiver.Update();
                    break;
                }
            }

            web.Dispose();
        }
    }

Sto usando FeatureDeactivating di fare il contrario del codice di cui sopra, la rimozione del EventReceiver dagli elenchi.

Domanda:

Come devo gestire il futuro evento in cui LabReportEventHandlers viene aggiornato e le modifiche di versione?

Queste sono le opzioni che posso pensare:

  1. Disattiva / Riattiva funzione - Vorrei avvolgere il dll aggiornato nuovamente dentro il file di soluzione SharePoint, cambiare il mio codice di cui sopra in modo da riflettere la nuova versione, e utilizzare StsAdmin per aggiornare la soluzione. Vorrei quindi disattivare / riattivare la funzione.

  2. Aggiungi reindirizzamento all'Assemblea di web.config.

  3. Non urtare il numero di versione LabReportEventHandlers.

C'è qualcosa nel cambiare la versione soluzione che mi aiuterà?

Penso che ci siano problemi con le 3 opzioni:

  1. Dopo la disattivazione della funzione, qualcuno potrebbe aggiornare una voce prima che io possa reactiave.

  2. Non vorrei modificare il web.config a mano, quindi vorrei utilizzare l'API di SharePoint, invece. Dove vorrei correre quel codice?

  3. Questo è semplicemente sbagliato, ma facile.

È stato utile?

Soluzione

Forse si può incapsulare la logica che è incline a trasformarsi in un assembly separato, a cui fa riferimento e utilizzati dal vostro gestore di eventi. In questo modo, il gestore di eventi in sé non cambierà deve cambiare, si dovrebbe distribuire solo la "logica" assemblea aggiornata alla directory GAC o bin (i) in modo appropriato.

HTH, JT

Altri suggerimenti

Non sono sicuro di ciò che si vuole con l'aggiornamento, se si desidera che il nuovo gestore di eventi da applicare ai vecchi elenchi o solo per i nuovi elenchi.

Per aggiornare solo nuovi elenchi si potrebbe mettere le informazioni di assemblaggio in un file separato, leggere il file nel metodo FeatureActivated, e applicare i nuovi valori. Durante l'aggiornamento di tutto quello che dovete fare è quello di aggiornare il file di configurazione separato e ogni nuova attivazione utilizzerà i nuovi valori ei numeri di versione.

Se avete bisogno di aggiornare i vecchi gestori di eventi che si potrebbe fare una procedura simile, ma aggiungere il nuovo ricevitore funzione prima di eliminare il vecchio. Se si esegue questa operazione con lo stesso metodo il tempo tra l'aggiunta del nuovo gestore e la rimozione del vecchio sarà minima e la possibilità di chiunque di aggiungere un elemento in quel momento esatto è vicino a zero. Se si vuole andare fino in fondo a zero, è possibile nascondere la lista o di avere un gestore di eventi ItemUpdated aggiuntivo che controlla per vedere se un aggiornamento è in corso e, in caso affermativo arresta l'aggiornamento.

Così, in breve: Per i nuovi elenchi, leggere configurazione di montaggio dal file esterno Per i vecchi elenchi, aggiungere informazioni assemblaggio aggiornato poco prima di rimuovere il vecchio gestore.

.b

Io uso solo di assemblaggio delle versioni se c'è bisogno di entrambe le versioni (vecchi e nuovi) del gruppo da eseguire. Non ho mai avuto bisogno di questo su un ricevitore di eventi. Pertanto, non modificare la versione di assemblaggio per i ricevitori di eventi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top