Comment déployer la fonctionnalité avec Scope= Sight ou Scope= Web pour les pièces Web et le récepteur d'événements respectivement?

sharepoint.stackexchange https://sharepoint.stackexchange.com//questions/52085

Question

Je n'ai qu'un seul projet Visual Studio.

Il contient 1 EventReceiver (pour DocumentLibrary) et plusieurs WebParts. J'ai défini la portée= Site of Feature.xml Fichier de projet.

J'ai créé 1 fonction personnalisée dans EventReceiver, qui appelle à chaque événement est le feu, soit Ajouter / Mettre à jour / Supprimer dans My DocumentLibrary.

Lorsque je le déploie à droite en cliquant sur le projet, tout fonctionne bien, mais lorsque je crée une page ou un élément est ajouté à ma liste de clients, alors aussi l'EventReceiver est des incendies.Bien qu'il soit créé sur DocumentLibrary. Sa ne me donne aucune erreur, mais je ne veux pas l'appeler à nouveau.

Mais quand j'ai débogué le projet par F5, je reçois une erreur dans EventReceiver, car elle est appelée plusieurs fois à chaque événement.

Si je déploiement de l'étendue EventReceiver= Web, alors peut-être que cela résoudra le problème, mais j'ai besoin de déployer les webparts également avec la portée= site.

Comment résoudre ce problème par un seul déploiement?

Était-ce utile?

La solution

Vous pouvez ajouter une deuxième fonctionnalité au projet.Dans ce cas, vous aurez un package de solution avec deux fonctionnalités (première est une fonction Sited Stored Feature, secondaire est une fonctionnalité Web Scopée).Sur une fonctionnalité Sited Stored, vous pouvez inclure vos parties Web.Pour ce faire, vous devez cliquer sur le dossier Fonctionnalités et sélectionner Ajouter une nouvelle option de fonctionnalité.

Autres conseils

Je suppose que vous avez lié le récepteur d'événement au modèle de la bibliothèque de documents, que votre liste personnalisée peut également utiliser, le récepteur d'événement est donc lié aux instances de liste.

Si je dois lier un récepteur d'événement sur une liste spécifique, je le fais en code, généralement via une activation de fonctionnalité et une codd comme ceci:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange
scroll top