Domanda

Ho solo 1 progetto Visual Studio.

Contiene 1 EventReceiver (per documentallibrary) e multiple-WebParts. Ho definito lo scope= sito del file feature.xml del progetto.

Ho creato 1 funzione personalizzata in EventReceiver, che chiama ogni evento è il fuoco, aggiungi / aggiorna / cancella nella mia documentazione.

Quando lo distribuisco Destrasment DyeryClicking sul progetto, tutto funziona bene, ma quando creo qualsiasi pagina o qualsiasi oggetto viene aggiunta alla mia qualsiasi località personalizzata, quindi anche gli eventreceiver sono incendi.Sebbene sia stato creato su documentallizzazione. Non mi dà alcun errore, ma non voglio chiamarlo di nuovo.

Ma quando debug del progetto di F5, ricevo errore in EventReceiver, perché è chiamato più volte significa su ogni evento.

Se sto implementando l'ambito degli scopi di EventReceiver= Web, quindi potrebbe essere risolto il problema, ma ho bisogno di distribuire i WebParts anche con Scope= Sito.

Quindi come risolvere questo problema tramite la distribuzione singola?

È stato utile?

Soluzione

È possibile aggiungere la seconda funzionalità al progetto.In questo caso avrai un pacchetto di soluzioni con due funzioni (prima è una funzione SITE ACCEDED, secondo è una funzione Web Scoped).In una caratteristica scoperta del sito è possibile includere le tue parti web.Per farlo è necessario fare clic sulla cartella delle funzioni e selezionare Aggiungi nuova opzione Funzione.

Altri suggerimenti

I Sospetto che tu abbia rilegato il ricevitore evento al modello della libreria dei documenti, che il tuo elenco personalizzato potrebbe anche utilizzare, pertanto il ricevitore evento è destinato a entrambe le istanze di elenco.

Se ho bisogno di associare un ricevitore di eventi a un elenco specifico, allora lo faccio nel codice, di solito tramite attivazione funzionalità e codd come questo:

    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();
    }
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a sharepoint.stackexchange
scroll top