Como atualizar a versão de montagem SPItemEventReceiver para uma lista no SharePoint?

StackOverflow https://stackoverflow.com/questions/382535

  •  23-08-2019
  •  | 
  •  

Pergunta

Temos uma SPItemEventReceiver compilados em sua própria assembleia.

Estamos usando STSDev para empacotar uma solução SharePoint com este EventReceiver como um recurso. Não estou atribuindo o SPItemEventReceiver a um ListTemplateId específica dentro do elements.xml, mas estou em vez ligando um ReceiverAssembly na feature.xml e programmaticaly atribuindo o SPItemEventReceiver a vários itens SPList.

    public override void FeatureActivated(SPFeatureReceiverProperties properties)
    {
        foreach (SPWeb web in site.AllWebs)
        {
            SPListCollection webListCollection = web.Lists;

            foreach (SPList myList in webListCollection)
            {
                if (myList.Title == "Lab Reports")
                {
                    SPEventReceiverDefinitionCollection receivers = myList.EventReceivers;
                    SPEventReceiverDefinition receiver = receivers.Add();
                    receiver.Name = "PostUpdateLabReport";
                    receiver.Assembly = "LabReportEventHandlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1111111111111";
                    receiver.Class = "LabReportEventHandlers.LabReportsHandler";
                    receiver.Type = SPEventReceiverType.ItemUpdated;
                    receiver.Update();
                    break;
                }
            }

            web.Dispose();
        }
    }

Eu estou usando FeatureDeactivating fazer o inverso do código acima, removendo o EventReceiver a partir das listas.

Pergunta:

Como devo lidar com o evento futuro onde LabReportEventHandlers é atualizado e as mudanças de versão?

Estas são as opções que eu posso pensar de:

  1. recurso Desativar / Reativar - Eu envolveria a volta dll atualizado para o arquivo de solução do SharePoint, alterar o código acima para refletir a nova versão, ea utilização StsAdmin para atualizar a solução. Eu, então, desativar / reativar o recurso.

  2. Adicionar redirecionamento Assembléia ao web.config.

  3. Não bata o número da versão LabReportEventHandlers.

Existe algo para mudar a versão solução que irá me ajudar?

Eu acho que existem problemas com as 3 opções:

  1. Depois de desativação do recurso, alguém poderia atualizar um item antes que eu possa reactiave.

  2. Eu não gostaria de editar o web.config à mão, por isso gostaria de usar a API do SharePoint em vez. Onde é que eu executar esse código?

  3. Este é apenas errado liso, mas fácil.

Foi útil?

Solução

Talvez você possa encapsular a lógica que está propenso a mudar em um assembly separado, que é referenciado e utilizado por seu manipulador de eventos. Desta forma, o manipulador de eventos em si não vai mudar tem que mudar, você só iria implantar a "lógica" são atualizadas de montagem para o diretório GAC ou bin (s) de forma adequada.

HTH, jt

Outras dicas

Eu não tenho certeza o que quiser com a atualização, se você deseja que o novo manipulador de eventos a serem aplicadas às listas de idade ou apenas para novas listas.

Para atualizar apenas novas listas, você pode colocar as informações de assembly em um arquivo separado, ler esse arquivo em seu método FeatureActivated, e aplicar os novos valores. Ao atualizar tudo o que você precisa fazer é atualizar o arquivo de configuração separado e qualquer nova ativação usará os novos valores e números de versão.

Se você precisa atualizar os manipuladores de eventos antigos que você poderia fazer um procedimento semelhante, mas adicionar o novo receptor de recurso antes de excluir o antigo. Se você fizer isso no mesmo método que o tempo entre a adição do novo manipulador e remover o antigo será mínimo e as chances de alguém adicionar um item nesse momento exato está perto de zero. Se você quer ir todo o caminho para zero, você pode ocultar a lista ou têm um manipulador adicional evento ItemUpdated que verifica para ver se uma atualização está em andamento e se assim pára a atualização.

Então, em suma: Para novas listas, leia montagem Config arquivo externo Para listas velhas, adicione atualizado assembly informações pouco antes de remover o antigo manipulador.

.B

Eu só uso a montagem de versão, se há uma necessidade de ambas as versões (antigos e novos) do conjunto a ser executada. Eu nunca precisei isso em um receptor de eventos. Portanto, eu não alterar a versão de montagem de receptores de eventos.

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