Recurso de atualização, um novo item receptor
-
09-12-2019 - |
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?
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