¿Cómo implementar la característica con el alcance= vista o al alcance= web para piezas web y receptor de eventos respectivamente?

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

Pregunta

Tengo solo 1 proyecto de Visual Studio.

Contiene 1 EventReceiver (para DocumentLibrary) y múltiples páginas web. He definido el archivo SCOPE= Site of featur.xml archivo de proyecto.

He creado 1 función personalizada en EventReceiver, que llama a todos los eventos es el fuego, agregue / actualizar / eliminar en mi documento.

Cuando lo desplego correctamente en el proyecto, todo está funcionando bien, pero cuando creo alguna página o cualquier artículo se agregue a mi lista personalizada, entonces también el EventRecreiver está activado.Aunque se crea en Documentlibrary. No me está dando ningún error, pero no quiero volver a llamarlo.

Pero cuando deprimo el proyecto por F5, entonces estoy recibiendo un error en EventRecreiver, porque se llama múltiples horarios medios en cada evento.

Si implemento el ámbito de EventReceiver= Web, entonces podría ser que resolverá el problema, pero necesito implementar los webparts también con SCOPE= Site.

Entonces, ¿cómo resolver este problema por despliegue individual?

¿Fue útil?

Solución

Puede agregar la segunda función al proyecto.En este caso, tendrá un paquete de soluciones con dos funciones (primero es una función de ámbito de sitio, la segunda es una función de ámbito web).En una función de ámbito de sitio puede incluir sus partes web.Para hacerlo, debe hacer clic en Carpeta de funciones y seleccione Agregar nueva opción de función.

Otros consejos

Sospecho que ha limitado el receptor del evento a la plantilla de la biblioteca de documentos, que también puede usar su lista personalizada, por lo tanto, el receptor de eventos está unido a ambas instancias de la lista.

Si necesito unir un receptor de eventos a una lista específica, lo hago en código, generalmente a través de la activación de la función y la codificación como esta:

    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 bajo: CC-BY-SA con atribución
scroll top