Pregunta

Necesito crear un evento de actualización de artículos para una lista existente en una solución existente Acabo de verificar y ya hay una función para eso, la pregunta aquí es para este tipo de actualización. ¿Necesito crear la actualización de la función?

¿O solo actualizar la solución + crear el código hará el truco?

¿Fue útil?

Solución

Debe usar la actualización de la función para registrar el nuevo EventRecreiver.

Simplemente crear el código no le dirá que SharePoint llame al EventRecreiver, debe hacerlo en un archivo Elements.xml usando el elemento <Receivers> o a través del código creando un nuevo elemento en la colección de corrector de eventos correctos

Para los siguientes ejemplos, asume que está actualizando a Verion 7.0.0.0.

caml
Para agregar el receptor del evento en Caml su función.xml debe ser algo así como:

<?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 los nuevos elementos.xml que se aplican tanto en la actualización como en las nuevas activaciones

código
Para agregar el receptor del evento en el código, su función.xml debe ser algo así:

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

y en el destacado que tendrás código como:

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 el código para agregar el EventRecreiver que se ejecuta en la actualización con ActionName="AddNeweventReceiver", así como en nuevas activaciones. Y por supuesto eliminándolo en desactivación.

Para agregar un EventRecreiver en el código Use algo como:

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

Otros consejos

FeaturatGrading se enciende cuando una característica está ingresando al estado de actualización, y esto se activa solo si la función vence para la actualización (es decir, la versión instalada es mayor que la de la versión activada).

Tener una serie de blog de lectura a través de Chris O'Brien sobre la actualización de la función para obtener más comprensión de cómo funciona la actualización de características: http://www.sharepointnutsandbolts.com/2010/06/feature-upgrade-part-1-fundamentals.html

Licenciado bajo: CC-BY-SA con atribución
scroll top