Question

J'ai besoin de créer un événement de mise à jour d'articles pour une liste existante dans une solution existante que je viens de vérifier et il y a déjà une fonctionnalité pour cela, la question ici est pour ce type de mise à niveau dois-je créer une mise à niveau des fonctionnalités?

Ou seulement la mise à jour de la solution + la création du code feront l'affaire ?

Était-ce utile?

La solution

Vous devez utiliser la mise à niveau des fonctionnalités pour enregistrer le nouveau EventReceiver.

La simple création du code ne dira pas à SharePoint d'appeler EventReceiver, vous devez le faire dans un fichier Elements.xml en utilisant <Receivers> élément ou via le code en créant un nouvel élément dans la bonne collection EventReceivers

Pour les exemples suivants, supposons que vous effectuez une mise à niveau vers la version 7.0.0.0.

CAML
Pour ajouter le récepteur d'événements dans CAML, votre feature.xml devrait ressembler à ceci :

<?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>

Avec le nouveau Elements.xml appliqué à la fois lors de la mise à niveau et lors des nouvelles activations

Code
Pour ajouter le récepteur d'événements dans le code, votre feature.xml devrait ressembler à ceci :

<?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>

Et dans FeatureReceiver, vous aurez un code comme :

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

Avec le code d'ajout de EventReceiver exécuté lors de la mise à niveau avec ActionName = "AddNewEventReceiver" ainsi que sur les nouvelles activations.Et bien sûr, en le supprimant lors de la désactivation.

Pour ajouter un eventReceiver dans le code, utilisez quelque chose comme :

parentWeb.Lists[_listName].EventReceivers.Add(_eventType, Assembly.GetExecutingAssembly().FullName, _eventReceiverClassName);

Autres conseils

FeatureUpgrading est tiré lorsqu'une fonctionnalité pénètre dans l'état de mise à niveau, ce qui n'est déclenché que si la fonctionnalité est due pour la mise à niveau (c'est-à-dire: la version installée est supérieure à celle de la version activée).

Avez-vous lu la série de blogs de Chris O'Brien sur la mise à niveau des fonctionnalités afin de mieux comprendre le fonctionnement de la mise à niveau de la fonctionnalité: http://www.sharepoindnutsandbolts.com/2010/06/freature-upgrade-par-1-fundamentals.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top