Aggiornamento caratteristica, nuovo ricevitore articolo
-
09-12-2019 - |
Domanda
Ho bisogno di creare un elemento Aggiornamento evento per un elenco esistente in una soluzione esistente Ho appena controllato e c'è già una caratteristica per questo, la domanda qui è per questo tipo di aggiornamento, ho bisogno di creare l'aggiornamento delle funzionalità?
o solo aggiornamento della soluzione + creazione del codice farà il trucco?
Soluzione
È necessario utilizzare l'aggiornamento della funzione per registrare il nuovo eventReceiver.
Basta creare il codice non dirigerà a SharePoint di chiamare l'eventReceiver che è necessario farlo in un file elements.xml utilizzando elemento <Receivers>
o tramite il codice creando un nuovo elemento nella collezione EventReceivers
Per i seguenti esempi presuppongono che tu stia aggiornando a Verion 7.0.0.0.
Caml
Per aggiungere il ricevitore evento in caml la tua funzione.xml dovrebbe essere qualcosa come:
.
<?xml version="1.0" encoding="utf-8" ?>
<Feature ... Version="7.0.0.0">
<UpgradeActions>
<VersionRange BeginVersion="0.0.0.0" EndVersion="7.0.0.0">
<ApplyElementManifests>
<ElementManifest Location="MyNewEventReceiver\Elements.xml" />
</ApplyElementManifests>
</VersionRange>
<UpgradeActions>
...
<ElementManifest Location="MyNewEventReceiver\Elements.xml" />
</Feature>
con i nuovi elementi.xml viene applicato sia su upgrade che su nuove attivazioni
Codice
Per aggiungere il ricevitore evento nel codice della tua funzione.xml dovrebbe essere qualcosa come:
.
<?xml version="1.0" encoding="utf-8" ?>
<Feature ... ReceiverAssembly="XXX" ReceiverClass="YYY" Version="7.0.0.0">
<UpgradeActions>
<VersionRange BeginVersion="0.0.0.0" EndVersion="7.0.0.0">
<CustomUpgradeAction Name="AddNewEventReceiver" />
</VersionRange>
<UpgradeActions>
...
</Feature>
E in The FeatureureReceiver avrai il codice come:
.
public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters)
{
SPWeb parentWeb = (SPWeb)properties.Feature.Parent;
switch (upgradeActionName)
{
case "AddNewEventReceiver":
// Add EventReceiver;
break;
...
}
}
public override virtual void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPWeb parentWeb = (SPWeb)properties.Feature.Parent;
...
// Add EventReceiver;
...
}
public override virtual void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPWeb parentWeb = (SPWeb)properties.Feature.Parent;
...
// Remove EventReceiver;
...
}
Con il codice per aggiungere l'eventReceiver eseguito su upgrade con Actionname="addneweventrEceiver" e su nuove attivazioni. E naturalmente lo rimuovendo sulla disattivazione.
Per aggiungere un eventReceiver nel codice usa qualcosa come:
.parentWeb.Lists[_listName].EventReceivers.Add(_eventType, Assembly.GetExecutingAssembly().FullName, _eventReceiverClassName);
Altri suggerimenti
Featureupgrading viene sparato quando una funzione sta inserendo lo stato di aggiornamento, e questo viene attivato solo se la funzione è dovuta per l'aggiornamento (es.: La versione installata è maggiore di quella della versione attivata).
Avere una lettura tramite la serie Blog di Chris O'Brien sull'aggiornamento delle caratteristiche per ottenere ulteriore capire come funziona l'aggiornamento delle caratteristiche: http://www.sharepointnutsandbolts.com/2010/06/Feature-UPGRADE-PART-1-FindamAss.HTML