Compartir a través de


Enlace de un controlador de eventos mediante el modelo de objetos de SharePoint

Última modificación: jueves, 08 de abril de 2010

Hace referencia a: SharePoint Foundation 2010

Se puede enlazar un controlador de eventos de SharePoint Foundation mediante el uso de clases base de receptor de eventos en el modelo de objetos de SharePoint Foundation. Nuestro objetivo en este ejemplo de código es enlazar el evento ItemAdded que creamos en Creación de un controlador de eventos a una instancia de SPSite.

Nota

Microsoft Visual Studio 2010 proporciona tipos de proyecto que hacen una gran parte del trabajo automáticamente al crear eventos de SharePoint. No obstante, los ejemplos de código siguientes se proporcionan para ilustrar los mecanismos para la creación y el enlace de eventos.

Creación de un proyecto de código de enlace

Abra Microsoft Visual Studio y cree un proyecto de aplicación de consola básico y asígnele el nombre BindItemEvents. A continuación, cree una clase única con el nombre Program.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.SharePoint;

namespace BindItemEvents
{
    class Program
    {
        static void Main(string[] args)

A continuación, debe crear referencias al sitio y a los objetos web. Tenga en cuenta que las referencias al sitio y a los objetos web se establecen mediante el uso de la instrucción using. Esto se debe a que llama automáticamente al método Dispose() en los objetos una vez ejecutado el bloque de código. Como alternativa, puede crear instancias del sitio y de los objetos web en el bloque de código; sin embargo, en tal caso debe asegurarse de eliminar dichos objetos, una vez que haya terminado con ellos.

        {
            using (SPSite site = new SPSite("https://localhost")) 
            {
                using (SPWeb web = site.OpenWeb())

A continuación, se crea una lista en el sitio web al que hemos creado una referencia, es decir, la biblioteca de documentos denominada "Documentos compartidos" y, a continuación, se enlaza la definición del receptor de eventos.

{
                    SPList list = web.Lists["Shared Documents"];

                    SPEventReceiverDefinition def = list.EventReceivers.Add();

Sin embargo, tenga en cuenta que no basta con agregar el receptor de eventos, EventReceivers. La acción de enlace también requiere que se proporcionen valores de propiedad para definir el receptor:

    def.Assembly = "ERDefinition, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=704f58d28567dc00";
    def.Class = "ERDefinition.ItemEvents";
    def.Name = "ItemAdded Event";
    def.Type = SPEventReceiverType.ItemAdded;
    def.SequenceNumber = 1000;
    def.Synchronization = SPEventReceiverSynchronization.Synchronous;
    def.Update();

El ejemplo de código anterior indica los valores de propiedad más usados. Para ver una lista completa de las propiedades disponibles (y para ver documentación de todas las propiedades), vea SPEventReceiverDefinition. No obstante, la propiedad más importante, que es obligatoria en todos los casos, es la propiedad Type, en este caso ItemAdded. También debe especificar el ensamblado usando la propiedad Assembly y, en este caso, la clase ERDefinition.ItemEvents, que ya debería haber creado (según se describe en Creación de un controlador de eventos).

Tenga en cuenta que el nombre del ensamblado se obtiene mediante el uso de un nombre seguro. (Para obtener el nombre seguro para el ensamblado, ubique el ensamblado en la memoria caché global de ensamblados (GAC) y exponga las propiedades del ensamblado). Tenga en cuenta también que el nombre seguro del ensamblado es un nombre que distingue mayúsculas de minúsculas. Use la propiedad SequenceNumber para especificar el orden en que se generan los eventos, en los casos en que una acción genera varios eventos. La propiedad Synchronization permite especificar si el evento es sincrónico o asincrónico. Por último, debe ejecutar el método Update().

Lista de códigos

A continuación se incluye la lista de códigos completa correspondiente a la actividad anteriormente descrita.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Microsoft.SharePoint;

namespace BindItemEvents
{
    class Program
    {
        static void Main(string[] args)
        {
            using (SPSite site = new SPSite("https://localhost")) 
            {
                using (SPWeb web = site.OpenWeb())
                {
                    SPList list = web.Lists["Shared Documents"];

                    SPEventReceiverDefinition def = list.EventReceivers.Add();

                    def.Assembly = "ERDefinition, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=704f58d28567dc00";
                    def.Class = "ERDefinition.ItemEvents";
                    def.Name = "ItemAdded Event";
                    def.Type = SPEventReceiverType.ItemAdded;
                    def.SequenceNumber = 1000;
                    def.Synchronization = SPEventReceiverSynchronization.Synchronous;
                    def.Update();
                }
            }
        }
    }
}

Vea también

Tareas

Procedimiento para crear una característica de controlador de eventos

Conceptos

Enlace de un controlador de eventos de SharePoint Foundation

Enlace de controladores de eventos mediante el archivo Features.xml de SharePoint