Wie man SPItemEventReceiver Montageversion für eine Liste in Sharepoint aktualisieren?

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

  •  23-08-2019
  •  | 
  •  

Frage

Wir haben eine SPItemEventReceiver in eine eigene Assembly kompiliert.

Wir STSDev werden mit einer Sharepoint-Lösung mit diesem Eventreceiver als Feature zu verpacken. Ich bin nicht der SPItemEventReceiver zu einem bestimmten ListTemplateId im elements.xml zuweisen, aber ich stattdessen eine ReceiverAssembly in der feature.xml Verknüpfung und programmaticaly die SPItemEventReceiver auf mehrere SPList Elemente zuweisen.

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

I FeatureDeactivating bin mit der Rückseite des obigen Code zu tun, die Eventreceiver aus den Listen entfernen.

Frage:

Wie soll ich die Zukunft Ereignis zu behandeln, wo LabReportEventHandlers aktualisiert und die Version ändert?

Dies sind die Optionen, die ich mir vorstellen kann:

  1. deaktivieren / Funktion reaktivieren - ich die aktualisierte DLL zurück in die Sharepoint-Lösung Datei würde wickeln, meine obigen Code ändern, um die neue Version zu reflektieren, und verwenden Sie Stsadmin die Lösung zu aktualisieren. Ich würde dann deaktivieren / aktivieren Sie die Funktion.

  2. In der web.config Assembly Umleitung.

  3. Sie die LabReportEventHandlers Versionsnummer nicht stoßen.

Gibt es etwas, um die Lösung Version bei der Veränderung, die mir helfen?

Ich denke, es gibt Probleme mit den drei Optionen:

  1. Nach der Deaktivierung der Funktion, jemand könnte ein Element aktualisieren, bevor ich reactiave kann.

  2. Ich würde nicht die web.config von Hand bearbeiten will, so würde ich stattdessen den Sharepoint-API verwenden. Wo würde ich diesen Code ausführen?

  3. Das ist einfach falsch, aber einfach.

War es hilfreich?

Lösung

Vielleicht können Sie die Logik kapseln, die in eine separate Baugruppe ändern anfällig ist, ist, dass verwiesen und von Ihren Event-Handler verwendet. Auf diese Weise wird die Event-Handler selbst nicht ändern müssen, ändern, würden Sie nur die aktualisierte „Logik“ Montag auf den GAC oder sind-Verzeichnis bereitstellen (n) entsprechend.

HTH, jt

Andere Tipps

Ich bin nicht sicher, was Sie mit dem Upgrade mögen, ob Sie die neuen Event-Handler auf alte Listen angewandt werden sollen oder nur für neue Listen.

Für nur neue Listen aktualisieren können Sie die Montageinformationen in einer separaten Datei setzen, die Datei in Ihrer FeatureActivated Methode lesen und anwenden, um die neuen Werte. Bei der Aktualisierung alle müssen Sie tun, ist die separate Konfigurationsdatei und jede neue Aktivierung der neuen Werte und Versionsnummern verwenden zu aktualisieren.

Wenn Sie alte Event-Handler aktualisieren müssen Sie ein ähnliches Verfahren tun könnte, aber fügen Sie die neue Funktion Empfänger bevor Sie die alte löschen. Wenn Sie dies in der gleichen Methode tun, um die Zeit zwischen dem Hinzufügen der neuen Handler und das Entfernen der alten minimal sein und die Chance, jemand einen Artikel zu diesem genauen Zeitpunkt Zugabe ist nahe Null. Wenn Sie die ganzen Weg auf Null gehen wollen, können Sie die Liste ausblenden oder einen zusätzlichen ItemUpdated Event-Handler, die überprüft, ob ein Upgrade im Gang ist und wenn ja, hält das Update.

Also, kurz gesagt: Für neue Listen, las Montagekonfiguration aus externer Datei Für alte Listen aktualisiert Montageinfo hinzufügen, kurz bevor das alte Handler zu entfernen.

.B

I Montag Versionierung nur verwenden, wenn es notwendig ist für beide (alte und neue) Versionen der Anordnung ausgeführt werden. Ich brauchte nie auf einem Ereignisempfänger. Deshalb habe ich nicht die Assemblierung-Version für Empfänger Ereignis ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top