Compartir a través de


Información general sobre conexiones a elementos Web

Actualización: noviembre 2007

El conjunto de controles de elementos Web permite crear conexiones entre los controles de servidor de manera que el valor y la utilidad total de los controles conectados supere la de los controles individuales no conectados. Dispone de un conjunto completo e integrado de componentes de conexión para que pueda equipar los controles WebPart (de usuario o servidor) existentes para formar conexiones con el menor número de pasos, pocas líneas de código y ninguna necesidad de tratar la complejidad subyacente y la sincronización de los datos. Cuando los controles están habilitados para las conexiones se pueden crear conexiones dinámicas, mediante programación, entre los controles en tiempo de ejecución, así como conexiones estáticas y predefinidas declaradas en el marcado de una página Web. También es posible ofrecer a los usuarios una interfaz de usuario (UI) que les permita conectar o desconectar los controles en tiempo de ejecución y administrar las conexiones existentes.

Las conexiones ofrecen ventajas a usuarios y a desarrolladores. Mediante conexiones, los usuarios pueden encontrar maneras nuevas y significativas de ver sus datos. Supongamos que genera una aplicación en la que un control de servidor se pone en contacto con un servicio Web, devuelve registros históricos de las temperaturas medias diarias para una provincia o estado, y muestra los datos en formato de tabla. Si un usuario desea poder ver esos datos de distintas maneras, el control de servidor podría conectarse a un control de gráfico que utilice los datos tabulares y los muestre en varias vistas de gráfico. Incluso se le podría ofrecer al usuario la posibilidad de mostrar los datos en una tabla o conectar los datos de temperatura al control de gráfico. Con nuevas vistas de los datos, los usuarios podrían observar nuevas tendencias y relaciones en las temperaturas que eran más difíciles de ver con los datos en formato tabular.

Mediante conexiones, los desarrolladores pueden descubrir nuevas oportunidades para reutilizar el código y para combinar la funcionalidad de controles aislados. Supongamos que un desarrollador crea un control que guarda la información de la dirección del usuario, incluido el código postal, y hace que esta información esté siempre disponible para rellenar el formulario de la dirección de envío cuando el usuario realiza algún pedido. Después, el desarrollador agrega otros controles que dependen de un código postal determinado, como controles que muestren información meteorológica y titulares de noticias en el área del usuario, así como un control que busque las empresas asociadas a un código postal dado por categoría. En lugar de diseñar cada control nuevo con la misma característica de guardar un código postal, el desarrollador podría diseñar cada control de manera que requiera la entrada de un código postal. Después, simplemente tendría que conectar el control que ya guarda el código postal a los controles de información meteorológica, titulares de noticias y lista de empresas, que utilizan como entrada un código postal. Cada conexión extiende la utilidad del control original y elimina la redundancia en el código de los nuevos controles.

Conceptos de conexiones

Una conexión de elementos Web es un vínculo o una asociación entre dos controles de servidor que les permite compartir datos. En una conexión siempre son necesarios dos controles: uno es el proveedor de los datos y el otro es el que utiliza los datos del proveedor. Un control puede ser consumidor y proveedor al mismo tiempo, y cualquier tipo de control de servidor, ya sea un control WebPart, un control personalizado o un control de usuario, se puede diseñar para participar en conexiones. De manera predeterminada, un control proveedor puede establecer conexiones con varios consumidores al mismo tiempo (como en el ejemplo anterior, en el cual un control de código postal proporciona un código postal a un control de información meteorológica, a un control de titulares de noticias y a un control de lista de empresas). De manera predeterminada, un control consumidor sólo se puede conectar con un proveedor a la vez.

Las conexiones siempre tienen lugar en el contexto de una aplicación de elementos Web, lo que significa que, como mínimo, además de dos controles de servidor que participen en la conexión, se requieren dos controles adicionales en la página Web. Uno de ellos es el control WebPartManager, que está presente en todas las páginas que contienen controles de elementos Web. El segundo control necesario es una zona que hereda de la clase WebPartZoneBase, como el control WebPartZone. Dos controles de servidor cualesquiera, para formar una conexión, deben residir dentro de un tipo de zona WebPartZoneBase.

En una relación de conexión, cada consumidor y cada proveedor tiene al menos un objeto asociado, denominado punto de conexión. Un punto de conexión, basado en la clase ConnectionPoint, contiene los detalles necesarios para que un control de servidor se conecte a otro control, como el tipo del propio control, el tipo de datos que el control reconoce, un id. para el objeto de punto de conexión y si el control puede formar varias conexiones. Un control de servidor puede tener varios puntos de conexión. Los puntos de conexión de un proveedor son definidos por instancias de la clase ProviderConnectionPoint y los de los consumidores son definidos por instancias de la clase ConsumerConnectionPoint.

Para formar una conexión, tanto el consumidor como el proveedor deben reconocer el mismo tipo de datos, que, en las conexiones de elementos Web, se pasan por medio de una instancia de interfaz. El tipo de datos que un control reconoce se especifica en el punto de conexión asociado del control, en la propiedad InterfaceType. Si el proveedor y consumidor reconocen el mismo tipo de datos, son compatibles. Si un proveedor y un consumidor son incompatibles, el desarrollador debe utilizar un objeto transformador especial para convertir los datos del proveedor a un formato con el que pueda trabajar el consumidor. El objeto transformador se hereda de la clase base WebPartTransformer y el desarrollador puede heredar de la clase base para desarrollar un transformador personalizado o usar uno de los objetos transformadores suministrados (RowToFieldTransformer o RowToParametersTransformer).

Después de que se ha creado una conexión, se incluye en un objeto WebPartConnection. El objeto de conexión encapsula todos los detalles de una conexión, como referencias a sus objetos consumidor y proveedor, los id. de consumidor y proveedor, referencias a puntos de conexión y sus id., referencias a los transformadores asociados a la conexión y detalles acerca del estado de la conexión, por ejemplo, si está activa o si es estática o dinámica.

Se puede proporcionar a los usuarios una manera de crear y administrar las conexiones a través del control ConnectionsZone. Se puede declarar un elemento <asp:connectionszone> en una página Web, lo que ofrece a los usuarios una UI en tiempo de ejecución que les permite conectar o desconectar controles y configurar algunos detalles de la conexión.

Cómo funcionan las conexiones

Las conexiones de elementos Web se basan en un modelo de conectividad por "extracción", lo que significa que el consumidor obtiene los datos del proveedor. Para crear una conexión, un control que actúa como proveedor de datos define un contrato de comunicación que indica los datos que puede proporcionar. Otro control, que actúa como consumidor y con conocimiento del contrato de comunicación, recupera dichos datos.

El mecanismo para establecer una conexión es un método de devolución de llamada especial: uno en el consumidor y uno en el proveedor. Sin embargo, el conjunto de controles de elementos Web se encarga de todos los detalles de devolución de llamada y comunicación, por lo que el papel del desarrollador es mínimo. Como desarrollador, si desea utilizar el método más sencillo, lo único que tiene que hacer es seleccionar un método en el proveedor para que sea el método de devolución de llamada y marcarlo en el código fuente con un atributo ConnectionProvider. A continuación, dentro de ese método, devuelva la instancia de interfaz que contiene los datos que se van a pasar al consumidor. La instancia de interfaz puede ser muy simple (por ejemplo, una sola propiedad que contenga un valor de cadena, como un código postal). Un proveedor puede implementar una de las interfaces suministradas (IWebPartField, IWebPartRow o IWebPartTable), pero, en la mayoría de los casos, es preferible crear una interfaz sencilla y personalizada con uno o más métodos o propiedades que contengan los datos que se desean compartir con un consumidor, e implementar esa interfaz en el proveedor. El método de devolución de llamada del consumidor recupera la instancia de la interfaz del proveedor. De nuevo, todo lo que necesita hacer el desarrollador es identificar (por medio de un atributo ConnectionConsumer) qué método del consumidor va a recuperar la instancia de interfaz, y asignarlo a alguna variable interna para su procesamiento y representación. Tenga en cuenta que los datos del proveedor se pasan durante la fase de preprocesamiento del ciclo de la página y del control, por lo que debe pensar en procesar los datos y actualizar la lógica necesaria en el consumidor una vez finalizado el preprocesamiento.

Nota:

Como ya se ha mencionado, el consumidor y el proveedor deben ser compatibles en cuanto al tipo de interfaz o, en caso contrario, deben utilizar un objeto WebPartTransformer para establecer la conexión.

Las canalizaciones a través de las cuales se intercambian los datos son los puntos de conexión del consumidor y proveedor. Existen varias maneras de crear un punto de conexión para un control. Como se indica en el párrafo anterior, puede utilizar la clase ConnectionConsumerAttribute o ConnectionProviderAttribute, cada una de las cuales que crea un punto de conexión de forma automática. Si elige este procedimiento, puede agregar un atributo ConnectionConsumer al método de devolución de llamada del consumidor en el código fuente y, de forma similar, agregar un atributo ConnectionProvider al método de devolución de llamada del proveedor. De esta forma se identifican los respectivos métodos de devolución de llamada y se pueden especificar algunos detalles acerca del punto de conexión, como un id. y un nombre para mostrar (que aparece en la UI para que los usuarios formen conexiones). Otro procedimiento alternativo consiste en crear un punto de conexión personalizado heredando de ConnectionPoint, o utilizar las clases ConsumerConnectionPoint y ProviderConnectionPoint o heredar de ellas. Como se ha señalado anteriormente, un control que actúa como consumidor o proveedor puede tener varios puntos de conexión.

Una conexión entre controles puede ser estática o dinámica. Las conexiones estáticas se codifican de forma declarativa en la página de alojamiento y se crean durante la fase previa a la representación de la página. Esto garantiza que la conexión está activa cuando el usuario ve la página. Para obtener un ejemplo, vea Cómo: Declarar una conexión estática entre dos controles de elementos Web. Las conexiones dinámicas se pueden crear bien mediante programación en el código del control o bien mediante declaración en la página de alojamiento. Si se declaran dos controles de servidor compatibles en una zona WebPartZoneBase de una página Web y se declara una instancia del control ConnectionsZone en la página, los usuarios pueden crear y configurar una conexión dinámica entre los controles en tiempo de ejecución.

Conexiones de elementos Web y otras funciones de ASP.NET

Las conexiones se diferencian de varias maneras de las otras técnicas de ASP.NET para transferir información entre los controles en una aplicación Web:

  • Las conexiones son una función de los elementos Web. Sólo se pueden conectar controles diseñados para conexiones de elementos Web y que residan en una zona WebPartZoneBase.

    Nota:

    Como se ha explicado antes, cualquier control de servidor ASP.NET, control personalizado o control de usuario se puede utilizar como un control de elementos Web para sacar provecho de las conexiones.

  • Las conexiones son diferentes al enlace de datos. Las conexiones entre los controles de una zona de elementos Web usan una interfaz para crear un contrato entre los controles. El enlace de datos es una conexión entre un control y un dispositivo de almacenamiento o base de datos de servidor. Las conexiones de elementos Web mueven los datos sólo entre los controles de una página.

  • Las conexiones se pueden personalizar. La configuración de conexión que indica qué controles están conectados se puede almacenar sin ningún riesgo con otros datos de personalización. Para obtener más información sobre la personalización, vea Información general sobre la personalización de elementos Web.

Clases de conexiones esenciales

La tabla siguiente muestra tres componentes del conjunto de controles Web Parts que son esenciales para las conexiones y con los que trabajará directa o indirectamente siempre que utilice conexiones.

Control Web Parts

Descripción

WebPartManager

Administra todas las conexiones entre los controles de la zona de elementos Web en una página. Se requiere un control WebPartManager (y sólo uno) para cada página de elementos Web.

WebPartZoneBase

WebPartZone

La clase base WebPartZoneBase proporciona el contexto necesario en el que los controles de servidor se pueden conectar e intercambiar datos. Se puede heredar de la clase base para crear una zona personalizada o utilizar el control WebPartZone como la zona que realmente contendrá los controles de servidor que participan en la conexión.

WebPartConnection

Representa una conexión, con referencias al proveedor y consumidor, y todos los demás componentes necesarios de una conexión.

ConnectionPoint

ProviderConnectionPoint

ConsumerConnectionPoint

La clase base ConnectionPoint define un objeto que se asocia a un consumidor o proveedor y contiene los detalles necesarios para intercambiar los datos. ProviderConnectionPoint se asocia al proveedor y ConsumerConnectionPoint se asocia al consumidor.

ConnectionsZone

Proporciona una UI que permite a los usuarios crear conexiones dinámicas, en tiempo de ejecución, entre los controles de servidor.

Vea también

Tareas

Cómo: Declarar una conexión estática entre dos controles de elementos Web

Conceptos

Información general sobre los elementos Web ASP.NET

Referencia

WebPartConnection

ConnectionPoint

Información general sobre el conjunto de controles de elementos web