Compartir a través de


Solución de problemas de eventos

Última modificación: viernes, 09 de abril de 2010

Hace referencia a: SharePoint Foundation 2010

En este artículo
Bibliotecas de documentos y tipos de contenido
Listas y tipos de contenido
Bibliotecas de documentos
Sitios web

La programación de eventos puede causar comportamientos excepcionales, según los contextos en los que se implementen los controladores de eventos. En la tabla siguiente se describen comportamientos de eventos relacionados con contextos específicos que pueden aparecer cuando se escribe código.

Los comportamientos de eventos se dividen en cuatro categorías:

  • Bibliotecas de documentos y tipos de contenido

  • Listas y tipos de contenido

  • Bibliotecas de documentos

  • Sitios web

Bibliotecas de documentos y tipos de contenido

PROBLEMA

DESCRIPCIÓN

PROBLEMA #1

Se crea una página .aspx de un tipo de contenido específico en una biblioteca de documentos. La página está asociada con eventos ItemAdding y ItemAdded pero dichos eventos no se generan.

Solución: cuando se carga un archivo a una biblioteca de documentos, se le asigna un tipo de contenido predeterminado. Sin embargo, si se carga un archivo y, a continuación, se le asigna un tipo de contenido, por ejemplo, el tipo de contenido "A", se cambiará el tipo de contenido predeterminado del archivo al tipo de contenido "A" después de que se haya agregado a la biblioteca de documentos.

En este escenario, cuando el tipo de contenido "A" tiene enlaces de evento con ItemAdding/ItemAdded y ItemUpdating/ItemUpdated, los eventos ItemAdding/ItemAdded no se generan cuando se asigna el nuevo tipo de contenido "A" al archivo. Sin embargo, en este escenario sí se generan los eventos ItemUpdating/ItemUpdated.

En los casos en que el archivo se crea directamente desde el tipo de contenido mediante el uso de la característica de nuevo documento en lugar de cargar el documento, los eventos ItemAdding/ItemAdded se generan correctamente, así como el evento ItemUpdating.

PROBLEMA #2

Incluso cuando se carga un documento que no es de ese tipo de contenido, se genera un evento ItemAdding que está enlazado a un tipo de contenido. Tenga en cuenta que todos los documentos que se cargan en una biblioteca de documentos se asignan en primer lugar al tipo de contenido predeterminado. Por lo tanto, cada vez que se agrega un documento a una biblioteca de documentos, se generan los eventos ItemAdding\ItemAdded si dichos eventos están enlazados con el tipo de contenido predeterminado.

Solución: el tipo de contenido del documento se puede cambiar durante la fase de actualización y el identificador del tipo de contenido se ajusta según corresponda.

PROBLEMA #3

Una solicitud para eliminar un elemento a través de un formulario de lista no proporciona un identificador de tipo de contenido asociado. En consecuencia, los eventos ItemDeleting y ItemDeleted se generan en todos los elementos de lista, no solo en los elementos de un tipo de contenido específico. Esto ocurre incluso aunque el evento se haya registrado únicamente para el tipo de contenido especificado.

Solución: por diseño, SharePoint Foundation genera eventos para todos los elementos de lista cuando la solicitud no está enlazada a un tipo de contenido. Esto permite generar un evento para todos los elementos cuando el receptor de eventos está registrado para todos los elementos de la lista.

Este comportamiento afecta a las directivas que implican los eventos Delete. Si implementa una directiva que implica eliminación, aplique la directiva a un tipo de contenido y, a continuación, enlace el tipo de contenido a una lista, la directiva se aplicará a todos los elementos de la lista, no sólo a los elementos del tipo de contenido en los que se aplica dicha directiva.

Listas y tipos de contenido

PROBLEMA

DESCRIPCIÓN

PROBLEMA #1

Cuando se registra el evento ItemUpdating en un tipo de contenido que está enlazado a una lista, el evento se genera incluso cuando los elementos que no son de ese tipo de contenido se actualizan a través del modelo de objetos. Tenga en cuenta que SharePoint Foundation devuelve 0 (cero) como identificador de tipo de contenido, en lugar del identificador de tipo de contenido del elemento.

Solución: ninguna.

PROBLEMA #2

Los eventos de lista no se generan en el tipo de lista UserInformation.

Solución: ninguna.

Bibliotecas de documentos

PROBLEMA

DESCRIPCIÓN

PROBLEMA #1

Cuando se agrega un nuevo tipo de contenido a una lista que tiene eventos enlazados a él, es posible que se generen algunos de estos eventos debido a que el enlace de un tipo de contenido a una lista puede depender de otros factores como, en algunas ocasiones, la adición de archivos (por ejemplo, Template.doc), la actualización de documentos o la adición de nuevos campos.

Solución: este comportamiento ocurre solo con la biblioteca de documentos compartidos y no con las bibliotecas de documentos personalizadas. En el caso de la biblioteca de documentos compartidos, al agregar un tipo de contenido se crea una carpeta Forms/<Content Type> y se copia un archivo Template.doc a dicha carpeta, lo que provoca que los eventos se generen.

PROBLEMA #2

Cuando se agrega un documento a una biblioteca de documentos en la vista del explorador mediante WebDAV, los métodos ItemAdding(SPItemEventProperties) y ItemAdded(SPItemEventProperties) se llaman una vez, pero los métodosItemUpdating(SPItemEventProperties) y ItemUpdated(SPItemEventProperties) se llaman dos veces.

Solución: ninguna. Este comportamiento es predeterminado por diseño, ya que los procesos internos relacionados con la adición de un archivo en la vista de carpetas del explorador necesitan llamar a estos métodos dos veces.

PROBLEMA #3

Cuando se cambia el nombre de un archivo en una biblioteca de documentos mediante WebDAV en la vista del explorador, el evento de cambio de nombre no genera los eventos ItemUpdating(SPItemEventProperties) y ItemUpdated(SPItemEventProperties), a menos que también cambie la extensión de archivo al cambiar el nombre.

Solución: ninguna.

Sitios web

PROBLEMA

DESCRIPCIÓN

PROBLEMA #1

En el caso de los métodos WebAdding(SPWebEventProperties) y WebProvisioned(SPWebEventProperties), la propiedad ServerRelativeUrl está vacía cuando el sitio web primario es el sitio web raíz.

Solución: los valores correctos para la propiedad ServerRelativeUrl de un evento WebAdding es la dirección URL del sitio web primario. El valor correcto en un evento WebProvisioned es la dirección URL del subweb recién creado.

PROBLEMA #2

Al establecer el estado del receptor de eventos como CancelNoError en un evento WebDeleting(SPWebEventProperties) o SiteDeleting(SPWebEventProperties), se produce una redirección a una página de error que indica que se ha eliminado el sitio web.

Solución: ninguna. El control simplemente devuelve el llamador después de generarse el evento. El sitio web no se ha eliminado.

PROBLEMA #3

Al establecer el estado del receptor de eventos como CancelNoError en un evento FieldAdding(SPWebEventProperties), se produce una redirección a una página de error que indica que la columna no existe cuando se agrega un campo a una lista.

Solución: ninguna. El control simplemente devuelve el llamador después de generarse el evento. La columna no se ha eliminado.

PROBLEMA #4

Al establecer el estado del receptor de eventos como CancelNoError en un evento ItemAttachmentDeleting(SPWebEventProperties), se produce una redirección a una página de error que indica un error de excepción de HRESULT cuando se intentan quitar datos adjuntos de un elemento.

Solución: ninguna. El control simplemente devuelve el llamador después de generarse el evento.