Pergunta

Eu preciso criar um item de atualização evento para uma lista existente em uma solução existente Acabei de verificar e já existe um recurso para que, a questão aqui é para este tipo de atualização que eu preciso para criar o recurso de atualização?

Ou apenas atualizar a solução de + criar o código que irá fazer o truque?

Foi útil?

Solução

Você deve usar o Recurso de Atualização para registrar o novo EventReceiver.

Basta criar o código não vai dizer SharePoint para chamar a EventReceiver você tem que fazer isso em um Elements.xml arquivo utilizando <Receivers> elemento ou através de código, criando um novo elemento no direito EventReceivers coleção

Para os exemplos seguintes assumem que você está atualizando a versão 7.0.0.0.

CAML
Para adicionar o receptor de evento no seu CAML feature.xml deve ser algo 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>

Com o novo Elements.xml a ser aplicado tanto na atualização e novas ativações

Código
Para adicionar o receptor de evento no seu código feature.xml deve ser algo como:

<?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 no FeatureReceiver você vai ter um 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;
  ...
}

Com o código para adicionar o EventReceiver sendo executado em Atualização com ActionName = "AddNewEventReceiver", bem como em novas ativações.E, claro, removê-lo em desativação.

Para adicionar um eventReceiver no código de usar algo como:

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

Outras dicas

FeatureUpgrading é disparado quando um recurso está digitando o estado de atualização, e isso é acionado somente se o recurso for devido para upgrade (ou seja: a versão instalada é maior que a da versão ativada).

Tenha uma leitura através da série de blogs de Chris O'Brien sobre atualização de recursos para obter mais entendimento como funciona a atualização do recurso: http://www.sharepointnutsandbolts.com/2010/06/featur-upgrade-Part-1-fundamentais.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top