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?

È stato utile?

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

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