Cenni preliminari sulle connessioni web part

Aggiornamento: novembre 2007

L'insieme di controlli Web part consente di creare connessioni tra i controlli server per usufruire dei vantaggi che l'utilizzo dei controlli connessi comporta rispetto ai controlli singoli e non connessi. Viene fornito un insieme completo e integrato di componenti della connessione, che consente di organizzare i controlli WebPart esistenti (server o utente) per formare connessioni con un numero minimo di operazioni, poche righe di codice e il vantaggio di non dover gestire la complessità e la sincronizzazione dei dati. Grazie ai controlli attivati per le connessioni è possibile creare connessioni dinamiche a livello di codice tra in controlli in fase di esecuzione, nonché connessioni statiche e predefinite dichiarate nel codice di una pagina Web. Agli utenti può anche essere fornita un'interfaccia utente che consenta loro di connettere o disconnettere i controlli in fase di esecuzione e di gestire le connessioni esistenti.

Le connessioni offrono diversi vantaggi a utenti e sviluppatori. Uno dei più evidenti, ad esempio, è la possibilità per gli utenti di visualizzare i propri dati in modi nuovi e diversi. Si supponga di generare un'applicazione in cui un controllo server contatta un servizio Web, restituisce record cronologici delle temperature giornaliere medie relative a uno stato ed elenca i dati in formato tabulare. Se l'utente desidera avere la possibilità di scegliere il modo in cui visualizzare i dati, il controllo server potrebbe essere connesso a un controllo per la creazione di grafici in grado di utilizzare i dati tabulari e di visualizzarli in varie viste grafico. All'utente potrebbe anche essere offerta la possibilità di decidere se visualizzare i dati in una tabella o connettere i dati sulla temperatura al controllo per la creazione di grafici. Il ricorso a nuove viste dei dati consente di rilevare nuove tendenze e relazioni tra le temperature che sarebbe più difficile osservare con i dati in formato tabulare.

Le connessioni consentono agli sviluppatori di scoprire nuove opportunità di riutilizzo del codice e di combinazione della funzionalità di controlli isolati. Si supponga che uno sviluppatore crei un controllo in cui le informazioni sull'indirizzo di un utente, incluso un codice postale, vengono salvate e rese sempre disponibili per compilare il modulo dell'indirizzo di spedizione quando l'utente effettua un ordine. Quindi aggiunge altri controlli che dipendono da un codice postale specifico, ad esempio quelli che consentono di visualizzare le informazioni meteo e le notizie in tempo reale nell'area dell'utente, nonché un controllo che esegue una ricerca delle aziende per categoria nell'ambito di un determinato codice postale. Anziché progettare ogni nuovo controllo con la stessa funzionalità di salvataggio di un codice postale, lo sviluppatore potrebbe progettare ogni controllo in modo che venga richiesta l'immissione di un codice postale. A questo punto potrebbe semplicemente connettere il controllo in cui viene già salvato il codice postale ai controlli relativi al meteo, alle notizie e agli elenchi delle aziende che accettano come input un codice postale. Ogni connessione estende l'utilità del controllo originale ed elimina la ridondanza nel codice dei nuovi controlli.

Concetti relativi alle connessioni

Una connessione Web part è un collegamento o associazione tra due controlli server che consente la condivisione dei dati. Una connessione avviene sempre tra due controlli: uno è il provider dei dati e l'altro è il consumer dei dati offerti dal provider. Un controllo può essere sia un consumer che un provider e qualsiasi tipo di controllo server, WebPart, personalizzato o utente, può essere progettato per partecipare alle connessioni. Un controllo provider è in grado di stabilire per impostazione predefinita connessioni con più consumer contemporaneamente (come nell'esempio precedente del controllo codice postale che fornisce un codice postale a un controllo informazioni meteo, un controllo notizie e un controllo elenchi di aziende). Un controllo consumer per impostazione predefinita può connettersi a un solo provider alla volta.

Le connessioni di solito vengono effettuate sempre nel contesto di un'applicazione Web part. Ciò significa che oltre ai due controlli server che partecipano alla connessione, sono richiesti almeno altri due controlli sulla pagina Web. Uno di essi è il controllo WebPartManager, presente in ogni pagina contenente controlli Web part. Il secondo controllo richiesto è una zona che eredita dalla classe WebPartZoneBase, ad esempio il controllo WebPartZone. Per creare una connessione, è necessario che due controlli server qualsiasi risiedano all'interno di un tipo di zona WebPartZoneBase.

Nella relazione tra connessioni al consumer e al provider è associato almeno un oggetto denominato punto di connessione. Poiché si basa sulla classe ConnectionPoint, un punto di connessione contiene i dettagli necessari per consentire la connessione di un controllo server a un altro controllo, quale il tipo del controllo stesso, il tipo di dati riconosciuto dal controllo, un ID per l'oggetto punto di connessione e per verificare se il controllo può formare più connessioni. Un controllo server può avere più punti di connessione. I punti di connessione di un provider sono definiti da istanze della classe ProviderConnectionPoint e quelli del consumer sono definiti da istanze della classe ConsumerConnectionPoint.

Per formare una connessione, è necessario che il consumer e il provider riconoscano entrambi lo stesso tipo di dati, che nelle connessioni Web part viene passato mediante un'istanza dell'interfaccia. Il tipo di dati riconosciuto da un controllo viene specificato nel punto di connessione associato del controllo, nella proprietà InterfaceType. Il provider e il consumer sono compatibili se riconoscono lo stesso tipo di dati. Se un provider e un consumer sono incompatibili, uno sviluppatore deve utilizzare un oggetto transformer speciale per convertire i dati del provider in un formato utilizzabile dal consumer. L'oggetto transformer eredita dalla classe WebPartTransformer base e uno sviluppatore può ereditare da tale classe per sviluppare un transformer personalizzato oppure utilizzare uno degli oggetti transformer forniti (RowToFieldTransformer o RowToParametersTransformer).

Dopo che è stata creata, una connessione è contenuta in un oggetto WebPartConnection. L'oggetto connessione incapsula tutti i dettagli su una connessione, inclusi i riferimenti ai relativi oggetti consumer e provider, gli ID del consumer e del provider, i riferimenti a qualsiasi punto di connessione e ai rispettivi ID, riferimenti a qualsiasi transformer associato alla connessione e i dettagli sullo stato della connessione (attivo, statico o dinamico).

Il controllo ConnectionsZone offre agli utenti un modo per creare e gestire le connessioni. È possibile dichiarare un elemento <asp:connectionszone> su una pagina Web, che fornisce agli utenti un'interfaccia utente in fase di esecuzione che consente loro di connettere o disconnettere i controlli e di configurare determinati dettagli sulla connessione.

Funzionamento delle connessioni

Le connessioni Web part si basano su un modello di connettività "pull", in cui il consumer ottiene i dati dal provider. Per creare una connessione, un controllo che agisce come provider di dati definisce un contratto di comunicazione che indica i dati che può fornire. Un altro controllo, che agisce come consumer ed è a conoscenza del contratto di comunicazione, recupera tali dati.

Il meccanismo per stabilire una connessione è un metodo di callback speciale: uno nel consumer e uno nel provider. Poiché, tuttavia, l'insieme di controlli Web part gestisce tutti i dettagli sul callback e sulle comunicazioni, le operazioni richieste agli sviluppatori sono minime. Se in qualità di sviluppatore si desidera utilizzare l'approccio più semplice, è sufficiente selezionare un metodo nel provider da utilizzare come metodo di callback e contrassegnarlo nel codice sorgente con un attributo ConnectionProvider. In seguito, all'interno di tale metodo, restituire l'istanza dell'interfaccia contenente i dati da passare al consumer. L'istanza dell'interfaccia può essere molto semplice (ad esempio una sola proprietà che contiene un valore stringa come un codice postale). Un provider può implementare una delle interfacce fornite (IWebPartField, IWebPartRow o IWebPartTable), ma in molti casi è preferibile creare una semplice interfaccia personalizzata con uno o più metodi o proprietà contenenti i dati che si desidera condividere con un consumer e implementare l'interfaccia nel provider. Il metodo di callback del consumer recupera l'istanza dell'interfaccia dal provider. Ancora una volta, lo sviluppatore deve solo identificare mediante un attributo ConnectionConsumer il metodo che nel consumer recupererà l'istanza dell'interfaccia e assegnarlo a qualche variabile interna per l'elaborazione e il rendering. Poiché i dati del provider vengono passati durante la fase di pre-rendering della pagina e del ciclo del controllo, è necessario pianificare l'elaborazione dei dati e l'aggiornamento dell'eventuale logica presente nel consumer al termine del pre-rendering.

Nota:

Come è stato spiegato in precedenza, il consumer e il provider devono essere compatibili per quanto riguarda il tipo di interfaccia o diversamente devono utilizzare un oggettoWebPartTransformer per stabilire la connessione.

Le pipeline attraverso le quali i dati vengono scambiati sono i punti di connessione per il consumer e il provider. Sono disponibili diversi modi per creare un punto di connessione per un controllo. Come è stato già spiegato nel paragrafo precedente, è possibile utilizzare le classi ConnectionConsumerAttribute o ConnectionProviderAttribute, ciascuna delle quali crea automaticamente un punto di connessione. Con questo approccio è possibile aggiungere un attributo ConnectionConsumer al metodo di callback del consumer nel codice sorgente e analogamente aggiungere un attributo ConnectionProvider al metodo di callback del provider. Questo metodo consente di identificare i rispettivi metodi di callback e di specificare alcuni dettagli sul punto di connessione, ad esempio un ID e un nome visualizzato (che appare nell'interfaccia utente affinché gli utenti possano formare le connessioni). Un'ulteriore alternativa consiste nel creare un punto di connessione personalizzato ereditando da ConnectionPoint o nell'utilizzare o ereditare dalle classi ConsumerConnectionPoint o ProviderConnectionPoint. Come è stato evidenziato in precedenza, un controllo che agisce come consumer o provider può disporre di più punti di connessione.

Una connessione tra controlli può essere statica o dinamica. Le connessioni statiche sono codificate in modo dichiarativo nella pagina host e vengono create nella fase precedente al rendering della pagina. Questo assicura che la connessione sia attiva quando un utente visualizza la pagina. Per un esempio, vedere Procedura: dichiarare una connessione statica tra due controlli Web part. Le connessioni dinamiche possono essere create sia a livello di codice del controllo sia in modo dichiarativo nella pagina host. Se si dichiarano due controlli server compatibili all'interno di una zona WebPartZoneBase in una pagina Web e si dichiara un'istanza del controllo ConnectionsZone sulla pagina, gli utenti possono creare e configurare una connessione dinamica tra i controlli in fase di esecuzione.

Connessioni web part e altre funzionalità ASP.NET

Le connessioni differiscono per molti aspetti dalle altre tecniche ASP.NET per il trasferimento delle informazioni tra i controlli di un'applicazione Web.

  • Le connessioni sono una funzionalità web part. È possibile connettere solo i controlli progettati per le connessioni Web part e che risiedono all'interno di una zona WebPartZoneBase.

    Nota:

    Come è stato evidenziato in precedenza, i controlli server, i controlli personalizzati o i controlli utente ASP.NET possono essere utilizzati come controlli Web part per usufruire delle connessioni.

  • Le connessioni differiscono dall'associazione dati. Le connessioni tra i controlli in una zona web part creano un contratto tra i controlli mediante un'interfaccia. L'associazione dati è una connessione tra un controllo e una periferica di archiviazione o un database back-end. Con le connessioni Web part è possibile spostare i dati solo tra i controlli di una pagina.

  • Le connessioni possono essere personalizzate. Le impostazioni di connessione che indicano i controlli connessi possono essere memorizzate in modo sicuro con altri dati di personalizzazione. Per ulteriori informazioni sulla personalizzazione, vedere Cenni preliminari sulla personalizzazione di Web part.

Classi di connessione fondamentali

Nella seguente tabella vengono illustrati tre componenti del gruppo di controlli web part fondamentali per le connessioni e con i quali si opera direttamente o indirettamente ogni volta che si utilizzano le connessioni.

Controllo web part

Descrizione

WebPartManager

Gestisce tutte le connessioni tra i controlli nella zona web part di una pagina. Per ogni pagina web part è richiesto uno e un solo controllo WebPartManager.

WebPartZoneBase

WebPartZone

La classe base WebPartZoneBase fornisce il contesto necessario in cui i controlli server possono connettersi e scambiare dati. È possibile ereditare dalla classe base per creare una zona personalizzata o utilizzare il controllo WebPartZone come zona effettiva per contenere i controlli server coinvolti in una connessione.

WebPartConnection

Rappresenta una connessione, con riferimenti al provider e al consumer, e tutti gli altri componenti necessari di una connessione.

ConnectionPoint

ProviderConnectionPoint

ConsumerConnectionPoint

La classe base ConnectionPoint definisce un oggetto associato a un consumer o provider e contiene le informazioni necessarie per lo scambio dei dati. L'oggetto ProviderConnectionPoint è associato al provider e ConsumerConnectionPoint è associato al consumer.

ConnectionsZone

Fornisce un'interfaccia utente che consente agli utenti di creare connessioni dinamiche e di runtime tra controlli server.

Vedere anche

Attività

Procedura: dichiarare una connessione statica tra due controlli Web part

Concetti

Cenni preliminari su Web part ASP.NET

Riferimenti

WebPartConnection

ConnectionPoint

Cenni preliminari sul set di controlli Web part