Pergunta

Eu tenho apenas 1 Projecto do Visual Studio.

Contém 1 EventReceiver(para DocumentLibrary) e de vários WebParts.Eu tenho definido o Escopo=Local da Feature.xml arquivo de Projeto.

Eu criei 1 função personalizada em EventReceiver, que chama em Todos os eventos, é fogo, Adicionar/Atualizar/Excluir no meu DocumentLibrary.

Quando eu implantá-lo clicando com o botão direito sobre o projeto, Tudo está funcionando bem, mas Quando eu criar qualquer página ou qualquer item é adicionado na minha quaisquer CustomList, em seguida, também o EventReceiver é acionado.Apesar de criado em DocumentLibrary.Não me dando algum erro, mas eu dnt quiser chamá-lo novamente.

Mas quando eu Depurar o Projeto F5, então estou recebendo o erro em EventReceiver, porque seu chamado várias vezes significa que em cada evento.

Se eu implantar o EventReceiver do Escopo=Web e, em seguida, pode ser ele que vai resolver o problema, mas eu preciso implantar o WebParts também com o Escopo=Site.

Então, Como resolver este problema, a única implantação ?

Foi útil?

Solução

Você pode adicionar um recurso de segundo ao projeto.Nesse caso, você terá um pacote de solução com dois recursos (primeiro é um recurso de escopo do site, o segundo é um recurso de escopo da web).Em um recurso de escopo do site, você pode incluir suas web partes.Para fazer isso, você deve clicar em Pasta de recursos e selecionar Adicionar nova opção de recurso.

Outras dicas

Eu suspeito que você tenha ligado o receptor de eventos para o modelo de Biblioteca de Documentos, qual a sua lista personalizada também pode ser utilizando, portanto, o receptor de evento está associado à lista de instâncias.

Se eu precisar ligar um receptor de eventos para uma lista específica, então eu faço isso no código, geralmente por meio de Recurso de Ativação e codd como este:

    protected static void AddEventReceiverToList(string name, string className, SPList list, string assemblyName, SPEventReceiverType eventReceiverType, SPEventReceiverSynchronization eventReceiverSynchronization)
    {
        if (name == null) throw new ArgumentNullException("name");
        if (className == null) throw new ArgumentNullException("className");
        if (list == null) throw new ArgumentNullException("list");
        if (assemblyName == null) throw new ArgumentNullException("assemblyName");
        SPEventReceiverDefinitionCollection eventReceiverDefinitionCollection = list.EventReceivers;

        foreach (SPEventReceiverDefinition eventReceiverDefinition in eventReceiverDefinitionCollection)
        {
            if (eventReceiverDefinition.Name == name)
            {
                return;
            }
        }

        SPEventReceiverDefinition eventReceiver = eventReceiverDefinitionCollection.Add();
        eventReceiver.Name = name;
        eventReceiver.Synchronization = eventReceiverSynchronization;
        eventReceiver.Type = eventReceiverType;
        eventReceiver.Assembly = assemblyName;
        eventReceiver.Class = className;
        eventReceiver.Update();
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top