- Computers & electronics
- Software
- Computer utilities
- SAP
- versione per sviluppatori per Microsoft Visual Studio
- Manuale utente
- 898 Pagine
SAP versione per sviluppatori per Microsoft Visual Studio SAP Crystal Reports Manuale utente
Below you will find brief information for SAP Crystal Reports versione per sviluppatori per Microsoft Visual Studio. This software allows you to create complex and professional reports within a GUI-based program. The report can then be connected to almost any database source.
annuncio pubblicitario
Assistente Bot
Hai bisogno di aiuto? Il nostro chatbot ha già letto il manuale ed è pronto ad assisterti. Sentiti libero di fare qualsiasi domanda sul dispositivo, ma fornire dettagli renderà la conversazione più produttiva.
▼
Scroll to page 2
of
898
SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio Versione del documento: Support Package 14 – 2015-06-08 Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Sommario 1 Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net. . . . . . . . . . . . . . . . . . . . . . . . . 4 1.1 Introduzione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Definizione di SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. . . . . . . . . . 4 Novità dell'SDK di SAP Crystal Reports .NET. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .6 Migrazione dell'applicazione SAP Crystal Reports .Net. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 1.2 Configurazione dell'ambiente di sviluppo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Configurazione del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Impostazione di un progetto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.3 Nozioni di base dell'SDK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30 Architettura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Controllo CrystalReportViewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .41 Approccio di persistenza da utilizzare con SAP Crystal Reports. . . . . . . . . . . . . . . . . . . . . . . . . . . .51 Scalabilità dell'applicazione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Utilizzo di SAP Crystal Reports in una Web farm o un Web garden. . . . . . . . . . . . . . . . . . . . . . . . . . 72 Utilizzo di Crystal Reports come servizio Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Considerazioni sulla protezione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 1.4 Utilizzo di SDK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Stampa di un report. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Esportazione di un report. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 Filtro dei dati con parametri o formule. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .125 Impostazione dell'origine dati. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Visualizzazione di un report. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 Personalizzazione del controllo CrystalReportViewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .205 Utilizzo di report SAP Crystal Reports Solo lettura (RPTR). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 1.5 Esercitazioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Esercitazioni relative al modello a oggetti CrystalReportViewer. . . . . . . . . . . . . . . . . . . . . . . . . . .222 Esercitazioni relative al modello a oggetti ReportDocument. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 Esercitazioni basate sull'uso di codice ridotto in Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . 440 Esercitazioni sulla connettività dei dati. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 Altre esercitazioni. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .508 1.6 Distribuzione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .532 Componenti della distribuzione. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532 Distribuzione di Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 1.7 Creazione di report. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 Utilizzo di SAP Crystal Reports Designer incorporato. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 Creazione di formule. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678 2 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Sommario Riferimenti all'interfaccia utente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .744 1.8 Glossario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 895 Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Sommario © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 3 1 Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.1 Introduzione Questa guida in linea è progettata per favorire lo sviluppo delle applicazioni Web o Windows con l'SDK di SAP Crystal Reports .NET. Comprende esercitazioni e riferimenti alla programmazione che possono risultare utili nell'implementazione dell'SDK di SAP Crystal Reports .NET. 1.1.1 Definizione di SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio consente di creare report complessi e professionali in un programma basato su GUI. Quindi, si può connettere il report creato a quasi tutte le origini database, nonché a dati proxy, come un insieme di risultati (ad esempio, un DataSet ADO.NET). Con le procedure guidate disponibili nella finestra di progettazione GUI, è possibile impostare formattazione, raggruppamento, grafici e altri criteri. È possibile ospitare il report in un'applicazione Web o Windows, con uno dei controlli dei visualizzatori di SAP Crystal Reports. La presentazione di report in client Windows e HTML 4.0 è altamente interattiva e offre funzionalità come il drill down dei grafici, l'esplorazione dei report e la ricerca di testo. SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio viene fornito con un SDK completo. che permette di interagire con il report a livello di codice in fase di esecuzione, utilizzando uno dei quattro modelli a oggetti disponibili: ● CrystalReportViewer, il modello più semplice. ● ReportDocument, un modello con funzionalità potenziate rispetto al precedente. ● ReportClientDocument, il modello a oggetti più completo. Questo modello a oggetti è disponibile con un server RAS. ● InfoObject, modello a oggetti avanzato per la pianificazione e la configurazione di report nella struttura della piattaforma SAP BusinessObjects Business Intelligence o SAP Crystal Reports Server. Nota i modelli a oggetti CrystalReportViewer e ReportDocument sono disponibili con tutte le versioni di SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. I modelli a oggetti ReportClientDocument e InfoObject richiedono licenze aggiornate. Vedere Soluzioni di reporting per SAP BusinessObjects Business Intelligence [pagina 63]. 4 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Esistono diversi modi per correlare i report al progetto Visual Studio in uso: ● Incorporare i report direttamente nel progetto. ● Accedere ai report da una directory di file. ● Accedere ai report come Servizio Web report da un server remoto. ● Connettere i report come Crystal Services. ● Con un aggiornamento a SAP Crystal Reports Server, è possibile accedere ai report tramite il server RAS. ● Con un aggiornamento alla piattaforma SAP BusinessObjects Business Intelligence, è possibile accedervi attraverso Page Server o il server RAS contenuto in una struttura della piattaforma SAP BusinessObjects Business Intelligence. 1.1.1.1 Funzionalità disponibili in SAP Crystal Reports Designer SAP Crystal Reports Designer fornisce numerose funzionalità che non sono disponibili in SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio: Funzione Membri calcolati in grafici a campi incrociati Descrizione È possibile aggiungere righe e colonne a un grafico a campi incrociati inserendo un membro calcolato. Tali righe o colonne possono contenere calcoli personalizzati (ad esempio la differenza di vendite tra due regioni) oppure possono essere utilizzate interamente a scopo di formattazione (ad esempio inserendo una riga vuota ogni tre per migliorare la leggibilità). Le formule di calcolo possono essere progettate con la più completa flessibilità ed è possibile scegliere se farle apparire solo una volta o se ripeterle regolarmente nel campo incrociato. Oggetti Flash incorporati È possibile incorporare un oggetto Flash o un collegamento a un oggetto Flash in qualsiasi sezione di un report di SAP Crystal Reports. Riepiloghi incorporati nei campi incrociati È possibile aggiungere un calcolo aggiuntivo a un grafico a campi incrociati inserendo un riepilogo incorporato. I riepiloghi incorporati non aggiungono righe o colonne al campo incrociato. Al contrario, implicano la visualizzazione di calcoli aggiuntivi all'interno di ogni cella del campo incrociato. Ad esempio, in un report che mostra le vendite regionali è possibile inserire un calcolo per ogni regione che mostri la percentuale rispetto alle vendite totali per il paese. Anteprima modificabile Con SAP Crystal Reports Designer è possibile visualizzare un report nella scheda di progettazione o in quella di anteprima. Le capacità di formattazione sono le stesse sia nella scheda di anteprima che in quella di progettazione. Tuttavia, la Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 5 Funzione Descrizione scheda di anteprima consente di lavorare con i dati reali. Al posto di una cornice di campo che rappresenta molti valori di campo, nel report vengono visualizzati i valori reali. Codici a barre formattati SAP Crystal Reports Designer include la formula e i caratteri necessari per supportare i codici a barre Code39. È possibile utilizzare l'opzione Formatta campo per cambiare l'aspetto di un codice a barre. Cambiare l'aspetto di un codice a barre può essere necessario per: ● Ingrandire o ridurre le dimensioni del codice a barre per permetterne la lettura con uno scanner. ● Campi di ordinamento interattivi Visualizzare il codice a barre in colori diversi. È possibile progettare il proprio report in modo che gli utenti possano modificare un campo di ordinamento o una direzione di ordinamento senza aggiornare le informazioni dal database. Questa operazione è possibile aggiungendo al report un Controllo ordinamento. Un Controllo ordinamento può risultare particolarmente utile per diversi motivi: ● Consente agli utenti di ordinare i dati del report per eseguire ulteriori analisi senza dover lasciare l'area di disegno del report. ● Riduce l'elaborazione per il database. ● Riduce il tempo di attesa dell'ordinamento dei dati. ● Consente agli utenti di ordinare i campi del report anche se non dispongono di una connessione o dei diritti di accesso al database al momento della visualizzazione. Workbench Nel workbench è possibile creare progetti contenenti uno o più report. Le opzioni presenti sulla barra degli strumenti consentono di aggiungere, rimuovere o rinominare cartelle, report e pacchetti oggetti. È possibile riorganizzare i file in una o più cartelle trascinandoli e rilasciandoli dove si desidera farli apparire. È inoltre possibile trascinare un file di report da Windows Explorer e rilasciarlo nella cartella desiderata nel workbench. 1.1.2 Novità dell'SDK di SAP Crystal Reports .NET Questa sezione contiene un breve riepilogo delle nuove funzionalità e dei miglioramenti presenti in SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. 6 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Per altre informazioni importanti sul prodotto, vedere le note di rilascio fornite con la distribuzione del prodotto. Formato SAP Crystal Reports Solo lettura (RPTR) Il formato SAP Crystal Reports Solo lettura (RPTR) consente di condividere i report Crystal proteggendo allo stesso tempo la proprietà intellettuale. I file RPTR possono essere aggiornati in fase di esecuzione ma la definizione report non può essere modificata né esportata. I file RPTR possono essere visualizzati con un controllo visualizzatore di report. Per motivi di sicurezza, i file RPTR non possono essere convertiti in file RPT. I file RPTR non possono essere aperti con un'applicazione di progettazione in grado di modificare il report, come ad esempio SAP Crystal Reports 2011 Designer o l'applicazione di progettazione incorporata di Visual Studio. È possibile creare un report RPTR esportando un report RPT nel formato RPTR. Se un file che include un file di sottoreport viene esportato in RPTR, sia il sottoreport che il report verranno esportati come RPTR. I file RPTR non possono essere aggiunti come sottoreport a un file RPT. Per ulteriori informazioni, vedere Utilizzo di report SAP Crystal Reports Solo lettura (RPTR) [pagina 221]. Nuovi formati di esportazione ● Microsoft Excel 2007 (XLSX) Solo dati I report possono ora essere esportati in formato Microsoft Excel 2007 (XLSX). Il formato XLSX supporta "Big Grid". Questa funzionalità consente di utilizzare fino a 16.385 colonne e 1.048.576 di righe in una sola cartella di lavoro. ● SAP Crystal Reports Solo lettura (RPTR) È possibile esportare i report nel formato SAP Crystal Reports Solo lettura (RPTR) utilizzando l'applicazione di progettazione incorporata di Visual Studio e l'SDK. Non è però possibile esportare file RPT in RPTR utilizzando il visualizzatore di report. Per ulteriori informazioni, vedere Formati di esportazione disponibili [pagina 114]. Supporto di applicazioni WPF da parte del visualizzatore di report SAP Crystal È ora disponibile un controllo CrystalReportViewer per applicazioni Windows Presentation Foundation (WPF). Supporto 64 bit In SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio x64 (AMD64) è supportata l'architettura a 64 bit. Tuttavia, l'architettura IA64 (Itanium) non è attualmente supportata. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 7 1.1.3 Migrazione dell'applicazione SAP Crystal Reports .Net Questa sezione contiene informazioni sulla migrazione dell'applicazione SAP Crystal Reports .Net a SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. Nota SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio include una serie completa di funzionalità ed è disponibile come download gratuito integrabile con Visual Studio 2010 o versione successiva. SAP Crystal Reports versione per sviluppatori per Microsoft Visual Studio non è incluso nell'applicazione SAP Crystal Reports Designer. 8 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Opzioni di migrazione tra le versioni di SAP Crystal Reports In questo diagramma vengono illustrati i vari percorsi di migrazione tra le versioni di SAP Crystal Reports. Migrazione a SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio aggiorna automaticamente i progetti precedenti alla versione corrente. Se un progetto contiene riferimenti a componenti precedenti, verrà richiesto di eseguire l'aggiornamento. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 9 Quando si fa clic sul pulsante Sì, i progetti e i relativi file vengono aggiornati alla versione corrente di SAP Crystal Reports. Quando si fa clic sul pulsante No, il progetto viene modificato affinché vengano utilizzati i riferimenti originali. Alcune funzioni precedenti vengono disabilitate poiché questa funzionalità specifica non è supportata dai componenti più vecchi. Nota Se il file di progetto (qualsiasi file ASPX che contenga componenti di SAP Crystal Reports o il file web.config) è bloccato, l'aggiornamento o la modifica hanno esito negativo. Informazioni correlate Soluzioni di reporting per SAP BusinessObjects Business Intelligence [pagina 63] 1.1.3.1 Problemi di migrazione Un report basato su un'origine dati ADO.NET non può essere utilizzato se la destinazione del progetto è .NET 4.x Framework I report basati su un'origine dati ADO.NET non possono essere utilizzati se la destinazione del progetto è .NET 4.x Framework. Verrà visualizzato il seguente errore: "Informazioni aggiuntive: è stato generato un assembly in modalità mista in contrasto con la versione 'v2.0.50727' del runtime. Impossibile caricare l'assembly nel runtime 4.x senza informazioni di configurazione aggiuntive". Il problema può essere risolto aggiornando il file .config del progetto. Aggiungere le seguenti righe di codice all'interno della sezione<configurazione></configurazione> del file: <startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.x"/> </startup> 1.1.3.2 Limitazioni a 64 bit In SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio x64 (AMD64) è supportata l'architettura a 64 bit. Tuttavia, l'architettura IA64 (Itanium) non è attualmente supportata. Funzionalità attualmente non supportate in scenari a 64 bit: ● Esportazione di report in formato HTML. ● Componenti di mappatura geografica. ● Componenti dei caratteri del codice a barre Azalea. 10 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.2 Configurazione dell'ambiente di sviluppo In questa sezione vengono fornite istruzioni dettagliate su come installare e configurare l'ambiente di sviluppo e su come creare un sito Web o un progetto Windows in SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. 1.2.1 Configurazione del sistema In questa sezione vengono fornite informazioni generali su come impostare l'ambiente di sviluppo per il test e lo sviluppo di applicazioni Windows e siti Web che utilizzano l'SDK di SAP Crystal Reports .Net. 1.2.1.1 Installazioni necessarie Per poter creare applicazioni Web o Windows che utilizzino SAP Crystal Reports, è necessario prima installare SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. 1.2.1.1.1 Versioni supportate di Visual Studio Se si intende utilizzare SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio, è necessario verificare che la versione di Visual Studio installata supporti SAP Crystal Reports. Sono supportate le versioni Visual Studio Ultimate, Premium e Professional per Visual Studio 2010 e versioni successive. Le versioni Visual Studio Express non sono supportate da SAP Crystal Reports. Informazioni correlate Soluzioni di reporting per SAP BusinessObjects Business Intelligence [pagina 63] 1.2.1.1.2 Versioni di SAP Crystal Reports Sono disponibili diverse versioni di SAP Crystal Reports. Molte procedure descritte nel presente documento sono specifiche della versione. Per utilizzare questo documento nel modo più adeguato alle proprie esigenze si consiglia di determinare innanzitutto la versione di SAP Crystal Reports installata. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 11 1.2.1.1.2.1 Per determinare la versione di SAP Crystal Reports utilizzata 1. Accedere alla cartella GAC (Global Assembly Cache) nel percorso C:\WINNT\Assembly o C:\Windows \Assembly. 2. Individuare il file CrystalDecisions.CrystalReports.Engine. Nota Se sono state installate più versioni di SAP Crystal Reports, Cache assembly globale conterrà più versioni di questi file. La selezione del file CrystalDecisions.CrystalReports.Engine è dovuta al fatto che questo file è incluso in tutte le versioni di SAP Crystal Reports. 3. Prestare attenzione alla colonna Versione mostrata nella finestra, che indica la "Versione assembly". 4. Individuare il numero più elevato relativo a un determinato assembly. 5. Confrontare la versione dell'assembly con il numero di versione indicato nel grafico Versioni di SAP Crystal Reports. 1.2.1.1.2.2 Versioni di SAP Crystal Reports Prodotto Versione assembly SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio (.NET 4.0 Framework) 13.0.2000.0 SAP Crystal Reports 2008 (.NET 2.0 Framework) 12.0.2000.0 SAP Crystal Reports 2008 (.NET 1.1 Framework) 12.0.1100.0 SAP Crystal Reports XI Release 2 11.5.3300.0 SAP Crystal Reports XI Release 1 11.0.3300.0 SAP Crystal Reports Basic per Visual Studio 2008 10.5.3600.0 SAP Crystal Reports per Visual Studio 2005 10.2.3600.0 SAP Crystal Reports 10 10.0.3300.0 SAP Crystal Reports 9 9.2.3300 SAP Crystal Reports per Visual Studio 2003 9.1.5000 Per SAP Crystal Reports 2008 e SAP Crystal Reports 2008 SP1 viene utilizzato lo stesso numero di versione assembly. Per controllare se è stato installato SAP Crystal Reports 2008 SP1, verificare che la versione del file inizi con 12.1 e non con 12.0. 12 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.2.1.1.3 Installazione del servizio di aggiornamento di SAP Crystal Reports SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio offre ora un Servizio di aggiornamento supplementare per verificare aggiornamenti, hot fix e correzioni per SAP Crystal Reports. Il Servizio di aggiornamento di SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio non viene fornito come parte del programma di installazione. È quindi necessario scaricarlo e procedere all'installazione separatamente. 1. Dopo aver installato SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio, avviare Visual Studio e creare un sito Web o un progetto Windows. 2. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto in grassetto e scegliere Aggiungi Nuovo elemento . 3. Nella finestra di dialogo Aggiungi nuovo elemento, selezionare Report Crystal. 4. Nel campo Nome immettere Test.rpt e quindi fare clic su Aggiungi. Nota Se si utilizza per la prima volta SAP Crystal Report Designer incorporato viene richiesto di accettare il Contratto di licenza dell'utente finale. Dopo aver accettato il contratto si apre la finestra di dialogo Servizio di aggiornamento. Se SAP Crystal Report Designer incorporato è già aperto, aprire manualmente la finestra di dialogo Servizio di aggiornamento. Si apre SAP Crystal Reports Designer incorporato, che visualizza il nuovo report. 5. Se la finestra di dialogo Servizio di aggiornamento non viene visualizzata, fare clic su Controlla aggiornamenti nel menu Crystal Reports. Se il Servizio di aggiornamento di SAP Crystal Reports non è installato, viene richiesto se si desidera installarlo. 6. Nella finestra di dialogo Servizio di aggiornamento, fare clic su Sì. Viene caricato il sito Web del Servizio di aggiornamento di SAP Crystal Reports, che fornisce un collegamento per scaricare il Servizio di aggiornamento. 7. Scaricare e installare il Servizio di aggiornamento di SAP Crystal Reports. 8. Avviare nuovamente Visual Studio. 9. Aprire Test.rpt. SAP Crystal Report Designer incorporato si avvia e visualizza il report. 10. Dal menu Crystal Reports, fare clic su Controlla aggiornamenti. Il Servizio di aggiornamento si avvia e controlla gli aggiornamenti disponibili. È possibile accettare o rifiutare gli aggiornamenti disponibili. 1.2.1.1.4 Codice prodotto SAP Crystal Reports Il codice del prodotto è una stringa alfanumerica lunga 19 cifre o caratteri. Quando in SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio si creano progetti di distribuzione per cui viene utilizzato Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 13 Windows Installer, può essere necessario un codice prodotto per convalidare la licenza delle applicazioni Web o Windows. 1.2.1.2 Verifiche necessarie Per sviluppare un sito Web o un'applicazione Windows che utilizza l'SDK di SAP Crystal Reports .NET, è necessario verificare che i componenti di Crystal Reports Developer siano stati correttamente installati e integrati con Visual Studio. Per sviluppare un sito Web, è necessario verificare inoltre che la directory virtuale dei visualizzatori sia stata correttamente installata nei server di sviluppo, di distribuzione e Web. In questa sezione vengono fornite informazioni dettagliate sulle impostazioni da verificare prima di creare un'applicazione SAP Crystal Reports .NET. Informazioni correlate Versioni supportate di Visual Studio [pagina 11] 1.2.1.2.1 Verifica dell'installazione di SAP Crystal Reports Per verificare che il componente SAP Crystal Reports di Visual Studio sia installato, controllare che venga visualizzato nella finestra di dialogo relativa all'aggiunta di un nuovo elemento di Visual Studio. 1. Avviare Visual Studio. 2. Creare un nuovo progetto Web o Windows (in qualsiasi lingua) o aprirne uno già esistente. 3. Dal menu Progetto scegliere Aggiungi nuovo elemento. Nota è necessario aggiungere i nuovi file di report direttamente al progetto. Impossibile creare un nuovo report Crystal in Visual Studio tramite il menu File. 4. Nella finestra di dialogo Aggiungi nuovo elemento, scorrere verso il basso e verificare che Crystal Reports sia incluso tra gli elementi disponibili. 1.2.1.2.2 Directory dei visualizzatori SAP Crystal Reports si basa su una directory virtuale che consente l’accesso ai visualizzatori. La directory virtuale e il percorso di file sottostante sono esclusivi di ogni versione di SAP Crystal Reports; in tal modo, le versioni successive di SAP Crystal Reports installate sullo stesso computer funzioneranno senza conflitti. 14 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.2.1.2.2.1 Percorso predefinito della directory dei visualizzatori Se SAP Crystal Reports è stato installato con le impostazioni e i percorsi di file predefiniti, la directory virtuale visualizzatori verrà configurata come mostrato di seguito. Tabella 1: Versione Framework Percorso file SAP Crystal Reports, 4.x Framework Percorso per il server di sviluppo ASP.NET: versione per sviluppa­ \Windows\Microsoft.NET\Framework tori per Microsoft Vi­ \v4.0.30319\ASP.NETClientFiles sual Studio \crystalreportviewers13 Percorso per IIS: \inetpub\wwwroot\aspnet_client\system_web \4_0_30319\crystalreportviewers13 SAP Crystal Reports, versione per sviluppa­ tori per Microsoft Vi­ sual Studio 2.0 Framework Percorso per il server di sviluppo ASP.NET: \Windows\Microsoft.NET\Framework \v2.0.50727\ASP.NETClientFiles \crystalreportviewers13 Percorso per IIS: \inetpub\wwwroot\aspnet_client\system_web \2_0_50727\crystalreportviewers13 1.2.1.2.2.2 Per individuare la directory dei visualizzatori 1. Nel Pannello di controllo, fare doppio clic su Strumenti di amministrazione, quindi su Internet Information Services. 2. Nella finestra di dialogo Internet Information Services, espandere il nodo Siti Web, quindi il nodo Sito Web predefinito. 3. Individuare tutte le cartelle contenenti una cartella crystalreportsviewers13. 4. Fare clic con il pulsante destro del mouse su ogni cartella crystalreportsviewers13 e scegliere Proprietà. 5. Nella finestra di dialogo Proprietà confermare che la configurazione del percorso locale è corretta per la versione in uso di SAP Crystal Reports o Visual Studio. 1.2.1.2.3 Directory dei report di esempio Alcuni degli esempi di funzionalità, degli scenari di collegamento report e delle esercitazioni si basano su report di esempio disponibili con SAP Crystal Reports. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 15 È possibile scaricare i report di esempio dal sito: http://www.sdn.sap.com/irj/boc/downloads 1.2.2 . Impostazione di un progetto Questa sezione rappresenta un'area di apprendimento fondamentale per sviluppatori esperti e di livello intermedio. Vengono illustrate le procedure consigliate da eseguire per creare e configurare un nuovo progetto Windows o un nuovo sito/progetto Web con SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. Il nuovo progetto creato costituisce anche un requisito preliminare per le esercitazioni fornite con questa Guida in linea. 1.2.2.1 Configurazione di un sito Web in Visual Studio In questa sezione, viene descritta la procedura per la configurazione di siti Web in Visual Studio. Il sito Web che verrà così creato fungerà da prerequisito per le esercitazioni sullo sviluppo di codice fornite con la presente Guida in linea. 1.2.2.1.1 Creazione di un nuovo sito Web in Visual Studio 1. Avviare Visual Studio. 2. Nel menu File, scegliere Nuovo sito Web. 3. Nella finestra di dialogo Nuovo sito Web, scegliere Sito Web ASP.NET. 4. Nell'elenco a discesa Percorso, selezionare File system. 5. Nell'elenco a discesa Lingua, selezionare la lingua del codice che si desidera utilizzare. 6. Nella campo di testo Percorso immettere il percorso di directory C:\WebSites\ seguito dal nome del progetto. C:\WebSites\NomeProgetto 7. Fare clic su OK. 1.2.2.1.2 1.2.2.1.2.1 Preparazione del Web Form Creazione del Web Form In questa sezione viene configurata la classe di codice sottostante per il Web Form. 16 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Nota i termini "Web Form", "pagina ASPX" e "Default.aspx" vengono utilizzati in maniera intercambiabile. 1. In Esplora soluzioni, fare doppio clic su Default.aspx per aprire il Web Form. 2. Dal menu Visualizza, scegliere Codice. Si apre la classe del codice sottostante chiamata _Default. Il file della classe si chiama Default.aspx.cs o Default.aspx.vb. Nota se la pagina Default.aspx è stata creata con il codice inline, questo codice non viene posizionato in un file separato. In questo caso, eliminare la pagina ASPX e ricrearla. Durante la creazione della pagina ASPX, selezionare la casella di controllo "Inserisci codice in un file separato". 3. Se si sta scrivendo la classe con Visual Basic, digitare "Option Strict On" nella parte superiore della classe. Nota è consigliabile impostare Option Strict On all'inizio di qualsiasi classe Visual Basic all'interno del sito Web, poiché impone l'utilizzo di procedure consigliate quando si crea il codice, con dichiarazioni di variabili con tipizzazione forte e conversione valida, entrambe controllate in fase di compilazione. I controlli in fase di compilazione obbligatori possono ridurre il numero delle eccezioni in fase di esecuzione. 1.2.2.1.2.2 Per aggiungere istruzioni Imports e using che facciano riferimento a spazi dei nomi 1. Aprire la pagina Default.aspx. 2. Dal menu Visualizza, scegliere Codice. Verrà visualizzata la classe di codice sottostante relativa al Web Form. 3. Sopra la firma della classe aggiungere una dichiarazione "Imports" [Visual Basic] o "using" [C#] nella parte superiore della classe contenente i seguenti spazi dei nomi SAP Crystal Reports. Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.Shared using CrystalDecisions.CrystalReports.Engine; using CrystalDecisions.Shared; Nota le classi di questi due assembly vengono generalmente utilizzate in tutte le esercitazioni. L'aggiunta di eventuali assembly occasionalmente richiesti verrà illustrata all'utente nell'ambito delle esercitazioni specifiche. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 17 1.2.2.1.2.3 Per aggiungere un metodo di supporto privato per il codice di configurazione di SAP Crystal Reports All'interno della classe aggiungere un nuovo metodo di supporto privato, senza valore restituito, denominato ConfigureCrystalReports(). Private Sub ConfigureCrystalReports() End Sub private void ConfigureCrystalReports() { } Il metodo ConfigureCrystalReports() consente agli utenti di interagire con il report in fase di esecuzione. Controlla inoltre l'interazione a livello di programmazione con il report. Successivamente si aggiunge un gestore eventi Page_Init, che consente di richiamare il metodo ConfigureCrystalReports(). Il richiamo del metodo ConfigureCrystalReports() da questo gestore eventi garantisce l'esecuzione del codice di configurazione del report Crystal durante l'evento di inizializzazione della pagina. 1.2.2.1.2.4 Per aggiungere un gestore eventi Page_Init alla classe di codifica sottostante Il gestore eventi Page_Load viene di norma impiegato per immettere il codice di configurazione del Web Form in un'applicazione Web ASP.NET per richiamare il codice durante l'evento Page.Load. Tuttavia, il codice di configurazione del report Crystal deve essere richiamato con anticipo, durante l'evento Page.Init. 1. Aggiungere l'evento Page_Init al codice. ○ Se il codice viene scritto in Visual Basic, selezionare Page Events dall'elenco a discesa in alto a sinistra e l'evento Init dall'elenco a discesa in alto a destra. Il gestore di eventi Page_Init viene aggiunto alla classe di codice sottostante utilizzata. Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init End Sub ○ Se il codice viene scritto in C#, immettere il gestore eventi Page_Init utilizzando la sintassi esatta indicata. private void Page_Init(object sender, EventArgs e) { } Nota in un Web form C# di Visual Studio 2005 o versioni successive, qualsiasi gestore eventi Page_Init, Page_Load o Page_PreRender nella classe code-behind class viene automaticamente collegato all'evento Init, Load o PreRender. Per poter richiamare la firma del gestore eventi è necessaria una perfetta corrispondenza. 18 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Questa funzione si utilizza quando il parametro AutoEventWireup dell'istruzione nella parte superiore della pagina ASPX della visualizzazione HTML è impostato su True. Nelle versioni precedenti di Visual Studio .NET la direttiva Page AutoEventWireup era sempre impostata su False, mentre nei Web Form C# in Visual Studio 2005 e versioni successive la direttiva Page AutoEventWireup è per impostazione predefinita impostata su True. 2. Nel gestore eventi Page_Init per Visual Basic o C#, immettere una chiamata al metodo di supporto ConfigureCrystalReports(). ConfigureCrystalReports() ConfigureCrystalReports(); 3. Dal menu File, scegliere Salva tutto. 1.2.2.1.3 Aggiunta di un controllo CrystalReportViewer a un sito Web 1. Aprire la pagina Default.aspx. 2. Fare clic sul pulsante Progettazione in fondo alla vista del modulo. 3. Nella casella degli strumenti, aprire il nodo Creazione report per individuare il controllo CrystalReportViewer. Nota Nelle versioni precedenti di SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio il controllo CrystalReportViewer veniva visualizzato nel nodo Crystal Reports. 4. Trascinare il controllo CrystalReportViewer nel Web Form. 5. Dal menu File, scegliere Salva tutto. Quando si aggiunge un controllo CrystalReportViewer all'applicazione, i riferimenti agli assembly SAP Crystal Reports vengono automaticamente aggiunti al progetto. 1.2.2.1.4 Configurazione del file Web.Config Un Web.Config in un'applicazione Web ASP.NET archivia le impostazioni globali come le informazioni sulla connessione del database, i riferimenti all'assembly e la gestione degli errori. Questo file è scritto in XML ed è necessario che il suo elemento principale sia sempre <configurazione>. Questa è una configurazione avanzata ed è facoltativa. Gli elementi seguenti sono specifici di SAP Crystal Reports e possono essere aggiunti al file Web.Config. Nota è possibile che i numeri di versione cambino in base al prodotto di cui si dispone. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 19 Nota in .NET 2.0 o versione successiva, il tag section nel file Web.Config deve utilizzare la seguente sintassi: <configSections> <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="printControl" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections> CrystalImageCleaner Il processo CrystalImageCleaner elimina automaticamente le immagini generate dinamicamente rappresentate dal comando CrystalReportViewer. Questa impostazione consente di impostare l'intervallo di tempo tra la scansione della directory delle immagini e il tempo minimo prima che i file vengano eliminati. Questo elemento viene aggiunto automaticamente al file Web.Config quando si aggiunge il comando CrystalReportViewer al sito Web. Corrisponde alla classe CrystalImageCleaner. ● CrystalImageCleaner-Sleep inizializza la quantità di tempo in millisecondi durante la quale l'utilità di eliminazione immagini rimane inattiva prima di eseguire la scansione e l'eliminazione dei file di immagine nella directory delle immagini dinamiche. ● CrystalImageCleaner-Age inizializza la quantità di tempo in millisecondi prima che un file venga eliminato. ● CrystalImageCleaner-AutoStart controlla il processo CrystalImageCleaner. L'utilità di eliminazione cancella le immagini temporanee create durante la visualizzazione di un report. Nota in un singolo processo di lavoro ASP.NET è possibile avviare una sola utilità di eliminazione. <appSettings> <add key="CrystalImageCleaner-AutoStart" value="true" /> <add key="CrystalImageCleaner-Sleep" value="60000" /> <add key="CrystalImageCleaner-Age" value="120000" /> </appSettings> CrystalImageHandler L'elemento CrystalImageHandler visualizza tutte le immagini dinamiche nel controllo CrystalReportViewer. Questa impostazione configura il processo di lavoro ASP.NET per reindirizzare le richieste effettuate a CrystalImageHandler.aspx a una classe di gestione immagini solo interna. Se non si dispone dell'impostazione CrystalImageHandler nel file Web.Config, non verranno visualizzate le immagini nel sito Web. Questo elemento 20 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net viene aggiunto automaticamente al file Web.Config quando si aggiunge il comando CrystalReportViewer al sito Web. <system.web> <httpHandlers> <add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/> </httpHandlers> </system.web> documentView L'elemento documentView controlla la modalità di visualizzazione del report nel canvas del report. Le impostazioni disponibili sono due: ● Se si imposta il valore su printlayout vengono visualizzati un bordo grigio intorno al report e un'ombreggiatura sull'area di disegno. Questo è il valore predefinito. ● Se si imposta il valore su weblayout l'area di disegno verrà riempita con il report. <configSections> <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections> <businessObjects> <crystalReports> <crystalReportViewer> <add key="documentView" value="weblayout"/> </crystalReportViewer> </crystalReports> </businessObjects> EnableTextClipping L'elemento EnableTextClipping controlla se il testo del campo viene tagliato. Se è impostato su true, il testo contenuto in un campo non si sovrapporrà al testo presente nel campo accanto. <configSections> <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections> <businessObjects> <crystalReports> <crystalReportViewer> <add key="EnableTextClipping" value="true"/> </crystalReportViewer> Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 21 </crystalReports> </businessObjects> globalResourcePath L'elemento globalResourcePath è il riferimento al percorso della directory di file per le risorse globali. Le risorse relative alla lingua personalizzate contenute in questa directory del file si trovano in una posizione centrale e possono essere condivise da più applicazioni Web. Questa impostazione consente di accedere alle risorse globali in un sito Web specifico. In SAPCrystalReports.NET, i file predefiniti relativi alle risorse non sono forniti all'installazione del prodotto, ma è possibile scaricarli dal sito Web del supporto tecnico di SAP BusinessObjects: http://help.sap.com. È necessario aggiungere manualmente questo elemento al file Web.Config del sito Web. <appSettings> <add key="globalResourcePath" value="c:\CrystalReportViewer_resource_files\"/> </appSettings> maxNumberListOfValues L'elemento maxNumberListOfValues controlla il numero di elementi LOV che verranno inviati al client e quindi il numero di valori visualizzati nel riquadro dei parametri. Quando è impostato questo valore, solo i primi n valori verranno visualizzati in un elenco di valori. Sarà possibile scorrere più set di valori nella finestra di dialogo Avanzate in base alla dimensione dell'elenco e al valore dell'elemento maxNumberListOfValues. Se si dispone, ad esempio, di 180 valori e si imposta l'elemento maxNumberListOfValues su 50, nel riquadro dei parametri verranno visualizzati solo i primi 50 valori. Sarà possibile scorrere tutti e 180 i valori nella finestra di dialogo Avanzate, in cui saranno visualizzati tra gruppi di 50 valori e un gruppo di 30 valori. È consigliabile che questo valore sia sempre maggiore di 0. Il valore predefinito è 200. <configSections> <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections> <businessObjects> <crystalReports> <crystalReportViewer> <add key="maxNumberListOfValues" value="50"/> </crystalReportViewer> </crystalReports> </businessObjects> 22 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net controllo di stampa L'elemento printControl consente di stampare il report direttamente sulla stampante locale. La directory di installazione predefinita è C:\Programmi (x86)\SAP BusinessObjects\Crystal Reports for .NET Framework 4.0\Common\Crystal Reports 2011\crystalreportviewers. Questa impostazione rende il file .cab visibile sul sito Web SAP Crystal Reports.NET. È necessario aggiungere manualmente questo elemento al file Web.Config del sito Web. <configSections> <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="printControl" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections> <businessObjects> <crystalReports> <printControl> <add key="url" value="http://localhost/PrintControl.cab" /> </printControl> </crystalReports> </businessObjects> processingIndicatorDelay L'elemento processingIndicatorDelay controlla l'intervallo di tempo che trascorre prima della visualizzazione dell'indicatore di elaborazione del report. Il valore è specificato in millisecondi. Se il valore viene impostato su 0, l'indicatore di elaborazione del report viene disattivato. Il valore predefinito è 200 ms. <configSections> <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections> <businessObjects> <crystalReports> <crystalReportViewer> <add key="processingIndicatorDelay" value="20"/> </crystalReportViewer> </crystalReports> </businessObjects> processingIndicatorText L'elemento processingIndicatorText controlla il testo visualizzato nell'indicatore di elaborazione del report. Il testo predefinito è: Attendere il completamento dell'elaborazione del documento. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 23 <configSections> <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections> <businessObjects> <crystalReports> <crystalReportViewer> <add key="processingIndicatorText" value="Thank you for waiting."/> </crystalReportViewer> </crystalReports> </businessObjects> reportMappings L'elemento reportMappings aggiorna i siti Web creati in Visual Studio 2003 che utilizzano report incorporati in siti Web non incorporati quando vengono aperti in Visual Studio 2005 o versioni successive. Questa impostazione converte il file dll creato in Visual Studio 2003 in un file del disco. Visual Studio 2005 e 2008 non supportano i siti Web incorporati ed è necessario modificare il file di configurazione Web per accertarsi che il report sia ancora funzionale con la nuova versione di Visual Studio. È necessario aggiungere manualmente questo elemento al file Web.Config del sito Web. L'impostazione reportMappings richiede un percorso assoluto. Nota questo elemento è valido solo per Visual Studio 2005 e Visual Studio 2008. <configSections> <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="reportMappings" type="CrystalDecisions.Shared.ReportMappingHandler" /> </sectionGroup> </sectionGroup> </configSections> <businessObjects> <crystalReports> <reportMappings> <add reportName="World Sales Report.rpt" path="C:\Report\World Sales Report.rpt" /> </reportMappings> </crystalReports> </businessObjects> resourceURI L'elemento resourceURI imposta il percorso della directory crystalreportviewers nell'applicazione Web. La directory crystalreportviewers contiene tutti i file richiesti dal visualizzatore. <configSections> 24 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections> <businessObjects> <crystalReports> <crystalReportViewer> <add key="resourceURI" value="~/crystalreportviewers12" /> </crystalReportViewer> </crystalReports> </businessObjects> serverFileReportManager L'elemento serverFileReportManager è un servizio Web che enumera i file di server sul server. Questa impostazione consente di ottenere un elenco di oggetti (cartelle e report) da un computer remoto. Questa impostazione assegna la radice della directory del file per il server. In questo esempio, la radice è impostata su c: \inetpub\wwroot. È necessario aggiungere manualmente questo elemento al file Web.Config del sito Web. Nota corrisponde alla classe serverFileReportManager. <configSections> <sectionGroup name="crystalDecisions"> <section name="serverFileReportManager" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </configSections> <crystalDecisions> <serverFileReportManager> <add key="rootDirectory" value="c:\inetpub\wwwroot" /> </serverFileReportManager> </crystalDecisions> UseAsynchronousRequests Per impostazione predefinita, le richieste asincrone sono consentite nel visualizzatore DHTML. Se si desidera attivare il pulsante Indietro nel browser dell'utente, per utilizzare il visualizzatore DHTML, è necessario disattivare le richieste asincrone impostando questo parametro su false. Nota è consigliabile non impostare l'elemento UseAsynchronousRequests su false. Così facendo infatti si disattiverebbe la finestra Avanzate nel riquadro dei parametri, così come alcuni miglioramenti apportati alle prestazioni del visualizzatore e alcune funzionalità avanzate relative all'aspetto. <context-param> Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 25 <param-name>crystal_use_asynchronous_requests</param-name> <param-value>false</param-value> </context-param> UseBrowserLocale L'elemento UseBrowserLocale recupera le impostazioni relative alla lingua nel browser per il controllo CrystalReportViewer. Se impostata su true, l'impostazione configura il comando CrystalReportViewer per osservare le impostazioni internazionali del browser. Se impostata su false, l'impostazione limita le impostazioni internazionali che vengono visualizzate pagina per pagina. È necessario aggiungere manualmente questo elemento al file Web.Config del sito Web. <configSections> <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections> <businessObjects> <crystalReports> <crystalReportViewer> <add key="UseBrowserLocale" value="true" /> </crystalReportViewer> </crystalReports> </businessObjects> Esempio File Web.Config campione <?xml version="1.0"?> <configuration> <appSettings> <add key="CrystalImageCleaner-AutoStart" value="true"/> <add key="CrystalImageCleaner-Sleep" value="60000"/> <add key="CrystalImageCleaner-Age" value="120000"/> </appSettings> <connectionStrings/> <system.web> <compilation debug="true"> <assemblies> <add assembly="CrystalDecisions.Web, Version=13.0.2000, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="CrystalDecisions.Shared, Version=13.0.2000, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="CrystalDecisions.ReportSource, Version=13.0.2000, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="CrystalDecisions.CrystalReports.Engine, Version=13.0.2000, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> </assemblies> </compilation> <authentication mode="Windows"/> <httpHandlers> <add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=12.1.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/> </httpHandlers> </system.web> 26 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net </configuration> Informazioni correlate Stampa Web: Configurazione della localizzazione basata su browser Web: Configurazione di risorse personalizzate globali o locali Procedura: Aggiungere o rimuovere riferimenti in Visual Studio Versioni di SAP Crystal Reports 1.2.2.2 Configurazione di un progetto Windows in Visual Studio Questa sezione rappresenta un'area di apprendimento fondamentale per sviluppatori esperti e di livello intermedio. Vengono illustrate le procedure consigliate da eseguire per creare e configurare un nuovo progetto Windows con SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. Nello specifico, in questa sezione viene descritta la procedura per l'impostazione di un progetto Windows mediante l'impiego di un modello di codifica standard. Nell'ambito di tale procedura, si entrerà nella classe Form1 e si immetterà il codice necessario. Il progetto Windows basato su codice che verrà così creato fungerà da prerequisito per le esercitazioni sullo sviluppo di codice fornite con la presente Guida in linea. 1.2.2.2.1 Creazione di un nuovo progetto Windows in Visual Studio 1. Avviare Visual Studio. 2. Scegliere Nuovo dal menu File e quindi fare clic su Progetto. 3. Nella finestra di dialogo Nuovo progetto selezionare una cartella della lingua per C# o Visual Basic dall'elenco Tipi progetto. 4. Nell'elenco Modelli, scegliere Applicazione Windows Form. 5. Nel campo Nome, sostituire il nome predefinito con il nome del progetto creato. Utilizzare una convenzione di denominazione Pascal che prevede l'impostazione della prima lettera del nome del progetto in caratteri maiuscoli, poiché il nome del progetto diventa anche il nome dello spazio dei nomi per l'assembly generato dal progetto. 6. Fare clic su OK. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 27 1.2.2.2.2 Applicazione di impostazioni standard dei progetti Visual Basic (opzionale) È necessario apportare solo una modifica di lieve entità alle impostazioni di progetto in un progetto Visual Basic per configurare quest'ultimo in modo da poterlo utilizzare nelle esercitazioni fornite con la presente documentazione. 1. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto in grassetto situato sotto il nome della soluzione, quindi selezionare Proprietà. 2. Nella visualizzazione Proprietà fare clic sulla scheda Compila. 3. Nell'elenco Option Strict fare clic su On. 4. Chiudere la visualizzazione Proprietà. 5. Dal menu File, scegliere Salva tutto. Nota è consigliabile abilitare OptionStrict all'inizio di qualsiasi progetto Visual Basic. poiché impone l'utilizzo di procedure consigliate quando si crea il codice, con dichiarazioni di variabili con tipizzazione forte e conversione valida, entrambe controllate in fase di compilazione. I controlli in fase di compilazione obbligatori possono ridurre il numero delle eccezioni in fase di esecuzione. 1.2.2.2.3 1.2.2.2.3.1 Preparazione del Windows Form in Visual Studio Creazione del Windows Form Nelle applicazioni Windows tradizionali in Visual Basic 6 in genere è presente un form predefinito denominato Form1. In conformità a tale schema, in un progetto Windows si utilizza lo stesso nome di modulo predefinito, Form1, con un'estensione .cs o .vb, a seconda del linguaggio impiegato. 1. Se Form1 non è già visualizzato nella finestra principale, fare doppio clic su Form1 in Esplora soluzioni. Form1 si apre nella finestra di progettazione. 2. Dal menu Visualizza, scegliere Codice. Viene visualizzato il codice della classe Form1. L'aspetto di tale classe dipende dal linguaggio utilizzato per la codifica dell'applicazione Windows, Visual Basic o C#. In C#, la classe Form1 ha il seguente aspetto: ○ La firma della classe. ○ Un costruttore (Form1). In Visual Basic, la classe Form1 ha il seguente aspetto: ○ La firma della classe (una classe Form1). 28 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Nota i metodi e le variabili aggiuntive della classe Form1 sono contenuti in una classe "parziale" separata (sia in C# che in Visual Basic). Le classi parziali sono illustrate più avanti, in Impostazione di un progetto Windows. 1.2.2.2.3.2 Per aggiungere un metodo di supporto privato per il codice di configurazione di SAP Crystal Reports 1. Aggiungere alla classe Form1 un nuovo metodo di supporto dell'ambito privato senza valore restituito, denominato ConfigureCrystalReports(). Private Sub ConfigureCrystalReports() End Sub private void ConfigureCrystalReports() { } Successivamente si aggiunge un gestore eventi Form_Load e si richiama ConfigureCrystalReports() all'interno del gestore eventi Form_Load. In questo modo il metodo ConfigureCrystalReports() viene automaticamente eseguito al caricamento del modulo. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Fare doppio clic su Form1. Ritornare alla visualizzazione Codice. Facendo doppio clic su Form1 viene automaticamente generato il gestore eventi Form1_Load all'interno della classe Form1. 4. All'interno del gestore eventi Form1_Load immettere una chiamata al metodo ConfigureCrystalReports(). ConfigureCrystalReports() ConfigureCrystalReports(); 5. Dal menu File, scegliere Salva tutto. 1.2.2.2.4 Aggiunta di un controllo CrystalReportViewer Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 29 1.2.2.2.4.1 Aggiunta di un controllo CrystalReportViewer a un'applicazione Windows 1. Aprire un Windows Form in visualizzazione struttura. 2. Nella casella degli strumenti, aprire il nodo Creazione report per individuare il controllo CrystalReportViewer. Nota Nelle versioni precedenti di Visual Studio, il controllo CrystalReportViewer veniva visualizzato nel nodo Crystal Reports. 3. Trascinare il controllo CrystalReportViewer nel form. 4. Dal menu File, scegliere Salva tutto. Quando si aggiunge un controllo CrystalReportViewer all'applicazione, i riferimenti agli assembly SAP Crystal Reports vengono automaticamente aggiunti al progetto. 1.2.2.2.4.2 Per aggiungere istruzioni Imports e using che facciano riferimento a spazi dei nomi 1. Se la cartella Riferimenti non è visibile in Esplora soluzioni, nella barra degli strumenti Esplora soluzioni fare clic su Mostra tutti i file per visualizzare tutti i file di progetto. 2. In Esplora soluzioni espandere la cartella Riferimenti. 3. Verificare che siano stati aggiunti i seguenti assembly SAP Crystal Reports: ○ CrystalDecisions.CrystalReports.Engine ○ CrystalDecisions.Shared 4. Selezionare Form1, quindi scegliere Codice dal menu Visualizza. 5. Sopra la firma della classe aggiungere una dichiarazione "Imports" [Visual Basic] o "using" [C#] nella parte superiore della classe contenente i seguenti spazi dei nomi SAP Crystal Reports. Imports CrystalDecisions.CrystalReports.Engine Imports CrystalDecisions.Shared using CrystalDecisions.CrystalReports.Engine; using CrystalDecisions.Shared; 1.3 30 Nozioni di base dell'SDK © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.3.1 1.3.1.1 Architettura Scelta del modello a oggetti appropriato al progetto Per scegliere il modello a oggetti appropriato al progetto che si intende creare, è necessario comprendere appieno le procedure consigliate relative alle modalità di utilizzo del controllo CrystalReportViewer e conoscere il modo in cui CrystalReportViewer interagisce con gli altri modelli a oggetti. Nota Nella presente documentazione un modello a oggetti fa riferimento a una classe principale e alle classi adiacenti, che costituiscono un modello di programmazione. In SAP Crystal Reports i modelli di oggetti sono incentrati su una classe principale che incapsula un file di definizione del report. La classe principale e il modello a oggetti adiacente consentono l'interazione con il report a livello di codice. Procedure consigliate per l'utilizzo del controllo CrystalReportViewer In un'applicazione Web efficace vengono nettamente distinti il livello della presentazione e la regola business sottostante. La progettazione del controllo ASP.NET favorisce in genere l'utilizzo di questo modello in quanto inserisce le informazioni relative alla presentazione nel controllo e collega quest'ultimo a un oggetto o modello a oggetti sottostante che esegue la regola business. CrystalReportViewer è un controllo .NET che aderisce perfettamente a questa architettura. Funziona come oggetto di visualizzazione in Web Form o Windows Form (livello della presentazione) e può essere collegato a uno dei seguenti modelli a oggetti del report: ● Modello a oggetti ReportDocument ● modello a oggetti ReportClientDocument (Report Application Server) ● Modello a oggetti InfoObject (SAP Crystal Reports Server o piattaforma SAP BusinessObjects Business Intelligence) Nell'ambito di uno scenario consigliato, il controllo CrystalReportViewer viene collegato a un modello a oggetti che esegue la regola business, in genere per la manipolazione dei report. In tale scenario, il controllo CrystalReportViewer limita la propria interazione a livello di codice alla semplice modifica delle impostazioni di visualizzazione, ad esempio nascondendo o mostrando la barra degli strumenti del visualizzatore o un pulsante della barra. modello a oggetti CrystalReportViewer Il controllo CrystalReportViewer contiene proprietà e metodi che consentono l'interazione con la propria modalità di visualizzazione dei report. Tale controllo dispone inoltre di alcune proprietà e metodi per l'interazione con i report a esso collegati. Tali proprietà e metodi costituiscono un modello a oggetti limitato. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 31 Alcuni scenari di collegamento dei report si basano sul modello a oggetti CrystalReportViewer. In questi scenari, il controllo CrystalReportViewer viene collegato a un report in modo diretto, ad esempio mediante l'inserimento di una stringa di percorso nel report all'interno della directory di un file, senza il preventivo incapsulamento del report in un modello a oggetti. In tal caso, poiché il controllo CrystalReportViewer incapsula il report in modo diretto, sarà necessario basarsi sul modello a oggetti limitato del controllo per consentire l'interazione con il report a livello di codice. Tuttavia, nella maggior parte degli scenari di collegamento, viene sconsigliato l'utilizzo di CrystalReportViewer come modello a oggetti. Si consiglia invece di utilizzare il modello a oggetti ReportDocument, per i seguenti motivi: ● Il modello a oggetti CrystalReportViewer accresce il rischio di conflitto tra i modelli a oggetti. Non utilizzare il modello a oggetti CrystalReportViewer insieme ad altri modelli a oggetti. ● Il modello a oggetti CrystalReportViewer offre un'interazione limitata con i report e contiene solo un piccolo sottoinsieme delle funzioni disponibili nel modello a oggetti ReportDocument. ● Il modello a oggetti CrystalReportViewer rende confusa, all'interno del codice, la distinzione tra il livello della presentazione e la regola business sottostante. Il modello a oggetti ReportDocument ReportDocument rappresenta un modello a oggetti più completo e potente rispetto a CrystalReportViewer. Viene fornito con l'SDK .NET di SAP Crystal Reports e consente di modificare in modo sostanziale i report nel codice. modello a oggetti da utilizzare Se non si desidera effettuare l'aggiornamento a SAP Crystal Reports Server o alla piattaforma SAP BusinessObjects Business Intelligence, il modello a oggetti consigliato per l'attività di sviluppo con l'SDK di SAP Crystal Reports è ReportDocument. Nota In SAP Crystal Reports 10 o versioni successive e in SAP Crystal Reports per Visual Studio 2005 e versioni successive, il modello a oggetti ReportDocument è stato collegato al modello a oggetti ReportClientDocument per semplificare l'aggiornamento a una soluzione di reporting gestita. 1.3.1.2 Suggerimenti per evitare l'utilizzo di più modelli a oggetti Non utilizzare il modello a oggetti CrystalReportViewer insieme ad altri modelli a oggetti. L'utilizzo del controllo CrystalReportViewer nel suo ruolo di modello a oggetti limitato funziona correttamente, a condizione che lo si colleghi direttamente al report con una semplice stringa di percorso. Se invece si incapsula il report in un altro modello a oggetti, quale ReportDocument o ReportClientDocument, e si collega il controllo a tale modello, interrompere immediatamente l'utilizzo del modello a oggetti 32 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net CrystalReportViewer. Il modello limitato fornito dal controllo CrystalReportViewer diventa ridondante rispetto al modello a oggetti più potente a cui è collegato. Inoltre, poiché le impostazioni applicate al modello a oggetti CrystalReportViewer sono visibili nell'altro modello a oggetti, potrebbero verificarsi eccezioni o comportamenti imprevisti. Ad esempio, è possibile utilizzare il modello a oggetti ReportDocument per esportare o stampare un report mensile dal server. Se in questo report è stato impostato un parametro mese con il modello a oggetti CrystalReportViewer, potrebbero verificarsi problemi in quanto il modello a oggetti ReportDocument non è in grado di visualizzare le impostazioni dei parametri applicate al modello a oggetti CrystalReportViewer. ReportDocument tenterà di esportare o stampare il report senza essere a conoscenza dell'impostazione del parametro mese. Verrà pertanto visualizzato un mese errato oppure verrà generata un'eccezione. La soluzione migliore consiste nell'utilizzare il controllo CrystalReportViewer nelle impostazioni di visualizzazione del report solo se tale controllo è collegato a uno dei modelli a oggetti sottostanti. 1.3.1.3 SAP Crystal Reports Designer incorporato SAP Crystal Reports Designer incorporato consente di creare o modificare report. ed è costituita da un'interfaccia utente grafica per una progettazione di report WYSIWYG e da una serie di esperti che semplificano la connettività dei dati nonché il raggruppamento e l'ordinamento dei dati stessi, insieme ad altre attività complesse correlate alla progettazione di report. SAP Crystal Reports Developer comprende una versione potenziata della finestra di progettazione incorporata che permette di creare report efficaci e applicazioni per il reporting. La finestra di progettazione incorporata inclusa in SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio offre molte delle funzionalità di SAP Crystal Reports Developer. Ruolo nell'architettura di SAP Crystal Reports Designer incorporato SAP Crystal Reports Designer incorporato è incluso nella descrizione dell'architettura poiché ricopre un ruolo cruciale in SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio: esso crea infatti i file di report da visualizzare. Tale ruolo, tuttavia, è legato alla fase di progettazione. Il ruolo relativo invece alla visualizzazione e all'interazione con i report, in fase di runtime, appartiene all'SDK di SAP Crystal Reports. Pertanto, la finestra di progettazione incorporata consente di creare report che vengono utilizzati nell'architettura, ma non fa parte di quest'ultima. Informazioni correlate Utilizzo di SAP Crystal Reports Designer incorporato [pagina 555] Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 33 1.3.1.4 Controlli dei visualizzatori report SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio include controlli di moduli standard per la visualizzazione dei report. Ogni controllo incapsula le informazioni sul layout di report complessi in un oggetto GUI nella casella degli strumenti. Sono disponibili due controlli: Controllo CrystalReportViewer. Questo controllo visualizza il report in un layout basato su pagina con la possibilità di spostarsi tra le pagine. Controllo CrystalReportPartsViewer. Questo controllo visualizza le informazioni di riepilogo del report in una piccola finestra simile a un portale, con la possibilità di analizzare più dettagliatamente il report tramite una serie di parti collegate. Ogni controllo viene utilizzato per visualizzare un report tramite un'operazione di trascinamento e rilascio del controllo dalla casella degli strumenti nel Web Form o Windows Form e con l'assegnazione della proprietà ReportSource del controllo a un report. Informazioni correlate Modalità di utilizzo dei controlli dei visualizzatori report [pagina 42] 1.3.1.5 Modelli a oggetti SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio offre un SDK contenente due modelli a oggetti. Con una licenza supplementare, i modelli contenuti nell'SDK passano a quattro. I controlli per il visualizzatore report forniscono il punto di ingresso all'SDK. Il visualizzatore report, infatti, visualizza i report mediante il collegamento a un oggetto report e tutti i modelli a oggetti contenuti nell'SDK espongono e modificano oggetti report. I diversi modelli a oggetti offrono livelli crescenti di potenza e complessità: ● Il modello a oggetti più semplice è CrystalReportViewer. Il controllo CrystalReportViewer in un Web Form o un Windows Form presenta, per definizione, una classe sottostante con lo stesso nome. La classe CrystalReportViewer espone proprietà e metodi per la modifica della funzionalità di visualizzazione del controllo e per l'interazione con classi che gestiscono formule di selezione, parametri e accessi ai database. Questo insieme di classi rappresenta il modello a oggetti più semplice. La classe CrystalReportViewer è disponibile in due versioni differenti: una in uno spazio dei nomi Windows e l'altra in uno spazio dei nomi Web. Di conseguenza, molti elementi di questo modello a oggetti risultano duplicati nei due spazi dei nomi, con alcune variazioni per supportare le differenze tra le piattaforme Windows e Web. Le classi di questo modello a oggetti sono contenute nello spazio dei nomi CrystalDecisions.Web per la versione Web Form di questo controllo oppure nello spazio dei nomi CrystalDecisions.Windows.Forms per la versione Windows Form. ● Un modello a oggetti più completo è ReportDocument. 34 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net La classe ReportDocument consente di accedere a un insieme di classi nello spazio dei nomi Engine, tra cui Database, DataDefinition, ExportOptions, PrintOptions, ReportDefinition, ReportOptions e SummaryInfo. Si tratta di un gruppo piuttosto cospicuo di classi, in grado di offrire funzionalità più avanzate di personalizzazione e interazione con il report. Le classi di questo modello a oggetti sono contenute nello spazio dei nomi CrystalDecisions.CrystalReports.Engine. ● I modelli a oggetti riportati di seguito sono disponibili mediante aggiornamento: ○ Un modello a oggetti con funzionalità più potenti e innovative per la modifica dei report denominato ReportClientDocument. Questa classe funge da punto di accesso per un modello a oggetti molto più esteso, costituito da numerose classi in diversi spazi dei nomi. Espone l'intera struttura del report mediante l'SDK, in modo che sia possibile creare o modificare a livello di codice ogni aspetto del report in fase di esecuzione. Le classi di questo modello a oggetti sono contenute nel gruppo di spazi dei nomi CrystalDecisions.ReportAppServer. Il modello a oggetti ReportClientDocument viene fornito con RAS (Report Application Server) che richiede l'acquisto di una licenza supplementare. Un RAS (Report Application Server) viene fornito con SAP Crystal Reports Server e la piattaforma SAP BusinessObjects Business Intelligence. ○ InfoObject, un modello a oggetti completo per l'interazione con le funzioni a livello di piattaforma di SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence. Viene fornito con la licenza di SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence. Questa classe funge da punto di accesso per il modello a oggetti completo della piattaforma disponibile in SAP Crystal Reports Server o nella piattaforma SAP BusinessObjects Business Intelligence. Le classi di questo modello a oggetti sono contenute nel gruppo di spazi dei nomi CrystalDecisions.Enterprise. Nota Il modello a oggetti InfoObject viene fornito solo con SAP Crystal Reports Server e la piattaforma SAP BusinessObjects Business Intelligence, che richiedono l'acquisto di una licenza supplementare. Informazioni correlate Scelta del modello a oggetti appropriato al progetto [pagina 31] Confronto tra le soluzioni di reporting per SAP BusinessObjects Business Intelligence [pagina 64] 1.3.1.5.1 Modello a oggetti CrystalReportViewer La classe CrystalReportViewer ha due ruoli: ● Nel Web Form o nel Windows Form, viene esposta come controllo .NET che è possibile aggiungere al form per visualizzare un report. Per informazioni specifiche su questo ruolo, vedere Controlli dei visualizzatori report [pagina 34]. ● Nel codice sottostante al Web Form o al Windows Form, fornisce il modello a oggetti più semplice per l'SDK, che verrà preso in esame più avanti nel corso di questa sezione. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 35 Il modo più facile e immediato per inserire un report all'interno del Web Form o del Windows Form in uso consiste nell'aggiungervi il controllo CrystalReportViewer, assegnando quindi, nella classe di codice sottostante, il percorso del report sotto forma di stringa alla proprietà ReportSource della classe CrystalReportViewer. Assegnando il percorso del report direttamente al controllo, invece di inserire il report in un modello a oggetti più complesso come, ad esempio, ReportDocument o ReportClientDocument, si limita l'interfaccia al solo modello a oggetti più semplice: CrystalReportViewer. Confronto del modello a oggetti CrystalReportViewer I diagrammi relativi a questo modello sono due, poiché lo stesso nome del controllo e della classe (e dunque anche del modello a oggetti sottostante) viene utilizzato sia per le applicazioni Windows che per le applicazioni Web. Pertanto, il modello a oggetti CrystalReportViewer è ripetuto, con variazioni minime, in due spazi dei nomi differenti. La versione Windows del modello a oggetti CrystalReportViewer contiene le classi e gli eventi principali condivisi da entrambe le versioni del modello, ovvero Windows e Web. La versione Web del modello a oggetti CrystalReportViewer contiene le stesse classi e gli stessi eventi della versione Windows, a cui si aggiungono però i seguenti eventi correlati alle modalità di caricamento della pagina ASPX. Informazioni correlate Controlli dei visualizzatori report [pagina 34] Collegamento dei report con il modello a oggetti CrystalReportViewer [pagina 156] 1.3.1.5.2 Modello a oggetti ReportDocument La classe ReportDocument fornisce un modello a oggetti più completo per l'SDK rispetto al modello a oggetti CrystalReportViewer. La classe ReportDocument fa parte dello spazio dei nomi CrystalDecisions.CrystalReports.Engine. e consente di accedere a un insieme di classi nello spazio dei nomi Engine, che offrono un numero più elevato di strumenti per la modifica di report a livello di codice. Il modello a oggetti ReportDocument Nella sezione precedente è stato descritto come utilizzare il modello a oggetti base CrystalReportViewer assegnando una stringa con il percorso del report direttamente al controllo CrystalReportViewer. 36 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Al livello successivo del modello a oggetti, si utilizza il modello a oggetti ReportDocument per incapsulare il report all'interno di un'istanza ReportDocument prima che venga assegnato al controllo. In questo modo è possibile accedere al più complesso e potente modello a oggetti fornito in ReportDocument. Nota Poiché entrambi i modelli a oggetti fanno parte di questo processo (CrystalReportViewer per il caricamento e la visualizzazione del report, ReportDocument per l'incapsulamento e la modifica dello stesso), è facile confonderne i ruoli. Se si utilizza il modello a oggetti ReportDocument per incapsulare il report, tutte le modifiche che verranno apportate a quest'ultimo dovranno essere limitate al suddetto modello. Se si tenta di utilizzare le proprietà e i metodi di CrystalReportViewer per modificare il report, i due modelli a oggetti entrano in conflitto, generando modalità di funzionamento impreviste. Dopo aver introdotto un modello a oggetti aggiuntivo, limitare l'utilizzo del codice di CrystalReportViewer alla sola impostazione delle proprietà di visualizzazione. ReportDocument e ReportClientDocument (RAS) In SAP Crystal Reports 9 i due modelli a oggetti risultavano completamente separati, ma nella versione 10 e in quelle successive del prodotto tale separazione è stata del tutto eliminata. Il modello a oggetti ReportDocument funge ora da proxy per un sottoinsieme di funzionalità del modello ReportClientDocument. SAP Crystal Reports 2008 consente di accedere a una versione limitata del modello a oggetti ReportClientDocument attraverso la proprietà ReportDocument.ReportClientDocument. Informazioni correlate Esercitazioni relative al modello a oggetti ReportDocument [pagina 302] Collegamento dei report con il modello a oggetti ReportDocument [pagina 182] Modello a oggetti CrystalReportViewer [pagina 35] Scelta del modello a oggetti appropriato al progetto [pagina 31] 1.3.1.5.3 modello a oggetti ReportClientDocument (RAS) ReportClientDocument è il modello a oggetti più potente e completo per la modifica dei report Questo modello a oggetti è disponibile solo come parte di Report Application Server (RAS), disponibile come Report Application Server non gestito o come Report Application Server gestito (BOE). Il modello a oggetti ReportClientDocument è costituito da numerose classi in diversi spazi dei nomi. ciascuno dei quali è preceduto dal prefisso CrystalDecisions.ReportAppServer, ed espone l'intera struttura del report nell'SDK, in modo che sia possibile agire a livello di codice per creare, modificare e salvare le modifiche apportate a qualsiasi aspetto del report in fase di esecuzione. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 37 Un'istanza ReportClientDocument comprende un report che può essere modificato a livello di codice tramite le relative proprietà di classe. Queste proprietà sono collegate a una serie di altre librerie dell'SDK che contengono controller, modelli di definizione dei dati e modelli di definizione dei report: ● ReportDefinition corrisponde al layout del report, come illustrato in SAP Crystal Reports Designer. ● DataDefinition corrisponde all'Explorer Campo in SAP Crystal Reports Designer. ● RowsetController corrisponde ai valori dei dati elaborati di ciascuna riga dei dettagli quando si visualizza il report in fase di esecuzione. Le istanze di ReportClientDocument possono essere create per: ● Un file rpt esistente che è stato caricato da una directory e quindi modificato con le classi di definizione dei report e dei dati dell'SDK di ReportClientDocument. ● Un report vuoto completamente nuovo, creato con le classi di definizione dei report e dei dati dell'SDK di ReportClientDocument. È possibile caricare questa istanza di classe ReportClientDocument solo per il tempo necessario per passarla al visualizzatore per la visualizzazione, prima di interromperne l'amministrazione. L'istanza della classe può però anche essere modificata e quindi salvata come report (.rpt) in una directory con una delle classi di controller. Per informazioni dettagliate sul modello a oggetti ReportClientDocument, consultare la documentazione dell'SDK di BusinessObjects RAS .NET. ReportClientDocument in SAP Crystal Reports 9 SAP Crystal Reports 9 (versione avanzata) veniva fornito con RAS non gestito e gli assembly RAS .NET necessari per programmare il modello a oggetti ReportClientDocument. Ciò consentiva agli sviluppatori di creare progetti .NET che beneficiavano dei vantaggi offerti dal modello a oggetti ReportClientDocument. Ciò significa, tuttavia, che i progetti creati in precedenza con il modello a oggetti ReportDocument fornito con SAP Crystal Reports doveva essere completamente ricodificato per il modello a oggetti ReportClientDocument fornito con RAS. La necessità della ricodifica era dovuta al fatto che i due modelli a oggetti erano completamente separati. ReportClientDocument in SAP Crystal Reports 10 e versioni successive In SAP Crystal Reports 10 la separazione tra i due modelli a oggetti è stata del tutto eliminata Ciò è stato possibile riscrivendo il modello a oggetti ReportDocument affinché funzionasse come proxy per un sottoinsieme di funzionalità dal modello a oggetti ReportClientDocument. Le classi del modello a oggetti ReportDocument espongono le stesse firme dei metodi e delle proprietà utilizzate in precedenza, ma la funzionalità sottostante è stata modificata per reindirizzare ogni proprietà e metodo alle proprietà e ai metodi del più potente modello a oggetti ReportClientDocument. Questo non significa che una versione di base di SAP Crystal Reports Developer abbia accesso completo a un server RAS non gestito o al modello a oggetti ReportClientDocument . La versione di base di SAP Crystal Reports continua ad avere accesso unicamente al modello a oggetti ReportDocument, sebbene quest'ultimo funzioni come proxy per un sottoinsieme di funzionalità del modello a oggetti ReportDocument. Il modulo per la 38 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net creazione di report originale contenuto nelle precedenti versioni di SAP Crystal Reports è stato sostituito con una versione limitata e incorporata del modulo per la creazione di report RAS. L'installazione e l'accesso diretto al modello ReportClientDocument sono possibili solo con una licenza aggiornata per il server RAS non gestito. In questo modo, sarà possibile reindirizzare con facilità tutto il codice esistente scritto per il modello a oggetti ReportDocument al server RAS separato, impostando due proprietà su tutte le istanze del report fornite, nonché accedere direttamente al modello a oggetti ReportClientDocument sottostante, quando verrà recuperato dalla proprietà ReportClientDocument della classe ReportDocument. 1.3.1.5.4 modello a oggetti InfoObject (BOE) Il modello a oggetti InfoObject viene fornito con i prodotti di aggiornamento SAP Crystal Reports Server e la piattaforma SAP BusinessObjects Business Intelligence. Nota Per ulteriori informazioni, vedere Soluzioni di reporting per SAP BusinessObjects Business Intelligence [pagina 63]. InfoObject offre un modello a oggetti a livello di piattaforma per l'SDK. InfoObject funziona come una classe di base, in cui molti oggetti Enterprise vengono incapsulati in classi derivate. La classe derivata che rappresenta i report è la classe CrystalDecisions.Enterprise.Desktop.Report. L'SDK della piattaforma SAP BusinessObjects Business Intelligence si basa sulla classe di oggetti InfoObject e sulle relative classi di supporto. Classe InfoObject La classe InfoObject viene utilizzata nell'SDK per rappresentare un'ampia gamma di entità informative. Tra queste figurano sia le entità fisiche, quali i file di report o i file PDF, che le entità di rete, quali gli utenti, i server o le connessioni FTP. La classe InfoObject è la classe di base di una varietà di classi estese che corrispondono più dettagliatamente alle entità informative. Le classi estese che ereditano da InfoObject includono: Report, User, Server, Folder, Program, Ftp, Smtp, Word, Excel e Pdf. Mediante la manipolazione delle istanze delle classi InfoObject ed estese è possibile creare un'applicazione desktop client o amministrativa. Classi di supporto La classe InfoObject prevede due classi di supporto aggiuntive. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 39 Classe InfoStore La classe InfoStore funge da controller o punto di accesso per il repository del server di gestione centrale (CMS), un database in cui sono archiviate tutte le istanze di InfoObject. Viene utilizzata per creare istanze, recuperare e salvare tutte le istanze della classe InfoObject che sono archiviate nel repository CMS. Classe indicizzata La classe indicizzata InfoObjects contiene più istanze di InfoObject. Viene utilizzata da InfoObjects InfoStore per spostare le istanze di InfoObject nel e dal repository CMS. Le istanze di InfoObject non possono essere gestite direttamente dalla classe InfoStore, ma devono prima essere racchiuse nella classe indicizzata InfoObjects, dove possono essere aggiunte, recuperate, aggiornate o pianificate. Nota Per ulteriori informazioni sull'SDK di SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence, consultare la documentazione dell'SDK di SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence. Informazioni correlate Scelta del modello a oggetti appropriato al progetto [pagina 31] 1.3.1.6 Confronto tra le architetture di tutte le soluzioni di reporting per SAP Business Intelligence Le soluzioni di reporting per SAP Business Intelligence disponibili sono quattro: ● SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio ● SAP Crystal Reports Developer ● RAS (Report Application Server) non gestito ● Piattaforma SAP BusinessObjects Business Intelligence o SAP Crystal Reports Server Un elemento fondamentale di differenziazione a livello di architettura tra le diverse soluzioni di reporting è rappresentato dal modo in cui ciascuna di esse inserisce e implementa il modulo di report. Definizione del modulo report Il modulo di report rappresenta il nucleo centrale di tutte le soluzioni di reporting. in quanto elabora tutte le richieste degli utenti e restituisce informazioni sui report. La velocità massima per l'elaborazione di richieste simultanee varia da una soluzione all'altra. In alcune soluzioni è impostata in base alla progettazione dell'architettura o ai limiti relativi alle licenze. Gli altri componenti principali di ogni soluzione di reporting sono i seguenti: ● Il file di definizione del report (.rpt). 40 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ● L'origine dati. ● Il visualizzatore report. ● L'SDK. ● Una struttura di piattaforma (disponibile in SAP Crystal Reports Server o nella piattaforma SAP BusinessObjects Business Intelligence). Interazione del modulo report con gli altri componenti principali Il modulo report utilizza il file di definizione del report (.rpt) come modello, quindi recupera i dati dall'origine dati e, mediante la definizione del report, esegue il rendering del report correntemente richiesto, che passa poi al visualizzatore. Le informazioni ricevute da quest'ultimo, o codificate con l'SDK, attivano un'ulteriore elaborazione da parte del modulo report che esegue altre operazioni sul report. Modalità di configurazione del modulo di report nelle diverse soluzioni di reporting per SAP Business Intelligence ● Il modulo report è incorporato. In SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio il modulo di report è incorporato nell'applicazione. Il modulo report incorporato non può elaborare più di tre richieste simultanee degli utenti. Si tratta di un limite correlato all'architettura di questo tipo di modulo, non alle licenze di cui si dispone. ● Il modulo report viene estratto in un processo di server report separato. Nella soluzione che utilizza Report Application Server (RAS) non gestito, il modulo report viene estratto in un processo server separato. Tale processo può essere eseguito sullo stesso computer o su un hardware distinto, in modo da incrementare le prestazioni liberando il server delle applicazioni dall'onere dell'elaborazione. Poiché il server RAS non gestito non è più disponibile come opzione di aggiornamento, Si consiglia di effettuare l'aggiornamento a SAP Crystal Reports Server. Per ulteriori informazioni, vedere Soluzioni di reporting per SAP BusinessObjects Business Intelligence [pagina 63]. ● Il processo di server report separato è incluso in un'architettura di piattaforme completa. Nella soluzione SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence viene aggiunta un'intera architettura di piattaforme che include il processo di server report separato (RAS). Report Application Server (RAS) gestito diventa un solo server tra molti altri nell'architettura di piattaforme che fornisce un'ampia gamma di funzionalità aggiuntive quali, ad esempio, pianificazione, bilanciamento del carico, failover e scalabilità verticale e orizzontale. 1.3.2 Controllo CrystalReportViewer Per poter visualizzare un report Crystal, è necessario aggiungere un controllo CrystalReportViewer all'applicazione in uso. Il controllo CrystalReportViewer viene utilizzato in .NET Framework per collegare e visualizzare i report. Il controllo CrystalReportViewer predefinito include elementi dell'interfaccia utente che semplificano le operazioni di visualizzazione, salvataggio e spostamento in un report. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 41 I due controlli CrystalReportViewer utilizzati più di frequente sono il controllo CrystalReportViewer per le applicazioni Windows, a cui si accede mediante la classe CrystalDecisions.Windows.Forms.CrystalReportViewer, e il controllo CrystalReportViewer per sito Web, a cui si accede mediante la classe CrystalDecisions.Web.CrystalReportViewer. Per ulteriori informazioni, vedere il manuale SAP Crystal Reports .NET API Reference. Nota Il controllo CrystalReportViewer è necessario solo se si intende visualizzare i report Crystal. Personalizzazione del controllo CrystalReportViewer In base al tipo di applicazione, potrebbe essere necessario modificare alcuni elementi del controllo predefinito. SAP Crystal Reports consente di personalizzare l'aspetto del visualizzatore nell'applicazione in diversi modi, ad esempio: ● la barra degli strumenti di CrystalReportViewer può essere rimossa dal visualizzatore ● i pulsanti della barra degli strumenti di CrystalReportViewer possono essere aggiunti o rimossi a livello di codice ● il controllo CrystalReportViewer supporta la personalizzazione mediante CSS o temi. Informazioni correlate Personalizzazione del controllo CrystalReportViewer [pagina 205] Visualizzazione di un report [pagina 149] 1.3.2.1 Modalità di utilizzo dei controlli dei visualizzatori report I controlli dei visualizzatori report sono controlli .NET che è possibile aggiungere a un form in un'applicazione Windows o Web per poter visualizzare i report all'interno di tale form. Quando si pianifica la creazione di un'applicazione con l'SDK di SAP Crystal Reports, uno degli aspetti più importanti da considerare è la modalità di utilizzo dei controlli dei visualizzatori report. La conoscenza delle nozioni di base dell'SDK che si riferiscono a questi controlli consente di scegliere la struttura più adeguata per il progetto SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. Definizione dei controlli .NET I controlli Microsoft .NET rappresentano uno speciale tipo di classi che vengono visualizzate nella casella degli strumenti di Visual Studio. Tali controlli vengono aggiunti a un Web Form o a un Windows Form come oggetti GUI 42 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ed ereditano da una classe di controlli di base comune. Tra i controlli .NET più diffusi figurano: Button, DropDownList, CheckBox, TextBox e DataGrid. I controlli Microsoft .NET si conformano alla seguente procedura consigliata: separare il livello della presentazione dal livello della logica aziendale. Le informazioni relative alla visualizzazione vengono incapsulate all'interno del controllo nel Web Form o nel Windows Form. Nella classe di codice sottostante viene creata un'istanza a livello di classe per il controllo .NET. Questa variabile di istanza consente di accedere alle proprietà, ai metodi e agli eventi del controllo. Le funzionalità dei controlli Microsoft .NET sono identiche per i Windows Form e i Web Form. .NET Framework consente di visualizzare ogni pagina Web sotto forma di form contenente controlli, come in un'applicazione Windows. Utilizzo dei controlli .NET per la visualizzazione dei report in SAP Crystal Reports Uno dei punti di forza degli strumenti per la creazione di report consiste nel fatto che incapsulano attività complesse correlate alla struttura, alla progettazione e al rendering dei report all'interno di uno strumento GUI di semplice utilizzo. In modo analogo, i controlli .NET incapsulano attività complesse correlate alla visualizzazione e all'inserimento dei dati all'interno di un oggetto GUI di semplice utilizzo in un Web Form o in un Windows Form. Grazie ai controlli .NET, è possibile svolgere difficili operazioni di visualizzazione e di creazione report. Tutte le informazioni più complesse relative ai report, che venivano prima incapsulate solo nell'applicazione indipendente SAP Crystal Reports, sono state ora inserite in un controllo .NET come in un visualizzatore report. Controlli dei visualizzatori report disponibili SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio viene fornito con due versioni del controllo CrystalReportViewer: una per le applicazioni Web e l'altra per le applicazioni Windows. Il controllo CrystalReportViewer, situato all'interno dello spazio dei nomi CrystalDecisions.Web, è utilizzato dai progetti Web ASP.NET. Il controllo CrystalReportViewer, situato all'interno dello spazio dei nomi CrystalDecisions.Windows.Forms, è invece utilizzato dai progetti Windows. Il controllo CrystalReportPartsViewer viene utilizzato per visualizzare solo alcune parti del report in una pagina Web. Visualizzazione di un report mediante il controllo CrystalReportViewer Il controllo CrystalReportViewer consente di visualizzare un solo report alla volta, in base al report collegato al codice in uso. Per indicare al controllo il report da visualizzare, collegare la proprietà ReportSource del controllo a un report specifico. In fase di esecuzione, il controllo carica il report collegato alla proprietà ReportSource e lo visualizza. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 43 Nella sua forma più semplice, l'assegnazione si presenta come segue: crystalReportViewer1.ReportSource = "C:\WorldSalesReport.rpt" crystalReportViewer1.ReportSource = "C:\\WorldSalesReport.rpt"; In questo caso, il report è collegato al controllo direttamente dal percorso nella directory del file. Si tratta di un esempio eloquente del metodo più elementare per collegare un report al controllo CrystalReportViewer. Anche il controllo CrystalReportViewer si collega a oggetti dati? No, il controllo CrystalReportViewer si collega a un oggetto report, non a un oggetto dati. La funzione di tale controllo è infatti differente da quella di altri controlli .NET, i quali si collegano ai dati ed eseguono la formattazione dei dati non elaborati nella pagina. Poiché in SAP Crystal Reports Designer incorporato tali operazioni vengono eseguite automaticamente ogni volta che viene creato un report (per definizione un report incapsula recupero e visualizzazione dati), il controllo CrystalReportViewer si occupa solo della visualizzazione di un oggetto report. Nella tabella riportata di seguito viene confrontato il collegamento a un controllo dati .NET con il collegamento a un controllo CrystalReportViewer. Tabella 2: Tipo di controllo Collegamento Connettività livello successivo Controllo dati .NET (ad esempio Data­ Grid) Un oggetto dati (DataSet, DataReader, DataView, IDictionary, ICollection, Data­ Table). Nessuno Controllo del visualizzatorr di re­ port .NET (ad esempio CrystalReport­ Viewer) Un oggetto report (che incapsula un file di report Crystal). Il file di report Crystal dispone di una connettività dati incorporata, che con­ sente la connessione a varie origini dati, ad esempio ODBC e OleDb, nonché og­ getti DataReader e DataSet. Per aiutare l'utente a ricordare che un controllo CrystalReportViewer si collega a un oggetto report anziché a un oggetto dati, la proprietà relativa all'origine del controllo del visualizzatore di report è denominata ReportSource (non DataSource). Collegamento automatico dei report Un altro importante elemento di differenziazione di CrystalReportViewer rispetto alla maggior parte degli altri controlli .NET, è che il collegamento per questo tipo di controllo non comporta la necessità di chiamare manualmente un metodo di collegamento. CrystalReportViewer collega infatti automaticamente il visualizzatore report all'oggetto report. 44 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Informazioni correlate Visualizzazione di un report [pagina 149] 1.3.2.1.1 Aggiunta di un controllo CrystalReportViewer a un'applicazione Windows 1. Aprire un Windows Form in visualizzazione struttura. 2. Nella casella degli strumenti, aprire il nodo Creazione report per individuare il controllo CrystalReportViewer. Nota Nelle versioni precedenti di Visual Studio, il controllo CrystalReportViewer veniva visualizzato nel nodo Crystal Reports. 3. Trascinare il controllo CrystalReportViewer nel form. 4. Dal menu File, scegliere Salva tutto. Quando si aggiunge un controllo CrystalReportViewer all'applicazione, i riferimenti agli assembly SAP Crystal Reports vengono automaticamente aggiunti al progetto. 1.3.2.1.2 Aggiunta di un controllo CrystalReportViewer a un sito Web 1. Aprire la pagina Default.aspx. 2. Fare clic sul pulsante Progettazione in fondo alla vista del modulo. 3. Nella casella degli strumenti, aprire il nodo Creazione report per individuare il controllo CrystalReportViewer. Nota Nelle versioni precedenti di SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio il controllo CrystalReportViewer veniva visualizzato nel nodo Crystal Reports. 4. Trascinare il controllo CrystalReportViewer nel Web Form. 5. Dal menu File, scegliere Salva tutto. Quando si aggiunge un controllo CrystalReportViewer all'applicazione, i riferimenti agli assembly SAP Crystal Reports vengono automaticamente aggiunti al progetto. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 45 1.3.2.1.3 Collegamento del controllo CrystalReportViewer a un file su disco Il modo più semplice per collegare un controllo CrystalReportViewer a un report Crystal è impostare la proprietà ReportSource su un percorso su disco. Il report non incorporato viene visualizzato quando viene eseguita l'applicazione. Ciò consente di collegare il report direttamente al controllo. La completa interazione con il report a livello di codice deve essere effettuata all'interno del modello a oggetti limitato CrystalReportViewer. 1. Aggiungere un controllo CrystalReportViewer all'applicazione Windows o al sito Web. 2. Aprire il Web Form o il Windows Form. 3. Dal menu Visualizza, scegliere Codice. 4. Impostare la proprietà ReportSource sul percorso del report nel file system locale. ○ Quando si utilizzano applicazioni Windows Form o siti Web: myCrystalReportViewer.ReportSource = "C:\MyReport.rpt" crystalReportViewer.ReportSource = "C:\\MyReport.rpt"; ○ Quando si utilizza un'applicazione WPF: myCrystalReportViewer.ViewerCore.ReportSource = "C:\MyReport.rpt" crystalReportViewer.ViewerCore.ReportSource = "C:\\MyReport.rpt"; 1.3.2.2 Riquadro Smart Task In Visual Studio 2005 o versioni successive, quando si aggiunge un controllo .NET a un Web Form o a un Windows Form, viene visualizzato un riquadro Smart Task. denominato Smart Task, ubicato nell'angolo superiore destro del controllo .NET. Tale riquadro contiene caselle di controllo e caselle combinate che consentono agli sviluppatori di selezionare la connettività e altre opzioni per il controllo. Questa funzione consente di ridurre notevolmente la quantità di codice che deve essere scritta dallo sviluppatore. In un sito Web le selezioni effettuate nel riquadro Smart Task producono XML generato automaticamente nella pagina ASPX. In un progetto Windows le selezioni effettuate nello stesso riquadro producono invece codice generato automaticamente in un file di classe nascosto. Tale file rappresenta una classe "parziale", che costituisce un'aggiunta alla classe del Windows Form esistente. Le classi parziali sono una nuova funzione di .NET Framework versione 2.0. Il riquadro Smart Task consente di collegare in modo rapido e semplice il controllo CrystalReportSource al controllo CrystalReportViewer. Quando si aggiunge alla pagina il controllo CrystalReportViewer, viene visualizzato automaticamente il riquadro Smart Task, nel quale viene indicata una procedura basata su una serie di passaggi per creare e configurare un controllo CrystalReportSource. Il controllo CrystalReportViewer fa ampio uso del riquadro Smart Task. Le selezioni disponibili nel riquadro differiscono tra progetti Web e Windows. 46 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Limiti delle Smart Task e del modello basato su codice ridotto Le Smart Task agevolano l'utilizzo di un modello basato su codice ridotto che consente di generare automaticamente codice, con un notevole risparmio di tempo rispetto alla scrittura manuale del codice stesso. Se è vero che la generazione automatica di codice permette di risparmiare tempo in un primo momento, risulta tuttavia difficile passare da un modello basato su codice ridotto a un modello di codifica standard, qualora si desideri in un secondo momento incrementare la potenza e la flessibilità di un progetto. 1.3.2.2.1 Smart Task di CrystalReportViewer per progetti Windows Il riquadro Smart Task di CrystalReportViewer per Windows consente di creare, scegliere o modificare un report Crystal. Sono inoltre disponibili le opzioni necessarie per la personalizzazione del controllo CrystalReportViewer. Per il riquadro Smart Task relativo ai progetti Windows sono disponibili le seguenti funzionalità. Crea un nuovo report Crystal... Questo comando di menu consente di creare un report mediante SAP Crystal Reports Designer incorporato. Al termine dell'operazione, il codice del report viene generato automaticamente in modo da collegare il report al controllo CrystalReportViewer per una visualizzazione immediata. Modifica il report Crystal corrente Questo comando di menu consente di apportare ulteriori modifiche al report precedentemente selezionato o creato per l'origine report. Scegli un report Crystal Questo comando di menu consente di selezionare un report Crystal o un oggetto ReportDocument per utilizzarlo come origine del report per il controllo CrystalReportViewer. Al termine dell'operazione, il codice del report viene generato automaticamente in modo da collegare il report al controllo CrystalReportViewer per una visualizzazione immediata. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 47 Cancella origine report Questo comando di menu consente di cancellare la proprietà ReportSource per il controllo CrystalReportViewer. Scegliere una vista del riquadro degli strumenti: Questo comando di menu consente di selezionare il riquadro degli strumenti che verrà visualizzato per impostazione predefinita al caricamento del report. È possibile selezionare l'albero dei gruppi o il riquadro del parametro oppure lasciare il riquadro degli strumenti vuoto. Visualizza barra degli strumenti Questa casella di controllo consente di mostrare o nascondere la barra degli strumenti del controllo CrystalReportViewer. Visualizza barra di stato Questa casella di controllo consente di mostrare o nascondere la barra di stato all'interno del controllo CrystalReportViewer. Disancora nel contenitore padre Questo comando di menu consente di impostare la proprietà Dock su "None" o "Fill". Per impostazione predefinita, quando un controllo CrystalReportViewer viene trascinato in un Windows Form, la proprietà Dock viene impostata su "Fill". Se questo comando di menu è selezionato, la proprietà Dock "None" consente di spostare e ridimensionare liberamente il controllo CrystalReportViewer all'interno del Windows Form o di altri contenitori (ad esempio, un controllo Panel in un Windows Form). 1.3.2.2.2 Smart Task di CrystalReportViewer per siti Web Il riquadro Smart Task di CrystalReportViewer per siti Web consente di creare, scegliere o modificare un report Crystal. Include inoltre una serie di opzioni che consentono di personalizzare il controllo CrystalReportViewer e di attivare la segnalazione degli errori per gli accessi al database e i valori di parametro. Per il riquadro Smart Task relativo ai siti Web sono disponibili le seguenti funzionalità: 48 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Scegli un'origine report Questa casella combinata consente di selezionare un'origine report esistente o di crearne una nuova. Al termine dell'operazione, il codice del report viene generato automaticamente in modo da collegare il report al controllo CrystalReportViewer per una visualizzazione immediata. Configura origine report... Questo comando di menu consente di configurare ulteriormente l'origine report precedentemente selezionata o creata. Modifica report... Questo comando di menu consente di apportare ulteriori modifiche al report precedentemente selezionato o creato per l'origine report. Scegliere una vista del riquadro degli strumenti: Questo comando di menu consente di selezionare il riquadro degli strumenti che verrà visualizzato per impostazione predefinita al caricamento del report. È possibile selezionare l'albero dei gruppi o il riquadro del parametro oppure lasciare il riquadro degli strumenti vuoto. Attiva la barra degli strumenti Questa casella di controllo consente di mostrare o nascondere la barra degli strumenti del controllo CrystalReportViewer. Attiva visualizzazione report Questa casella di controllo consente di mostrare o nascondere la visualizzazione report all'interno del controllo CrystalReportViewer. Nota è possibile disattivare la visualizzazione report se si desidera utilizzare la struttura gruppi da sola in un Web Form. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 49 Attiva prompt per l'accesso al database Questa casella di controllo consente di attivare o disattivare la segnalazione degli errori per gli accessi al database. Quando un report non dispone delle informazioni necessarie per accedere a un database SQL Server, viene generata un'eccezione di errore "Accesso non riuscito". Tuttavia, se la casella di controllo è selezionata, verrà visualizzata una finestra di prompt in cui si richiedono le informazioni necessarie per l'accesso. Attiva prompt al parametro report Questa casella di controllo consente di attivare o disattivare la segnalazione degli errori per i valori di parametro. Quando un report non dispone delle informazioni necessarie per richiamare un parametro utilizzato nei criteri di selezione, viene generata un'eccezione di errore "Valori di parametro mancanti". Tuttavia, se la casella di controllo è selezionata, verrà visualizzata una finestra di prompt in cui si richiedono le informazioni necessarie sul parametro. Riutilizza valore del parametro all'aggiornamento del report Questa casella di controllo consente di attivare o disattivare la persistenza dei parametri al momento dell'aggiornamento dei report. Se la casella di controllo è selezionata, i valori di parametro passati al report in corrispondenza del primo caricamento vengono resi persistenti. Se invece la casella di controllo è deselezionata, sarà necessario scrivere del codice per passare i valori di parametro al report a ogni successivo aggiornamento. Informazioni correlate Smart Task di CrystalReportViewer per progetti Windows [pagina 47] 1.3.2.3 Controllo CrystalReportPartsViewer Il controllo CrystalReportPartsViewer viene utilizzato in .NET Framework per il collegamento e la visualizzazione di un report Crystal come serie di parti collegate. Questo metodo consente di ridurre notevolmente l'area richiesta per la visualizzazione delle informazioni del report, in quanto risulta ideale per visualizzare piccole quantità di informazioni sul report in una pagina del portale Web. Nota Le parti di report vengono utilizzate solo nei siti Web e non sono disponibili per i progetti Windows. Il controllo CrystalReportPartsViewer è stato migliorato in modo da supportare la struttura delle Web part, una struttura di portale introdotta con ASP.NET versione 2.0. 50 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net La struttura delle Web part consente agli sviluppatori di incapsulare i controlli della pagina in Web part configurabili. Informazioni correlate Esercitazione: Visualizzazione delle parti di report mediante il controllo CrystalReportPartsViewer [pagina 432] 1.3.2.4 Controllo CrystalReportSource Il controllo CrystalReportSource fa parte del nuovo modello per lo sviluppo di applicazioni basato su tag fornito con ASP.NET versione 2.0. Nota il controllo CrystalReportSource è disponibile solo per i siti Web. Nella struttura del controllo DataSource, i controlli visivi .NET si connettono a controlli DataSource non visivi, ovvero controlli che non gestiscono informazioni relative alla visualizzazione. Questa nuova struttura di DataSource incapsula le informazioni sulla connettività dati scritte come righe di codice nei controlli .NET all'interno del Web Form. Nella finestra Progettazione di Visual Studio vengono visualizzati i nomi dei controlli connessi tra loro. I provider di dati .NET forniscono implementazioni personalizzate del controllo DataSource. Ad esempio, SqlDataSource accede a Microsoft SQL Server, mentre OracleDataSource accede a Oracle. Nel caso di SAP Crystal Reports, il controllo viene implementato come controllo CrystalReportSource. Questo tipo di progettazione è parallela a quella di ASP.NET versione 1.0, in cui il controllo CrystalReportViewer contiene una proprietà ReportSource anziché la più usuale proprietà DataSource. La differenza tra il controllo CrystalReportSource e i controlli DataSource consiste nel fatto che il primo contiene un report che incapsula i dati, mentre i secondi, ad esempio SqlDataSource contengono direttamente i dati. 1.3.3 Approccio di persistenza da utilizzare con SAP Crystal Reports Quando si pianifica la creazione di un'applicazione Web con l'SDK di SAP Crystal Reports, uno degli aspetti più importanti da considerare è l'approccio di persistenza da utilizzare. Definizione di persistenza Le pagine Web non conservano lo stato e le informazioni di un utente che si connette a un sito Web. Ogni pagina Web viene richiesta da un server e inviata all'utente, quindi il processo viene terminato. Ciò non crea difficoltà Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 51 quando si leggono informazioni di testo, ma diventa problematico quando si progetta un'applicazione Web in cui occorre conservare le informazioni sull'utente per l'uso durante più operazioni di ricaricamento e reindirizzamento delle pagine. Il concetto di persistenza si riferisce all'utilizzo di un meccanismo per mantenere inalterato lo stato di ciascun utente, ad esempio la pagina di report attualmente visualizzata, durante le operazioni di ricaricamento e reindirizzamento. Procedure consigliate per la persistenza In questa sezione vengono illustrate le procedure consigliate per rendere persistenti durante l'aggiornamento del report in fase di ricaricamento della pagina le modifiche apportate a un report Crystal in una pagina Web. Può essere necessario rendere persistenti modifiche semplici come il passaggio alla seconda pagina dopo che si è fatto clic sul pulsante Pagina successiva del visualizzatore report oppure complesse come la visualizzazione di dati completamente differenti dopo che sono state apportate modifiche ai parametri di un report. La persistenza deve essere applicata nei seguenti casi: ● Controllo CrystalReportViewer. ● Report collegato al controllo CrystalReportViewer. Metodi per garantire la persistenza dello stato in ASP e ASP.NET In ASP e ASP.NET tradizionali lo stato viene mantenuto mediante il browser Web o il server Web nei seguenti modi: Tabella 3: Ambiente Client o server Nome Metodo ASP Browser client Campi form Passaggio di coppie nome/ valore tra pagine Web me­ diante campi di invio del form. ASP* Browser client Argomenti URL Passaggio di coppie nome/ valore tra pagine Web me­ diante argomenti URL. ASP* Browser client Cookie Assegnazione di coppie nome/valore a un cookie del browser client e recupero del cookie in una nuova pagina. ASP* Server Web Oggetto Session Assegnazione di oggetti istan­ ziati all'oggetto Session del server e recupero da Session in una nuova pagina. 52 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Ambiente Client o server Nome Metodo ASP* Server Web Oggetto Application Assegnazione di oggetti istan­ ziati all'oggetto Application del server e recupero da Ap­ plication in una nuova pagina. ASP.NET Browser client Oggetto ViewState Assegnazione di valori stringa all'oggetto ViewState del Web Form ASP.NET. ASP.NET Server Web Oggetto Cache Analogo a quello dell'oggetto Application, ma con funzioni più potenti. * Tutti gli approcci di persistenza ASP operano anche in ASP.NET. Approcci di persistenza più adatti per SAP Crystal Reports Gli approcci di persistenza più appropriati da utilizzare con SAP Crystal Reports sono ViewState, Session o Cache. Informazioni correlate ViewState e persistenza del modello a oggetti CrystalReportViewer [pagina 53] 1.3.3.1 ViewState e persistenza del modello a oggetti CrystalReportViewer Definizione di ViewState ViewState è un approccio basato su browser utilizzato in ASP.NET per rendere persistente lo stato della visualizzazione, ossia il Web Form. La sua funzione principale consiste nel supportare la persistenza dei controlli Web. Questi ultimi (denominati anche controlli server Web) sono basati sui controlli Windows, introdotti in Visual Basic. I controlli Windows sono oggetti del form che includono parti della funzionalità di visualizzazione, quali un campo di testo, un pulsante o una tabella di dati. I controlli Web sono simili ai controlli Windows Come questi, operano su due livelli: all'interno della pagina Web e nella classe di codice sottostante che supporta la pagina Web. In modo analogo ai controlli tradizionali nei Windows Form, i controlli Web includono parti della funzionalità di visualizzazione presente negli oggetti GUI: Button, TextField, DropDownList, DataGrid e così via. Nella classe di codice sottostante questi stessi controlli equivalgono alle classi che espongono proprietà e metodi. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 53 La differenza tra una pagina Web e un Windows Form è data dal fatto che la pagina Web rappresenta un ambiente senza informazioni sullo stato. Pertanto, è necessario l'uso di un meccanismo di persistenza per conservare lo stato della pagina Web durante le operazioni di ricaricamento della pagina. ViewState conserva lo stato dei controlli nella pagina Web, così come Session conserva lo stato degli oggetti istanziati nel server. Nota ViewState conserva lo stato di tutti i controlli Web automaticamente, mediante la memorizzazione di ogni controllo in base alla relativa proprietà EnableViewState, che utilizza True come impostazione predefinita. Poiché ViewState archivia lo stato dei dati dei controlli Web nella pagina, è necessario racchiudere l'intero oggetto ViewState all'interno della pagina, soggetta al trasferimento continuo tra il browser e il server Web. Tale operazione viene eseguita crittografando l'intero oggetto ViewState come stringa e inserendo quest'ultima all'interno del valore di un tag form nascosto della pagina. Ad esempio, l'oggetto ViewState di una pagina Web ASP.NET contenente un solo controllo pulsante (Button) presenta il seguente codice HTML: <input type="hidden" name="__VIEWSTATE" value="dDwtNTMwNzcxMzI0Ozs+I7GfLyg3p44eTLFCiVEiRKUBzFw=" /> ViewState memorizza solo le informazioni che possono essere convertite in formato stringa. Persistenza della visualizzazione report del controllo CrystalReportViewer Il controllo CrystalReportViewer svolge il ruolo di strumento di visualizzazione di un report Crystal: consente di effettuare il rendering del report in formato html sulla pagina e rende disponibili una barra degli strumenti e una visualizzazione struttura per la modifica della visualizzazione del report. La barra degli strumenti contiene pulsanti per l'esecuzione dello zoom, il passaggio alla pagina successiva, la stampa, l'esportazione e così via. La visualizzazione struttura si espande per mostrare un raggruppamento nidificato di dati. ViewState rende persistenti le informazioni del controllo. Rende pertanto persistente lo stato di tutte le informazioni del controllo CrystalReportViewer relative alla visualizzazione dei report, inclusi gli eventi della barra degli strumenti e della visualizzazione struttura, durante le operazioni di ricaricamento della pagina. Se ad esempio un utente sta visualizzando la pagina 3 del report e fa clic sul pulsante per il passaggio alla pagina successiva situato sulla barra degli strumenti del controllo CrystalReportViewer, ViewState renderà persistente lo stato di entrambe le informazioni: ● Numero della pagina corrente. ● Stato del pulsante Pagina successiva (selezionato). Durante il ricaricamento della pagina ViewState riporterà il controllo CrystalReportViewer a pagina 3, quindi ripristinerà l'evento click relativo alla pagina successiva, inducendo il controllo ad avanzare alla pagina 4 del report. 54 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Persistenza del modello a oggetti del controllo CrystalReportViewer Il controllo CrystalReportViewer svolge anche un altro ruolo: oltre a quello di strumento di visualizzazione dei report, ovvero quello di modello a oggetti limitato contenuto nella classe del controllo CrystalReportViewer. Questo modello a oggetti limitato può essere utilizzato per l'interazione con il report a livello di codice. ViewState rende persistente lo stato di entrambi i ruoli: ● Visualizzazione dei report. ● modello a oggetti CrystalReportViewer. Tuttavia, l'utilizzo del modello a oggetti CrystalReportViewer è in genere sconsigliato, a favore del più ampio modello a oggetti ReportDocument. Questo modello a oggetti alternativo non è contenuto nel controllo, ma fa parte delle librerie di classi dell'SDK. Condivisione dei meccanismi di persistenza Se il controllo CrystalReportViewer viene utilizzato per entrambi i ruoli (visualizzazione dei report e modello a oggetti), ViewState li rende persistenti entrambi. Non sono pertanto necessari ulteriori meccanismi di persistenza. Nota Un esempio potrebbe essere rappresentato dal collegamento del controllo CrystalReportViewer a un percorso della directory di file. Vedere Collegamento a un percorso della directory di file tramite codice [pagina 156]. Se tuttavia si sceglie di utilizzare il controllo CrystalReportViewer solo nel ruolo di visualizzazione dei report e lo si collega a un modello a oggetti esterno, quale ReportDocument, sarà necessario utilizzare un meccanismo separato per rendere persistente tale modello a oggetti. In genere, questo secondo meccanismo di persistenza è Session. In alcuni casi, è anche possibile utilizzare Cache. Informazioni correlate Approccio di persistenza da utilizzare con SAP Crystal Reports [pagina 51] Session e persistenza del modello a oggetti ReportDocument [pagina 56] Scelta del modello a oggetti appropriato al progetto [pagina 31] Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 55 1.3.3.2 Session e persistenza del modello a oggetti ReportDocument Definizione di Session Session è un approccio basato su server Web, utilizzato in ASP e ASP.NET per consentire la conservazione dello stato. Session consente infatti di rendere persistente qualsiasi oggetto per l'intera durata di una sessione utente, mediante l'archiviazione di tale oggetto nella memoria del server Web. Session viene in genere utilizzato per effettuare una delle seguenti operazioni: ● Archiviazione delle informazioni il cui stato deve essere reso persistente per l'intera durata di una sessione utente, ad esempio informazioni di accesso o altre informazioni necessarie agli utenti durante l'esplorazione dell'applicazione Web. ● Memorizzazione di un oggetto il cui stato deve essere reso persistente solo durante il ricaricamento di una pagina o in un insieme di pagine raggruppate dal punto di vista funzionale. L'elemento principale di Session consiste nella capacità di conservare le informazioni sullo stato dell'utente sul server Web, consentendo l'accesso in qualunque momento e da qualsiasi pagina. Poiché le informazioni non vengono memorizzate sul browser, è possibile utilizzare qualsiasi browser, inclusi dispositivi quali PDA o telefoni cellulari. Limiti di questo approccio di persistenza ● La quantità di memoria server richiesta da Session aumenta in modo proporzionale al numero di utenti che effettuano l'accesso. ● Ogni utente che accede all'applicazione Web genera un oggetto Session distinto. Ogni oggetto Session ha una durata pari a quella della sessione di un utente più un periodo di inattività. ● Se all'interno di ogni oggetto Session vengono resi persistenti molti oggetti e l'applicazione Web viene utilizzata contemporaneamente da più utenti, implicando la creazione di numerosi oggetti Session, la quantità di memoria server dedicata alla persistenza di Session può aumentare notevolmente, causando limitazioni nella scalabilità. Per approcci di persistenza alternativi, vedere: ● ViewState e persistenza del modello a oggetti CrystalReportViewer [pagina 53] ● Cache e persistenza del modello a oggetti ReportDocument [pagina 57] Persistenza del modello a oggetti ReportDocument con Session Se il report è stato incapsulato all'interno del modello a oggetti ReportDocument, quest'ultimo dovrà essere reso persistente mediante un approccio basato su server, quale Session o Cache. Per rendere persistente un report incluso nel modello a oggetti ReportDocument mediante Session, creare un'istanza ReportDocument e assegnarla a Session. 56 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Session rappresenta l'approccio più semplice e maggiormente utilizzato dagli utenti con poca esperienza nell'ambito della creazione di un'applicazione Web ASP.NET mediante SAP Crystal Reports. Si tratta inoltre dell'approccio consigliato per la memorizzazione delle istanze di ReportDocument in cui il report presenta scarsa condivisibilità. Limiti della persistenza del modello a oggetti ReportDocument con Session Se un'istanza ReportDocument presenta un elevato livello di condivisibilità, prendere in considerazione l'utilizzo di Cache anziché di Session. Confronto tra Session e ViewState Session ha come funzione principale quella di rendere persistente lo stato degli oggetti nella classe di codice sottostante, mentre ViewState ha come funzione principale quella di rendere persistente lo stato dei controlli nella pagina Web. Se un controllo della pagina Web viene collegato a un oggetto nella classe di codice sottostante ed entrambi devono essere resi persistenti tra le operazioni di ricaricamento della pagina, Session e ViewState condividono i ruoli di persistenza. In questo caso, ViewState rende persistente un controllo CrystalReportViewer e Session un oggetto ReportDocument collegato al controllo. Informazioni correlate Esercitazione: Persistenza del modello a oggetti ReportDocument mediante Session [pagina 302] 1.3.3.3 Cache e persistenza del modello a oggetti ReportDocument Cache è un approccio basato su server utilizzato in ASP.NET per consentire la conservazione dello stato. Dal punto di vista funzionale, Cache è simile all'oggetto Application presente in ASP e ASP.NET: ● Application consente di rendere persistente tutti gli oggetti nell'ambito dell'applicazione. ● Application non può essere utilizzato per conservare i dati specifici di un utente. Oltre a condividere tali funzioni di Application, Cache aggiunge nuovi livelli di funzionalità per la gestione dei dati temporanei: ● Un oggetto aggiunto a Cache può essere configurato con dipendenze basate su file, su chiavi o temporizzate. Se la chiave o il file associato viene modificato o trascorre un determinato periodo di tempo, l'oggetto verrà rimosso automaticamente da Cache. Alla successiva richiesta, verrà inoltre inserita una versione aggiornata dell'oggetto in Cache. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 57 ● Un oggetto aggiunto alla cache scade automaticamente se non ha dipendenze e se è poco utilizzato. ● Quando un oggetto viene rimosso da Cache, viene attivato un evento. È possibile scrivere codice per l'esecuzione in tale evento e per il caricamento di una versione aggiornata dell'oggetto in Cache. Se viene aggiunta una versione alternativa di un oggetto mediante la stringa della chiave originale, tale versione sostituirà quella precedente. Per evitare ciò, concatenare la definizione alternativa con la stringa della chiave, in modo da rendere univoca ogni versione alternativa dell'oggetto. Oltre a memorizzare le informazioni accessibili a tutti gli utenti, in modo analogo ad Application, Cache è in grado di aggiornarsi in modo automatico in base alle modifiche apportate nelle relative dipendenze. Comportamento di Cache in .Net 2.0 Framework Cache in .Net 2.0 Framework è più efficiente e sicuro poiché viene gestito in base all'utente e alla sessione. Ciò significa che, quando un utente visualizza un report, una copia del report viene salvata nella cache e visualizzata per tale utente. Se l'utente apre nuovamente il report mentre la sessione corrente è attiva, l'applicazione visualizza il report memorizzato nella cache. In questo modo non è necessario eseguire il report ogni volta che viene visualizzato dallo stesso utente. Se un altro utente accede alo stesso report e lo apre, l'applicazione esegue il report una seconda volta, salva una seconda copia del report nella cache e la visualizza per l'utente. Tutti gli utenti dispongono di una copia del report nella cache per la propria sessione. Ciò evita che più utenti condividano lo stesso report. Limiti di questo approccio di persistenza Gli sviluppatori che non hanno una conoscenza approfondita di Cache potrebbero utilizzare tale oggetto in tutte le situazioni in cui è richiesta la persistenza, sostituendo Session con Cache. Tuttavia, Cache non è progettato per sostituire le funzionalità dell'oggetto Session. Il tentativo di emulare l'unicità di Session, concatenando i dati specifici dell'utente con la chiave di Cache, comporta il caricamento in Cache degli oggetti utente. Diversamente da quanto accade in Session, tali oggetti non scadono tuttavia dopo un periodo di inattività dell'utente. Di conseguenza, Cache richiede una maggiore quantità di memoria del server Web rispetto a Session. Se è necessario rendere persistenti dati specifici dell'utente, continuare a utilizzare l'oggetto Session. Per approcci di persistenza alternativi, vedere: ● ViewState e persistenza del modello a oggetti CrystalReportViewer [pagina 53] ● Session e persistenza del modello a oggetti ReportDocument [pagina 56] Persistenza del modello a oggetti ReportDocument con Cache Se il report è stato incapsulato all'interno del modello a oggetti ReportDocument, quest'ultimo dovrà essere reso persistente mediante un approccio basato su server, quale Session o Cache. È possibile rendere persistente un report incluso nel modello a oggetti ReportDocument utilizzando Cache in uno dei due modi seguenti: 58 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ● Creare un'istanza del report e assegnarla all'oggetto Cache, utilizzando la stessa sintassi dell'assegnazione di un report all'oggetto Session. Questo metodo è valido solo per un report dotato di elevata condivisibilità, in cui l'istanza ReportDocument ricorre una sola volta, grazie all'utilizzo di un unico insieme di parametri e credenziali di accesso. Nel caso di un'istanza ReportDocument che ricorre più volte a causa di una variazione dei parametri e delle informazioni di accesso, la relativa riassegnazione all'oggetto Cache mediante la stessa stringa di chiave sovrascriverà la versione precedente di tale istanza. ● Creare l'istanza di una versione della classe di report che implementa l'interfaccia ICachedReport. L'SDK di SAP Crystal Reports include una struttura incorporata di memorizzazione nella cache per i report. Tutti i report che implementano l'interfaccia ICachedReport vengono aggiunti automaticamente all'oggetto Cache con una chiave univoca basata su parametri e credenziali di accesso dell'utente. Questo metodo è valido per tutti i report con elevata condivisibilità. È possibile tuttavia che sia disponibile un numero ridotto di versioni a causa delle variazioni minori che si verificano nei parametri e nelle credenziali di accesso. È necessario assegnare i report con scarsa condivisibilità (specifici dell'utente) all'oggetto Session. Limiti della persistenza del modello a oggetti ReportDocument con Cache Cache rappresenta l'approccio più adatto da utilizzare per rendere persistenti le istanze di ReportDocument che presentano un elevato grado di condivisibilità tra utenti. Se il report è specifico dell'utente, Cache utilizzerà un'elevata quantità di memoria del server creando istanze basate sull'utente a livello di un'applicazione. Tali istanze verranno conservate nella memoria del server anche dopo la scadenza dell'utente. Per questo motivo, i report specifici dell'utente devono essere assegnati a Session. Nota nella maggior parte dei casi, utilizzare Session per rendere persistenti le istanze di ReportDocument. Utilizzare Cache o più specificamente l'interfaccia ICachedReport solo quando un report presenta elevata condivisibilità e dimensioni molto grandi o quando è talmente complesso da richiedere diversi minuti per il recupero dei relativi dati. Confronto tra Cache e ViewState Cache ha come funzione principale quella di rendere persistente lo stato degli oggetti nella classe di codice sottostante. ViewState ha come funzione principale quella di rendere persistente lo stato dei controlli nella pagina Web. Se un controllo della pagina Web viene collegato a un oggetto nella classe di codice sottostante ed entrambi devono essere resi persistenti tra le operazioni di ricaricamento della pagina, Cache e ViewState condividono i ruoli di persistenza. In questo caso, ViewState rende persistente un controllo CrystalReportViewer e Cache un oggetto ReportDocument collegato al controllo. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 59 Informazioni correlate Approccio di persistenza da utilizzare con SAP Crystal Reports [pagina 51] Limiti di persistenza durante il collegamento dei report nel gestore dell'evento Page_Load [pagina 61] 1.3.3.3.1 Per rendere persistente un report incorporato che implementa ICachedReport 1. Aggiungere il report al progetto. Vengono create una classe del report incorporato e una classe del report memorizzato nella cache che carica e restituisce un'istanza memorizzata nella cache della classe del report incorporato. 2. Creare un'istanza della classe del report memorizzato nella cache. 3. Assegnare l'istanza di classe memorizzata nella cache al controllo CrystalReportViewer. Informazioni correlate Collegamento a una classe di report incorporati e memorizzati nella cache [pagina 186] 1.3.3.3.2 Per rendere persistente un report non incorporato mediante una classe di utilità che implementa ICachedReport 1. Creare una classe di utilità per la gestione della cache personalizzata e impostarla in modo che implementi ICachedReport. 2. All'interno di questa classe, caricare il report non incorporato da una stringa di percorso mediante il metodo ReportDocument.Load(). 3. Scrivere il codice del metodo di implementazione CreateReport() in modo che restituisca l'istanza ReportDocument del report non incorporato. 4. Creare un'istanza della classe di utilità per la gestione della cache contenente il report. 5. Assegnare l'istanza di classe al controllo CrystalReportViewer. Informazioni correlate Collegamento a un report non incorporato caricato in una classe di utilità per la gestione della cache [pagina 188] 60 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.3.3.4 Limiti di persistenza durante il collegamento dei report nel gestore dell'evento Page_Load Nelle applicazioni Web ASP.NET è prassi diffusa inserire tutto il codice di avvio della pagina nel gestore dell'evento Page_Load, che viene chiamato dall'evento Page.Load. In particolare, il codice per il collegamento dei dati ai controlli viene solitamente memorizzato nel gestore dell'evento Page_Load. Tuttavia, se si inserisce il codice per il collegamento in questo gestore dell'evento, si verifica un problema con ViewState. Di seguito viene descritto tale problema e ne viene indicata la relativa soluzione: ● ViewState viene utilizzato per rendere persistenti due cose nei successivi caricamenti delle pagine: i dati che sono collegati al controllo e gli eventi clic del mouse eseguiti sul controllo. ● ViewState è una stringa. Pertanto sia i dati che gli eventi clic devono essere serializzati. ● Durante l'operazione di ricaricamento della pagina, i dati e gli eventi clic vengono entrambi ripristinati da ViewState. ● L'evento Page.Load si verifica dopo il ripristino di ViewState. Se il gestore dell'evento Page_Load contiene un codice per il collegamento ai controlli, durante il ricaricamento della pagina il codice sovrascrive ViewState. Inoltre, i dati originali e gli eventi clic vanno persi. ● Questo problema è tipico dei controlli che non sono in grado di ricordare le azioni del clic del mouse (ad esempio, una selezione di DropDownList) durante il ricaricamento della pagina. ● Per impedire la sovrascrittura dei dati e degli eventi clic del mouse, è necessario inserire del codice per il collegamento presente nel gestore dell'evento Page_Load in un blocco condizionale Not IsPostBack. In questo modo il codice per il collegamento non viene chiamato durante i postback. In questa soluzione si dà per scontato che sia i dati che gli eventi clic del mouse possano essere serializzati in ViewState. Il controllo CrystalReportViewer viene tuttavia collegato a oggetti non serializzabili, in particolare la classe ReportDocument, la classe ReportClientDocument o la classe InfoObject. Nota Vi è un'eccezione: quando il controllo CrystalReportViewer viene collegato a un report mediante il percorso della directory di file, la stringa del percorso può essere resa persistente in ViewState. Solo in questo scenario il controllo CrystalReportViewer può essere inserito in un blocco condizionale Not IsPostBack. Tuttavia questo scenario di collegamento dei report è meno potente e meno comune rispetto al collegamento alle classi di report elencate sopra. Poiché solo gli eventi clic del mouse del controllo CrystalReportViewer possono essere serializzati in ViewState, il collegamento a una classe di report non serializzabile crea un problema irrisolvibile durante le operazioni di ricaricamento delle pagine: ● Se il codice per il collegamento dei report viene inserito in un blocco condizionale Not IsPostBack, gli eventi clic del mouse di ViewState vengono conservati. Il collegamento dei report non ha tuttavia luogo e viene generata un'eccezione. ● Se il codice per il collegamento dei report viene inserito al di fuori del blocco condizionale, il report viene collegato correttamente. ViewState viene tuttavia sovrascritto e gli eventi clic del mouse vanno persi. Nota Questo approccio si osserva tipicamente quando si fa clic in un report a più pagine nel controllo CrystalReportViewer. Per qualche strano motivo il report continua a visualizzare la pagina 1. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 61 Soluzione consigliata: spostare il codice per il collegamento del controllo CrystalReportViewer nell'evento Init La soluzione per il controllo CrystalReportViewer consiste nello spostare il codice per il collegamento dei report nell'evento Init, che si verifica prima del ripristino di ViewState. Questa soluzione presenta una complicazione. Poiché la codifica dell'evento Init è meno comune rispetto all'evento Load, l'accesso risulta più difficile. Nei progetti Web o Windows di Visual Studio .NET 2003 il codice per la gestione dell'evento Init si trova nell'area relativa al codice generato da Progettazione Web Form, un'area che solitamente è nascosta e riservata al codice generato. Per risolvere questo problema, si consiglia di adottare il seguente approccio: ● Estrarre tutto il codice di collegamento e configurazione di CrystalReportViewer in un metodo di supporto privato denominato ConfigureCrystalReports(). ● Nell'area relativa al codice generato da Progettazione Web Form inserire un'unica riga di codice nel gestore dell'evento Page_Init() o nel metodo di attivazione eventi OnInit() per chiamare il metodo di supporto ConfigureCrystalReports(). Istruzioni dettagliate su come creare e compilare il metodo di supporto ConfigureCrystalReports() sono disponibili in Impostazione di un progetto [pagina 16]. Informazioni correlate Esercitazione: Persistenza del modello a oggetti ReportDocument mediante Session [pagina 302] 1.3.4 Scalabilità dell'applicazione Quando si pianifica la creazione di un'applicazione con l'SDK di SAP Crystal Reports, uno degli aspetti più importanti da considerare è come ottimizzarne la scalabilità. L'applicazione può essere scalata in due modi: ● Ottimizzando le prestazioni dell'applicazione. ● Ottimizzando le prestazioni del report. L'implementazione di queste procedure consigliate viene descritta nelle sezioni riportate di seguito. Scalabilità del codice dell'applicazione Quando si utilizza l'SDK di SAP Crystal Reports .Net, seguire le procedure consigliate riportate di seguito per migliorare le prestazioni e quindi la scalabilità: ● Ridurre l'utilizzo di DataSet. ● Sfruttare i vantaggi della memorizzazione nella cache dei report. ● Rilasciare il report dalla memoria dopo l'uso. 62 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ● Condivisione dell'elaborazione tra i server. Scalabilità dell'applicazione mediante la riduzione della complessità dei report Quando si progettano i report, e in particolare quando si progettano report per il Web, occorre tenere a mente il fattore scalabilità. Prendere in considerazione le seguenti procedure consigliate per ottimizzare la scalabilità di un report. ● Ridurre le dimensioni e la complessità dei report, se possibile. ● Trasferire la selezione dei record al server di database. ● Utilizzare sottoreport su richiesta. 1.3.4.1 1.3.4.1.1 Upgrade Options Soluzioni di reporting per SAP BusinessObjects Business Intelligence La gamma di prodotti SAP BusinessObjects Business Intelligence include diverse soluzioni di reporting. La varietà dei prodotti e le diverse licenze di distribuzione ad essi correlate mirano a soddisfare la gamma completa di esigenze di scalabilità associate a una soluzione per la creazione di report. Questa pagina contiene un breve riepilogo di tutte le soluzioni di reporting. Per ulteriori informazioni, visitare il sito Web SAP BusinessObjects. SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio fornisce agli sviluppatori un modo rapido e produttivo di creare e integrare nelle applicazioni report di qualità superiore, direttamente nell'ambiente di sviluppo noto di Visual Studio. SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio presenta molte delle funzionalità di SAP Crystal Reports. Queste includono, ad esempio, la possibilità di creare report, collegarli a un controllo CrystalReportViewer e interagire con essi a livello di codice utilizzando l'SDK di SAP Crystal Reports. Piattaforma SAP BusinessObjects Business Intelligence o SAP Crystal Server Con SAP Crystal Reports Server e la piattaforma SAP BusinessObjects Business Intelligence viene fornito un server RAS che garantisce un miglioramento significativo delle prestazioni e della scalabilità per creare, modificare e gestire report. SAP Crystal Reports Server offre tutte le funzionalità necessarie per creare, gestire e distribuire in modo sicuro i report sul Web in un pacchetto economico. L'applicazione consente di effettuare tutte le operazioni normalmente Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 63 richieste per la creazione di report, compresi l'accesso ai dati e la progettazione di report, la gestione e la distribuzione di report, e l'integrazione di report con portali e applicazioni, che consentono ai report Crystal nuovi ed esistenti di essere distribuiti più facilmente sul Web. La piattaforma SAP BusinessObjects Business Intelligence è una piattaforma di BI (Business Intelligence) multiserver progettata per soddisfare i requisiti legati a BI e al reporting su vasta scala. Il suo ambiente multi-server offre tutte le funzioni di fault tolerance, bilanciamento del carico, scalabilità e affidabilità necessarie per gestire le applicazioni aziendali più complesse e critiche. La piattaforma SAP BusinessObjects Business Intelligence è inoltre consigliata per le avanzate funzionalità di reporting, quali il controllo, SAP Crystal Reports Explorer, Encyclopedia e Process Tracker. SAP Crystal Reports Server è la soluzione ideale per creare, gestire e distribuire i report in modo sicuro nelle piccole e medie aziende. Per applicazioni aziendali critiche, se sono richiesti massima scalabilità e ulteriori strumenti di business intelligence, utilizzare la piattaforma SAP BusinessObjects Business Intelligence. 1.3.4.1.2 Confronto tra le soluzioni di reporting per SAP BusinessObjects Business Intelligence Questa tabella fornisce informazioni che consentono di individuare la soluzione di reporting per SAP BusinessObjects Business Intelligence più appropriata per il livello di scalabilità desiderato. Tabella 4: Funzione SAP Crystal Reports, ver­ sione per sviluppatori per Microsoft Visual Studio SAP Crystal Reports Piattaforma SAP Busines­ sObjects Business Intelli­ gence o SAP Crystal Reports Server Supporto per ASP.NET X X X Visualizzazione interattiva dei report X X X Single Sign-On X X X Supporto per applicazioni Windows X X X Report Designer ottimizzato X X Supporto per dispositivi mo­ bili X X Driver dei database nativi X X Origini dati OLAP X X Controllo delle dipendenze dei report X X Modelli X X Parametri di sovrapposizione dinamici X X Distribuzione su più piatta­ forme 64 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. X Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Funzione SAP Crystal Reports, ver­ sione per sviluppatori per Microsoft Visual Studio SAP Crystal Reports Piattaforma SAP Busines­ sObjects Business Intelli­ gence o SAP Crystal Reports Server Sistema di gestione per l'ero­ gazione delle informazioni X Protezione integrata X Bilanciamento del carico X Repository degli oggetti re­ port X Pianificazione dei report X Creazione e modifica di report a livello di programmazione X X Modello a oggetti CrystalRe­ portViewer X X X Modello a oggetti ReportDo­ cument X X X X X Modello a oggetti Report­ ClientDocument Server RAS X Modello a oggetti InfoObject X Scalabilità Bassa Supporto per più versioni di .Net Framework Bassa Da media a alta X X Informazioni correlate Confronto tra le architetture di tutte le soluzioni di reporting per SAP Business Intelligence [pagina 40] 1.3.4.1.3 Report Application Server (RAS) È possibile usare un server RAS per creare e modificare report Crystal e per elaborare le richieste relative a pagine. Una delle tecnologie SAP BusinessObjects comprende Report Application Server (RAS). RAS è sia un SDK client che un server. È possibile usare un server RAS per creare e modificare report Crystal e per elaborare le richieste relative a pagine. Quando il server recupera il report richiesto, RAS lo passa al visualizzatore report. Il server RAS è disponibile solo acquistando SAP Crystal Reports Server o la piattaforma SAP BusinessObjects Business Intelligence. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 65 Server RAS gestito Un server RAS gestito da altri componenti di Enterprise Framework viene chiamato server RAS gestito. SAP Crystal Reports Server e SAP BusinessObjects Enterprise offrono una struttura di server che semplifica la gestione e la distribuzione dei report basata sul Web a livello aziendale. Il server RAS gestito è uno dei molti server della struttura. Questo server è in grado di elaborare i report presenti sullo stesso computer del server Web e di RAS SDK (report non gestiti) oppure i report presenti su server di repository di report diversi (report gestiti). Il server RAS gestito può utilizzare i modelli a oggetti ReportClientDocument e InfoObject. Utilizzo dell'API RAS senza un server RAS In SAP Crystal Reports, è possibile accedere alla creazione report avanzata e alla funzionalità di modifica del modello a oggetti ReportClientDocument da CR .NET SDK. Il pacchetto di distribuzione in questo scenario richiede solo gli assembly .NET, il che significa che si sta il processo dell'API RAS. Tuttavia, se si utilizza il processo dell'API RAS, si perdono i benefici di prestazione e stabilità di un sistema outprocess, orientato al server. Per usufruire di tali benefici, utilizzare l'API RAS in combinazione con un server RAS in un ambiente SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence. Per ulteriori informazioni e codice di esempio, vedere la proprietà ReportClientDocument della classe CrystalDecisions.CrystalReports.Engine.ReportDocument nel riferimento all'API. Informazioni correlate Confronto tra le architetture di tutte le soluzioni di reporting per SAP Business Intelligence [pagina 40] modello a oggetti ReportClientDocument (RAS) [pagina 37] 1.3.4.2 1.3.4.2.1 Optimizing your Code Esclusione di DataSet dalle query semplici La creazione di report mediante DataSet offre notevoli vantaggi. Se tuttavia la scalabilità è un aspetto importante, non è indispensabile utilizzare i DataSet come meccanismo di accesso ai dati. L'uso dei DataSet non apporta alcun vantaggio significativo se l'applicazione crea un DataSet destinato esclusivamente all'utilizzo da parte di un report, in particolare se la query in questione è semplice come nel caso di SELECT field 1, field 2 FROM table. In tali casi, impostando SAP Crystal Reports per la connessione diretta al database e la successiva esecuzione della query (comportamento predefinito per qualsiasi report creato in SAP Crystal Reports Designer), il processo sarà più rapido e richiederà una quantità inferiore di memoria. I DataSet sono utili nei seguenti casi: 66 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ● È necessario combinare dati di diverse origini dati. ● I dati all'interno del DataSet devono essere modificati dopo l'esecuzione della query. Informazioni correlate Esercitazione: Connessione ai DataSet ADO.NET [pagina 475] 1.3.4.2.2 Memorizzazione nella cache di DataSet Se memorizzati nella cache, i DataSet consentono di garantire ulteriormente la scalabilità. Quando un report viene caricato in fase di runtime, il modulo report di SAP Crystal Reports tenta di creare il pool di connessioni al database. Ad esempio, se tre utenti richiedono la stessa pagina ASPX mediante lo stesso report, le tre query vengono inserite in un unico pool di connessioni al database. Tuttavia, la query di per sé non è gestita nel pool. Anche se identica in tutti i tre casi, la query deve essere eseguita ogni volta che un report viene richiesto dal modulo report. Nel caso di una query lenta o di un DataSet con volumi elevati, questa query specifica per singoli utenti può causare problemi in un'applicazione. Se questa query per singoli utenti viene ripetuta più volte per inserire dati in maniera ridondante in un DataSet, le conseguenze possono essere ancora peggiori a causa del sovraccarico di memoria. Per ridurre il numero di query al database, posizionare il DataSet in un oggetto Cache ASP.NET dopo la prima query, in modo che tutti i processi report condividano il singolo DataSet nell'oggetto Cache. Informazioni correlate Connessione ai DataSet ADO.NET [pagina 144] Creazione di report da set di dati ADO.NET [pagina 573] 1.3.4.2.3 Utilizzo del metodo Close() per liberare il report Utilizzare uno dei metodi Close() disponibili per rilasciare la memoria utilizzata dal report. Per ottimizzare la scalabilità in un progetto SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio è possibile anche utilizzare uno dei metodi Close() disponibili che consentono di liberare la memoria utilizzata dal report. Sono disponibili due metodi Close(): ● ReportDocument.Close(), utilizzato con SAP Crystal Reports. ● ReportClientDocument.Close() utilizzato con RAS SDK. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 67 Metodo ReportDocument.Close() È possibile utilizzare il metodo ReportDocument.Close() per rendere disponibile la memoria utilizzata dal report Crystal sul server Web. L'accesso al metodo ReportDocument.Close() dipende dal tipo di report, ossia se si tratta di report incorporati o non incorporati: ● Nel caso di report incorporati, viene generata una classe wrapper per rappresentare il report in codice. La classe wrapper del report eredita da ReportDocument e l'accesso al metodo Close() avviene per ereditarietà. ● I report non incorporati vengono caricati in un'istanza ReportDocument dalla directory di file e l'accesso al metodo Close() avviene direttamente dalla classe ReportDocument. Il report Crystal e l'istanza ReportDocument implicano entrambi l'utilizzo della memoria. Il report continua a utilizzare memoria anche quando ReportDocument viene eliminata. Ad esempio, l'istanza ReportDocument risulta esterna all'ambito al termine del caricamento della pagina Web. L'operazione di garbage collection per .NET rimuove l'istanza ReportDocument, liberando spazio nella memoria del server Web. Il report rimane tuttavia nella memoria del server Web e non può essere rimosso poiché l'istanza ReportDocument necessaria per l'accesso al report non esiste più. Se queste circostanze si ripetono in condizioni di elevata scalabilità, si verifica un uso eccessivo della memoria del server Web da parte di report a cui non è più possibile accedere. Per risolvere questo problema, chiamare il metodo ReportDocument.Close(), che consente di chiudere il report sul server Web e di liberare la memoria per altri report. Chiamata al metodo ReportDocument.Close() Non chiamare il metodo ReportDocument.Close() nella pagina prima della visualizzazione del report: anche se il report è stato chiuso, ReportDocument lo riapre non appena si fa nuovamente riferimento ad esso. Chiamare il metodo Close() solo al termine del processo di visualizzazione. Il momento ideale per chiamare il metodo Close() è durante l'evento Page_Unload. Metodo ReportClientDocument.Close() Quando si utilizza un server RAS gestito o RAS non gestito, i report vengono memorizzati nel server RAS, ma vengono rappresentati nel server Web mediante un'istanza ReportClientDocument. Se l'istanza ReportClientDocument esce dall'ambito senza chiamare il metodo ReportClientDocument.Close(), il server RAS mantiene aperto il report in memoria anche se non è più possibile accedervi. Se queste circostanze si ripetono in condizioni di elevata scalabilità, si verifica un uso eccessivo della memoria del server RAS da parte di report a cui non è più possibile accedere sul server Web. Per risolvere questo problema, chiamare il metodo ReportClientDocument.Close(), che consente di chiudere il report sul server RAS e di liberare la memoria per altri report. 68 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Chiamata al metodo ReportClientDocument.Close() Non chiamare il metodo Close() nella pagina prima della visualizzazione del report: quest'ultimo infatti deve rimanere aperto sul server fino al termine del processo di visualizzazione. In un'istanza ReportClientDocument, il metodo Close() chiude immediatamente il report e non consente più di aprirlo. Se il metodo Close() viene pertanto chiamato prima della visualizzazione del report, quest'ultimo diventerà inaccessibile e sarà generata un'eccezione. Il momento ideale per chiamare il metodo Close() è durante l'evento Page_Unload. Informazioni correlate Confronto tra i report incorporati e quelli non incorporati [pagina 150] 1.3.4.2.4 Impostazione di una Web farm o di un Web garden Una Web farm consente di estendere un sito Web su più server. Un Web garden consente di estendere un sito Web su più CPU all'interno di un unico server. Distribuire il carico di lavoro dovuto all'elaborazione dei report tra più CPU o più server può migliorare le prestazioni dell'applicazione di reporting basata sul Web. Informazioni correlate Utilizzo di SAP Crystal Reports in una Web farm o un Web garden [pagina 72] 1.3.4.3 1.3.4.3.1 Optimizing your Reports Utilizzo di report di dimensioni ridotte Per ottimizzare la scalabilità in un progetto SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio, è possibile ridurre le dimensioni dei report. Se possibile, non includere nel report più di 15 pagine. Nelle applicazioni Web gli utenti spesso desiderano visualizzare solo le parti contenenti dati chiave anziché intere pagine di dati. Di conseguenza i report utilizzati nelle applicazioni desktop potrebbero non essere più appropriati alle applicazioni basate sul Web. Per ridurre le dimensioni dei report, utilizzare la formula di selezione dei record allo scopo di limitare il numero di record restituiti al report. Questa formula può essere implementata in tre modi: Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 69 ● È possibile renderla hardcoded nel report mediante SAP Crystal Reports Designer incorporato. ● È possibile filtrare ulteriormente i record recuperati nel report a livello di codice. ○ Se si utilizza il modello a oggetti CrystalReportViewer, utilizzare la proprietà SelectionFormula o ViewTimeSelectionFormula di CrystalReportViewer. ○ Se si utilizza il modello a oggetti ReportDocument, utilizzare la proprietà RecordSelectionFormula di ReportDocument. Informazioni correlate Esercitazione: Filtro di dati mediante formule di selezione [pagina 260] 1.3.4.3.2 Utilizzo di elementi grafici di dimensioni ridotte Per ottimizzare la scalabilità in un progetto SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio, è possibile utilizzare immagini di dimensioni ridotte nei report. Se la scalabilità è un aspetto importante, non è necessario eliminare gli elementi grafici dai report. È tuttavia opportuno adoperarli con moderazione a causa dell'elevato utilizzo di risorse di sistema. Quando un report contenente un elemento grafico (un grafico o un'immagine) viene visualizzato in un controllo CrystalReportViewer, è necessario che il modulo report crei un file JPG temporaneo nella cartella dynamic_images e che il browser invii una richiesta specifica al server Web per recuperarlo. Il controllo CrystalReportViewer esegue ricerche periodiche nella cartella dynamic_images per individuare ed eliminare immagini obsolete. L'accesso al disco può infatti ridurre le prestazioni del report. Limitando l'utilizzo di grafici e immagini è possibile ridurre al minimo l'accesso al disco. Informazioni correlate Configurazione del file Web.Config [pagina 19] Directory dei visualizzatori [pagina 14] 1.3.4.3.3 Riprogettazione dei sottoreport per ridurre le richieste La modifica del modo in cui i sottoreport vengono utilizzati nell'applicazione può avere un impatto notevole sulle prestazioni dell'applicazione. Per ottimizzare la scalabilità in un progetto SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio, è possibile riprogettare le chiamate ai sottoreport per ridurre le richieste. 70 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Informazioni sull'utilizzo dei sottoreport I sottoreport vengono spesso utilizzati per creare report complessi, ma comportano un notevole sovraccarico. Ciò non implica la necessità di evitarli, bensì di utilizzarli con parsimonia. Inoltre, quando i sottoreport sono posizionati in sezioni ripetute, ad esempio le intestazioni di gruppo o la sezione dei dettagli, ogni istanza di tale sottoreport richiede un processo report specifico. Di conseguenza, un report costituito da 100 record e contenente un sottoreport nella sezione dei dettagli esegue in realtà 101 processi report. Riprogettazione dei sottoreport come controllo DataGrid .NET collegato ai report I sottoreport vengono spesso utilizzati in un modello di riepilogo/dettagli: ● Il report principale contiene righe di riepilogo. ● Ogni riga è collegata a un sottoreport in cui è contenuto un report dettagliato. Nel caso di dati di riepilogo che non devono essere stampati, è opportuno presentarli in un elenco di righe anziché in un report. In altre parole, anziché utilizzare un report come riepilogo che rimandi a più sottoreport per i dettagli, utilizzare un controllo DataGrid .NET come riepilogo che rimanda a più report normali per i dettagli. L'utilizzo di un controllo DataGrid .NET come riepilogo consente di ottenere una soluzione più semplice e scalabile. Per creare questo tipo di report, collegare un DataSet fornito come risultato a un controllo DataGrid, con un collegamento al report per ogni ID di riga. Verrà quindi utilizzato un solo report (con un parametro che accetta un ID univoco passato dall'URL dell'ID di riga del controllo DataGrid) per ogni riga. In questo scenario, l'elaborazione del report non viene eseguita quando viene visualizzato il controllo DataGrid, ma solo quando viene selezionato uno dei collegamenti all'interno del controllo DataGrid. 1.3.4.3.4 Esclusione di campi che bloccano l'elaborazione su richiesta Per ottimizzare la scalabilità in un progetto SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio è possibile anche evitare di utilizzare campi che bloccano l'elaborazione su richiesta. SAP Crystal Reports elabora report su richiesta. Ad esempio, se deve essere visualizzata la prima pagina di un report, viene elaborata solo tale pagina anziché l'intero report. Tuttavia, l'inserimento nella prima pagina di un report di campi o formule che dipendono dal completamento dell'elaborazione del report impedisce l'elaborazione su richiesta. Ad esempio, se il campo speciale "Pagina N di M" è posizionato nella prima pagina, per poterne ottenere il valore dovrà essere elaborato l'intero report, al fine di determinare il conteggio delle pagine. Di conseguenza, per poter visualizzare la prima pagina sarà necessario attendere il completamento dell'elaborazione dell'intero report. La stessa situazione si verifica quando si utilizza una percentuale di calcoli di riepilogo. È quindi opportuno evitare questi tipi di campi. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 71 1.3.4.3.5 Selezione dell'opzione Nessuna stampante nella finestra Imposta stampante Per ottimizzare la scalabilità in un progetto SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio è possibile anche selezionare l'opzione Nessuna stampante nella finestra Imposta stampante. Opzione Nessuna stampante In genere, quando si crea un report Crystal viene impostata una stampante predefinita sul computer di sviluppo. La stampante predefinita determina il layout di immagini, tipi di carattere e campi del database sul report. L'impostazione di una stampante predefinita offre il vantaggio di garantire la coerenza nella visualizzazione dei report: i report vengono visualizzati nel layout della stampante predefinita. L'uso di una stampante predefinita ha tuttavia lo svantaggio di presentare problemi di scalabilità. Alcuni driver di stampa causano ad esempio perdite di memoria o di gestione dei file. Se un report viene configurato per un driver di stampa caratterizzato da uno di questi problemi, le prestazioni potrebbero risentirne. Una procedura ottimale ai fini della scalabilità consiste pertanto nel modificare il report in modo da non utilizzare alcun driver di stampa. Nota Se il report viene impostato in modo da non utilizzare alcun driver di stampa, è possibile che il layout ottenuto per il report non corrisponda perfettamente al risultato previsto mediante l'uso della stampante desiderata. Dopo aver effettuato tale impostazione, è pertanto consigliabile verificarne l'aspetto che si ottiene dalla stampante desiderata. Se necessario, modificare il layout del report. Informazioni correlate Rimozione del driver di stampante predefinito dal report [pagina 113] 1.3.5 Utilizzo di SAP Crystal Reports in una Web farm o un Web garden Questa sezione fornisce una panoramica sulle modalità di utilizzo del sito Web SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio in una Web farm o in un Web garden. Una Web farm consente di estendere un sito Web su più server. Un Web garden consente di estendere un sito Web su più CPU in un unico server. Distribuire il carico di lavoro dovuto all'elaborazione dei report tra più CPU o più server può migliorare le prestazioni dell'applicazione di creazione di report basata sul Web. 72 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.3.5.1 Architettura di una Web farm o un Web garden Architettura di una Web farm Una Web farm è costituita da più server esposti ai client del browser come singolo server virtuale, con una scheda virtuale di accesso ai supporti e un indirizzo TCP/IP. Dietro questo livello virtuale, ciascun server della Web farm riceve tutti i pacchetti di rete, ma ne elabora un solo sottoinsieme. La capacità di condividere uniformemente il carico di lavoro conferisce alle Web farm una maggiore potenza di elaborazione. La distribuzione dei pacchetti viene gestita dalla funzione di bilanciamento del carico di rete. Questa funzionalità: ● Ripartisce uniformemente le richieste dei client tra i diversi server. ● Definisce il server per l'esecuzione di ciascuna richiesta specifica. ● Verifica l'utilizzo ottimale delle risorse del server e i tempi di attesa del client. ● Fornisce un'eccellente alternativa all'affinità del client. Nota in uno scenario di affinità del client, i client di collegamento tornano ogni volta allo stesso server. L'affinità del client è in genere disattivata poiché può rallentare le richieste su un server specifico. Ciascun server di una Web farm dispone di un driver del dispositivo di bilanciamento del carico di rete che comunica con gli altri server; ciascun server utilizza in genere due schede di rete. La seconda scheda consente l'esecuzione delle comunicazioni interne per il bilanciamento del carico di rete su una rete interna separata. Il dispositivo di bilanciamento del carico di rete viene fornito con la famiglia di sistemi operativi di Windows Server. Architettura di un Web garden Il Web garden è simile alla Web farm, ma anziché utilizzare più server collegati tra loro utilizza un unico server con più CPU. Questo singolo server SMP (con supporto multiprocessore) utilizza la tecnologia ASP.NET per eseguire un processo di lavoro ASP.NET separato su ciascuna CPU. Il server gestisce un numero maggiore di richieste client a fronte delle diverse CPU disponibili. 1.3.5.2 Processo di lavoro ASP.NET La tecnologia ASP.NET viene eseguita all'interno di un processo noto come processo di lavoro ASP.NET. Tutte le funzionalità ASP.NET vengono eseguite nell'ambito di tale processo. Un server Web standard contiene solo un singolo processo di lavoro ASP.NET, diversamente dalle Web farm e dai Web garden: Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 73 ● Una Web farm contiene più processi di lavoro ASP.NET. Ciascun server del gruppo gestisce un processo di lavoro ASP.NET separato. ● Un Web garden contiene più processi di lavoro ASP.NET. Ciascuna CPU del server SMP gestisce un processo di lavoro ASP.NET separato. Scelta di un processo di lavoro ASP.NET Quando un client Web si connette a una Web farm o un Web garden, viene selezionato uno dei diversi processi di lavoro ASP.NET disponibili per eseguire la richiesta. ● Il processo di lavoro ASP.NET selezionato in una Web farm dipende dal bilanciamento del carico di rete. ● Il processo di lavoro ASP.NET selezionato in un Web garden dipende dalla tecnologia ASP.NET. Gestione dello stato con più processi di lavoro ASP.NET Quando si passa da uno scenario con un unico processo di lavoro ASP.NET (server Web normale) a uno scenario con più processi di lavoro ASP.NET (Web farm o Web garden), la gestione dello stato diviene più complessa. Poiché le pagine Web sono senza stato, il server Web deve garantire la persistenza dello stato utilizzando altri strumenti. Gli strumenti tipici per la gestione dello stato sul server Web includono Stato sessione e Cache di ASP.NET. Session e Cache sono entrambi contenuti nello spazio di memoria di un singolo processo di lavoro ASP.NET. In una Web farm o in un Web garden vengono tuttavia utilizzati contemporaneamente più processi di lavoro ASP.NET. L'oggetto Session o Cache all'interno di un singolo processo di lavoro ASP.NET non consente di gestire lo stato su più processi. Di conseguenza è necessario un livello aggiuntivo per la gestione di stato, ossia un Session State Server fuori processo che memorizzi e recuperi le informazioni di stato per ciascun processo di lavoro ASP.NET in una Web farm o in un Web garden. Informazioni correlate Stato sessione fuori processo [pagina 74] Approccio di persistenza da utilizzare con SAP Crystal Reports [pagina 51] 1.3.5.3 Stato sessione fuori processo Nelle Web farm e nei Web garden è necessario condividere Stato sessione su più server utilizzando alcuni form di Stato sessione fuori processo. In genere si utilizzano due soluzioni: 74 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ● Distribuzione del server Stato sessione fuori processo fornito con ASP.NET. ● Configurazione manuale di ciascun server Web per memorizzare i dati di Stato sessione su un server SQL. Requisiti di serializzazione Tutti gli oggetti da memorizzare devono essere serializzabili in entrambe le soluzioni. Un oggetto può essere reso persistente su un server dello stato fuori processo solo se è serializzabile. Nota non tutti i modelli a oggetti dell'SDK SAP Crystal Reports possono essere serializzati. SAP fornisce tuttavia una soluzione di aggiornamento per la gestione dello stato dei report con un server fuori processo. Informazioni correlate Modelli a oggetti serializzabili in SAP Crystal Reports [pagina 75] 1.3.5.4 Modelli a oggetti serializzabili in SAP Crystal Reports Per SAP Crystal Reports sono disponibili quattro modelli a oggetti, due forniti con SAP Crystal Reports e due disponibili mediante aggiornamento. In questa sezione vengono descritti i modelli a oggetti che possono essere serializzati e utilizzati con un server Stato sessione fuori processo. Nota Per un'introduzione a Stato sessione fuori processo, vedere Stato sessione fuori processo [pagina 74]. Serializzazione e modello a oggetti CrystalReportViewer CrystalReportViewer è un modello a oggetti limitato incluso nell'API del controllo CrystalReportViewer. A causa dell'ambito di applicazione limitato che caratterizza tale modello a oggetti, ne viene in genere sconsigliato l'utilizzo a favore del più potente modello a oggetti ReportDocument. Il modello a oggetti CrystalReportViewer può tuttavia essere utilizzato su una Web farm o su un Web garden. Ciò è dovuto al fatto che CrystalReportViewer è contenuto in un controllo Web; inoltre, la persistenza del controllo Web viene gestita sul lato client mediante ViewState. La persistenza di ViewState imposta lo stato dei controlli server Web ASP.NET in una stringa crittografata, quindi inserisce tale stringa come campo nascosto all'interno della pagina ASPX durante i ricaricamenti di pagina. Le informazioni sullo stato possono essere fornite a qualsiasi processo di lavoro ASP.NET. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 75 Nota Questo tipo di persistenza client funziona solo all'interno dei ricaricamenti di pagina. ViewState non può rendere persistenti le informazioni tra le pagine. Serializzazione e modello a oggetti ReportDocument Il modello a oggetti ReportDocument è più potente di CrystalReportViewer. Per questo motivo, ne viene in genere consigliato l'utilizzo in SAP Crystal Reports. In SAP Crystal Reports 9 e versioni precedenti non è tuttavia possibile serializzare la classe ReportDocument, la quale non può pertanto essere utilizzata con un server Stato sessione fuori processo nello scenario di una Web farm o di un Web garden. Questo limite è stato affrontato in SAP Crystal Reports 10 e versioni successive creando un ponte tra il modello a oggetti ReportDocument e un modello a oggetti serializzabile, ReportClientDocument. È possibile accedere al modello a oggetti ReportClientDocument in molti modi diversi. Per utilizzare il modello a oggetti ReportDocument in una Web farm o in un Web garden è necessario utilizzare il server Stato sessione fuori processo ASP.NET per memorizzare lo stato dell'istanza ReportDocument serializzata e un server RAS non gestito per memorizzare il Nota È possibile serializzare il modello a oggetti ReportDocument solo se è stato installato il server RAS e se le proprietà ReportDocument.ReportAppServer e ReportDocument.EnterpriseSession sono state impostate per richiamare il server. Serializzazione e modello a oggetti ReportClientDocument Il modello a oggetti ReportClientDocument può essere serializzato. È possibile accedere al modello a oggetti ReportClientDocument in molti modi diversi. modello a oggetti InfoObject Il modello a oggetti InfoObject fa parte della soluzione di aggiornamento Crystal, ossia SAP Crystal Reports Server o la piattaforma SAP BusinessObjects Business Intelligence. SAP Crystal Reports Server e la piattaforma SAP BusinessObjects Business Intelligence sono soluzioni Enterprise multiserver che rappresentano un tipico approccio alternativo a una Web farm o un Web garden esistente. 76 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Informazioni correlate Utilizzo di SAP Crystal Reports in una Web farm o un Web garden [pagina 72] Scelta del modello a oggetti appropriato al progetto [pagina 31] ViewState e persistenza del modello a oggetti CrystalReportViewer [pagina 53] 1.3.5.5 Configurazione di SAP Crystal Reports per una Web farm o un Web garden Server aggiuntivi Oltre ai server della Web farm o del Web garden è necessario utilizzare due server aggiuntivi: ● Il server Stato sessione fuori processo ASP.NET per memorizzare lo stato dell'istanza ReportDocument serializzata. ● Un server RAS non gestito per memorizzare il file rpt del report Crystal. Nota Per ulteriori informazioni, vedere Soluzioni di reporting per SAP BusinessObjects Business Intelligence [pagina 63]. Uso specifico di ReportDocument La Web farm o il Web garden utilizza il server Stato sessione fuori processo ASP.NET per memorizzare l'oggetto ReportDocument serializzato. In questo scenario l'oggetto ReportDocument viene utilizzato in modo diverso rispetto all'installazione base di SAP Crystal Reports. Il metodo ReportDocument.Load() o la proprietà ReportDocument.FileName collega l'istanza di ReportDocument a un report out-process memorizzato nel server RAS non gestito. Per un esempio di utilizzo di questi approcci, vedere le informazioni di configurazione riportate di seguito. Nota Se si memorizza il file rpt del report sul server RAS non gestito out-process, ciascun processo di lavoro ASP.NET nella Web farm o nel Web garden può accedere allo stesso file rpt del report da una postazione centrale. Configurazione di ReportDocument per il server RAS non gestito È possibile configurare la relazione tra l'istanza di ReportDocument e il server RAS non gestito nei seguenti modi: Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 77 ● Caricare il report Crystal locale incorporato nell'istanza di ReportDocument nel server RAS non gestito in fase di esecuzione. Il file rpt del report viene temporaneamente memorizzato nel server RAS non gestito outprocess. ● Associare un report esterno memorizzato in modo permanente su un server RAS non gestito out-process all'istanza di ReportDocument. A tale scopo, assegnare il percorso di directory del file di report sul server RAS non gestito alla proprietà FileName dell'istanza di ReportDocument. Istanza ReportDocument sul server Stato sessione, file rpt sul server RAS non gestito L'istanza di ReportDocument, che può essere serializzata se utilizzata con la soluzione di aggiornamento Crystal RAS non gestita, viene memorizzata sul server Stato sessione out-process ASP.NET. Poiché l'istanza di ReportDocument rimane attiva sul server Stato sessione, il file rpt del report Crystal associato con tale istanza viene tenuto aperto sul server RAS non gestito. Quando un altro processo di lavoro ASP.NET della Web farm o del Web garden recupera l'istanza di ReportDocument dal server Stato sessione out-process, tale istanza accede al file rpt associato sul server RAS non gestito. Scrittura di immagini sulla condivisione di rete Quando si utilizza una Web farm è necessario configurare un dettaglio aggiuntivo. Le immagini scritte durante il processo di creazione dei report (ad esempio i grafici dinamici) devono essere posizionate su una condivisione di rete comune ai fini dell'accesso da parte di un processo di lavoro ASP.NET. Ogni computer deve essere configurato in modo da scrivere le immagini sulla stessa condivisione di rete e garantire all'account di lavoro ASP.NET l'autorizzazione di scrittura su tale condivisione. Per configurare un computer in modo che sia in grado di accedere a questa directory, aggiungere le seguenti informazioni al registro. [HKEY_LOCAL_MACHINE\SOFTWARE\Business Objects\Suite 12.0\Report Application Server \Viewer] "CrystalImageDir"="\\fileserver\images" Istruzioni dettagliate di configurazione Per istruzioni dettagliate sulle procedure e sui problemi di configurazione riguardanti l'esecuzione di SAP Crystal Reports su una Web farm o un Web garden, visitare il sito Web del supporto tecnico. 78 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.3.6 Utilizzo di Crystal Reports come servizio Web In questa sezione viene illustrato come utilizzare report Crystal che sono stati pubblicati come servizi Web report. I servizi Web consentono ad applicazioni differenti di condividere dati e funzioni. Grazie a tali servizi, è possibile ad esempio collegare un sistema di contabilità a un sistema per la gestione degli ordini dei clienti. Le società possono inoltre utilizzare questo tipo di servizi per condividere dati e funzioni delle applicazioni con altre società. I servizi Web sono indipendenti da qualsiasi particolare tecnologia di componenti o convenzione di chiamata degli oggetti per le seguenti ragioni: ● Utilizzano il protocollo HTTP come protocollo Web. ● Sono basati su XML. ● Supportano il protocollo SSL (Secure Socket Layer). Possono accedere ai servizi Web i programmi scritti in qualsiasi linguaggio di programmazione per qualsiasi modello di componenti e sistema operativo. SAP Crystal Reports permette di pubblicare e utilizzare facilmente i report come servizi Web report. Le applicazioni Web e Windows possono connettersi a un servizio Web report e visualizzare il report Crystal esposto dal suddetto servizio. 1.3.6.1 Pubblicazione e utilizzo di un report come servizio Web In SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio è possibile pubblicare i report Crystal come servizi Web. Pubblicazione di un report come servizio Web report Quando in SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio si seleziona l'opzione per la pubblicazione di un report Crystal come servizio Web report, tale servizio viene compilato in un file DLL che genera un file XML con l'estensione file dei servizi Web .NET, "asmx". Il file ASMX descrive le funzioni pubbliche, i parametri di input, i tipi di dati e i tipi di dati restituiti esposti dal servizio Web report. La DLL e il file ASMX vengono entrambi pubblicati sul server Web sotto forma di servizio Web report. A questo punto, un client in un browser Web può richiamare il servizio Web report mediante il relativo URL. I dati verranno passati verso e dal servizio Web tramite HTTP in formato XML. Utilizzo del report come file del servizio Web report sul client Per accedere da un'applicazione client al servizio Web report pubblicato, è necessario passare la stringa dell'URL alla proprietà ReportSource del controllo CrystalReportViewer, da un sito Web o da un progetto Windows. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 79 Informazioni correlate Utilizzo di Crystal Services [pagina 81] Utilizzo di Crystal Reports come servizio Web [pagina 79] 1.3.6.1.1 Per pubblicare un servizio Web report Prima di iniziare, è necessario disporre di un report Crystal preesistente. Il report verrà pubblicato come servizio Web per poter essere utilizzato dalla proprietà CrystalReportViewer.ReportSource. 1. Avviare Visual Studio. 2. Dal menu File, scegliere Nuovo, quindi fare clic su Sito Web. 3. Nell'elenco Modelli Visual Studio installati fare clic su Servizio Web ASP.NET. 4. Nel campo Percorso immettere un percorso della directory di file e un nome per la directory dei servizi Web. C:\WebServices\MyCrystalReportsWebServices 5. Fare clic su OK. 6. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto in grassetto e selezionare Aggiungi elemento esistente.... 7. Nella finestra di dialogo Aggiungi elemento esistente, impostare Tutti i file (*.*) in Tipo file. 8. Aggiungere un report Crystal esistente al progetto. 9. Fare clic con il pulsante destro del mouse sul report e selezionare Pubblica come servizio Web. Viene creato un nuovo servizio. 10. Fare clic con il pulsante destro del mouse sul servizio Web e selezionare Imposta come pagina iniziale. Quando si esegue l'applicazione, il nuovo servizio Web viene visualizzato nel browser Web. È possibile utilizzare l'URL del servizio Web come origine del report per un controllo CrystalReportViewer. Nota In Visual Studio 2005 e versioni successive, IIS non viene utilizzato per impostazione predefinita per visualizzare in anteprima siti Web e servizi Web. Per impostazione predefinita, viene utilizzato il server Web di Visual Web Developer. Se si utilizza tale server Web, l'URL contiene solo un numero di porta casuale, temporaneo, valido unicamente in fase di compilazione. Per poter accedere a questo URL del servizio Web da un'applicazione client, è necessario in primo luogo configurare la directory di file relativa al progetto del servizio Web come directory virtuale in IIS. Quest'ultima fornirà un URL coerente che potrà essere chiamato dall'applicazione client. 1.3.6.1.2 Per utilizzare il servizio Web report da un progetto client Prima di iniziare, è necessario accedere a un report che è già stato pubblicato come servizio Web. 80 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1. Aggiungere il controllo CrystalReportViewer al sito Web o all'applicazione Windows. 2. Dal menu Visualizza, scegliere Codice. 3. Assegnare la stringa URL del servizio Web report alla proprietà ReportSource della classe CrystalReportViewer. myCrystalReportViewer.ReportSource = "http://localhost/MyCrystalReportsWebService/Hierarchical_GroupingService.asmx" crystalReportViewer.ReportSource = "http://localhost/MyCrystalReportsWebService/Hierarchical_GroupingService.asmx"; Quando si esegue l'applicazione, il controllo CrystalReportViewer visualizza il report pubblicato dal servizio Web. 1.3.6.2 Utilizzo di Crystal Services SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio consente di connettersi ai report a livello di codice tramite il servizio Web Crystal Services. Crystal Services semplifica la connessione ai report esposti da diversi server nella rete. Le origini report sottostanti ai nodi secondari e le classi che tali origini generano quando vengono trascinate nel Web Form o nel Windows Form cambiano nelle versioni successive di SAP Crystal Reports. Utilizzo di Crystal Services con SAP Crystal Reports 2005 o versione successiva In Visual Studio 2005 l'accesso a Crystal Services avviene a livello di codice. Crystal Reports consente di generare un elenco di report disponibili su un computer locale o remoto e di accedervi tramite un servizio Web. Il codice di connessione deve essere immesso manualmente in SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. Crystal Services utilizza il protocollo dei servizi Web report per accedere a una directory virtuale del server, denominata "directory virtuale visualizzatori". Utilizzo di Crystal Services con SAP Crystal Reports per Visual Studio .NET 2003 In SAP Crystal Reports per Visual Studio 2003 , l'accesso a Crystal Services veniva eseguito da Esplora server. Il nodo secondario Crystal Services all'interno di ciascun server si espande per visualizzare altri nodi secondari, i cui nomi cambiano da una versione all'altra di SAP Crystal Reports. Tali nodi secondari Crystal Services hanno tuttavia in comune il fatto che ciascuno di essi si espande per visualizzare un elenco di report da una directory di file sul computer locale o dai server sulla rete. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 81 In alcuni casi, un nodo secondario Crystal Services utilizza il protocollo dei servizi Web report, il quale consente di accedere a una directory virtuale del server denominata "directory virtuale visualizzatori". In altri casi, viene stabilita una connessione diretta a un server RAS non gestito, a SAP Crystal Reports Server o alla piattaforma SAP BusinessObjects Business Intelligence. In questi casi, non viene utilizzato il protocollo dei servizi Web report. Può essere necessario adeguare le impostazioni del firewall per poter accedere al CMS della piattaforma SAP BusinessObjects Business Intelligence. La porta predefinita per il CMS è 6400. Rivolgersi all'amministratore del sistema per ulteriori informazioni sull'impostazione dell'indirizzo di rete e della porta per il sistema della piattaforma SAP BusinessObjects Business Intelligence. Per ulteriori informazioni sulla personalizzazione delle porte, consultare il Manuale dell'amministratore della piattaforma Business Intelligence SAP BusinessObjects. Nota I nodi disponibili dipendono dalla configurazione e dal contratto di licenza. Un report esposto mediante il nodo Crystal Services può essere trascinato nella barra dei componenti del Web Form o del Windows Form in Visual Studio .NET 2003. Informazioni correlate Directory dei visualizzatori [pagina 14] 1.3.6.3 Configurazione di File di server in Crystal Services Un gruppo di Crystal Services fornito con SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio prende il nome di File di server. Si tratta di un insieme di servizi Web report esposti mediante una directory virtuale da un percorso della directory di file nell'unità disco rigido. Per ogni versione di Visual Studio sono necessari requisiti di implementazione differenti. 1.3.6.3.1 Configurazione di File di server in Visual Studio .NET 2003 File di server si riferisce a un insieme di servizi Web report esposti dalla directory virtuale visualizzatori in IIS. I File di server erano forniti in origine come un nodo di Crystal Services all'interno di SAP Crystal Reports in Visual Studio .NET 2002. Sebbene tale nodo sia stato in seguito rimosso, i File di server nell'SDK continuano a essere supportati in tutte le versioni successive di SAP Crystal Reports. È tuttavia necessario impostare configurazioni specifiche in ciascuna versione. I File di server vengono generati da file di report sottostanti, memorizzati nella cartella dei report di esempio o in un'altra cartella stabilita dall'utente nel percorso della directory di file del server Web. L'accesso ai File di server può avvenire secondo due modalità: 82 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ● Come un nodo visibile in Crystal Services. Questo metodo di accesso è disponibile solo in SAP Crystal Reports per Visual Studio 2003. ● Tramite la configurazione a livello di codice della classe ServerFileReport nell'SDK. L'accesso ai File di server mediante l'SDK è disponibile in tutte le versioni di SAP Crystal Reports .NET. I File di server sono esposti tramite una directory virtuale in IIS. La connessione ai file di report sottostanti richiede la configurazione delle autorizzazioni di accesso alla cartella. Le autorizzazioni di accesso vengono configurate mediante una voce del file web.config. Configurazione di File di server in Visual Studio .NET 2003 In Visual Studio .NET 2003 la cartella di configurazione relativa a File di server è stata sostituita dall'aggiunta di una voce di configurazione al file web.config. È possibile aggiungere al file web.config di ogni progetto una voce di configurazione alla volta. Si consiglia tuttavia di aggiungere tale voce al file web.config situato all'interno della directory virtuale visualizzatori di SAP Crystal Reports, per rendere disponibile questa informazione a tutti i progetti Visual Studio .NET. Prima di eseguire questa operazione, consultare la sezione che segue per ottenere ulteriori informazioni sulla "directory virtuale visualizzatori". File di server e directory virtuale visualizzatori I File di server vengono eseguiti al di fuori di IIS (Internet Information Services) da un servizio Web centralizzato ubicato in una speciale directory virtuale visualizzatori. Ogni successiva versione di SAP Crystal Reports crea una directory virtuale visualizzatori aggiuntiva in IIS, in modo da consentire la gestione di più versioni di SAP Crystal Reports. Ciò può causare un problema di manutenzione se in un progetto sono stati codificati File di server con una versione precedente di SAP Crystal Reports e si desidera eseguire l'aggiornamento a una versione successiva. All'interno del codice il nome della "directory virtuale visualizzatori" nella proprietà WebServiceURL di ogni istanza ServerFileReport deve essere modificato in quello della "directory virtuale visualizzatori" corrente, per consentire il corretto funzionamento delle istanze di ServerFileReport. Informazioni correlate Configurazione di File di server in Visual Studio 2005 e versioni successive [pagina 85] Utilizzo di Crystal Reports come servizio Web [pagina 79] Directory dei visualizzatori [pagina 14] Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 83 1.3.6.3.1.1 Per modificare la "directory virtuale visualizzatori" nella proprietà WebServiceURL delle istanze di ServerFileReport 1. Individuare ogni occorrenza all'interno del progetto in cui viene assegnata la proprietà WebServiceURL di un'istanza ServerFilesReport. 2. Confrontare il nome della directory virtuale visualizzatori attualmente assegnato nel codice con il nome della stessa directory utilizzato nelle versioni precedenti. 3. Modificare il nome della directory virtuale visualizzatori utilizzato nella versione superiore di SAP Crystal Reports installata. 4. Eseguire la ricompilazione e verificare che i report vengano caricati in modo corretto. Nella procedura che segue, verrà modificato il file web.config nella directory virtuale visualizzatori per consentire la configurazione corretta dei File di server in tutte le versioni successive a Visual Studio .NET 2002. 1.3.6.3.1.2 Per aggiungere la voce di configurazione di File di server nel file web.config della directory virtuale visualizzatori (tutte le versioni successive a Visual Studio .NET 2002) 1. Individuare la directory virtuale visualizzatori della versione superiore di SAP Crystal Reports installata. 2. Per verificare il corretto funzionamento della directory virtuale visualizzatori, aprire un browser e immettere l'URL relativo al servizio Web report pubblicato nella suddetta directory. Opzione Descrizione Visual Studio 2003 http://localhost/CrystalReportWebFormViewer2/ ServerFileReportService.asmx?wsdl SAP Crystal Reports 2008 http://localhost/crystalreportviewers12/ ServerFileReportService.asmx?wsdl 3. In un editor di testo aprire il file web.config situato all'interno della directory virtuale visualizzatori. Nota in alternativa è possibile scegliere di apportare tali modifiche solo nel file web.config dell'applicazione Web client, utilizzata per accedere ai report File di server. 4. Nella parte superiore del file web.config, all'interno del tag di configurazione, aggiungere una voce configSections che dichiari un nuovo tipo sectionGroup (crystalDecisions) e la relativa sezione (serverFileReportManager). <configSections> <sectionGroup name="crystalDecisions"> <section name="serverFileReportManager" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null" /> 84 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net </sectionGroup> </configSections> 5. Aggiungere il nuovo sectionGroup e la relativa sezione dichiarati nel passaggio precedente dopo il tag di chiusura di configSections. Nel seguente esempio, modificare il valore della directory principale con la directory in cui sono memorizzati i report. Ai fini di questo esempio, il percorso file è impostato su C:\programmi\Microsoft Visual Studio .NET 2003\Crystal Reports\Samples\Reports\Feature Examples. <crystalDecisions> <serverFileReportManager> <add key="rootDirectory" value="C:\program files\Microsoft Visual Studio .NET 2003\Crystal Reports\Samples \En\Reports\Feature Examples" /> </serverFileReportManager> </crystalDecisions> Nota è necessario immettere il percorso della directory di file relativo alla cartella dei report nel campo dei valori. 6. Salvare le modifiche effettuate in web.config. 1.3.6.3.2 Configurazione di File di server in Visual Studio 2005 e versioni successive File di server si riferisce a un insieme di servizi Web report esposti sul server IIS. I File di server erano forniti in origine come un nodo di Crystal Services all'interno di SAP Crystal Reports in Visual Studio .NET 2002. Sebbene tale nodo sia stato in seguito rimosso, i File di server nell'SDK continuano a essere supportati in tutte le versioni successive di SAP Crystal Reports. È tuttavia necessario impostare configurazioni specifiche in ciascuna versione. I File di server vengono generati da file di report sottostanti, memorizzati nella cartella dei report di esempio o in un'altra cartella stabilita dall'utente, nella directory file del server Web. Configurazione di File di server Per configurare File di server per Visual Studio 2005 o versione successiva, è necessario effettuare due operazioni. È necessario in primo luogo creare il servizio Web report usato per l'esposizione dei report. Quindi, modificare il file web.config che corrisponde al nuovo servizio Web. In Visual Studio 2005 la cartella di configurazione relativa a File di server presente in Visual Studio .NET 2002 è stata sostituita dall'aggiunta di una voce di configurazione nel file web.config. È possibile aggiungere al file web.config di ogni progetto un voce di configurazione alla volta. Si consiglia tuttavia di aggiungere tale voce al file web.config situato all'interno della directory virtuale che contiene i servizi Web report. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 85 Informazioni correlate Connessione a servizi Web report da un sito Web protetto [pagina 89] Utilizzo di Crystal Reports come servizio Web [pagina 79] 1.3.6.3.2.1 Per creare i servizi Web report richiesti per File di server 1. Avviare Visual Studio. 2. Dal menu File, scegliere Nuovo, quindi fare clic su Sito Web. 3. Nella finestra di dialogo Nuovo sito Web selezionare Visual C# nell'elenco Linguaggio. 4. Nell'elenco Modelli scegliere Servizio Web ASP.NET. 5. Nel campo Percorso sostituire il nome predefinito del progetto con il nome del progetto creato. Ai fini di questo esempio, il progetto verrà salvato in C:\InetPub\wwwroot\ con il nome CrystalReportsWebServices. C:\InetPub\wwwroot\CrystalReportsWebServices\ 6. Fare clic su OK. 7. Dal menu Debug, scegliere Avvia debug. Viene visualizzata una finestra di dialogo in cui è indicato che il file Web.config deve essere modificato. Fare clic sul pulsante OK per attivare il debug. 8. Al termine del debug, tornare all'applicazione. 9. In Esplora soluzioni fare clic con il pulsante destro del mouse su Service.asmx, quindi scegliere Elimina. 10. In Esplora soluzioni espandere la cartella App_Code, fare clic con il pulsante destro del mouse su Services.cs, quindi scegliere Elimina. 11. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto in grassetto, quindi scegliere Aggiungi nuovo elemento. 12. Nella finestra di dialogo Aggiungi nuovo elemento, effettuare le seguenti operazioni: a. Nel campo Modelli installati selezionare Servizio Web. b. Nel campo Nome immettere ServerFileReportService.asmx. c. Deselezionare Inserisci codice in file separato. d. Fare clic su Aggiungi. 13. Sostituire il contenuto del file ServerFileReportService.asmx con la seguente riga: <%@ WebService language="C#" class="CrystalDecisions.Web.Services.ServerFileReportService" %> 14. Dal menu File, scegliere Salva tutto. 15. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto in grassetto, quindi scegliere Aggiungi nuovo elemento. 16. Nella finestra di dialogo Aggiungi nuovo elemento: a. Nel campo Modelli installati selezionare Servizio Web. 86 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net b. Nel campo Nome immettere ServerFileReportManager.asmx c. Deselezionare Inserisci codice in file separato. d. Fare clic su Aggiungi. 17. Sostituire il contenuto del file ServerFileReportManager.asmx con la seguente riga: <%@ WebService language="C#" class="CrystalDecisions.Web.Services.ServerFileReportManager" %> 18. Dal menu File, scegliere Salva tutto. 1.3.6.3.2.2 Per modificare la "directory virtuale visualizzatori" nella proprietà WebServiceURL delle istanze di ServerFileReport 1. Individuare ogni occorrenza all'interno del progetto in cui viene assegnata la proprietà WebServiceURL di un'istanza ServerFilesReport. 2. Confrontare il nome della directory virtuale visualizzatori attualmente assegnato nel codice con il nome della stessa directory utilizzato nelle versioni precedenti. 3. Modificare il nome della directory virtuale visualizzatori utilizzato nella versione superiore di SAP Crystal Reports installata. Se la versione più recente di SAP Crystal Reports è SAP Crystal Reports per Visual Studio 2005, immettere il percorso del servizio Web report creato nei passaggi precedenti dell'esercitazione. 4. Eseguire la ricompilazione e verificare che i report vengano caricati in modo corretto. Informazioni correlate Directory dei visualizzatori [pagina 14] 1.3.6.3.2.3 Per aggiungere la voce di configurazione di File di server al file web.config 1. In Esplora soluzioni aprire il file Web.Config. 2. Sostituire l'intero contenuto del file Web.Config con il codice XML mostrato di seguito. Nel seguente esempio, modificare il valore della directory principale con la directory in cui sono memorizzati i report. Ai fini di questo esempio, il percorso file è impostato su C:\programmi\Microsoft Visual Studio 8\Crystal Reports\Samples\it\Reports\Feature Examples. <?xml version="1.0"?> <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0"> <configSections> <sectionGroup name="crystalDecisions"> Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 87 <section name="serverFileReportManager" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, Custom=null"/> </sectionGroup> </configSections> <crystalDecisions> <serverFileReportManager> <add key="rootDirectory" value="C:\program files\Microsoft Visual Studio 8\Crystal Reports\Samples\it\Reports\Feature Examples"/> </serverFileReportManager> </crystalDecisions> <appSettings/> <connectionStrings/> <system.web> <compilation debug="true"> <assemblies> <add assembly="CrystalDecisions.Web, Version=12.1.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> </assemblies> </compilation> </system.web> </configuration> Nota È necessario immettere il percorso alla directory dei report al posto di PUT_FILE_DIRECTORY_PATH_TO_REPORTS_FOLDER_HERE. 3. Salvare le modifiche effettuate nel file web.config. 4. Per verificare il corretto funzionamento della directory virtuale visualizzatori, aprire un browser e immettere l'URL relativo al servizio Web report pubblicato. http://localhost/CrystalReportsWebServices/ServerFileReportService.asmx?wsdl 1.3.6.3.2.4 File di server esistenti e directory virtuale visualizzatori Nelle versioni precedenti di SAP Crystal Reports, i File di server venivano eseguiti al di fuori di IIS da un servizio Web centralizzato ubicato nella directory virtuale visualizzatori. Ogni successiva versione di SAP Crystal Reports crea una "directory virtuale visualizzatori" aggiuntiva in IIS, in modo da consentire la gestione di più versioni di SAP Crystal Reports. Ciò può causare un problema di manutenzione se in un progetto sono stati codificati File di server con una versione precedente di SAP Crystal Reports e si desidera eseguire l'aggiornamento a una versione successiva. All'interno del codice il nome della "directory virtuale visualizzatori" nella proprietà WebServiceURL di ogni istanza ServerFileReport deve essere modificato in base al percorso corrente quello del servizio Web report, per consentire il corretto funzionamento delle istanze di ServerFileReport. Informazioni correlate Directory dei visualizzatori [pagina 14] 88 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.3.6.4 Connessione a servizi Web report da un sito Web protetto In SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio è possibile pubblicare i report Crystal come servizi Web. Poiché i servizi Web sono accessibili tramite Web, è opportuno proteggere i servizi Web report dall'accesso anonimo. In questa sezione viene descritto come rimuovere l'accesso anonimo da una directory virtuale contenente un servizio Web report. Viene quindi illustrato come scrivere codice per posizionare tale servizio in una classe RemoteReportProxy, la quale può essere configurata per la gestione dell'autenticazione NT sul server IIS (Internet Information Services). Sono due i tipi di servizi Web report che richiedono codice di autenticazione: i servizi Web report normali e i File di server. Informazioni correlate Pubblicazione e utilizzo di un report come servizio Web [pagina 79] Configurazione di File di server in Crystal Services [pagina 82] 1.3.6.4.1 1.3.6.4.1.1 Report Web Services and NT Authentication Aggiunta dell'autenticazione NT al servizio Web report Prima di aggiungere le modifiche necessarie per l'autenticazione NT, occorre creare un progetto per la pubblicazione e l'utilizzo di un servizio Web report, come illustrato in Pubblicazione e utilizzo di un report come servizio Web [pagina 79]. In questa sezione viene descritto come rimuovere l'accesso anonimo dalla directory contenente il servizio Web report creato in precedenza. Informazioni correlate Connessione a servizi Web report da un sito Web protetto [pagina 89] Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 89 1.3.6.4.1.1.1 Per rimuovere l'accesso anonimo dalla directory contenente il servizio Web report 1. Nel Pannello di controllo, fare doppio clic su Strumenti di amministrazione e quindi su Gestione servizi Internet. 2. Nella finestra di dialogo Internet Information Services espandere i nodi superiori, quindi il nodo Sito Web predefinito. 3. Individuare la cartella della directory virtuale relativa al Report Web Service creato precedentemente. 4. Fare clic con il pulsante destro del mouse sulla directory virtuale e selezionare Proprietà. 5. All'interno della scheda Protezione directory della finestra di dialogo Proprietà, scegliere Modifica. 6. Deselezionare la casella di controllo Accesso anonimo, quindi scegliere OK. 7. Scegliere OK per chiudere la finestra Proprietà. 8. Chiudere la finestra Internet Information Services. A questo punto, se si desidera che l'autenticazione relativa a questa directory sia impostata per un utente di rete specifico, è necessario aggiungere alla cartella un'autorizzazione individuale per l'utente di rete da Esplora risorse. 1.3.6.4.1.1.2 Per aggiungere alla cartella autorizzazioni relative a un utente di rete specifico 1. In Esplora risorse individuare la cartella contenente il servizio Web. 2. Fare clic con il pulsante destro del mouse sulla cartella, quindi scegliere Proprietà. 3. All'interno della scheda Protezione della finestra di dialogo Proprietà, scegliere Aggiungi. 4. Nella finestra di dialogo Selezione utenti computer o gruppi, in <<Immettere i nomi separati da un punto e virgola>> o sceglierne uno dall'elenco, digitare il nome dell'utente di rete. 5. Fare clic su Controlla nomi. 6. Verificare che il nome dell'utente sia stato aggiunto correttamente, quindi fare clic su OK. 7. Nel riquadro Autorizzazioni selezionare Consenti per l'autorizzazione di Lettura. 1.3.6.4.1.2 Modifica dell'applicazione client per aggiungere l'accesso protetto In questa sezione si modifica l'applicazione client per poter accedere in modo protetto al servizio Web report mediante l'autenticazione NT. A tale scopo, è necessario aggiungere assembly, spazi dei nomi e nuovo codice. 90 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.3.6.4.1.2.1 Verifica della possibilità di accedere dall'applicazione client al servizio Web protetto 1. Riaprire l'applicazione client creata per utilizzare il servizio Web report, in base a quanto indicato nella sezione Pubblicazione e utilizzo di un report come servizio Web [pagina 79]. 2. Eseguire l'applicazione per verificare che non si dispone più dell'autorizzazione per accedere in modo anonimo al servizio Web report all'interno di questa directory. Verrà visualizzato il seguente messaggio di errore: "Richiesta non riuscita con codice di stato HTTP 401: Accesso negato." 1.3.6.4.1.2.2 Aggiunta di nuovi assembly e relativi riferimenti 1. Fare clic con il pulsante destro del mouse sulla cartella References e selezionare Aggiungi riferimento.... 2. Nella finestra di dialogo Add Reference, all'interno della scheda .NET, tenere premuto il tasto Ctrl e fare clic sui seguenti assembly: ○ CrystalDecisions.ReportSource ○ System.Web.Services 3. Fare clic su Select nella parte destra della finestra di dialogo. 4. Verificare che entrambi gli assembly siano stati aggiunti nel riquadro Selected Components, quindi scegliere OK. 5. Aprire il Web Form o il Windows Form creato in Impostazione di un progetto [pagina 16]. 6. Dal menu View, fare clic su Code. 7. Sopra la firma della classe, aggiungere all'inizio della classe tre dichiarazioni "Imports" [Visual Basic] o "using" [C#] per gli spazi dei nomi riportati di seguito. Imports CrystalDecisions.ReportSource Imports System.Net Imports System.Web.Services using CrystalDecisions.ReportSource; using System.Net; using System.Web.Services; Viene quindi descritto come aggiungere codice per configurare una classe RemoteReportProxy per il passaggio delle credenziali utente alla directory protetta del servizio Web report. 1.3.6.4.1.2.3 Codifica del metodo GetReportWebServiceWithAuthentication() Il metodo GetReportWebServiceWithAuthentication() viene utilizzato per configurare il proxy report remoto e gestire l'autenticazione NT. In questa sezione viene descritto come codificare il metodo GetReportWebServiceWithAuthentication() per impostare i valori delle proprietà URL e Credentials. È necessario in primo luogo aggiungere il metodo Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 91 GetReportWebServiceWithAuthentication() alla proprietà ReportSource del controllo CrystalReportViewer per dichiarare e creare un'istanza della classe RemoteReportProxy. Tale metodo può anche aggiungere impostazioni relative al proxy firewall all'istanza RemoteReportProxy. 1. Alla fine della classe, creare il metodo di supporto privato GetReportWebServiceWithAuthentication() che restituisce una classe RemoteReportProxy. Private Function GetReportWebServiceWithAuthentication() As RemoteReportProxy End Function private RemoteReportProxy GetReportWebServiceWithAuthentication() { } 2. All'interno del metodo ConfigureCrystalReports(), selezionare la stringa dell'URL del servizio Web attualmente assegnata alla proprietà ReportSource del controllo CrystalReportViewer . Copiare la stringa negli Appunti. Nota Più avanti, nel corso di questa procedura, si assegnerà un nuovo valore alla proprietà ReportSource del controllo CrystalReportViewer. 3. Dichiarare una variabile di stringa reportWebServiceURL e incollare la stringa dell'URL. Dim reportWebServiceURL As String = "http://mywebserviceserver.com/MyWebServiceDirectory/Hierarchical %20GroupingService.asmx" string reportWebServiceURL = "http://mywebserviceserver.com/MyWebServiceDirectory/Hierarchical %20GroupingService.asmx"; 4. Dichiarare e creare un'istanza della classe RemoteReportProxy. Dim myRemoteReportProxy As RemoteReportProxy = New RemoteReportProxy() RemoteReportProxy remoteReportProxy = new RemoteReportProxy(); 5. Assegnare la variabile reportWebServiceURL alla proprietà URL dell'istanza RemoteReportProxy. myRemoteReportProxy.Url = reportWebServiceURL remoteReportProxy.Url = reportWebServiceURL; 6. Chiamare il metodo ConfigureAuthentication(), che verrà creato durante le procedure successive, quindi passare un valore Boolean True e la variabile reportWebServiceURL . Assegnare questo metodo alla proprietà Credentials dell'istanza RemoteReportProxy. myRemoteReportProxy.Credentials = ConfigureAuthentication(True, reportWebServiceURL) remoteReportProxy.Credentials = ConfigureAuthentication(true, reportWebServiceURL); 92 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 7. Chiamare il metodo AddFirewallProxySettings(), che verrà creato durante le procedure successive, quindi passare un valore booleano False, la stringa URI per un server proxy firewall e l'istanza RemoteReportProxy. Nota Sostituire la stringa URI con il server proxy firewall in uso. myRemoteReportProxy = AddFirewallProxySettings(False, "<< http://firewallproxyserver:8080>>", myRemoteReportProxy) remoteReportProxy = AddFirewallProxySettings(false, "<< http://firewallproxyserver:8080>>", remoteReportProxy); 8. Restituire l'istanza RemoteReportProxy dal metodo. Return myRemoteReportProxy return remoteReportProxy; 1.3.6.4.1.2.4 Codifica del metodo ConfigureAuthentication() In questa sezione viene descritto come codificare il metodo ConfigureAuthentication() in modo da consentire l'utilizzo di due approcci per la configurazione dell'autenticazione. Il primo approccio prevede l'utilizzo di un nome utente, una password e un nome di dominio specifici per soddisfare i requisiti delle autorizzazioni di protezione dell'utente aggiunte in Aggiunta dell'autenticazione NT al servizio Web report [pagina 89]. Il secondo approccio si basa invece sull'autorizzazione NTLM. Quando si passa un valore Boolean True a questo metodo, vengono fornite le credenziali specifiche dell'utente per accedere ai servizi Web. Il passaggio di un valore Boolean False implica invece la chiamata al codice relativo alle credenziali NTLM per accedere ai servizi Web. Il metodo ConfigureAuthentication() viene chiamato dal metodo GetReportWebServiceWithAuthentication(). 1. Alla fine della classe, creare il metodo di supporto privato ConfigureAuthentication() che restituisce l'interfaccia ICredentials. Tale metodo accetta due parametri, un valore booleano denominato isUserSpecific e la stringa reportWebServiceURL. Private Function ConfigureAuthentication(ByVal isUserSpecific As Boolean, ByVal reportWebServiceURL As String) As ICredentials End Function private ICredentials ConfigureAuthentication(bool isUserSpecific, string reportWebServiceURL) { } Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 93 2. All'interno del metodo creare un blocco condizionale che verifichi il parametro Boolean isUserSpecific. If isUserSpecific Then Else End If if(isUserSpecific) { } else { } 3. Raccogliere le seguenti informazioni: il nome dell'utente, la password e il nome del dominio di rete per cui sono state concesse le autorizzazioni di accesso per la directory contenente il servizio Web report. 4. Nel blocco If dichiarare e assegnare i valori appropriati alle variabili di stringa di nome utente, password e dominio. Dim userName As String = "fchen" <NonSerialized()> Dim password As String = "1234" Dim domain As String = "Enterprise" string userName = "fchen"; [NonSerialized()] string password = "1234"; string domain = "Enterprise"; 5. Dichiarare e creare un'istanza della classe NetworkCredential e passare le variabili di stringa di nome utente (username), password e dominio (domain). Dim myNetworkCredential As NetworkCredential = New NetworkCredential(userName, password, domain) NetworkCredential networkCredential = new NetworkCredential(userName, password, domain); 6. Restituire l'istanza di NetworkCredential dal blocco If. Nel blocco Else occorre ora creare tre valori alternativi: un URI per il servizio Web report, una stringa che indichi che il tipo di autenticazione è NTLM e un'istanza NetworkCredential. Ciascuno di questi valori viene passato alla cache delle credenziali. Return myNetworkCredential return networkCredential; 7. All'interno del blocco Else, dichiarare e creare un'istanza della classe CredentialCache. Dim myCredentialCache As CredentialCache = New CredentialCache() CredentialCache credentialCache = new CredentialCache(); 8. Dichiarare e creare un'istanza della classe Uri e passare il parametro reportWebServiceURL dal metodo ConfigureAuthentication(). Dim myUri As Uri = New Uri(reportWebServiceURL) Uri uri = new Uri(reportWebServiceURL); 94 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 9. Assegnare il valore di stringa "NTLM" a una variabile di stringa denominata "ntlmAuthorization". Dim ntlmAuthorization As String = "NTLM" string ntlmAuthorization = "NTLM"; 10. Dichiarare e creare un'istanza della classe NetworkCredential. Dim myNetworkCredential As NetworkCredential = New NetworkCredential() NetworkCredential networkCredential = new NetworkCredential(); 11. Passare l'istanza Uri, la stringa ntlmAuthorization e l'istanza NetworkCredential al metodo Add() dell'istanza CredentialCache. myCredentialCache.Add(myUri, ntlmAuthorization, myNetworkCredential) credentialCache.Add(uri, ntlmAuthorization, networkCredential); 12. Restituire l'istanza ICredentials dalla proprietà DefaultCredentials della classe CredentialCache del blocco Else. Return CredentialCache.DefaultCredentials return CredentialCache.DefaultCredentials; 1.3.6.4.1.2.5 Codifica del metodo AddFirewallProxySettings() In questa sezione viene descritto come codificare il metodo AddFirewallProxySettings() con l'istanza RemoteReportProxy utilizzata come parametro. Viene inoltre illustrato come aggiungere impostazioni relative al proxy Web all'istanza RemoteReportProxy. Il metodo AddFirewallProxySettings() viene chiamato dal metodo GetReportWebServiceWithAuthentication(). Questo metodo viene eseguito solo se è necessario accedere al servizio Web report mediante un proxy firewall. 1. Alla fine della classe, creare il metodo di supporto privato AddFirewallProxySettings() che restituisce la classe RemoteReportProxy, quindi passare una variabile booleana, una variabile di stringa e l'istanza RemoteReportProxy. Private Function AddFirewallProxySettings(ByVal isFirewallProxy As Boolean, ByVal webProxyURI As String, ByVal remoteReportProxy As RemoteReportProxy) As RemoteReportProxy End Function private RemoteReportProxy AddFirewallProxySettings(bool isFirewallProxy, string webProxyURI, RemoteReportProxy remoteReportProxy) Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 95 { } 2. All'interno del metodo creare un blocco condizionale che verifichi la variabile Boolean isFirewallProxy. If isFirewallProxy Then End If if(isFirewallProxy) { } 3. Nel blocco condizionale dichiarare e creare un'istanza della classe WebProxy, quindi passare la stringa webProxyURI e un valore True Boolean. Dim myWebProxy As WebProxy = New WebProxy(webProxyURI, True) WebProxy webProxy = new WebProxy(webProxyURI, true); 4. Assegnare l'istanza WebProxy alla proprietà Proxy dell'istanza RemoteReportProxy passata al metodo come parametro. myRemoteReportProxy.Proxy = myWebProxy remoteReportProxy.Proxy = webProxy; 5. All'esterno del blocco condizionale restituire l'istanza RemoteReportProxy. Return myRemoteReportProxy return remoteReportProxy; Se si passa un valore booleano False al parametro isFireWallProxy, le impostazioni relative al proxy firewall non verranno aggiunte. È possibile verificare questa versione del progetto con la configurazione più semplice dell'autenticazione NT e senza firewall tra il client di prova e il servizio Web. Se si verifica il progetto con un firewall, spostare l'applicazione client all'esterno del firewall, quindi modificare il valore del parametro booleano isFireWallProxy in True. È necessario assegnare un valore URI di proxy Web preciso al parametro stringa webProxyURI, quindi procedere con la verifica del codice mediante un firewall. Informazioni correlate Connessione a servizi Web report da un sito Web protetto [pagina 89] 1.3.6.4.1.3 96 Testing the NT Authentication Code and the NTLM Credentials © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.3.6.4.1.3.1 Test dell'autenticazione NT Per poter verificare il codice, occorre prima modificare il codice per il collegamento dei report nel metodo ConfigureCrystalReports(). ● All'interno del metodo ConfigureCrystalReports() assegnare una chiamata al metodo GetReportWebServiceWithAuthentication() alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = GetReportWebServiceWithAuthentication() crystalReportViewer.ReportSource = GetReportWebServiceWithAuthentication(); A questo punto è possibile verificare il codice di autenticazione NT aggiunto al progetto client del servizio Web. Per verificare il codice di autenticazione NT nel progetto client del servizio Web: 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. L'applicazione client si connette al servizio Web e, se il nome utente, la password e il dominio sono corretti, il report viene visualizzato nel modo appropriato. 4. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. È stata effettuata una connessione alla directory protetta con le credenziali di rete specifiche di un utente. Di seguito viene descritto come verificare la connessione utilizzando credenziali NTLM. Nota Per configurare le impostazioni relative al proxy firewall, è possibile modificare il valore Boolean passato al metodo AddFirewallProxySettings() come parametro. Informazioni correlate File di server e autenticazione NT [pagina 98] 1.3.6.4.1.3.2 Per verificare le credenziali NTLM nel progetto client del servizio Web 1. Individuare la chiamata al metodo ConfigureAuthentication() all'interno del metodo GetReportWebServiceWithAuthentication(). 2. Nella chiamata a ConfigureAuthentication() modificare il valore booleano del primo parametro del metodo da True a False. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 97 3. Dal menu Genera, scegliere Genera soluzione. 4. Dal menu Debug, scegliere Avvia. 5. L'applicazione client si connette al servizio Web mediante l'autenticazione NTLM. 6. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. È ora possibile collegarsi correttamente dal client del servizio Web a un servizio Web report ubicato in una directory protetta. Si è ottenuto tale risultato configurando i valori necessari nell'istanza RemoteReportProxy e passando tale istanza alla proprietà ReportSource del controllo CrystalReportViewer. 1.3.6.4.2 File di server e autenticazione NT È possibile usare File di server per connettersi rapidamente ai report ubicati su un computer remoto. Tuttavia, se la directory virtuale che fornisce i report memorizzati in File di server è protetta con l'autenticazione NT, occorrerà aggiungere codice supplementare nell'applicazione client per richiamare tali report e fornire le credenziali di rete necessarie. Informazioni correlate Configurazione di File di server in Crystal Services [pagina 82] 1.3.6.4.2.1 Creazione di un progetto per richiamare una directory non protetta di File di server Per creare un progetto che richiami una directory non protetta, occorre aver configurato File di server per la versione in uso di Visual Studio. Seguire le istruzioni nella sezione appropriata e prendere nota del percorso della directory di file relativo alla directory dei report in uso, utile per le procedure successive: ● Configurazione di File di server in Visual Studio .NET 2003 [pagina 82] ● Configurazione di File di server in Visual Studio 2005 e versioni successive [pagina 85] Accedere alla directory dei report relativa al progetto in uso e individuare il nome di un report che si desidera visualizzare mediante File di server. Nelle fasi successive il report utilizzato è il report di esempio Hierarchical Grouping.rpt. Nota Le istruzioni riportate di seguito sono valide solo per un nuovo progetto creato in Impostazione di un progetto [pagina 16]. In questa sezione viene descritto come impostare le credenziali di rete necessarie. 98 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Per iniziare, viene creata un'applicazione client che accede ai report memorizzati in File di server e consente di accedere in maniera non protetta alla directory dei servizi Web. Una volta verificato il corretto funzionamento dell'applicazione client, è quindi possibile aggiungere l'accesso protetto alla directory virtuale e scrivere codice supplementare nella suddetta applicazione per fornire le credenziali necessarie per l'autenticazione NT. Per creare un'applicazione client per l'accesso ai report File di server: 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Individuare il metodo ConfigureCrystalReports() creato in Impostazione di un progetto [pagina 16]. 4. All'interno del metodo dichiarare e creare un'istanza della classe ServerFileReport. Dim myServerFileReport As ServerFileReport = New ServerFileReport() ServerFileReport serverFileReport = new ServerFileReport(); 5. Assegnare il nome del report che si desidera visualizzare dalla directory dei report alla proprietà ReportPath dell'istanza di ServerFileReport. Nota La directory è quella configurata per i report File di server nel file Web.config. Al momento della configurazione della directory virtuale visualizzatori eseguita in precedenza, è stata effettuata la verifica del wsdl, mediante l'immissione di un URL relativo al servizio Web ServerFileReportServer.asmx ubicato all'interno della suddetta directory. Nel prossimo passaggio tale URL verrà immesso come valore all'interno del codice. Nell'esempio di codice che segue viene utilizzato il report Hierarchical Grouping contenuto nella sottodirectory Feature Examples della cartella dei report di esempio (Samples\…\Reports). Accertarsi di includere il nome della sottodirectory seguito da una barra rovesciata. myServerFileReport.ReportPath = "Feature Examples\Hierarchical Grouping.rpt" serverFileReport.ReportPath = "Feature Examples\\Hierarchical Grouping.rpt"; 6. Individuare la versione corretta dell'URL relativo al servizio Web ServerFileReportService.asmx per la versione di SAP Crystal Reports in uso. Se è installato SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio, la posizione corrisponde alla directory virtuale visualizzatori della versione installata di SAP Crystal Reports. Se è installato SAP Crystal Reports ma non SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio, questo sarà l'URL del Servizio Web report creato in Configurazione di File di server in Visual Studio 2005 e versioni successive [pagina 85]. 7. Assegnare l'URL del servizio Web alla proprietà WebService dell'istanza di ServerFileReport. myServerFileReport.WebServiceUrl = "http://localhost/CrystalReportsWebServices/ServerFileReportService.asmx" serverFileReport.WebServiceUrl = "http://localhost/CrystalReportsWebServices/ServerFileReport.asmx"; Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 99 L'istanza di ServerFileReport è ora configurata e pronta per essere passata al controllo CrystalReportViewer. 8. Assegnare l'istanza di ServerFileReport alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = myServerFileReport crystalReportViewer.ReportSource = serverFileReport; Informazioni correlate Directory dei visualizzatori [pagina 14] 1.3.6.4.2.2 Riconfigurazione di File di server per richiamare una directory protetta In questa sezione viene descritto come riconfigurare la directory e l'applicazione client in modo da richiamare una directory protetta. Per iniziare, disattivare l'accesso anonimo per la directory virtuale visualizzatori in IIS (Internet Information Services). 1.3.6.4.2.2.1 Per disattivare l'accesso anonimo per la directory virtuale visualizzatori in IIS 1. Nel Pannello di controllo fare doppio clic su Strumenti di amministrazione, quindi su Gestione servizi Internet. 2. Nella finestra di dialogo Internet Information Services espandere i nodi superiori, quindi il nodo Sito Web predefinito. 3. Individuare la cartella della directory virtuale prevista, quindi fare clic su di essa con il pulsante destro del mouse e selezionare Proprietà. 4. Nella finestra di dialogo Properties, nella scheda Protezione directory fare clic su Modifica… 5. Deselezionare la casella di controllo Accesso anonimo, quindi scegliere OK. 6. Scegliere OK per chiudere la finestra Proprietà. 7. Chiudere la finestra Internet Information Services. A questo punto è necessario aggiungere un <identity>tag al file Web.config. Nota Web.config è il file che è stato modificato in precedenza, durante l'esecuzione delle istruzioni relative alla configurazione di File di server. 100 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Informazioni correlate Directory dei visualizzatori [pagina 14] 1.3.6.4.2.2.2 Aggiunta del tag identity al file Web.config 1. Riaprire il file Web.config nella directory virtuale visualizzatori. Nota Esistono due file Web.config, uno nella directory virtuale visualizzatori e l'altro nell'applicazione Web locale. Il tag identity dovrà essere aggiunto al file Web.config situato nella directory virtuale visualizzatori. in quanto è richiesto quando viene disattivato l'accesso anonimo a una directory virtuale. 2. All'interno del tag <system.web>, in alto, immettere il tag identity come mostrato di seguito. <identity impersonate='true' /> 3. Salvare il file Web.config. 4. Se è stato disattivato anche l'accesso anonimo a una directory virtuale del progetto Web client, aggiungere il tag identity anche al file Web.config nel progetto Web client. Modificare quindi il progetto client Web o Windows per accedere al servizio Web report protetto mediante l'autenticazione NT. Informazioni correlate Directory dei visualizzatori [pagina 14] 1.3.6.4.2.2.3 Per modificare il progetto client in modo da richiamare la directory virtuale visualizzatori protetta 1. Aprire il progetto Web o Windows client in Visual Studio. 2. Fare clic con il pulsante destro del mouse sulla cartella Riferimenti e selezionare Aggiungi riferimento…. 3. Nella finestra di dialogo Aggiungi riferimento, all'interno della scheda .NET, tenere premuto Ctrl e fare clic su due assembly per selezionarli: ○ CrystalDecisions.ReportSource ○ System.Web.Services 4. Fare clic su Seleziona nella parte destra della finestra di dialogo. 5. Verificare che entrambi gli assembly siano stati aggiunti nel riquadro Componenti selezionati, quindi scegliere OK. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 101 6. In Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto in grassetto, scegliere Aggiungi, quindi Aggiungi classe. 7. Nel campo Nome immettere il nome di classe "NTServerFileRemoteReportSource", quindi fare clic su Aggiungi. 8. Sopra la firma della classe, aggiungere all'inizio della classe una dichiarazione "Imports" [Visual Basic] o "using" [C#] per tre spazi dei nomi. Imports CrystalDecisions.Shared Imports CrystalDecisions.ReportSource Imports System.Net using CrystalDecisions.Shared; using CrystalDecisions.ReportSource; using System.Net; 9. Modificare la firma della classe NTServerFileRemoteReportSource in modo da estendere la classe RemoteReportSource. Public Class NTServerFileRemoteReportSource : Inherits RemoteReportSource End Class public class NTServerFileRemoteReportSource : RemoteReportSource { } Poiché la classe base RemoteReportSource non è in grado di contenere un costruttore senza argomenti, è necessario crearne uno con argomenti che sostituisca un costruttore della suddetta classe. 10. Se il codice del progetto viene scritto nel linguaggio C#, eliminare il costruttore predefinito creato in questa classe. 11. Creare un costruttore che includa un parametro del metodo di ServerFileReport e chiamare il costruttore della classe base, passando il suddetto parametro del report e il valore booleano False. Public Sub New(ByVal report As ServerFileReport) MyBase.New(report, False) End Sub public NTServerFileRemoteReportSource(ServerFileReport report) : base(report, false) { } 12. All'interno del costruttore, assegnare la proprietà statica DefaultCredentials della classe CredentialCache alla proprietà Credentials della proprietà m_proxy della classe base. MyBase.m_proxy.Credentials = CredentialCache.DefaultCredentials base.m_proxy.Credentials = CredentialCache.DefaultCredentials; 13. Dal menu File, scegliere Salva tutto. A questo punto è possibile modificare la classe di codice sottostante per il Web Form o il Windows Form specifico. 102 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.3.6.4.2.2.4 Per modificare la classe di codice sottostante e gestire l'origine report remota 1. Ritornare al Web o Windows Form originale. 2. Dal menu Visualizza, scegliere Codice. 3. Nel metodo ConfigureCrystalReports() aggiungere una nuova riga tra l'impostazione della proprietà serverFileReport.WebServiceUrl e l'impostazione di ReportSource del controllo CrystalReportViewer. Nella riga aggiunta dichiarare e creare un'istanza della nuova classe estesa precedentemente creata e passare l'istanza di ServerFileReport come parametro del metodo. Dim myNTServerFileRemoteReportSource As NTServerFileRemoteReportSource = New NTServerFileRemoteReportSource(myServerFileReport) NTServerFileRemoteReportSource ntServerFileRRS = new NTServerFileRemoteReportSource(serverFileReport); 4. Modificare la riga finale del codice di questo metodo: sostituire l'istanza di ServerFileReport assegnata alla proprietà ReportSource del controllo CrystalReportViewer con la nuova istanza di NTServerFileRemoteReportSource. myCrystalReportViewer.ReportSource = myNTServerFileRemoteReportSource crystalReportViewer.ReportSource = ntServerFileRRS; A questo punto è possibile verificare l'applicazione client che è stata modificata per passare le informazioni sulle credenziali da un'origine report remota. L'applicazione modificata richiama il servizio report File di server mediante la directory virtuale dei visualizzatori che ora richiede l'autenticazione NT. 1.3.6.4.2.2.5 Per verificare l'origine report remota con credenziali che richiamano la directory virtuale visualizzatori protetta 1. Dal menu Genera, scegliere Genera soluzione. 2. Dal menu Debug, scegliere Avvia. L'applicazione client si connette alla directory virtuale visualizzatori protetta e, se la nuova istanza di NTServerFileRemoteReportSource è configurata con le credenziali corrette, il report viene visualizzato in modo appropriato. 3. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.3.7 Considerazioni sulla protezione È necessario prendere in considerazione i seguenti scenari quando si progetta un'applicazione protetta. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 103 Archiviazione dei dati nella cache di frontend I report visualizzati in un browser Web potrebbero contenere dati sensibili che il browser potrebbe memorizzare nella cache. Per informazioni su come disabilitare la memorizzazione nella cache nei diversi browser, consultare la documentazione Microsoft. Protezione del file di report I file .rpt SAP Crystal Reports possono contenere dati aziendali riservati. È consigliabile proteggere l'accesso ai report gestendo questi ultimi con il server della piattaforma SAP BusinessObjects Business Intelligence mediante la protezione file o la crittografia a livello di sistema operativo. Convalida dell'input dell'utente con i campi parametro I campi parametro richiedono all'utente di fornire le informazioni utilizzate per elaborare un report. La finestra di dialogo di prompt convalida i dati, tuttavia è possibile effettuare ulteriori passaggi per assicurarsi che vengano forniti i valori previsti. 1. Utilizzare il testo del prompt per descrivere il tipo di dati previsti. 2. Specificare un valore minimo e massimo per limitare l'intervallo di numeri da inserire quando si utilizzano dati numerici. 3. Utilizzare una maschera di modifica per richiedere dati in un formato specifico. 4. Creare una finestra di dialogo di prompt personalizzata. L'SDK di SAP Crystal Reports .NET fornisce numerose API per creare finestre di dialogo di prompt personalizzate. Tali finestre personalizzate consentono di controllare totalmente le modalità con cui l'utente fornisce i valori per i campi parametro. Utilizzo del controllo di stampa ActiveX per la stampa di report da un visualizzatore Web Form .NET Il visualizzatore Web Form .NET di SAP Crystal Reports consente di stampare i report in formato PDF oppure utilizzando il controllo di stampa ActiveX. L'opzione PDF è quella predefinita e consigliata. Il controllo di stampa ActiveX è stato fornito come soluzione alternativa per la stampa con un clic. L'installazione di questa opzione richiede privilegi da amministratore e pertanto non è consigliata. Inoltre, poiché il controllo ActiveX viene utilizzato in un browser Web, non è impostato alcun killbit e il controllo è considerato meno sicuro. Creazione di un'applicazione per la visualizzazione di report dalla piattaforma SAP BusinessObjects Business Intelligence È possibile utilizzare SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio per creare applicazioni che consentono di visualizzare i report archiviati in un sistema della piattaforma SAP 104 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net BusinessObjects Business Intelligence. Quando si crea questo tipo di applicazioni, è necessario tenere in considerazione l'impatto che questa operazione può avere sulla protezione. Per ulteriori informazioni, consultare il Manuale dell'amministratore della piattaforma Business Intelligence SAP BusinessObjects. Informazioni correlate Filtro dei dati con parametri o formule [pagina 125] 1.4 Utilizzo di SDK In questa sezione vengono fornite istruzioni dettagliate sulle modalità di utilizzo delle funzionalità specifiche dell'SDK di SAP Crystal Reports .Net. 1.4.1 Stampa di un report L'SDK di SAP Crystal Reports .NET consente di creare applicazioni Windows o siti Web in grado di stampare sulla stampante locale di un utente finale o su una stampante configurata sul server Web. Il modo più semplice per aggiungere funzioni di stampa all'applicazione SAP Crystal Reports .NET è utilizzare il pulsante di stampa sul controllo CrystalReportViewer. Quando gli utenti fanno clic sul pulsante di stampa della barra degli strumenti, viene visualizzata la finestra di dialogo di stampa standard del sistema. Nella finestra di dialogo è possibile specificare le impostazioni di stampa personalizzate. L'SDK di SAP Crystal Reports .NET consente di configurare le opzioni di stampa e chiamare una stampante dal codice, anziché dall'interfaccia utente di SAP Crystal Reports. Utilizzare la classe PrintOptions e il metodo PrintToPrinter del modello a oggetti ReportDocument. Classi utilizzate per la stampa dei report ● CrystalDecisions.CrystalReports.Engine.ReportDocument Rappresenta un report e contiene le proprietà e i metodi per definire, formattare, caricare, esportare e stampare il report. ● CrystalDecisions.CrystalReports.Engine.PrintOptions Fornisce proprietà e metodi per l'impostazione delle opzioni per la stampa di un report. ● CrystalDecisions.Windows.Forms.CrystalReportViewer Rappresenta il controllo CrystalReportViewer in un Windows Form. Il controllo CrystalReportViewer viene utilizzato per stampare i report dall'interfaccia utente. ● CrystalDecisions.Web.CrystalReportViewer Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 105 Fornisce le proprietà, i metodi e gli eventi che modificano o recuperano le informazioni relative all'aspetto del controllo CrystalReportViewer e alle relative funzioni. Il controllo CrystalReportViewer viene utilizzato per stampare i report dall'interfaccia utente. Informazioni correlate Esportazione di un report [pagina 113] 1.4.1.1 Stampa di un report dal controllo CrystalReportViewer Il modo più semplice per aggiungere funzioni di stampa all'applicazione SAP Crystal Reports .NET è utilizzare il pulsante di stampa sul controllo CrystalReportViewer. Il pulsante di stampa è attivato sulla barra degli strumenti di CrystalReportViewer per impostazione predefinita. Esistono due controlli CrystalReportViewer nell'SDK di SAP Crystal Reports .NET. Per un sito Web, si utilizza la classe CrystalDecisions.Web.CrystalReportViewer. Per un'applicazione Windows, si utilizza la classe CrystalDecisions.Windows.Forms.CrystalReportViewer. Stampa mediante la classe CrystalDecisions.Windows.Forms.CrystalReportViewer Quando si fa clic sul pulsante di stampa della barra degli strumenti di CrystalReportViewer in un'applicazione Windows, viene visualizzata la finestra di dialogo di stampa standard di Windows. È possibile richiamare a livello di codice la finestra di dialogo di stampa mediante il metodo CrystalReportViewer.PrintReport. Il pulsante di stampa può essere disattivato in un'applicazione Windows impostando la proprietà CrystalReportViewer.ShowPrintButton su False. Stampa mediante la classe CrystalDecisions.Web.CrystalReportViewer Il controllo CrystalReportViewer per i siti Web supporta due metodi di stampa: PDF e ActiveX. La stampa PDF è l'impostazione predefinita per un sito Web. Quando si fa clic sul pulsante di stampa della barra degli strumenti di CrystalReportViewer in un sito Web, viene visualizzata la finestra di dialogo Opzioni di stampa. Immettere eventuali opzioni di stampa personalizzate e fare clic su OK. SAP Crystal Reports aprirà una nuova finestra con un file PDF del report. Stampare il file PDF sulla stampante locale. Se la stampa ActiveX è attivata, viene visualizzata la finestra di dialogo di stampa standard di Windows quando si fa clic sul pulsante di stampa. La stampa ActiveX richiede un'ulteriore impostazione e talvolta l'installazione del plug-in PrintControl.cab di ActiveX sul computer client. 106 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Il pulsante di stampa può essere disattivato in un sito Web impostando la proprietà CrystalReportViewer.HasPrintButton su False. Informazioni correlate Stampa di un report a livello di codice [pagina 109] 1.4.1.1.1 Rimozione del pulsante di stampa dal controllo CrystalReportViewer È possibile utilizzare l'SDK per stampare un report anche se il pulsante di stampa non è visibile. 1. Aggiungere un controllo CrystalReportViewer all'applicazione. 2. Impostare su False la proprietà che controlla la visibilità del pulsante di stampa. ○ Per un'applicazione Windows, impostare la proprietà CrystalReportViewer.ShowPrintButton su False. ○ Per un sito Web, impostare la proprietà CrystalReportViewer.HasPrintButton su False. Quando si esegue l'applicazione, il pulsante di stampa non è più visibile sul controllo CrystalReportViewer. Esempio Disattivazione del pulsante Stampa in un'applicazione Windows Private Sub ConfigureCrystalReports() CrystalReportViewer1.ShowPrintButton = False End Sub private void ConfigureCrystalReports() { InitializeComponent(); crystalReportViewer1.ShowPrintButton = false; } Informazioni correlate Stampa di un report [pagina 105] Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 107 1.4.1.1.2 Stampa di un report con il metodo CrystalReportViewer.PrintReport Assicurarsi che sia configurata una stampante sul computer client prima di provare a stampare. È possibile chiamare a livello di codice la finestra di dialogo di stampa tramite il metodo CrystalReportViewer.PrintReport in un'applicazione Windows. Utilizzare questo metodo per stampare quando la barra degli strumenti di CrystalReportViewer è nascosta o in un'applicazione che utilizza i pulsanti personalizzati della barra degli strumenti. 1. Aggiungere un controllo CrystalReportViewer al Windows Form. 2. Configurare un'origine valida per il report e collegare l'origine del report al controllo CrystalReportViewer. 3. Chiamare il metodo PrintReport per aprire la finestra di dialogo di stampa predefinita. Esempio Private Sub PrintReport() CrystalReportViewer.PrintReport() End Sub private void PrintReport() { crystalReportViewer.PrintReport(); } 1.4.1.1.3 Attivazione della stampa ActiveX in un sito Web Se la stampa ActiveX è attivata, viene visualizzata la finestra di dialogo di stampa standard del sistema quando gli utenti fanno clic sul pulsante di stampa. La stampa ActiveX richiede un'ulteriore impostazione e talvolta l'installazione del plug-in PrintControl.cab di ActiveX sul computer client. 1. Aggiungere un controllo CrystalReportViewer all'applicazione. 2. Impostare la proprietà della modalità di stampa del controllo CrystalReportViewer su ActiveX. CrystalReportViewer1.PrintMode = PrintMode.ActiveX CrystalReportViewer1.PrintMode = PrintMode.ActiveX; 3. Nel file Web.Config aggiungere un riferimento al controllo ActiveX PrintControl.cab. <configSections> <section group name="businessObjects"> <sectionGroup name="crystalReports"> <section name="printControl" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections> <businessObjects> <crystalReports> <printControl> <add key="url" value="http://localhost/PrintControl.cab" /> 108 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net </printControl> </crystalReports> </businessObjects> Sostituire localhost con l'indirizzo del server Web. L'elemento PrintControl consente di stampare il report direttamente sulla stampante locale. Per impostazione predefinita, questo controllo non è installato nella stampante locale ed è necessario scaricarlo separatamente. Questa impostazione rende il file .cab visibile sul sito Web SAP Crystal Reports .NET. Il controllo CrystalReportViewer a questo punto deve utilizzare la finestra di dialogo di stampa di Windows anziché la stampa PDF. Al primo tentativo di stampare dal sito Web SAP Crystal Reports, può essere richiesto all'utente di installare il plug-in PrintControl.cab di ActiveX. Informazioni correlate Configurazione del file Web.Config [pagina 19] 1.4.1.2 Stampa di un report a livello di codice È possibile configurare le opzioni di stampa e chiamare una stampante a livello di codice. A tale scopo, utilizzare la classe PrintOptions e il metodo PrintToPrinter del modello a oggetti ReportDocument. Se il pulsante Stampa della barra degli strumenti del controllo CrystalReportViewer soddisfa le esigenze di stampa, non sarà necessario scrivere codice per configurare opzioni di stampa supplementari. Tuttavia la stampa dei report tramite codice risulta utile in alcune situazioni specifiche: ● È possibile controllare quando, dove e come si verifica la stampa. Disattivare il pulsante Stampa nella barra degli strumenti del controllo CrystalReportViewer e gestire completamente la stampa mediante il codice. ● È possibile stampare un report in background, senza visualizzarlo. L'accesso alle impostazioni di stampa viene eseguito mediante la classe ReportDocument, per la quale è possibile gestire istanze e configurazioni senza dovere ogni volta visualizzare il report con un controllo CrystalReportViewer. ● È possibile centralizzare tutte le operazioni di stampa sul server Web per un client Web. Utilizzare il metodo PrintToPrinter() per inviare i lavori di stampa a una stampante collegata al server Web anziché inviarli a una stampante locale collegata al client Web. Nota La stampa a livello di codice effettuata utilizzando il modello a oggetti ReportDocument è meno completa rispetto alla struttura di pianificazione dei report fornita con SAP Crystal Reports Server o con la piattaforma SAP BusinessObjects Business Intelligence. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 109 Stampa a livello di codice da un'applicazione Web Se si utilizza il metodo ReportDocument.PrintToPrinter in un'applicazione Web, il report verrà stampato dal server Web anziché dal computer client. Per tutte le operazioni di stampa sul lato client viene utilizzato il controllo CrystalReportViewer. Informazioni correlate Stampa di un report dal controllo CrystalReportViewer [pagina 106] 1.4.1.2.1 Impostazione delle opzioni di stampa personalizzate con il modello a oggetti ReportDocument La classe PrintOptions consente di specificare informazioni supplementari prima di stampare un report a livello di codice. La classe PrintOptions consente di: ● Modificare l'alimentazione della carta corrente. ● Determinare l'altezza, o la larghezza, dell'output stampato. ● Regolare i margini della pagina.. ● Forzare la stampa normale o fronte/retro. ● Modificare la stampante predefinita. Per apportare modifiche alle opzioni di stampa per un report, è necessario recuperare un oggetto PrintOptions mediante la proprietà PrintOptions della classe ReportDocument. Copia delle opzioni di stampa Le opzioni di stampa possono essere copiate dai o nei valori predefiniti per il sistema locale utilizzando il metodo PrintOptions.CopyFrom o PrintOptions.CopyTo. Per ulteriori informazioni sulla classe PrintOptions, vedere SAP Crystal Reports .NET API Reference. Esempio Stampa fronte/retro forzata In questo esempio la stampa fronte/retro viene impostata come modalità di stampa predefinita. Private Sub enableDuplex(ByVal rd As ReportDocument) rd.PrintOptions.PrinterDuplex = PrinterDuplex.Vertical End Sub private void enableDuplex(ReportDocument rd) 110 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net { } rd.PrintOptions.PrinterDuplex = PrinterDuplex.Vertical; 1.4.1.2.2 Stampa di un report sulla stampante predefinita Il metodo ReportDocument.PrintToPrinter invia un report alla stampante predefinita specificata nel file del report. Per inviare il report alla stampante predefinita specificata sul computer client, è necessario impostare la proprietà PrintOptions.PrinterName prima di stampare il report. 1. Creare una nuova istanza della classe PrintDocument. La stampante predefinita per il computer client è specificata nella proprietà PrinterSettings.PrinterName di ogni nuova classe PrintDocument. Dim localPrinter As System.Drawing.Printing.PrintDocument = New PrintDocument() System.Drawing.Printing.PrintDocument localPrinter = new PrintDocument(); 2. Impostare la proprietà PrinterName dell'oggetto ReportDocument sul valore specificato in PrinterSettings.PrinterName. rd.PrintOptions.PrinterName = localPrinter.PrinterSettings.PrinterName rd.PrintOptions.PrinterName = localPrinter.PrinterSettings.PrinterName; 3. Chiamare il metodo ReportDocument.PrintToPrinter per stampare il report. rd.PrintToPrinter(1, False, 0, 0) rd.PrintToPrinter(1, false, 0, 0); Questo metodo PrintToPrinter utilizza quattro parametri: il numero di copie da stampare, se fascicolare o meno le pagine, la pagina iniziale e la pagina finale. Suggerimento Per stampare tutte le pagine, impostare su zero i parametri della pagina iniziale e della pagina finale. Esempio Private Sub printReport(ByVal rd As ReportDocument) Dim localPrinter As System.Drawing.Printing.PrintDocument = New PrintDocument() rd.PrintOptions.PrinterName = localPrinter.PrinterSettings.PrinterName rd.PrintToPrinter(1, False, 0, 0) End Sub private void printReport(ReportDocument rd) { System.Drawing.Printing.PrintDocument localPrinter = new PrintDocument(); rd.PrintOptions.PrinterName = localPrinter.PrinterSettings.PrinterName; rd.PrintToPrinter(1, false, 0, 0); Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 111 } 1.4.1.2.3 Stampa di un report su file È possibile stampare un report su un file nel sistema locale modificando le proprietà PrinterSettings predefinite e chiamando il metodo ReportDocument.PrintToPrinter. Per salvare un report su disco per visualizzarlo in un secondo tempo o per salvare un report in un altro formato, esportare il report anziché eseguire la stampa su file. 1. Creare una nuova istanza delle classi PrinterSettings e PageSettings. Dim printerSettings As New PrinterSettings() Dim pageSettings As New PageSettings() PrinterSettings printerSettings = new PrinterSettings(); PageSettings pageSettings = new PageSettings(); 2. Copiare le impostazioni dall'oggetto ReportDocument negli oggetti PrinterSettings e PageSettings. rd.PrintOptions.CopyTo(printerSettings, pageSettings) rd.PrintOptions.CopyTo(printerSettings, pageSettings); 3. Impostare la proprietà PrintToFile dell'oggetto PrinterSettings su True. printerSettings.PrintToFile = True printerSettings.PrintToFile = true; 4. Impostare il percorso del file di output. printerSettings.PrintFileName = "c:\outputFile.prn" printerSettings.PrintFileName = "c:\\outputFile.prn"; Nota quando si stampa su file, il formato del file di output è determinato dalla stampante. La stampante può creare file XPS, PS o in altro formato. Per ulteriori informazioni, consultare il manuale dei produttori. 5. Chiamare il metodo ReportDocument.PrintToPrinter per stampare il report. Questo metodo PrintToPrinter utilizza tre parametri: le opzioni di stampa, le impostazioni di pagina e un valore booleano che indica se il report deve essere riformattato per essere adeguato alle impostazioni della pagina. rd.PrintToPrinter(printerSettings, pageSettings, False) rd.PrintToPrinter(printerSettings, pageSettings, false); 112 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Esempio Private Sub printToFile(ByVal rd As ReportDocument) Dim printerSettings As New PrinterSettings() Dim pageSettings As New PageSettings() rd.PrintOptions.CopyTo(printerSettings, pageSettings) printerSettings.PrintToFile = True printerSettings.PrintFileName = "c:\outputFile.prn" rd.PrintToPrinter(printerSettings, pageSettings, False) End Sub private void printToFile(ReportDocument rd) { PrinterSettings printerSettings = new PrinterSettings(); PageSettings pageSettings = new PageSettings(); rd.PrintOptions.CopyTo(printerSettings, pageSettings); printerSettings.PrintToFile = true; printerSettings.PrintFileName = "c:\\outputFile.prn"; rd.PrintToPrinter(printerSettings, pageSettings, false); } Informazioni correlate Esportazione di un report [pagina 113] 1.4.1.3 Rimozione del driver di stampante predefinito dal report 1. In Esplora soluzioni, fare doppio clic sul report. 2. Fare clic con il pulsante destro del mouse su un'area aperta del report e selezionare Designer Imposta stampante . 3. Nella finestra di dialogo Imposta stampante, selezionare Nessuna stampante, quindi fare clic su OK. 4. Fare clic su File Salva tutto . Informazioni correlate Selezione dell'opzione Nessuna stampante nella finestra Imposta stampante [pagina 72] 1.4.2 Esportazione di un report SAP Crystal Reports consente di esportare un report in diversi formati. I formati disponibili dipendono dalla versione di SAP Crystal Reports installata e dal metodo utilizzato per esportare il report. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 113 Un report può essere esportato in un disco, nella finestra di un browser o nel flusso di input/output come sequenza di byte. Classi utilizzate per l'esportazione dei report ● CrystalDecisions.CrystalReports.Engine.ReportDocument Rappresenta un report e contiene le proprietà e i metodi per definire, formattare, caricare, esportare e stampare il report. ● CrystalDecisions.Shared Contiene alcune classi utilizzate per opzioni di esportazione specifiche per diversi formati di output. ● CrystalDecisions.Shared.ExportOptions Fornisce le proprietà per il recupero e l'impostazione delle opzioni per eseguire l'esportazione del report. Informazioni correlate Stampa di un report [pagina 105] finestra di dialogo Esporta [pagina 795] 1.4.2.1 Formati di esportazione disponibili I formati di esportazione supportati da SAP Crystal Reports possono essere suddivisi in due gruppi: formati basati su pagine e formati basati su record. I formati basati su pagine danno maggiore importanza all'aspetto e quindi tendono a produrre un output che corrisponde con precisione al layout e alla formattazione dell'originale. I formati basati su record si focalizzano invece sulla rappresentazione accurata dei dati, piuttosto che sul layout e la formattazione. Formato Descrizione SAP Crystal Reports (RPT) L'esportazione nel formato SAP Crystal Reports assomiglia all'utilizzo della funzionalità Salva con nome con l'opzione Salva dati con report selezionata. Questo formato consente di esportare (salvare) il report con i dati correnti, senza modificare l'originale. Se l'origine di un report è un file SAP Crystal Reports Solo lettura (RPTR) non è possibile eseguire esportazioni nel formato SAP Crystal Reports (RPT). SAP Crystal Reports Solo lettura (RPTR) Consente di esportare (salvare) il report con i dati correnti, senza modificare l'originale. I file RPTR sono report Crystal che possono essere visualizzati con applicazioni di visualizzazione report, ma non possono essere modificati con l'SDK né aperti con applicazioni di progettazione report. La definizione di un report RPTR non può essere modificata, così come non è possibile utilizzare questo SDK per impostare il percorso di origine dei dati di un file RPTR tramite il controller 114 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Formato Descrizione del database. È tuttavia possibile aggiornare i dati di un report RPTR in fase di esecuzione aggiornando il report in un visualizzatore. HTML 4.0 Consente di esportare il report in HTML 4.0. Questo formato preserva il layout e la formattazione del report utilizzando DHTML. Microsoft Excel (97-2003) Questo formato consente di convertire il contenuto del report in celle di Excel pagina per pagina. Il contenuto di più pagine viene esportato nello stesso foglio di lavoro di Excel. Se un foglio di lavoro si riempie totalmente e sono presenti altri dati da esportare, il programma di esportazione crea più fogli di lavoro per accogliere i dati. Se un oggetto report riguarda più celle, il programma di esportazione unisce le celle per rappresentare l'oggetto report. I fogli di lavoro di Microsoft Excel possono contenere fino a 256 colonne; pertanto, gli oggetti report, o le parti di essi, aggiunti a celle oltre il limite di 256 colonne non vengono esportati. Questo formato di esportazione conserva la maggior parte della formattazione, ma non prevede l'esportazione di oggetti riga e casella dal report. Microsoft Excel (97-2003) Solo dati Microsoft Excel Solo dati, come suggerisce il nome, è un formato basato su record destinato alla rappresentazione accurata dei dati, che prevede tuttavia anche l'esportazione della maggior parte della formattazione. A differenza del formato Microsoft Excel, Microsoft Excel Solo dati non prevede l'unione di celle. Ogni oggetto viene aggiunto a una sola cella. Questo formato consente di esportare anche determinati tipi di riepiloghi in report Crystal come funzioni di Excel. I riepiloghi supportati sono SUM, AVERAGE, COUNT, MIN e MAX. Microsoft Excel 2007 (XLSX) Solo dati Il formato XLSX ha le stesse proprietà di Microsoft Excel (97-2003) Solo dati, ma consente di utilizzare fino a 16.385 colonne e 1.048.576 di righe in un sola cartella di lavoro. Microsoft Word (97-2003) Produce un file RTF (Rich Text Format) che contiene oggetti di testo e disegno per rappresentare gli oggetti report. In questo formato di esportazione viene conservata quasi tutta la formattazione. Gli oggetti di testo non possono, però, essere posizionati oltre il bordo sinistro della pagina. Quindi, se nel report sono presenti oggetti di testo posizionati prima del bordo sinistro dell'area di stampa, verranno spostati verso destra (questo comportamento è particolarmente evidente nei report con ampie pagine). Microsoft Word (97-2003) - Modificabile Microsoft Word - Modificabile è diverso dal formato Microsoft Word: si tratta infatti di un formato basato su pagine in cui però non vengono conservati tutto il layout e la formattazione nell'output. Questo formato prevede la conversione di tutto il contenuto degli oggetti report in righe di testo. A differenza di Microsoft Word, questo formato non prevede l'utilizzo di riquadri di testo. La formattazione del testo viene conservata, ma gli attributi, quali il colore di sfondo, il motivo di riempimento e così via, potrebbero non esserlo. Tutte le Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 115 Formato Descrizione immagini del report sono in linea con il contenuto testuale e, quindi, si spostano automaticamente per contenere testo quando il documento viene modificato in Microsoft Word. Questo formato non prevede l'esportazione di oggetti riga e casella dal report. I campi speciali Numero di pagina e Pagina N di M non funzionano quando vengono esportati in questo formato. ODBC ODBC è un formato per lo scambio dei dati basato su record. Quando si utilizza questo formato, è possibile esportare i dati del report in qualsiasi database compatibile con ODBC. PDF I documenti esportati sono destinati alla stampa e alla ridistribuzione. Il formato PDF prevede l'esportazione sia del layout che della formattazione in modo coerente con l'aspetto del report nella scheda Anteprima. Il formato PDF incorpora i caratteri TrueType visualizzati nel documento (non sono invece supportati i caratteri non TrueType). Questo formato di esportazione non supporta la tecnologia Microsoft di collegamento dei caratteri, utilizzata per assicurare il supporto di alcuni set di caratteri estesi come Cinese (Hong Kong). I caratteri utilizzati nel report devono quindi contenere tutti i glifi necessari. Per i collegamenti ipertestuali sono supportati i seguenti tipi di URI: http, https e mailto. Stile record - Colonne con spazi Consente di esportare i dati del report come testo. Questo formato prevede l'inserimento di spazi tra le colonne. Stile record - Colonne senza spazi Consente di esportare i dati del report come testo. Non prevede l'inserimento di spazi tra le colonne. Definizione report Il formato Definizione report consente di esportare il report come file di testo contenente una breve descrizione della visualizzazione struttura del report. Questo formato viene mantenuto solo per la compatibilità con SAP Crystal Reports 5.0. Rich Text Format (RTF) Produce un file RTF che contiene oggetti di testo e disegno. Valori separati da virgola (CSV) Valori separati da virgola è un formato per lo scambio di dati basato su record. Consente l'esportazione del contenuto degli oggetti report come serie di valori separati da caratteri di separazione e delimitazione specificati dall'utente. Quando, per separare i campi, viene utilizzata una virgola (,), il formato prende il nome di Valori separati da virgola (CSV), un formato molto noto tra gli utenti di Microsoft Excel. Testo separato da tabulazione (TTX) Preserva il layout del report ma con alcune differenze: gli oggetti di testo su più righe vengono esportati in una sola riga, tutti i valori stringa vengono racchiusi tra virgolette doppie ("") e i valori stessi vengono separati da tabulazioni. I file TTX possono essere aperti in Microsoft Excel. Testo Genera ouput in testo normale (non conserva la formattazione). 116 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Formato Descrizione XML Formato utilizzato principalmente per lo scambio di dati. Produce output XML mediante lo schema XML di SAP Crystal Reports. Scelta di un formato di esportazione I formati disponibili dipendono dalla versione di SAP Crystal Reports installata e dal metodo utilizzato per esportare il report. Il controllo CrystalReportViewer offre la maggior parte dei formati di esportazione per impostazione predefinita. Alcuni formati sono disponibili solo quando si utilizza l'SDK di SAP Crystal Reports .NET o l'applicazione autonoma SAP Crystal Reports Designer. Formato Controllo CrystalReportViewer SDK di SAP Crystal SAP Crystal Reports Designer Reports .NET SAP Crystal Reports (RPT) x x x SAP Crystal Reports Solo lettura (RPTR) x x x x x HTML 4.0 Microsoft Excel (97-2003) x x x Microsoft Excel (97-2003) Solo dati x x x Microsoft Excel 2007(XLSX) Solo dati x x x Microsoft Word (97-2003) x x x Microsoft Word (97-2003) Modificabile x x x ODBC PDF x x x x Stile record - Colonne con spazi x Stile record - Colonne senza spazi x Definizione report x Rich Text Format (RTF) x x Valori separati da virgola (CSV) x x Testo separato da tabulazione (TTX) x x Testo x x x x XML x x Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 117 1.4.2.2 Esportazione di un report dal controllo CrystalReportViewer Il modo più semplice per aggiungere funzioni di esportazione all'applicazione SAP Crystal Reports .NET è utilizzare il pulsante di esportazione del controllo CrystalReportViewer. Il pulsante Esporta è attivato sulla barra degli strumenti di CrystalReportViewer per impostazione predefinita. Per visualizzare la finestra di dialogo di esportazione predefinita, è sufficiente fare clic sul pulsante Esporta. Le opzioni di esportazione disponibili per l'utente sono determinate in base ai driver inclusi nella distribuzione. Disattivazione della funzionalità di esportazione dei report dal visualizzatore L'esportazione è attivata in tutte le applicazioni SAP Crystal Reports per impostazione predefinita. È possibile limitare l'esportazione in due modi: ● Rimuovere il pulsante Esporta dal visualizzatore. Sarà comunque possibile utilizzare l'SDK per esportare un report anche se il pulsante di esportazione non è visibile. ● Disattivazione di driver di esportazione specifici nei moduli di unione di SAP Crystal Reports. Quando si distribuisce un'applicazione SAP Crystal Reports a un computer di destinazione, è necessario includere il runtime di SAP Crystal Reports sotto forma di MSI o modulo di unione. Se si sceglie di utilizzare i moduli di unione per la distribuzione, è possibile specificare i driver di esportazione da includere o escludere. Informazioni correlate finestra di dialogo Esporta [pagina 795] 1.4.2.2.1 Rimozione del pulsante di esportazione dal controllo CrystalReportViewer Sarà comunque possibile utilizzare l'SDK per esportare un report anche se il pulsante di esportazione non è visibile. 1. Aggiungere un controllo CrystalReportViewer all'applicazione. 2. Impostare su False la proprietà che controlla la visibilità del pulsante di esportazione. ○ Per un'applicazione Windows, impostare la proprietà CrystalReportViewer.ShowExportButton su False. ○ Per un sito Web, impostare la proprietà CrystalReportViewer.HasExportButton su False. Quando si esegue l'applicazione, il pulsante di esportazione non deve essere più visibile sul controllo CrystalReportViewer. 118 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Esempio Disattivazione del pulsante di esportazione in un'applicazione Web Private Sub ConfigureCrystalReports() CrystalReportViewer1.HasExportButton = False End Sub private void ConfigureCrystalReports() { InitializeComponent(); crystalReportViewer1.HasExportButton = false; } 1.4.2.3 Esportazione di un report a livello di codice L'SDK di SAP Crystal Reports .NET consente di esportare un report a livello di codice e di usufruire di un maggior numero di formati e di destinazioni rispetto al controllo CrystalReportViewer. Se il pulsante Esporta della barra degli strumenti del controllo CrystalReportViewer soddisfa le esigenze di esportazione, non è necessario scrivere codice per configurare ulteriori opzioni di esportazione. Tuttavia la stampa dei report tramite codice risulta utile in alcune situazioni specifiche: ● È possibile controllare quando, dove e come si verifica l'esportazione. Disattivare il pulsante Esporta nella barra degli strumenti del controllo CrystalReportViewer e gestire completamente l'esportazione mediante il codice. ● È possibile esportare un report in background, senza visualizzarlo. ● Il report può essere esportato nella risposta HTTP o nel flusso. Il controllo CrystalReportViewer supporta solo l'esportazione di un report in un disco. Esistono quattro metodi per esportare un report. Per tutti i metodi l'accesso viene eseguito attraverso la classe ReportDocument. ● ReportDocument.Export ● ReportDocument.ExportToHTTPResponse ● ReportDocument.ExportToDisk ● ReportDocument.ExportToStream Il metodo più generale, ReportDocument.Export, consente di esportare il report in qualsiasi formato o percorso supportato dall'SDK di SAP Crystal Reports .NET. Per utilizzare il metodo ReportDocument.Export è necessario innanzitutto impostare alcuni parametri mediante la classe ExportOptions. Ciascuno degli altri tre metodi consente di esportare con facilità un report in un modo particolare. L'utilizzo degli altri metodi normalmente riduce la quantità di codice ma offre un controllo più limitato sul file generato. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 119 1.4.2.3.1 Impostazione di opzioni di esportazione personalizzate Per utilizzare il metodo ReportDocument.Export è necessario innanzitutto impostare alcuni parametri mediante la classe ExportOptions. Questi parametri controllano il percorso di esportazione, il formato di esportazione e diverse opzioni di stile specifiche dell'output. Per esportare un report utilizzando il metodo ReportDocument.Export è necessario impostare quattro opzioni. Opzione di esportazione Descrizione ExportDestinationType Determina come esportare il report. ExportDestinationOptions Determina il percorso e il nome del file risultante. ExportFormatOptions Determina opzioni di formattazione specifiche dell'output. ExportFormatType Determina il tipo di file di destinazione. Impostazione della proprietà ExportDestinationType La proprietà ExportOptions.ExportDestinationType determina come esportare il report. I valori disponibili sono memorizzati nell'enumerazione ExportDestinationType. Il valore più comune è ExportDestinationType.DiskFile. Tra gli altri valori supportati sono inclusi ExchangeFolder, MicrosoftMail e NoDestination. Impostazione della proprietà ExportDestinationOptions La proprietà ExportOptions.ExportDestinationOptions imposta opzioni specifiche del percorso di destinazione del file di output. Il valore della proprietà ExportDestinationOptions dipende da quello della proprietà ExportOptions.ExportDestinationType. ExportDestinationType ExportDestinationOptions DiskFile Un oggetto DiskFileDestinationOptions ExchangeFolder Un oggetto ExchangeFolderDestinationOp tions MicrosoftMail Un oggetto MicrosoftMailDestinationOpt ions 120 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Imposta i seguenti valori ● Imposta il nome e il percorso del file di output. ● Profilo utente e password per il server Exchange. ● Percorso della cartella di Exchange. ● Nome utente e password dell'account di posta elettronica. ● Oggetto e corpo del messaggio di posta elettronica. ● Destinatari del messaggio di posta elettronica. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Impostazione della proprietà ExportFormatType Questa proprietà determina il formato del file di output. I valori disponibili sono memorizzati nell'enumerazione ExportFormatType. Le opzioni disponibili sono determinate dalla versione di SAP Crystal Reports in uso. SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio supporta le opzioni di esportazione seguenti: ● SAP Crystal Reports (RPT) ● SAP Crystal Reports Solo lettura (RPTR) ● PDF ● Rich Text Format (RTF) ● Microsoft Word (97-2003) ● Microsoft Excel (97-2003) ● Microsoft Excel (97-2003) Solo dati ● Microsoft Excel (2007) Solo dati ● HTML 4.0 ● Valori separati da virgola (CSV) ● Microsoft Word - Modificabile (RTF) ● Testo separato da tabulazione (TTX) ● Testo Impostazione della proprietà ExportFormatOptions La proprietà ExportOptions.ExportFormatOptions imposta opzioni specifiche del formato del file di output. Il valore della proprietà ExportFormatOptions dipende da quello della proprietà ExportOptions.ExportFormatType. ExportFormatOptions Un oggetto ExcelFormatOptions Un oggetto HTMLFormatOptions Un oggetto PdfRtfWordFormatOptions Formato di esportazione Imposta i seguenti valori ● Microsoft Excel (97-2003) ● Microsoft Excel (97-2003) Solo dati ● HTML 4.0 ● PDF ● Rich Text Format (RTF) Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ● Prima e ultima pagina del report da esportare. ● Larghezza predefinita della colonna. ● Se includere o meno intestazioni di colonna. ● Prima e ultima pagina del report da esportare. ● Nome della pagina HTML predefinita. ● Nome della cartella contenente i file di supporto necessari per l'output HTML, ad esempio le immagini utilizzate nel report. ● Prima e ultima pagina del report da esportare. © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 121 ExportFormatOptions Formato di esportazione ● Microsoft Word (97-2003) ● Microsoft Word - Modificabile (RTF) Imposta i seguenti valori Esempio Impostazione delle opzioni di esportazione per Microsoft Excel - Solo dati Nel seguente esempio vengono impostate le opzioni di esportazione necessarie per esportare un report nel formato «Microsoft Excel - Solo dati». Il metodo crea un'istanza della nuova classe DiskFileDestinationOptions e assegna un percorso file alla proprietà DiskFileDestinationOptions.DiskFileName. Per esportare il file sul disco, è necessario impostare la proprietà ExportOptions.ExportDestinationType su ExportDestinationType.DiskFile e la proprietà ExportOptions.DestinationOptions su un oggetto DiskFileDestinationOptions valido. Se non è richiesta una formattazione speciale, ExportOptions.ExportFormatOptions può essere impostata su null. Private Function ConfigureExportToExcelRecord(ByVal filepath As String) As ExportOptions Dim exOptions As New ExportOptions() Dim dfDestinationOptions As New DiskFileDestinationOptions() dfDestinationOptions.DiskFileName = filepath exOptions.ExportDestinationType = ExportDestinationType.DiskFile exOptions.DestinationOptions = dfDestinationOptions exOptions.ExportFormatType = ExportFormatType.ExcelRecord exOptions.ExportFormatOptions = Nothing Return exOptions End Function private ExportOptions ConfigureExportToExcelRecord(String filepath) { ExportOptions exOptions = new ExportOptions(); DiskFileDestinationOptions dfDestinationOptions = new DiskFileDestinationOptions(); dfDestinationOptions.DiskFileName = filepath; } exOptions.ExportDestinationType = ExportDestinationType.DiskFile; exOptions.DestinationOptions = dfDestinationOptions; exOptions.ExportFormatType = ExportFormatType.ExcelRecord; exOptions.ExportFormatOptions = null; return exOptions; Esempio Impostazione delle opzioni di esportazione per l'output HTML 4.0 Nel seguente esempio vengono impostate le opzioni di esportazione necessarie per esportare un report nel formato «HTML 4.0». 122 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Quando si esegue un'esportazione in formato HTML, non è necessario creare un'istanza della classe DiskFileDestinationOptions. Queste opzioni vengono invece impostate tramite la classe HTMLFormatOptions. Questo metodo crea un'istanza della nuova classe HTMLFormatOptions e assegna il nome file predefinito alla proprietà HTMLFormatOptions.HTMLFileName e il percorso di esportazione predefinito alla proprietà HTMLFormatOptions.HTMLBaseFolderName. La cartella di base contiene ciascuna delle pagine HTML esportate dal report, nonché tutte le immagini necessarie. Impostare la proprietà ExportOptions.ExportFormatOptions su un oggetto HTMLFormatOptions valido. Private Function ConfigureExportToHtml40(ByVal exportpath As String) As ExportOptions Dim exOptions As New ExportOptions() Dim html40FormatOptions As New HTMLFormatOptions() html40FormatOptions.HTMLBaseFolderName = exportpath html40FormatOptions.HTMLFileName = "default.html" html40FormatOptions.HTMLEnableSeparatedPages = True html40FormatOptions.HTMLHasPageNavigator = True exOptions.ExportFormatType = ExportFormatType.HTML40 exOptions.ExportFormatOptions = html40FormatOptions Return exOptions End Function private ExportOptions ConfigureExportToHtml40(String exportpath) { ExportOptions exOptions = new ExportOptions(); HTMLFormatOptions html40FormatOptions = new HTMLFormatOptions(); html40FormatOptions.HTMLBaseFolderName = exportpath; html40FormatOptions.HTMLFileName = "default.html"; html40FormatOptions.HTMLEnableSeparatedPages = true; html40FormatOptions.HTMLHasPageNavigator = true; exOptions.ExportFormatType = ExportFormatType.HTML40; exOptions.ExportFormatOptions = html40FormatOptions; return exOptions; } Informazioni correlate Formati di esportazione disponibili [pagina 114] 1.4.2.3.2 Esportazione su disco con opzioni personalizzate Illustra inoltre la procedura di esportazione di un report Crystal in formato Microsoft Word. L'SDK di SAP Crystal Reports 2008 consente di esportare i report in un formato specifico, ad esempio Excel, PDF o RTF. Il modello a oggetti ReportDocument consente di esportare i report in vari formati. In questo esempio viene impostata la proprietà ReportDocument.ExportOptions e si utilizza il metodo ReportDocument.Export per esportare il report. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 123 1. Creare un metodo che utilizzi un oggetto ReportDocument e un percorso file come parametri. 2. Creare una nuova istanza della classe DiskFileDestinationOptions e impostare il valore della proprietà DiskFileDestinationOptions.DiskFileName sul percorso del file di output. Dim dfDestinationOptions As New DiskFileDestinationOptions() dfDestinationOptions.DiskFileName = filepath DiskFileDestinationOptions dfDestinationOptions = new DiskFileDestinationOptions(); dfDestinationOptions.DiskFileName = filepath; 3. Creare una nuova istanza della classe ExportOptions e impostare le proprietà richieste. a. Impostare la proprietà ExportDestinationType su ExportDestinationType.DiskFile. b. Impostare la proprietà ExportDestinationOptions sull'oggetto DiskFileDestinationOptions. c. Impostare la proprietà ExportFormatType su ExportFormatType.WordForWindows. d. Se non è richiesta una formattazione speciale, ExportOptions.ExportFormatOptions può essere impostata su null. Dim wordExportOptions As New ExportOptions() wordExportOptions.ExportDestinationType = ExportDestinationType.DiskFile wordExportOptions.ExportDestinationOptions = dfDestinationOptions wordExportOptions.ExportFormatType = ExportFormatType.WordForWindows wordExportOptions.ExportFormatOptions = Nothing ExportOptions wordExportOptions = new ExportOptions(); wordExportOptions.ExportDestinationType = ExportDestinationType.DiskFile; wordExportOptions.ExportDestinationOptions = dfDestinationOptions; wordExportOptions.ExportFormatType = ExportFormatType.WordForWindows; wordExportOptions.ExportFormatOptions = null; 4. Chiamare il metodo Export e passare l'oggetto ExportOptions come parametro. Esempio Private Sub ExportToWord_RD(ByVal rd As ReportDocument, ByVal filepath As String) Dim dfDestinationOptions As New DiskFileDestinationOptions() dfDestinationOptions.DiskFileName = filepath Dim wordExportOptions As New ExportOptions() wordExportOptions.ExportDestinationType = ExportDestinationType.DiskFile wordExportOptions.ExportDestinationOptions = dfDestinationOptions wordExportOptions.ExportFormatType = ExportFormatType.WordForWindows wordExportOptions.ExportFormatOptions = Nothing rd.Export(wordExportOptions) End Sub private void ExportToWord_RD(ReportDocument rd, String filepath) { DiskFileDestinationOptions dfDestinationOptions = new DiskFileDestinationOptions(); dfDestinationOptions.DiskFileName = filepath; ExportOptions wordExportOptions = new ExportOptions(); wordExportOptions.ExportDestinationType = ExportDestinationType.DiskFile; wordExportOptions.ExportDestinationOptions = dfDestinationOptions; wordExportOptions.ExportFormatType = ExportFormatType.WordForWindows; wordExportOptions.ExportFormatOptions = null; rd.Export(wordExportOptions); } 124 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.4.2.3.3 Esportazione su disco come PDF mediante il metodo ReportDocument.ExportToDisk Questo esempio illustra come esportare un report Crystal nel formato PDF. L'SDK di SAP Crystal Reports 2008 consente di esportare i report in un formato specifico, ad esempio Excel, PDF o RTF. Il modello a oggetti ReportDocument consente di esportare i report in vari formati. 1. Creare un metodo che utilizzi un oggetto ReportDocument come parametro. 2. Specificare una directory di output e verificare che esista. Se la directory non esiste, crearla. 3. Chiamare il metodo ExportToDisk e specificare il formato di output e il nome del file di output. Esempio Private Shared Sub ExportToPDF_RD(ByVal rd As ReportDocument) Dim exportPath As String = "C:\\Exported\\" If Not System.IO.Directory.Exists(exportPath) Then System.IO.Directory.CreateDirectory(exportPath) End If rd.ExportToDisk(ExportFormatType.PortableDocFormat, exportPath + "PortableDoc.pdf") End Sub private static void ExportToPDF_RD(ReportDocument rd) { String exportPath = "C:\\Exported\\"; if (!System.IO.Directory.Exists(exportPath)) { System.IO.Directory.CreateDirectory(exportPath); } rd.ExportToDisk(ExportFormatType.PortableDocFormat, exportPath + "PortableDoc.pdf"); } Informazioni correlate Modello a oggetti ReportDocument [pagina 36] 1.4.3 Filtro dei dati con parametri o formule SAP Crystal Reports consente di personalizzare i dati contenuti nel report mediante l'uso dei parametri del report o la modifica della formula di selezione. Un parametro è una variabile del report impostata dall'utente e applicata quando il report viene aggiornato. Quando si utilizza un parametro in una formula di selezione, è possibile modificare i dati inclusi nel report in fase di esecuzione. I parametri possono inoltre essere utilizzati per personalizzare l'aspetto del report. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 125 Le formule di selezione consentono di definire e filtrare i record e i gruppi che appaiono in un report. Modificando la formula di selezione, si modifica la query utilizzata per recuperare i dati dall'origine dati. Classi utilizzate per impostare parametri o formule ● CrystalDecisions.CrystalReports.Engine.DataDefinition Contiene tutte le informazioni relative alla manipolazione dei dati basata sull'origine dati del report. ● CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition Rappresenta un campo di parametro del report. Questo oggetto fornisce proprietà e metodi per il recupero delle informazioni e l'impostazione delle opzioni per un campo di parametro di un report. ● CrystalDecisions.Web.Parameter Fornisce proprietà per la modifica o il recupero di informazioni su un parametro in un sito Web. 1.4.3.1 Parametri Un parametro è una variabile del report impostata dall'utente e applicata quando il report viene aggiornato. Esistono molti tipi di parametri e l'impostazione a livello di codice dei diversi tipi può implicare comportamenti ed esperienze differenti per gli utenti dell'applicazione. Procedure ottimali per l'utilizzo dei parametri Per evitare errori di runtime quando si impostano i parametri a livello di codice, osservare quanto segue: ● I valori di un parametro devono essere dello stesso tipo del parametro. ● Se per il parametro si utilizza una maschera di modifica, i valori del parametro devono rispettare la maschera. ● Per la lettura dei valori del parametro, accertarsi di conoscere i tipi di valori letti, ovvero di sapere se sono discreti o di intervallo. ● Impostare il tipo di limite su un valore di intervallo prima di aggiungerlo a un parametro. ● Assicurarsi che il limite superiore di un intervallo di valori sia maggiore del limite inferiore. Informazioni correlate Impostazione dei parametri [pagina 601] Parametri di dati e parametri non di dati [pagina 604] Progettazione dei campi di parametro [pagina 603] 126 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.4.3.1.1 Proprietà dei valori dei parametri I parametri supportano molte più funzionalità rispetto a quelle menzionate qui. Per un elenco completo delle funzionalità, vedere la classe ParameterField. Parametri di valori singoli o multipli Se un parametro supporta valori multipli, è possibile selezionare più di un valore per un parametro quando il report viene aggiornato. Se un parametro supporta valori singoli, è possibile selezionare solo un valore per un parametro quando il report viene aggiornato. Se un parametro supporta più valori, passa da una singola variabile a una matrice contenente molti valori. Valori discreti o di intervallo dei parametri I valori dei parametri discreti rappresentano un solo valore, ad esempio 1, "Jill", 3.141 o True. I valori di intervallo rappresentano un intervallo particolare di valori da un punto a un altro, ad esempio [1..45], (4..6], ["Monday","Thursday"]. Il valore del limite inferiore dell'intervallo deve essere più piccolo del limite superiore. Inoltre, i parametri possono essere sia discreti che di intervallo se il parametro supporta i valori multipli. Valori predefiniti È possibile specificare i valori predefiniti per un parametro e forzare la selezione di uno o molti valori oppure fornire valori del parametro predefiniti ma consentire all'utente di immettere valori personalizzati. I valori predefiniti sono memorizzati nella proprietà DefaultValues dell'oggetto ParameterField. Dopo che l'utente ha selezionato un insieme di valori per i parametri del report, tali valori vengono memorizzati nella proprietà CurrentValues. Nota i valori predefiniti possono essere solo discreti. Valori facoltativi dei parametri Se un valore del parametro viene impostato come facoltativo, alla richiesta di immissione di un valore l'operazione non verrà forzata. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 127 Valori statici o dinamici dei parametri I valori statici dei parametri sono memorizzati nel report. I valori dinamici dei parametri vengono recuperati da un'origine dati esterna al report. Valori dei parametri con sovrapposizione dinamica Un prompt dinamico può includere un elenco di valori sovrapposti che porta l'utente a seguire una sequenza di prompt dinamici per determinare un valore finale per il parametro. Ad esempio, è possibile che agli utenti venga richiesto prima di tutto di selezionare un paese prima che vengano visualizzate le opzioni relative all'area. Valori interattivi dei parametri I valori dei parametri possono essere manipolati in fase di esecuzione utilizzando la proprietà CrystalReportViewer.ViewTimeSelectionFormula. La formula di selezione del tempo di visualizzazione viene applicata dopo l'applicazione dei risultati delle formule di selezione salvate con il report. Tipi di valori dei parametri Un campo di parametro deve contenere un determinato valore ParameterType. Un valore del parametro deve corrispondere a uno dei seguenti tipi di parametro: ● ReportParameter ● StoredProcedureParameter ● QueryParameter 1.4.3.1.2 Riquadro del parametro Il riquadro del parametro consente di formattare e filtrare in modo interattivo i dati del report. Il nuovo riquadro del parametro di SAP Crystal Reports 2008 consente agli utenti di impostare parametri statici e dinamici e di aggiornare il report. Gli utenti possono inoltre formattare e filtrare i dati del report in modo interattivo. Il riquadro del parametro viene visualizzato dal riquadro degli strumenti. Per accedere al riquadro dei parametri, fare clic sul pulsante Parametri sulla barra degli strumenti o utilizzare il seguente codice: myCrystalReportViewer.ToolPanelView = ToolPanelViewType.ParameterPanel crystalReportViewer.ToolPanelView = ToolPanelViewType.ParameterPanel; 128 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Per nascondere il pulsante Parametri utilizzare il seguente codice: myCrystalReportViewer.ShowParameterPanelButton = False crystalReportViewer.ShowParameterPanelButton = false; Nel riquadro vengono visualizzati tutti i parametri impostati su Modificabile o Sola lettura. Se un parametro viene impostato su Modificabile, è possibile aggiungere, eliminare o modificare i valori del parametro facendo clic sul pulsante Mostra la finestra di dialogo Avanzate. Se i valori del parametro vengono modificati ma non applicati, viene visualizzato un asterisco accanto al campo del parametro per indicare che i valori non sono stati applicati al report. Nota se il parametro accetta i valori personalizzati, è possibile modificare direttamente il valore del parametro nella casella di testo nel riquadro del parametro. Verrà visualizzata un'icona di database accanto ai parametri dei dati. Quando si modifica il valore di un parametro di dati, il report viene aggiornato e accede al database per apportare le modifiche corrispondenti. Se si modifica il valore di un parametro non di dati, il report viene formattato o filtrato in base ai dati salvati nel report. Il report non accede al database. Informazioni correlate Filtro dei dati del report con le formule di selezione [pagina 135] 1.4.3.1.3 Impostazione di parametri nella pagina ASPX Quando si crea un report Crystal, la selezione dei dati per il report è controllata dai criteri "where". Per questo tipo di criteri può essere utilizzato un valore hardcoded. Se è tuttavia necessario che il valore sia dinamico, viene creato un parametro, al quale viene assegnata la clausola "where". I parametri vengono gestiti in maniera differente, a seconda se il processo di sviluppo viene eseguito con un modello di codifica standard o un modello basato su codice ridotto. Quando si sviluppa con un modello di codice, Crystal Reports, versione per sviluppatori per Microsoft Visual Studio accede ai parametri e interagisce con gli stessi mediante un gruppo di classi correlate ai parametri nell'SDK di SAP Crystal Reports. Nel secondo caso, ossia quando si utilizza il modello per lo sviluppo di applicazioni basato su tag, il controllo CrystalReportSource accede ai parametri e interagisce con essi mediante la struttura Parameters. La struttura Parameters è stata introdotta in ASP.NET versione 2.0. Consente di assegnare i parametri a qualsiasi controllo DataSource (in questo caso un controllo CrystalReportSource). Questi parametri possono essere assegnati al report principale e a qualsiasi sottoreport, qualora fossero richiesti parametri. Un parametro viene assegnato da uno dei tipi seguenti: ● ControlParameter Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 129 ● QueryStringParameter ● SessionParameter ● FormParameter ● CookieParameter Tale assegnazione di parametri consente di creare una soluzione basata su codice ridotto, in cui i parametri di un report possono essere impostati in base a selezioni effettuate in controlli DropDownList o di altro tipo, valori della stringa di query di un URL, valori recuperati da Session, valori inviati da campi form o valori provenienti da un Cookie. Impostazione dei parametri direttamente nell'XML In XML il tag <Parameters> è nidificato all'interno del tag <CrystalReportSource>. Nel tag <Parameters> nidificato è possibile configurare collegamenti a un parametro predefinito o a un parametro di un controllo. Esempio Impostazione di un parametro nell'XML In questo esempio il valore predefinito del parametro City viene impostato su Tokyo. <CR:CrystalReportSource ID="CrystalReportSource1" runat="server"> <Report FileName="SalesReport.rpt"> <Parameters> <CR:Parameter ConvertEmptyStringToNull="False" DefaultValue="Tokyo" Name="City" ReportName="" /> </Parameters> </Report> </CR:CrystalReportSource> Esempio Collegamento di un parametro a un controllo È possibile collegare il valore di un parametro a un altro controllo all'interno del Web Form. Nel seguente esempio, il valore di un parametro denominato City viene impostato sul valore di un controllo casella di testo denominato Location. <CR:CrystalReportSource ID="CrystalReportSource1" runat="server"> <Report FileName="SalesReport.rpt"> <Parameters> <CR:ControlParameter ControlID="Location" ConvertEmptyStringToNull="False" Name="city" PropertyName="Text" ReportName="" /> </Parameters> </Report> </CR:CrystalReportSource> 130 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Informazioni correlate Impostazione dei parametri [pagina 601] 1.4.3.1.3.1 Accesso alla finestra di dialogo Editor dell'insieme dei parametri I parametri vengono configurati nella finestra di dialogo Editor dell'insieme dei parametri. 1. Selezionare il controllo CrystalReportSource. 2. Da Proprietà, espandere Report. 3. Nella proprietà Report, fare clic sui puntini di sospensione (...) a destra di Parameters (Insieme). 4. Nella finestra di dialogo Editor dell'insieme dei parametri immettere uno o più parametri per il report principale e per gli eventuali sottoreport. 1.4.3.1.4 Impostazione di parametri discreti in un report In questo esempio i parametri vengono impostati su valori specifici utilizzati dal report di esempio. È necessario utilizzare un report con un campo di parametro già specificato. Il modello a oggetti ReportDocument consente di impostare i valori per i parametri già esistenti in un report. Per accedere ai parametri, utilizzare il nome o un valore numerico di indice. Per aggiungere un nuovo parametro a un report, è necessario utilizzare il modello a oggetti ReportClientDocument. 1. Creare una nuova costante di stringa, PARAMETER_FIELD_NAME, e impostarne il valore sul nome di un parametro esistente. 2. Creare un'istanza della classe ArrayList. 3. Per ogni valore da assegnare al parametro, aggiungere un valore all'istanza di ArrayList. 4. Chiamare il metodo ReportDocument.SetParameterValue e passare il nome del parametro e l'elenco dei valori. Il metodo ReportDocument.SetParameterValue consente di impostare il valore corrente di un campo di parametro. Il valore può essere un valore primitive, ParameterValue, una matrice di altro tipo o un insieme ParameterValues. Esempio Impostazione di parametri discreti in un report Private Sub SettingParameters_RD(ByVal TestReport As ReportDocument) Dim PARAMETER_FIELD_NAME As String = "Country" Dim countries As New ArrayList() countries.Add("Canada") countries.Add("USA") TestReport.SetParameterValue(PARAMETER_FIELD_NAME, countries.ToArray()) crystalReportViewer.ReportSource = TestReport End Sub Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 131 private void SettingParameters_RD(ReportDocument TestReport) { string PARAMETER_FIELD_NAME = "Country"; ArrayList countries = new ArrayList(); countries.Add("Canada"); countries.Add("USA"); TestReport.SetParameterValue(PARAMETER_FIELD_NAME, countries.ToArray()); crystalReportViewer.ReportSource = TestReport; } Un sito Web Crystal Reports può richiedere ulteriore codice per gestire lo stato della sessione tra le visualizzazioni di pagina. Informazioni correlate Esercitazione: Persistenza del modello a oggetti ReportDocument mediante Session [pagina 302] Esercitazione: Lettura e impostazione di parametri discreti [pagina 340] 1.4.3.1.5 Impostazione di parametri discreti in un sottoreport Nel seguente esempio, un parametro di un sottoreport viene impostato su un valore specifico. È necessario utilizzare un report con un campo di parametro già specificato. Per impostare un valore discreto in un report, è necessario chiamare il metodo ReportDocument.SetParameterValue con il nome del parametro e il valore del parametro. Questo metodo non è supportato per i sottoreport. Eseguire l'accesso al parametro nel sottoreport mediante l'insieme ParameterFields del report principale e impostarlo su un nuovo oggetto ParameterDiscreteValue. 1. Creare un'istanza della classe ParameterDiscreteValue. Suggerimento utilizzare la classe ParameterRangeValue per i parametri di intervallo. 2. Impostare la proprietà ParameterDiscreteValue.Value sul nuovo valore del parametro. Dim dv As New ParameterDiscreteValue() dv.Value = parameterValue ParameterDiscreteValue dv = new ParameterDiscreteValue(); dv.Value = parameterValue; 3. Creare un'istanza dell'insieme ParameterFields e assegnare alla stessa il valore della proprietà ReportDocument.ParameterFields del report principale. Dim parameterFields As ParameterFields = testReport.ParameterFields 132 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ParameterFields parameterFields = testReport.ParameterFields; 4. Accedere al parametro nel sottoreport mediante un indice con nome dell'istanza ParameterFields. Dim parameterField As ParameterField = parameterFields(parameterFieldName, subreportName) ParameterField parameterField = parameterFields[parameterFieldName, subreportName]; L'insieme ParameterFields richiede due indici, uno per il nome del parametro e uno per il nome del sottoreport. 5. Cancellare il valore presente nel campo di parametro e aggiungere l'oggetto ParameterDiscreteValue creato in precedenza. parameterField.CurrentValues.Clear() parameterField.CurrentValues.Add(dv) parameterField.CurrentValues.Clear(); parameterField.CurrentValues.Add(dv); 6. Collegare il report a un controllo CrystalReportViewer. Nota impostare ParameterFields prima della proprietà ReportSource del controllo CrystalReportViewer, in caso contrario il controllo richiederà le informazioni sul parametro. Esempio Impostazione di parametri discreti in un sottoreport Private Sub SubreportSettingParameters_RD(ByVal testReport As ReportDocument, ByVal subreportName As String, ByVal parameterFieldName As String, ByVal parameterValue As String) Dim dv As New ParameterDiscreteValue() dv.Value = parameterValue Dim parameterFields As ParameterFields = testReport.ParameterFields Dim parameterField As ParameterField = parameterFields(parameterFieldName, subreportName) parameterField.CurrentValues.Clear() parameterField.CurrentValues.Add(dv) crystalReportViewer1.ReportSource = TestReport End Sub private void SubreportSettingParameters_RD(ReportDocument testReport, String subreportName, String parameterFieldName, String parameterValue) { ParameterDiscreteValue dv = new ParameterDiscreteValue(); dv.Value = parameterValue; ParameterFields parameterFields = testReport.ParameterFields; ParameterField parameterField = parameterFields[parameterFieldName, subreportName]; parameterField.CurrentValues.Clear(); parameterField.CurrentValues.Add(dv); crystalReportViewer1.ReportSource = TestReport; } Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 133 Un sito Web Crystal Reports può richiedere ulteriore codice per gestire lo stato della sessione tra le visualizzazioni di pagina. Informazioni correlate Esercitazione: Persistenza del modello a oggetti ReportDocument mediante Session [pagina 302] Esercitazione: Lettura e impostazione di parametri di intervallo per un sottoreport [pagina 250] 1.4.3.1.6 Impostazione di parametri di intervallo in un report È necessario utilizzare un report con un campo di parametro già specificato. Il modello a oggetti ReportDocument consente di impostare i valori per i parametri già esistenti in un report. Per accedere ai parametri, utilizzare il nome o un valore numerico di indice. Per aggiungere un nuovo parametro a un report, è necessario utilizzare il modello a oggetti ReportClientDocument. Per impostare un parametro di intervallo, è necessario creare un'istanza della classe ParameterRangeValue e passarla al metodo ReportDocument.SetParameterValue. 1. Creare una nuova costante di stringa, PARAMETER_FIELD_NAME, e impostarne il valore sul nome di un parametro esistente. 2. Creare un'istanza della classe ParameterRangeValue. Dim dateRange As New ParameterRangeValue() ParameterRangeValue dateRange = new ParameterRangeValue(); 3. Impostare i valori iniziale e finale per l'oggetto ParameterRangeValue. dateRange.StartValue = startDate dateRange.EndValue = endDate dateRange.StartValue = startDate; dateRange.EndValue = endDate; 4. Impostare i limiti superiore e inferiore dell'intervallo. Opzione Descrizione RangeBoundType.BoundExclusive I valori dell'intervallo inferiore e superiore non sono inclusi nell'intervallo. RangeBoundType.BoundInclusive I valori dell'intervallo inferiore e superiore sono inclusi nell'intervallo. RangeBoundType.NoBound Non è selezionato alcun tipo di limite per l'intervallo. dateRange.LowerBoundType = RangeBoundType.BoundInclusive dateRange.UpperBoundType = RangeBoundType.BoundInclusive 134 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net dateRange.LowerBoundType = RangeBoundType.BoundInclusive; dateRange.UpperBoundType = RangeBoundType.BoundInclusive; 5. Chiamare il metodo ReportDocument.SetParameterValue e passare il nome del parametro e l'oggetto ParameterRangeValue. Il metodo ReportDocument.SetParameterValue consente di impostare il valore corrente di un campo di parametro. Il valore può essere un valore primitive, ParameterValue, una matrice di altro tipo o un insieme ParameterValues. Esempio Private Sub SettingParameters_RD(ByVal testReport As ReportDocument, ByVal startDate As String, ByVal endDate As String) Dim PARAMETER_FIELD_NAME As String = "SalesDates" Dim dateRange As New ParameterRangeValue() dateRange.StartValue = startDate dateRange.EndValue = endDate dateRange.LowerBoundType = RangeBoundType.BoundInclusive dateRange.UpperBoundType = RangeBoundType.BoundInclusive testReport.SetParameterValue(PARAMETER_FIELD_NAME, dateRange) crystalReportViewer1.ReportSource = testReport End Sub private void SettingParameters_RD(ReportDocument testReport, String startDate, String endDate) { string PARAMETER_FIELD_NAME = "SalesDates"; ParameterRangeValue dateRange = new ParameterRangeValue(); dateRange.StartValue = startDate; dateRange.EndValue = endDate; dateRange.LowerBoundType = RangeBoundType.BoundInclusive; dateRange.UpperBoundType = RangeBoundType.BoundInclusive; testReport.SetParameterValue(PARAMETER_FIELD_NAME, dateRange); crystalReportViewer1.ReportSource = testReport; } Un sito Web Crystal Reports può richiedere ulteriore codice per gestire lo stato della sessione tra le visualizzazioni di pagina. Informazioni correlate Esercitazione: Persistenza del modello a oggetti ReportDocument mediante Session [pagina 302] 1.4.3.2 Filtro dei dati del report con le formule di selezione Le formule di selezione consentono di definire e filtrare i record e i gruppi che appaiono in un report. Per filtrare i dati sono disponibili tre tipi di formule di selezione: ● Formula di selezione dei record Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 135 ● Formula di selezione dei dati salvati ● Formula di selezione dei gruppi Nella tabella che segue sono riportati i tipi di campi consentiti nei diversi filtri dei report: Tabella 5: Formula di selezione dei re­ cord Formula di selezione dei dati salvati Formula di selezione dei gruppi Parametri X X X Riepiloghi - - X Formule ora di stampa/totali cumulativi - - - La tabella che segue mostra le differenze di comportamento associate ai diversi filtri dei report: Tabella 6: Formula di selezione dei re­ cord Formula di selezione dei dati salvati Formula di selezione dei gruppi Può riferirsi al riepilogo? No, Sì. Sì. Quando viene valutata la for­ mula? Durante la lettura dei record Se si utilizza un riepilogo, in fase di stampa, altrimenti du­ rante la lettura dei record. In fase di stampa Quando viene aggiornato il re­ Se il risultato della valutazione Se i record vengono letti, du­ port? è falso, quando i record ven­ rante la valutazione. Se il ri­ gono scartati. sultato della valutazione è falso, quando i record ven­ gono scartati. N/D Influisce sul calcolo del riepi­ logo? No, i record vengono conteg­ giati anche se filtrati. Sì, i record filtrati non ven­ gono conteggiati. No, se il filtro viene valutato durante la lettura dei record, altrimenti sì. È possibile applicare la formula di selezione dei dati salvati all'output della formula di selezione dei record. Lo schema che segue indica la procedura con cui le formule di selezione dei record e di selezione dei dati salvati vengono utilizzate: Formula di selezione dei record La formula di selezione dei record specifica i record che costituiscono i dati salvati del report. Questa formula di selezione consente due livelli di filtro: ● In base al database ● In base al motore di elaborazione del report 136 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Formula di selezione dei dati salvati SavedDataFilter consente agli utenti di visualizzare un sottoinsieme dei dati salvati in un report. La modifica di SavedDataFilter non implica l'eliminazione dei dati salvati in un report o una chiamata al database. Formula di selezione dei gruppi La formula di selezione dei gruppi specifica i record che verranno presi in considerazione durante il rendering delle pagine del report. Normalmente questa formula utilizza i valori generati nelle fasi precedenti dell'elaborazione del report, ad esempio i riepiloghi. Nota La formula di selezione dei gruppi filtra i record e non i gruppi. 1.4.3.2.1 Filtro dei dati con le formule di selezione In questo esempio viene applicato un filtro a uno dei parametri di database utilizzati per il report di esempio. Il filtro consente agli utenti di personalizzare i valori visualizzati in un report. 1. Creare un metodo che utilizzi un oggetto ReportDocument e una stringa che contenga una formula di selezione. L'SDK di SAP Crystal Reports .NET utilizza per la formula di selezione la stessa sintassi dell'interfaccia SAP Crystal Reports Designer incorporata. 2. Assegnare la formula di selezione alla proprietà DataDefinition.RecordSelectionFormula dell'oggetto ReportDocument corrente. La classe DataDefinition contiene tutte le informazioni relative alla manipolazione dei dati basata sull'origine dati del report. La classe DataDefinition per ogni report è accessibile tramite la proprietà ReportDocument.DataDefinition. 3. Collegare la proprietà ReportSource del controllo CrystalReportViewer all'istanza di ReportDocument. Il report verrà aggiornato con i nuovi risultati in base alla formula di selezione specificata. Esempio In questo esempio vengono accettati un oggetto ReportDocument e un parametro intero. Il parametro intero viene concatenato a una stringa preesistente per creare una formula di selezione completa. La formula di selezione viene applicata al report prima del collegamento del controllo CrystalReportViewer all'oggetto ReportDocument. Private Sub FilterData_RD(ByVal TestReport As ReportDocument, ByVal sales As Integer) Dim selectFormula As String = "{Customer.Last Year's Sales} > " + sales TestReport.DataDefinition.RecordSelectionFormula = selectionFormula crystalReportViewer.ReportSource = TestReport End Sub Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 137 private void FilterData_RD(ReportDocument TestReport, int sales) { string selectFormula = "{Customer.Last Year's Sales} > " + sales; TestReport.DataDefinition.RecordSelectionFormula = selectionFormula; crystalReportViewer.ReportSource = TestReport; } Un sito Web SAP Crystal Reports può richiedere ulteriore codice per gestire lo stato della sessione tra le visualizzazioni di pagina. Informazioni correlate Esercitazione: Persistenza del modello a oggetti ReportDocument mediante Session [pagina 302] Inserimento dei parametri nelle formule [pagina 606] 1.4.4 Impostazione dell'origine dati In SAP Crystal Reports è possibile generare report praticamente da qualsiasi tipo di origine dati, comprese le origini permanenti quali i database e i file XML e le origini di runtime quali le raccolte di oggetti. Se si utilizza il modello a oggetti ReportDocument, è possibile accedere e modificare a livello di codice le informazioni di connessione alle origini dati per il file del report durante l'esecuzione. Esistono diverse procedure di impostazione di un'origine dati: ● Utilizzare il metodo ReportDocument.DatasourceConnections[0].SetConnection. Questo metodo consente di accedere a un report o un sottoreport. ● Aggiornare la proprietà ReportDocument.Table.LogOnInfo e chiamare il metodo ReportDocument.Table.ApplyLogOnInfo. Questo metodo consente di accedere a un report o un sottoreport. Consente inoltre di specificare la posizione completa della tabella. ● Utilizzare il metodo CrystalReportViewer.LogOnInfo. Questo metodo consente di accedere a un report ma non di impostare la posizione del database. Classi utilizzate per l'impostazione dell'origine dati ● CrystalDecisions.Shared.ConnectionInfo Fornisce le proprietà per il recupero e l'impostazione delle opzioni per eseguire la connessione ai server o alle origini dati ODBC (Open Database Connectivity) del database. ● CrystalDecisions.CrystalReports.Engine.Table Rappresenta la tabella di un database al quale il report ha avuto accesso. Questa classe fornisce proprietà e metodi per ottenere informazioni sulla tabella e per l'accesso alla tabella stessa. ● CrystalDecisions.CrystalReports.Engine.ReportDocument Rappresenta un report e contiene proprietà e metodi per specificare un'origine dati in fase di esecuzione. 138 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Informazioni correlate Origini dati supportate [pagina 573] Accesso e aggiunta di dati [pagina 572] 1.4.4.1 Connessione a un database L'origine dati più comune per un report Crystal è un database. L'accesso a un database viene eseguito da una delle seguenti origini: ● Direttamente dal file di report, utilizzando le informazioni di connessione al database memorizzate nel file. Le informazioni di connessione al database vengono configurate nell'interfaccia SAP Crystal Report Designer incorporata al momento della creazione o della modifica del report. Le informazioni vengono automaticamente passate dal modulo report al database quando il report viene visualizzato. Le credenziali per l'accesso possono essere salvate con il report o passate in fase di esecuzione. ● Dal codice API SAP Crystal Reports .NET. Le informazioni di connessione al database possono essere riconfigurate con il codice che interagisce con il report a livello di codice in fase di esecuzione. Lo scenario più comune per la creazione di una connessione a un database è l'impostazione dei parametri di connessione del database in SAP Crystal Reports Designer seguita dall'indicazione delle informazioni di accesso a livello di codice in fase di esecuzione. Informazioni correlate Accesso e aggiunta di dati [pagina 572] 1.4.4.1.1 Ottimizzazione della protezione della connessione a un database SQL Server A prescindere dalle origini dei report, il problema della sicurezza resta invariato: proteggere il database dagli attacchi dannosi. uso dell'autenticazione Windows con protezione integrata Per ottenere la massima protezione, Microsoft consiglia di utilizzare la protezione integrata dell'autenticazione Windows. Secondo tale configurazione non è richiesto l'utilizzo dell'ID utente e della password per l'applicazione. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 139 uso dell'autenticazione SQL Server con un account di database con accesso limitato Se è necessario utilizzare l'autenticazione SQL Server con il database in uso, sarà necessario intraprendere azioni supplementari per raggiungere un livello di protezione efficacie. Non utilizzare l'ID e la password dell'amministratore di sistema nel codice perché costituisce un effettivo rischio alla protezione. Effettuare invece quanto descritto di seguito: ● Creare un account di database con accesso limitato. ● Configurare l'account in modo da consentire l'accesso solo alle tabelle richieste. ● Per ogni tabella accessibile, concedere l'autorizzazione per l'esecuzione della sola istruzione SELECT. Microsoft consiglia di crittografare comunque l'ID e la password utilizzati. Per informazioni su come crittografare l'ID utente e la password, vedere le informazioni di protezione in MSDN. 1.4.4.1.2 Accesso a un database SQL Server protetto con un sottoreport Per eseguire questo esempio, è necessario utilizzare un report che includa un sottoreport che richiede l'autenticazione SQL protetta. È necessario inserire il nome utente e la password per accedere al database SQL Server. In questo esempio si cambia il database di un sottoreport a livello di codice. 1. Recuperare l'istanza DataSourceConnections dalla proprietà DataSourceConnections delle istanze del report e del sottoreport. 2. Recuperare IConnectionInfo al livello di indice 0 dell'istanza DataSourceConnections. 3. Chiamare il metodo SetConnection con il nome del server, il nome del database, il nome utente e la password. 4. Chiamare il metodo SetLogon con il nome utente e la password in uso. Esempio Private Function SubreportLogon_RD(ByVal TestReport As ReportDocument) As ReportDocument Dim dataSourceConnections As DataSourceConnections = TestReport.DataSourceConnections Dim connectInfo As IConnectionInfo = dataSourceConnections(0) connectInfo.SetConnection("ServerName", "DatabaseName", "UserName", "Password") Dim TestSubreport As ReportDocument = TestReport.Subreports("Subreport1") Dim subreportDataSourceConnections As DataSourceConnections = TestSubreport.DataSourceConnections Dim connectInfo As IConnectionInfo = subreportDataSourceConnections(0) connectInfo.SetLogon("UserName", "Password") End Function private ReportDocument SubreportLogon_RD(ReportDocument TestReport) { 140 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net DataSourceConnections dataSourceConnections = TestReport.DataSourceConnections; IConnectionInfo connectInfo = dataSourceConnections[0]; connectInfo.SetConnection("ServerName", "DatabaseName", "UserName", "Password"); ReportDocument TestSubreport = TestReport.Subreports["Subreport1"]; DataSourceConnections subreportDataSourceConnections = TestSubreport.DataSourceConnections; IConnectionInfo connectInfo = subreportDataSourceConnections[0]; connectInfo.SetLogon("UserName", "Password"); } 1.4.4.1.3 Accesso a un database SQL Server protetto con il modello a oggetti ReportDocument Questo esempio indica come accedere a un database utilizzando l'autenticazione SQL protetta. Prima di iniziare è necessario disporre di un report che richieda l'autenticazione SQL protetta. Per aggiornare le informazioni di connessione per un report mediante il modello a oggetti ReportDocument, è necessario aggiornare la proprietà ConnectionInfo per ogni oggetto Table dell'insieme ReportDocument.Database.Tables. Dopo avere aggiornato tutte le proprietà, è necessario chiamare il metodo Table.ApplyLogOnInfo per salvare le modifiche. 1. Creare un nuovo oggetto ConnectionInfo. 2. Impostare le proprietà DatabaseName, UserID e Password dell'oggetto ConnectionInfo sui valori richiesti per l'accesso. Nota se si sceglie di impostare solo le proprietà DatabaseName, UserID e Password, l'accesso verrà eseguito al server predefinito del database specificato all'interno del report. Se invece si sceglie di assegnare una proprietà ServerName alternativa, in fase di esecuzione è possibile reindirizzare il report a un server diverso. 3. Recuperare l'istanza Tables dalla proprietà Database della classe ReportDocument. Nota Tables è una classe indicizzata che contiene istanze della classe Table. 4. Per ogni oggetto Table dell'insieme: a. Recuperare l'istanza TableLogOnInfo dalla proprietà LogOnInfo della classe Table. b. Aggiornare la proprietà ConnectionInfo dell'oggetto TableLogOnInfo. c. Chiamare il metodo ApplyLogOnInfo per salvare la modifica. Esempio Private Sub setDatabaseLogon(ByVal rd As ReportDocument, ByVal databaseName As String, ByVal userName As String, ByVal password As String) Dim myConnectionInfo As New ConnectionInfo() myConnectionInfo.DatabaseName = databaseName Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 141 myConnectionInfo.UserID = userName myConnectionInfo.Password = password Dim myTables As Tables = rd.Database.Tables For Each myTable As Table In myTables Dim newLogonInfo As TableLogOnInfo = myTable.LogOnInfo newLogonInfo.ConnectionInfo = myConnectionInfo myTable.ApplyLogOnInfo(newLogonInfo) Next End Sub private void setDatabaseLogon(ReportDocument rd, String databaseName, String userName, String password) { ConnectionInfo connectionInfo = new ConnectionInfo(); connectionInfo.DatabaseName = databaseName; connectionInfo.UserID = userName; connectionInfo.Password = password; Tables tables = rd.Database.Tables; foreach (Table table in tables) { TableLogOnInfo newLogonInfo = table.LogOnInfo; newLogonInfo.ConnectionInfo = connectionInfo; table.ApplyLogOnInfo(newLogonInfo); } } Dopo avere impostato le informazioni di accesso al database per l'istanza ReportDocument, aggiornare la proprietà ReportSource dell'oggetto CrystalReportViewer. 1.4.4.1.4 Accesso a un database SQL Server protetto con il controllo CrystalReportViewer Quando si accede a un database SQL Server protetto mediante il modello a oggetti CrystalReportViewer, è necessario utilizzare classi dello spazio dei nomi CrystalDecisions.Shared. Per effettuare la connessione al server di database o alle origini dati ODBC vengono utilizzate le proprietà della classe ConnectionInfo. 1. Creare un nuovo oggetto ConnectionInfo. 2. Impostare le proprietà DatabaseName, UserID e Password dell'oggetto ConnectionInfo sui valori richiesti per l'accesso. Nota se si sceglie di impostare solo le proprietà DatabaseName, UserID e Password, l'accesso verrà eseguito al server predefinito del database specificato all'interno del report. Se invece si sceglie di assegnare la proprietà ServerName, in fase di esecuzione è possibile reindirizzare il report a un server diverso. 3. Recuperare l'istanza TableLogOnInfos dalla proprietà LogOnInfo della classe CrystalReportViewer. Nota TableLogOnInfos è una classe indicizzata che contiene istanze della classe TableLogOnInfo. 142 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 4. Per ogni oggetto TableLogOnInfo dell'insieme, impostare la proprietà ConnectionInfo dell'oggetto TableLogOnInfo sull'oggetto ConnectionInfo. Esempio Private String, Dim Dim For Sub setDatabaseLogon(ByVal databaseName As String, ByVal userName As ByVal password As String) myCconnectionInfo As New ConnectionInfo() logOnInfos As TableLogOnInfos = crystalReportViewer.LogOnInfo Each logOnInfo As TableLogOnInfo In logOnInfos logOnInfo.ConnectionInfo = myCconnectionInfo Next myCconnectionInfo.DatabaseName = databaseName myCconnectionInfo.UserID = userName myCconnectionInfo.Password = password End Sub private void setDatabaseLogon(String databaseName, String userName, String password){ ConnectionInfo connectionInfo = new ConnectionInfo(); TableLogOnInfos logOnInfos = crystalReportViewer.LogOnInfo; foreach(TableLogOnInfo logOnInfo in logOnInfos) { logOnInfo.ConnectionInfo = connectionInfo; } connectionInfo.DatabaseName = databaseName; connectionInfo.UserID = userName; connectionInfo.Password = password; } 1.4.4.2 Connessione a IDataReader Molti progetti .NET utilizzano DataReader anziché DataSet per recuperare i dati. Ad esempio, un modo tipico per collegare un controllo (ad esempio GridView) ai dati consiste nel creare un metodo che recupera i dati tramite un DataReader e quindi restituisce i dati dal metodo tramite un'interfaccia IDataReader. Il componente incorporato SAP Crystal Report Designer può accedere a IDataReader se sono soddisfatte alcune condizioni: ● I dati devono essere restituiti da un metodo, tramite l'interfacciaIDataReader. ● Il provider dei dati utilizzato nel metodo deve essere OleDb .NET. Nota le classi per questo provider di dati si trovano nello spazio dei nomi System.Data.OleDb. ● Il metodo deve essere condiviso [Visual Basic] oppure statico [C#]. ● La classe che contiene il metodo deve far parte di un progetto di libreria di classi ed essere compilato in un assembly. Per creare un report Crystal che utilizzi un'istanza di IDataReader come origine dati, è necessario creare una libreria di classi con un metodo statico che restituisca un oggetto IDataReader. Dopo la compilazione della libreria di classi, l'assembly così ottenuto potrà essere utilizzato come origine dati per il report. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 143 Nota non sarà possibile impostare l'origine dati del report su IDataReader finché la libreria di classi non viene creata e compilata. Informazioni correlate Esercitazione: Connessione a IdataReader [pagina 486] 1.4.4.3 Connessione ai DataSet ADO.NET Un oggetto set di dati ADO.NET è un insieme di classi di set di dati create nella memoria. È possibile creare un set di dati ADO.NET da diverse origini dati, inclusi i database Access, Oracle e SQL Server, utilizzando Visual Studio ADO.NET Data Set Designer, che fornisce una visualizzazione grafica del database con relative tabelle, campi e tipi. È possibile trascinare le tabelle da Esplora server in un file di schema sulla scheda Schema del designer. Per creare un report Crystal che utilizzi un set di dati ADO.Net come origine dati, è necessario creare una libreria di classi con un metodo o una proprietà statica che restituisca un oggetto DataSet. Dopo la compilazione della libreria di classi, l'assembly così ottenuto potrà essere utilizzato come origine dati per il report. Nota non sarà possibile impostare l'origine dati del report su DataSet finché la libreria di classi non viene creata e compilata. Utilizzo di un DataSet I DataSet sono utili nei seguenti casi: ● I dati all'interno del DataSet devono essere modificati dopo l'esecuzione della query. ● È necessario unire tramite join dati di diverse origini dati. Nota i DataSet sono una rappresentazione XML dei dati, provenienti in genere da un database. Un DataSet non è equivalente a una singola tabella di un database, bensì a un gruppo di tabelle. Ciò comporta un potenziale problema di scalabilità per i report. Se un report recupera più tabelle in un DataSet ed è richiesto un join tra tali tabelle, il report deve eseguire l'elaborazione del join mentre interagisce con ogni singola tabella. Questo processo non è efficiente. È pertanto sempre consigliabile inserire le istruzioni di join nella query utilizzata per compilare il DataSet. Il risultato sarà costituito da una singola pseudo tabella costituita dai dati precedentemente uniti tramite join nel DataSet. In questo modo il report potrà gestire esclusivamente la visualizzazione dei dati. 144 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Informazioni correlate Esclusione di DataSet dalle query semplici [pagina 66] Memorizzazione nella cache di DataSet [pagina 67] Esercitazione: Connessione ai DataSet ADO.NET [pagina 475] 1.4.4.4 Connessione agli insiemi di oggetti SAP Crystal Reports 2008 consente di creare report da dati oggetto. I dati oggetto possono essere semplici, ad esempio una stringa o un valore intero, oppure complessi, come una classe o un insieme. Gli insiemi devono essere una matrice semplice o un oggetto IEnumerable. SAP Crystal Reports accede a tali insiemi di oggetti come a una normale origine dati, consentendo l'uso di una origine dati versatile per i report Crystal. All’interno di un insieme di oggetti è possibile scrivere una classe personalizzata che compili un oggetto con i dati sia a livello di codice che dinamicamente. È inoltre possibile scrivere i propri oggetti di accesso ai dati ampliando il numero di origini dati fornite con un'installazione predefinita di SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. Per utilizzare un insieme di oggetti come origine dati, è necessario creare una classe che esponga almeno una proprietà pubblica. Se la proprietà restituisce dati semplici, ad esempio una stringa o valori interi, SAP Crystal Reports tratterà tali dati come un campo di database. Se la proprietà restituisce dati complessi, ad esempio un oggetto ArrayList, ciascun oggetto dell'insieme di oggetti fornirà una riga di dettagli nel report. Accesso ai dati negli oggetti Le versioni precedenti di SAP Crystal Reports consentono di accedere alle proprietà che restituiscono solo dati di tipo semplice. Ad esempio, se un oggetti contiene una proprietà che restituisce una stringa, tale stringa viene esposta come campo regolare in fase di progettazione. Ma se l'oggetto contiene una proprietà che restituisce un oggetto, i dati contenuti nell'oggetto restituito non verranno esposti anche se contengono dati semplici. SAP Crystal Reports 2008 e le versioni successive consentono di accedere ai dati contenuti nei dati complessi mediante espansioni di tipo complesso. In fase di progettazione l'oggetto restituito apparirà come origine dati gerarchica. I dati complessi possono essere espansi in modo tale da visualizzare i dati di tipo semplice esposti, che potranno quindi essere aggiunti al report. Per consentire l'espansione dei tipi complessi, aggiungere l'attributo CrystalComplexTypeExpansionLevels alla proprietà che restituisce l'oggetto che si desidera espandere. L'attributo CrystalComplexTypeExpansionLevels deve essere impostato su un valore maggiore di 1 per consentire il drill down sui dati della classe. Se l'attributo CrystalComplexTypeExpansionLevels non viene impostato, SAP Crystal Reports non sarà in grado di accedere ai dati del campo all'interno della classe. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 145 Esempio Esposizione di dati semplici In questo esempio vengono utilizzati due oggetti: Employee e Person. Quando l'oggetto Employee viene aggiunto al report come origine dati, la proprietà Employee.EmployeeID viene esposta come campo valido. Tuttavia, la proprietà Employee.Person non è visibile poiché restituisce dati di tipo complesso. Class Employee Private _employeeID As Integer Private _person As New Person() Public Property EmployeeID() As Integer Get Return _employeeID End Get Set(ByVal value As Integer) _employeeID = value End Set End Property Public ReadOnly Property Person() As Person Get Return _person End Get End Property End Class Class Person Private _name As String Public Property Name() As String Get Return _name End Get Set(ByVal value As String) _name = value End Set End Property End Class class Employee { int _employeeID; Person _person = new Person(); public int EmployeeID { get { return _employeeID; } set { _employeeID = value; } } public Person Person { get { return _person; } } } class Person { private String _name; public String Name { get { return _name; } set { _name = value; } } } 146 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Esempio Espansione dei tipi complessi Nell'esempio precedente la proprietà Employee.Person non è visibile poiché restituisce dati di tipo complesso. In questo esempio l'attributo CrystalComplexTypeExpansionLevels è stato aggiunto alla proprietà Employee.Person, che in fase di progettazione del report consentirà di visualizzare un nuovo campo in Explorer Campo: Person-Name. Class Employee Private _employeeID As Integer Private _person As New Person() Public Property EmployeeID() As Integer Get Return _employeeID End Get Set(ByVal value As Integer) _employeeID = value End Set End Property <CrystalDecisions.CrystalReports.Engine.CrystalComplexTypeExpansionLevels(1)> _ Public ReadOnly Property Person() As Person Get Return _person End Get End Property End Class Class Person Private _name As String Public Property Name() As String Get Return _name End Get Set(ByVal value As String) _name = value End Set End Property End Class class Employee { int _employeeID; Person _person = new Person(); public int EmployeeID { get { return _employeeID; } set { _employeeID = value; } } [CrystalDecisions.CrystalReports.Engine.CrystalComplexTypeExpansionLevels(1)] public Person Person { get { return _person; } } } class Person { private String _name; public String Name { get { return _name; } set { _name = value; } } Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 147 } Informazioni correlate Esercitazione: Connessione agli insiemi di oggetti [pagina 495] 1.4.4.5 Per attivare la memorizzazione dei report nella cache in un sito Web SAP Crystal Reports Queste operazioni richiedono l'utilizzo della funzionalità Smart Task. La funzionalità Smart Task è disponibile in Visual Studio 2005 e versioni successive. I progetti Windows che utilizzano Crystal Reports, versione per sviluppatori per Microsoft Visual Studio continuano a servirsi della stessa struttura per la memorizzazione nella cache utilizzata in Visual Studio .NET 2003. Ciò significa che quando si aggiunge un report a un progetto, vengono create due classi wrapper per il report: una classe report normale e una classe report memorizzata nella cache. Se per un report non vengono generate classi wrapper, la memorizzazione nella cache viene controllata attraverso la proprietà EnableCaching del controllo CrystalReportSource. 1. Creare un sito Web di Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. 2. Nella pagina Default.aspx selezionare la visualizzazione Origine. 3. Individuare il tag XML relativo al controllo CrystalReportSource. 4. Modificare il valore della proprietà EnableCaching da False a True. Nota Per informazioni dettagliate sulla memorizzazione dei report nella cache, sulla versione memorizzata nella cache della classe wrapper di un report e su quando è opportuno o meno utilizzare la memorizzazione nella cache, vedere Cache e persistenza del modello a oggetti ReportDocument [pagina 57]. Esempio <CR:CrystalReportSource ID="myCrystalReportSource" runat="server" EnableCaching="True"> <Report FileName="CrystalReport1.rpt"> </Report> </CR:CrystalReportSource> 1.4.4.6 Utilizzo di LINQ LINQ (Language Integrated Query) è un componente di Microsoft Framework che consente di eseguire query su qualsiasi origine dati. 148 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net In SAP Crystal Reports è possibile creare report per un insieme di oggetti personalizzati. Ciò consente di avere maggior controllo sulle modalità di visualizzazione delle informazioni in un report. Tuttavia, l'organizzazione di un insieme di oggetti può diventare complicata se l'insieme contiene dati aggregati provenienti da più origini dati. LINQ semplifica il processo di creazione di report per un insieme di oggetti e consente di eseguire query di tipo SQL sugli oggetti personalizzati. Si supponga ad esempio di utilizzare un database SQL, un file XML e un file di Microsoft Access contenente dati relativi alle vendite. LINQ consente di eseguire query da tutte e tre le origini dati e di visualizzare i dati in un unico report. Con LINQ è possibile effettuare le seguenti operazioni: ● Assemblare un insieme di oggetti provenienti da più origini dati. ● Unire due insiemi di oggetti. ● Raggruppare gli elementi di un insieme. Per utilizzare LINQ con SAP Crystal Reports è necessario che i seguenti prodotti software siano installati: ● Visual Studio 2008 o versione successiva. ● Microsoft .NET Framework versione 3.5 ● SAP Crystal Reports Basic per Visual Studio 2008 o versione successiva. Informazioni correlate Impostazione dell'origine dati [pagina 138] 1.4.5 Visualizzazione di un report Il controllo CrystalReportViewer viene utilizzato per visualizzare i report Crystal. Esistono due controlli CrystalReportViewer nell'SDK di SAP Crystal Reports .NET. Per un sito Web si utilizza la classe CrystalDecisions.Web.CrystalReportViewer. Per un'applicazione Windows si utilizza la classe CrystalDecisions.Windows.Forms.CrystalReportViewer. Per poter visualizzare un report, è necessario innanzitutto aggiungere un controllo CrystalReportViewer all'applicazione e quindi assegnare la proprietà ReportSource di tale controllo a un report. Il processo di assegnazione di un report a un controllo CrystalReportViewer è definito collegamento del report. Esistono diversi modi per collegare un controllo CrystalReportViewer a un report. Questa sezione fornisce una descrizione dettagliata di ogni scenario di collegamento del report nonché considerazioni generali sulla visualizzazione dei report. Classi utilizzate per la visualizzazione dei report ● CrystalDecisions.Windows.Forms.CrystalReportViewer Fornisce le proprietà, i metodi e gli eventi che modificano o recuperano le informazioni relative all'aspetto del controllo CrystalReportViewer e alle relative funzioni. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 149 ● CrystalDecisions.Web.CrystalReportViewer Fornisce le proprietà, i metodi e gli eventi che modificano o recuperano le informazioni relative all'aspetto del controllo CrystalReportViewer e alle relative funzioni. ● CrystalDecisions.CrystalReports.Engine.ReportDocument Rappresenta un report e contiene le proprietà e i metodi per definire, formattare, caricare, esportare e stampare il report. Informazioni correlate Modalità di utilizzo dei controlli dei visualizzatori report [pagina 42] Controllo CrystalReportViewer [pagina 41] Scenari di collegamento dei report [pagina 154] 1.4.5.1 Confronto tra i report incorporati e quelli non incorporati Differenza tra i report incorporati e i report non incorporati Un report incorporato è un report che è stato importato o creato all'interno di un progetto Visual Studio. Quando un report viene incorporato nel progetto, viene generata automaticamente una classe wrapper appropriata. Questo consente di accedere al report in base al nome, invece che tramite un'istanza di ReportDocument separata. Un report non incorporato è invece un report esterno al progetto Visual Studio. Sono disponibili diversi modi per accedere al report e per caricarlo in un modello a oggetti, al fine di consentirne l'interazione a livello di codice. Tuttavia, il report resterà sempre esterno al progetto Visual Studio. Funzionamento di un report incorporato Quando il report viene importato o creato all'interno del progetto, viene creata una classe wrapper con lo stesso nome del report. Tale classe wrapper racchiude o rappresenta il report nel progetto. In questi casi, il codice presente nel progetto interagisce con la classe di report creata per rappresentare il report anziché con il file di report originale. Durante la compilazione del progetto sia il report che la relativa classe wrapper vengono incorporati nell'assembly, come avviene con qualsiasi altra risorsa del progetto. Nota .Net Framework prevede restrizioni di dimensione per i file DLL. Il progetto non può quindi essere compilato se contiene report incorporati di grandi dimensioni. Per i progetti che includono report di grandi dimensioni, disattivare i dati salvati nel report o modificare il progetto per utilizzare report non incorporati. Il limite di 150 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net dimensione varia per ciascuna versione di .Net Framework. Per ulteriori informazioni, consultare la documentazione di .Net Framework. La classe wrapper di un report deriva dalla classe base comune ReportDocument e ne eredita tutte le proprietà e i metodi. ReportDocument rappresenta la classe principale del modello a oggetti ReportDocument. Funzionamento di un report non incorporato L'accesso a un report non incorporato viene effettuato sempre dall'esterno. Inoltre, esistono diversi modi per rendere accessibile tale report all'SDK: ● Il report potrebbe trovarsi sul disco rigido nel percorso directory di un file. ● Il report potrebbe essere esposto come Servizio Web report. ● Il report potrebbe appartenere a un gruppo di report esposti tramite Crystal Services. Poiché i report non incorporati non vengono mai importati nel progetto, non viene mai creata una classe wrapper del report, come invece accade per i report incorporati. Il report non incorporato viene caricato in fase di esecuzione in uno dei modelli a oggetti, con il rispettivo metodo utilizzato da ciascuno di essi: ● Il modello a oggetti ReportDocument utilizza il metodo ReportDocument.Load() per caricare il report al suo interno. ● Il modello a oggetti CrystalReportViewer utilizza la proprietà CrystalReportViewer.ReportSource per collegare il report direttamente al controllo. Scelta dei report incorporati o non incorporati Se si desidera semplificare la distribuzione del progetto, è necessario utilizzare report incorporati. Ciò implica l'utilizzo di un numero minore di file ed evita eventuali problemi di collocazione dei report in un percorso della directory di file non corretto. Questa soluzione offre anche maggiore protezione, in quanto i report non sono esposti a modifiche. I report incorporati offrono semplicità e protezione, ma richiedono anche l'esecuzione di operazioni aggiuntive, in quanto non possono essere modificati senza ricompilare l'intero progetto. Nel caso in cui i report debbano essere modificati periodicamente, è necessario non incorporarli, al fine di semplificarne l'accesso e la modifica ed evitare problemi legati alla necessità di ricompilare ogni volta l'assembly. Esiste inoltre un limite alle dimensioni di un report incorporato. Non è possibile compilare report di dimensioni molto grandi come risorsa incorporata. Nell'ambito della descrizione degli scenari di collegamento dei report vengono illustrati i diversi metodi per collegare report incorporati e non incorporati. Viene inoltre descritta la modalità di utilizzo di ReportDocument come classe generica per i diversi tipi di report. Ciò consente di ridurre notevolmente le modifiche apportate al codice, nel caso si decida di cambiare approccio. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 151 Incorporamento di report in un progetto Web Il supporto dei report incorporati viene attivato tramite l'uso di un provider di build che compila i report in un file DLL. Per incorporare il report in un file DLL in fase di compilazione, è necessario impostare embedRptInResource su true nel file web.config. Per accedere alla classe wrapper tramite Intellisense, è necessario posizionare il report nella cartella App_Code/Global della soluzione. Nota se il report si trova nella directory App_Code/Global e embedRptInResource è impostata su false, il file di report non verrà copiato nel percorso di destinazione quando si pubblica il sito Web. Per evitare il problema, copiare il sito Web nella destinazione. embedRptInResource Posizione del report True App_Code/Global True All'esterno di Intellisense disponibile X Pubblicazione per la Copia per la distribuzione distribuzione X X X X X X App_Code/Global, ma nel progetto False App_Code/Global False All'esterno di X X App_Code/Global, ma nel progetto Informazioni correlate Configurazione del file Web.Config [pagina 19] 1.4.5.2 Impostazione dell'origine del report Il controllo CrystalReportViewer consente di visualizzare un solo report alla volta, Per indicare al controllo il report da visualizzare, collegare la proprietà ReportSource del controllo a un report specifico. In fase di esecuzione, il controllo carica il report collegato alla proprietà ReportSource e lo visualizza. Un controllo CrystalReportViewer può essere collegato a un file su disco, a un oggetto ReportDocument o a un oggetto ReportClientDocument. Il collegamento a un oggetto fornisce ulteriori funzionalità attraverso i modelli a oggetti ReportDocument e ReportClientDocument. Questa è la procedura migliore per impostare la proprietà ReportSource. Nella sua forma più semplice, l'assegnazione si presenta come segue: crystalReportViewer1.ReportSource = "C:\WorldSalesReport.rpt" 152 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net crystalReportViewer1.ReportSource = "C:\\WorldSalesReport.rpt"; In questo caso, il report è collegato al controllo direttamente dal percorso nella directory del file. Controllo CrystalReportSource Il controllo CrystalReportSource fa parte del nuovo modello per lo sviluppo di applicazioni basato su tag fornito con ASP.NET versione 2.0. Nota il controllo CrystalReportSource è disponibile solo per i siti Web. Nella struttura del controllo DataSource, i controlli visivi .NET si connettono a controlli DataSource non visivi, ovvero controlli che non gestiscono informazioni relative alla visualizzazione. Questa nuova struttura di DataSource incapsula le informazioni sulla connettività dati scritte come righe di codice nei controlli .NET all'interno del Web Form. 1.4.5.2.1 Collegamento del controllo CrystalReportViewer a un file su disco Il modo più semplice per collegare un controllo CrystalReportViewer a un report Crystal è impostare la proprietà ReportSource su un percorso su disco. Il report non incorporato viene visualizzato quando viene eseguita l'applicazione. Ciò consente di collegare il report direttamente al controllo. La completa interazione con il report a livello di codice deve essere effettuata all'interno del modello a oggetti limitato CrystalReportViewer. 1. Aggiungere un controllo CrystalReportViewer all'applicazione Windows o al sito Web. 2. Aprire il Web Form o il Windows Form. 3. Dal menu Visualizza, scegliere Codice. 4. Impostare la proprietà ReportSource sul percorso del report nel file system locale. ○ Quando si utilizzano applicazioni Windows Form o siti Web: myCrystalReportViewer.ReportSource = "C:\MyReport.rpt" crystalReportViewer.ReportSource = "C:\\MyReport.rpt"; ○ Quando si utilizza un'applicazione WPF: myCrystalReportViewer.ViewerCore.ReportSource = "C:\MyReport.rpt" crystalReportViewer.ViewerCore.ReportSource = "C:\\MyReport.rpt"; Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 153 1.4.5.2.2 Collegamento del controllo CrystalReportViewer a un oggetto ReportDocument Questo scenario di collegamento dei report consente di utilizzare il modello a oggetti più potente, ovvero ReportDocument, con report non incorporati, ossia esterni al progetto. Anziché essere collegati direttamente al visualizzatore, i percorsi delle directory vengono passati nel metodo ReportDocument.Load(). Il controllo CrystalReportViewer viene quindi collegato all'oggetto ReportDocument. 1. Aggiungere un controllo CrystalReportViewer all'applicazione Windows o al sito Web. 2. Aprire il Web Form o il Windows Form. 3. Dal menu Visualizza, scegliere Codice. 4. Creare un'istanza di un nuovo oggetto ReportDocument e caricare un report dal disco utilizzando il metodo ReportDocument.Load. Dim rd As ReportDocument = New ReportDocument() rd.Load(reportPath) ReportDocument rd = new ReportDocument(); rd.Load(reportPath); 5. Impostare la proprietà ReportSource sull'oggetto ReportDocument. ○ Quando si utilizzano applicazioni Windows Form o siti Web: myCrystalReportViewer.ReportSource = rd crystalReportViewer.ReportSource = rd; ○ Quando si utilizza un'applicazione WPF: myCrystalReportViewer.ViewerCore.ReportSource = rd crystalReportViewer.ViewerCore.ReportSource = rd; 1.4.5.3 Scenari di collegamento dei report In SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio sono disponibili diversi modi per collegare un controllo CrystalReportViewer a un report. In questa sezione vengono riepilogati i vantaggi e gli svantaggi degli scenari consigliati e vengono illustrati i motivi per cui alcuni sono più utilizzati, per consentire di scegliere lo scenario di collegamento dei report più adatto alla propria applicazione. Nota La maggior parte dei siti Web o dei progetti Windows si basa sui due scenari di collegamento più semplici, il collegamento a un report incorporato e il collegamento a un report non incorporato. Dopo la lettura di questa sezione è possibile visualizzare l'elenco dettagliato di tutti gli scenari per esaminare in modo approfondito tutte le opzioni disponibili nell'SDK. 154 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Scenari di collegamento consigliati per SAP Crystal Reports Gli scenari che prevedono il collegamento dei report con il modello a oggetti ReportDocument vengono in genere preferiti rispetto agli scenari in cui è utilizzato il modello a oggetti CrystalReportViewer. Ciò accade perché il modello a oggetti ReportDocument fornisce un'API più completa per l'interazione con il report a livello di codice. La maggior parte degli utenti preferisce lo scenario Collegamento a una classe di report incorporati [pagina 182]. Sebbene non rappresenti la soluzione migliore per ottimizzare le prestazioni, il metodo più semplice da utilizzare è il seguente: aggiungere un report al progetto in modo da creare una classe wrapper del report, creare un'istanza di tale classe e passarla al controllo CrystalReportViewer. Poiché la classe wrapper del report eredita dalla classe base ReportDocument, si ha accesso alla funzionalità completa del modello a oggetti ReportDocument. Un'altra procedura eseguita di frequente per collegare i report è descritta in Collegamento a un report non incorporato caricato nella classe ReportDocument [pagina 184]. Anche questa procedura garantisce l'accesso alla funzionalità completa del modello a oggetti ReportDocument ma offre il vantaggio ulteriore derivante dai report non incorporati, ossia la possibilità di modificare i report senza dover ricompilare l'applicazione. Scenari di collegamento consigliati per Report Application Server (RAS) Per RAS è possibile utilizzare ulteriori scenari di collegamento dei report, in base alla configurazione del progetto. ● Se si utilizza SAP Crystal Reports 10 con RAS 10, è possibile trasferire i progetti creati originariamente con SAP Crystal Reports (utilizzando report incorporati) in RAS e nel modello a oggetti ReportClientDocument, con l'aggiunta solo di altre due righe di codice richieste per ogni report. ● Per ottimizzare il suddetto scenario, eseguire copie dei report incorporati sul server RAS e fare in modo che il server utilizzi tali copie. Scenari di collegamento consigliati per SAP Crystal Reports Server o la piattaforma SAP BusinessObjects Business Intelligence Se è stato eseguito l'aggiornamento a SAP Crystal Reports Server o alla piattaforma SAP BusinessObjects Business Intelligence, sono disponibili quattro scenari consigliati per il collegamento dei report. Lo scenario da utilizzare è determinato dalle diverse esigenze di scalabilità e modifica dei report: ● È possibile visualizzare un report, senza apportare alcuna modifica a livello di codice, per ottenere la massima velocità e il massimo livello di prestazioni. ● È possibile modificare il report a livello di codice nell'ambito del processo di visualizzazione, mediante l'accesso al modello a oggetti ReportClientDocument. ● Se si utilizza SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio con SAP Crystal Reports Server o con la piattaforma SAP BusinessObjects Business Intelligence, è possibile trasferire i progetti creati originariamente con SAP Crystal Reports (utilizzando report incorporati) in SAP Crystal Reports Server o nella piattaforma SAP BusinessObjects Business Intelligence conservando il codice dei report esistente. Questa operazione può essere eseguita mediante la pubblicazione dei report incorporati in SAP Crystal Reports Server o nella piattaforma SAP BusinessObjects Business Intelligence. ● È possibile accedere al report come a un'istanza di InfoObject nella struttura di piattaforma, con la possibilità di pianificare il report e di modificarne i parametri. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 155 Informazioni correlate Controlli dei visualizzatori report [pagina 34] 1.4.5.3.1 Collegamento dei report con il modello a oggetti CrystalReportViewer Il modello CrystalReportViewer è il più semplice dei modelli a oggetti. A causa delle funzionalità limitate, a questo modello a oggetti viene in genere preferito il modello a oggetti ReportDocument, che risulta più completo. Informazioni correlate Modello a oggetti CrystalReportViewer [pagina 35] Collegamento a un percorso della directory di file tramite codice [pagina 156] 1.4.5.3.1.1 Collegamento a un percorso della directory di file tramite codice Modello a oggetti In questo scenario di collegamento dei report viene utilizzato il modello a oggetti CrystalReportViewer. Posizione dei report I report si trovano nella directory di un file. Descrizione Si tratta dello scenario di collegamento dei report più semplice: un report situato nella directory di un file viene collegato al controllo CrystalReportViewer mediante la relativa stringa di percorso. 156 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Vantaggi ● Bassa manutenzione: è possibile aggiungere, rimuovere o modificare i report senza ricompilare l'applicazione. ● Implementazione semplificata: non è necessario dichiarare le classi né crearne istanze. Consente di evitare l'utilizzo del modello a oggetti ReportDocument, passando un report direttamente al controllo CrystalReportViewer. Svantaggi ● Distribuzione limitata: in genere i report risiedono nello stesso computer dell'applicazione, a causa delle complicazioni che si verificano quando vengono concesse all'account utente ASPNET autorizzazioni per l'accesso a un altro computer della rete. ● Modello a oggetti limitato: questo scenario di collegamento rende disponibile solo il modello a oggetti limitato che fa parte di CrystalReportViewer. Informazioni correlate Collegamento a un percorso della directory di file mediante la finestra Proprietà [pagina 158] 1.4.5.3.1.1.1 Collegamento del controllo CrystalReportViewer a un file su disco Il modo più semplice per collegare un controllo CrystalReportViewer a un report Crystal è impostare la proprietà ReportSource su un percorso su disco. Il report non incorporato viene visualizzato quando viene eseguita l'applicazione. Ciò consente di collegare il report direttamente al controllo. La completa interazione con il report a livello di codice deve essere effettuata all'interno del modello a oggetti limitato CrystalReportViewer. 1. Aggiungere un controllo CrystalReportViewer all'applicazione Windows o al sito Web. 2. Aprire il Web Form o il Windows Form. 3. Dal menu Visualizza, scegliere Codice. 4. Impostare la proprietà ReportSource sul percorso del report nel file system locale. ○ Quando si utilizzano applicazioni Windows Form o siti Web: myCrystalReportViewer.ReportSource = "C:\MyReport.rpt" crystalReportViewer.ReportSource = "C:\\MyReport.rpt"; ○ Quando si utilizza un'applicazione WPF: myCrystalReportViewer.ViewerCore.ReportSource = "C:\MyReport.rpt" Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 157 crystalReportViewer.ViewerCore.ReportSource = "C:\\MyReport.rpt"; 1.4.5.3.1.2 Collegamento a un percorso della directory di file mediante la finestra Proprietà Modello a oggetti In questo scenario di collegamento dei report viene utilizzato il modello a oggetti CrystalReportViewer. Posizione dei report I report vengono memorizzati in una directory di file. Descrizione Si tratta di una versione alternativa dello scenario più semplice di collegamento dei report descritto in Collegamento a un percorso della directory di file tramite codice [pagina 156]. Un report situato nella directory di file viene collegato al controllo CrystalReportViewer in base alla relativa stringa di percorso. Nella finestra Proprietà viene tuttavia impostata direttamente la proprietà ReportSource oppure la proprietà DataBindings>ReportSource. Nel caso di un progetto Web, la stringa di percorso del report viene inserita direttamente nell'HTML della pagina ASPX anziché nel codice della classe di codice sottostante. Vantaggi ● Anteprima in fase di progettazione: il report può essere visualizzato in anteprima durante la fase di progettazione, all'interno del Web Form o del Windows Form. Nota La funzione per la visualizzazione in anteprima in fase di progettazione è già da tempo disponibile per i siti Web, ma rappresenta una novità per i progetti Windows. ● Bassa manutenzione: è possibile aggiungere, rimuovere o modificare i report senza ricompilare l'applicazione. ● Implementazione semplificata: non è necessario dichiarare le classi né crearne istanze. Consente di evitare l'utilizzo del modello a oggetti ReportDocument, passando un report direttamente al controllo CrystalReportViewer. 158 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Svantaggi ● Nel caso di un'applicazione Web, poiché il collegamento avviene nella pagina HTML, è necessario chiamare il metodo DataBind() per il controllo CrystalReportViewer nella classe di codice sottostante. Nota Questa limitazione è stata eliminata in SAP Crystal Reports per Visual Studio 2005. ● Distribuzione limitata: in genere i report risiedono nello stesso computer dell'applicazione, a causa delle complicazioni che si verificano quando vengono concesse all'account utente ASPNET autorizzazioni per l'accesso a un altro computer della rete. ● Modello a oggetti limitato: questo scenario di collegamento rende disponibile solo il modello a oggetti limitato che fa parte di CrystalReportViewer. Informazioni correlate Collegamento a un controllo CrystalReportSource (siti Web in Visual Studio) [pagina 160] 1.4.5.3.1.2.1 Per eseguire il collegamento a un percorso della directory di file mediante la finestra Proprietà 1. Creare un nuovo progetto Web o Windows. 2. Dalla casella degli strumenti trascinare un controllo CrystalReportViewer nel Web Form o nel Windows Form. 3. Fare clic sul controllo CrystalReportViewer per selezionarlo. 4. Nella finestra Proprietà assegnare la stringa di un percorso della directory di file alla proprietà ReportSource. Nota Il percorso della directory di file punta ai report di esempio forniti con Visual Studio 2005. La funzione per l'anteprima in fase di progettazione determinerà la visualizzazione del report in modalità anteprima. C:\Programmi\Microsoft Visual Studio 8.0\Crystal Reports\Samples\En\Reports \Feature Examples\Hierarchical Grouping.rpt 5. Per visualizzare il report, creare ed eseguire il progetto. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 159 1.4.5.3.1.3 Collegamento a un controllo CrystalReportSource (siti Web in Visual Studio) Modello a oggetti In questo scenario di collegamento dei report viene utilizzato il modello a oggetti CrystalReportViewer. Posizione dei report I report vengono memorizzati in una directory di file. Descrizione Si tratta di una versione alternativa dello scenario più semplice di collegamento dei report descritto in Collegamento a un percorso della directory di file tramite codice [pagina 156]. In questo scenario il report viene collegato mediante il nuovo modello per lo sviluppo di applicazioni basato su tag e codice ridotto disponibile in ASP.NET versione 2.0. Nota Questo scenario di collegamento dei report è disponibile solo per i siti Web. In questo scenario si utilizzano Smart Task per creare un controllo CrystalReportSource, quindi si seleziona un report per il controllo creato. Anziché scrivere manualmente il codice per interagire con il report e consentirne l'accesso al modello a oggetti CrystalReportViewer, si effettuano selezioni dal riquadro Smart Task (in visualizzazione Progettazione) oppure si immette direttamente codice XML dichiarativo (in visualizzazione Origine). Grazie al codice XML dichiarativo, è possibile associare i tag <Parameters> e <DataSources> nidificati all'interno del tag <Report> a un'ampia gamma di controlli non visivi disponibili nelle strutture Parameter e DataSource. Nota Le strutture Parameter e DataSource sono nuove funzioni di ASP.NET 2.0 e includono una serie di controlli tra cui: ControlParameter o QueryStringParameter e SqlDataSource o JetDataSource. Il modello per lo sviluppo di applicazioni basato su tag offre un metodo semplice e rapido per un'interazione limitata con il report, che non implica la necessità di scrivere codice. 160 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Vantaggi ● Anteprima in fase di progettazione: il report può essere visualizzato in anteprima durante la fase di progettazione, all'interno del Web Form o del Windows Form. ● Maggiore facilità nella creazione di un'interazione con i report: l'approccio semplificato, associato all'impiego di una quantità ridotta di codice che caratterizza il modello per lo sviluppo di applicazioni basato su tag può essere utilizzato per interag ● Stessi vantaggi elencati in Collegamento a un percorso della directory di file tramite codice [pagina 156]. Svantaggi ● Distribuzione limitata: in genere i report risiedono nello stesso computer dell'applicazione, a causa delle complicazioni che si verificano quando vengono concesse all'account utente ASPNET autorizzazioni per l'accesso a un altro computer della rete. ● Modello a oggetti limitato: questo scenario di collegamento rende disponibile solo il modello a oggetti limitato che fa parte di CrystalReportViewer. 1.4.5.3.1.3.1 Collegamento di un controllo CrystalReportSource mediante il modello Reduced Code 1. Trascinare un controllo CrystalReportViewer nel Web Form. 2. Nell'angolo superiore destro del controllo CrystalReportViewer, fare clic sul piccolo pulsante triangolare. Viene aperto il riquadro Smart Task CrystalReportViewer Tasks. Nell'elenco Scegli un'origine report è visualizzata l'opzione <Nessuno>. 3. Fare clic sull'elenco Scegli un'origine report e selezionare <Nuova origine report...>. Viene visualizzata la finestra di dialogo Crea un'origine report. 4. Nella casella di testo Specifica un nome per il controllo, lasciare impostata la voce predefinita CrystalReportSource1. 5. Fare clic sull'elenco Specifica un report per il controllo CrystalReportSource e selezionare <Sfoglia…> . In alternativa, selezionare <Nuovo report>. Questa opzione consente di creare un nuovo report Crystal. 6. Selezionare un report da visualizzare nel controllo CrystalReportViewer e fare clic su OK. 7. Fare nuovamente clic su OK per chiudere la finestra di dialogo Scegli un'origine report. Informazioni correlate Esercitazione: Impostazione di un sito Web con codice ridotto con SAP Crystal Reports mediante Smart Task [pagina 440] Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 161 1.4.5.3.1.4 Collegamento all'URL di un servizio Web report Modello a oggetti In questo scenario di collegamento dei report viene utilizzato il modello a oggetti CrystalReportViewer. Posizione dei report La posizione dei report corrisponde a quella di un servizio Web report, ospitato su un server Web (in genere, remoto). Descrizione Un report, memorizzato su un altro server ed eseguito come servizio Web report, viene collegato al controllo CrystalReportViewer mediante il relativi URL. Vantaggi ● Ampia distribuzione: i report possono essere distribuiti ovunque su Internet. ● Estrema facilità di distribuzione: i servizi Web report si trovano sulla porta 80. È pertanto possibile accedervi anche mediante firewall. Svantaggi ● Modello a oggetti limitato: questo scenario di collegamento rende disponibile solo il modello a oggetti limitato che fa parte di CrystalReportViewer. Implementazione Nota questa procedura può essere utilizzata solo con progetti creati in base a quanto indicato in Impostazione di un progetto [pagina 16], che prevede riferimenti specifici allo spazio dei nomi e la configurazione di codice richiesta per questa procedura; non è possibile completare la procedura senza questa configurazione. 162 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ● All'interno del metodo ConfigureCrystalReports() creato durante i passaggi in Impostazione di un progetto [pagina 16], assegnare una stringa dell'URL del servizio Web report alla proprietà ReportSource della classe CrystalReportViewer. Ciò consente di collegare il report direttamente al controllo. La completa interazione con il report a livello di codice deve essere effettuata all'interno del modello a oggetti limitato CrystalReportViewer. myCrystalReportViewer.ReportSource = _ "http://localhost/TestProject/World_Sales_ReportService.asmx" crystalReportViewer.ReportSource = "http://localhost/TestProject/World_Sales_ReportService.asmx"; Nota Per utilizzare questo scenario di collegamento, creare un progetto Servizi Web report in Visual Studio. Informazioni correlate Utilizzo di Crystal Reports come servizio Web [pagina 79] 1.4.5.3.1.5 Scenari di collegamento a CrystalReportViewer basati sull'utilizzo di Crystal Services Utilizzo di Crystal Services in Visual Studio SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio consente l'accesso a livello di codice a File di server mediante Crystal Services. Utilizzo di Crystal Services in Visual Studio 2003 In Visual Studio 2003 è possibile accedere ai report Crystal tramite il nodo Crystal Services in Esplora server. Se SAP Crystal Reports e Crystal Services sono entrambi installati, quest'ultimo viene visualizzato come nodo secondario all'interno di ciascun server elencato in Esplora server. Il nodo Crystal Services si espande in modo da visualizzare gli elenchi di report situati in diverse posizioni: ● Directory dei file locali sul disco rigido. ● Report Application Server (RAS) ● Crystal Enterprise (CE) È possibile trascinare tutti i report di questi elenchi su un Web Form o un Windows Form. Crystal Services espone in genere due nodi secondari che possono essere espandibili, in base alla versione di SAP Crystal Reports attualmente installata e a eventuali altre licenze di cui si dispone per RAS (Report Application Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 163 Server) o Crystal Enterprise. Nella tabella contenuta nella sezione che segue vengono descritti i requisiti necessari per accedere a un particolare nodo. Può essere necessario adeguare le impostazioni del firewall per poter accedere al CMS della piattaforma SAP BusinessObjects Business Intelligence. La porta predefinita per il CMS è 6400. Rivolgersi all'amministratore del sistema per ulteriori informazioni sull'impostazione dell'indirizzo di rete e della porta per il sistema della piattaforma SAP BusinessObjects Business Intelligence. Per ulteriori informazioni sulla personalizzazione delle porte, consultare il Manuale dell'amministratore della piattaforma Business Intelligence SAP BusinessObjects. Classi wrapper Quando si trascina un report da Crystal Services in un Web Form o Windows Form, viene creata l'istanza di una classe wrapper che fa riferimento al report nell'area relativa al codice generato da Progettazione Web Form o Progettazione Windows Form della classe di codice sottostante. Nota Il tipo di classe wrapper varia nelle diverse versioni di SAP Crystal Reports. Fare riferimento alla tabella riportata di seguito. Gli esempi di Crystal Services elencati nella tabella seguente espongono tipi di classe wrapper non contenenti un modello a oggetti, in quanto dipendono dal modello a oggetti limitato fornito con il controllo CrystalReportViewer. Nella tabella che segue sono indicati gli esempi di Crystal Services inclusi in SAP Crystal Reports per Visual Studio 2003. i quali espongono gruppi di report situati nella directory dei file locali o nel server WCS (Web Component Server) di Crystal Enterprise. I report sono contenuti in due diverse classi wrapper: ServerFileReport per i report della directory dei file locali o EnterpriseReport per i report del server WCS di Crystal Enterprise. Tabella 7: Classe wrapper espo­ sta mediante Crystal Services Nome del nodo in Cry­ stal Services Versioni di SAP Cry­ stal Reports Descrizione Requisiti per accedere al nodo ServerFileReport File di server SAP Crystal Reports per Visual Studio .NET 2003 Espone i report della di­ rectory dei file locali tramite un servizio Web comune, ServerFileRe­ portService. Per ulte­ riori informazioni, ve­ dere Collegamento a File di server (VS .NET 2003) [pagina 165]. Configurare le autoriz­ zazioni per gli utenti ASPNET. (vedere Colle­ gamento a File di server (VS .NET 2003) [pa­ gina 165]). (il nodo viene sostituito quando si installa SAP Crystal Reports 9 o 10) 164 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Classe wrapper espo­ sta mediante Crystal Services Nome del nodo in Cry­ stal Services Versioni di SAP Cry­ stal Reports Descrizione Requisiti per accedere al nodo EnterpriseReport Crystal Enterprise SAP Crystal Reports per Visual Studio .NET 2003 Accede ai servizi Web report esposti dal ser­ ver WCS di Crystal En­ terprise 8, 8.5, 9 o 10 tramite un servizio Web comune, EnterpriseRe­ portService. Per ulte­ riori informazioni, ve­ dere Collegamento a Crystal Enterprise (VS .NET 2003) [pa­ gina 169]. È necessario accedere all'installazione di Cry­ stal Enterprise (che espone i report Enter­ prise tramite il server WCS). (il nodo viene sostituito quando si installa SAP Crystal Reports 9 o 10) 1.4.5.3.1.5.1 Collegamento a File di server (VS .NET 2003) Modello a oggetti In questo scenario di collegamento dei report viene utilizzato CrystalReportViewer. Posizione dei report I report si trovano in una cartella di report nella directory dei file locali. I report situati in questa posizione vengono esposti come servizi Web report. Panoramica di Crystal Services Questo scenario di collegamento dei report si applica ai report a cui si accede dal nodo Crystal Services in Esplora server. In questa sezione viene descritto il nodo secondario File di server di Crystal Services all'interno di Visual Studio .NET 2003. [SERVERNAME] ● Crystal Services ○ File di server Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 165 Descrizione Il nodo secondario File di server accede ai report esposti come servizi Web report da una directory dei file locali e li visualizza. Tali report vengono esposti con il protocollo dei servizi Web report. In Visual Studio .NET 2003, per accedere a File di Server, fare clic sul relativo nodo in Crystal Services. Vantaggi ● Accesso centrale ai report: offre un unico punto di accesso a tutti i report della directory dei report di esempio, che consente di creare un efficace repository di report nel disco rigido locale. Svantaggi ● Sostituito in SAP Crystal Reports 9 e 10 con un nodo Crystal Services RAS non gestito. Per ulteriori dettagli, vedere la precedente sezione Descrizione. ● Modello a oggetti limitato: questo scenario di collegamento rende disponibile solo il modello a oggetti limitato che fa parte di CrystalReportViewer. Configurazione di File di server File di server viene fornito come nodo di Crystal Services in SAP Crystal Reports per Visual Studio 2003. Quando SAP Crystal Reports 9 o 10 (versioni complete) viene installato sulla versione inclusa con Visual Studio 2003, il nodo File di server non è più visibile. Tutte le versioni di SAP Crystal Reports Developer continuano a supportare File di server nell'SDK. È tuttavia necessaria la scrittura manuale di codice per utilizzare File di server in questa versione. Informazioni correlate Configurazione di File di server in Crystal Services [pagina 82] Collegamento a Crystal Enterprise (VS .NET 2003) [pagina 169] Utilizzo di Crystal Services [pagina 81] 1.4.5.3.1.5.1.1 Per installare Crystal Services È necessario che sia installato SAP Crystal Reports per Visual Studio 2003 sia installato. 166 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Crystal Services non viene installato per impostazione predefinita durante l'installazione di Visual Studio .NET 2003. In questa procedura si installerà Crystal Services dal CD di installazione di Visual Studio .Net 2003. 1. Nel CD di installazione di Microsoft Visual Studio .NET, individuare Crystal Reports. 2. Selezionare Servizio Web Crystal. 3. Fare clic sul pulsante Aggiorna. 1.4.5.3.1.5.1.2 Per utilizzare il nodo Crystal Services>File di server ● Installazione di SAP Crystal Reports per Visual Studio 2003 e verifica del relativo funzionamento. ● Oppure, installazione di SAP Crystal Reports 9 o versione successiva è installato e verifica del relativo funzionamento. Nota In SAP Crystal Reports 9 e 10 File di server è sostituito: non viene più visualizzato come nodo sotto Crystal Services. Tuttavia, è sempre possibile scrivere manualmente il codice di File di server. Nota questa procedura può essere utilizzata solo con progetti creati in base a quanto indicato in Impostazione di un progetto [pagina 16], che prevede riferimenti specifici allo spazio dei nomi e la configurazione di codice richiesta per questa procedura; non è possibile completare la procedura senza questa configurazione. 1. Dal menu Visualizza scegliere Altre finestre, quindi Esplora server. 2. Espandere Crystal Services, quindi File di server. 3. Selezionare un report nella struttura File di server e trascinarlo nel form. Nota Quando un report File di server viene inserito nel form, viene aggiunta un'istanza della classe ServerFileReport nell'area del form relativa al codice generato dalla finestra di progettazione. In seguito alla creazione di un'istanza e della configurazione delle classi che ereditano da System.ComponentModel.Component (ad esempio, ServerFileReport) all'interno dell'area di codice generato dalla finestra di progettazione, nella parte inferiore del form in visualizzazione Progettazione Nella parte inferiore del form visualizzazione Progettazione, viene visualizzato un oggetto serverFileReport1. 4. Passare alla visualizzazione del codice e aprire l'area relativa al codice generato da Progettazione Web Form o Progettazione Windows Form. All'interno di quest'area è stata creata un'istanza della classe ServerFileReport. È stata inoltre eseguita la configurazione di tale classe. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 167 5. All'interno del metodo ConfigureCrystalReports() creato durante i passaggi in Impostazione di un progetto, assegnare l'istanza di ServerFileReport alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = serverFileReport1 crystalReportViewer.ReportSource = serverFileReport1; Per visualizzare il report, creare ed eseguire il progetto. 1.4.5.3.1.5.1.3 Scrittura manuale del codice di File di server ● Installazione di SAP Crystal Reports per Visual Studio 2003 e verifica del relativo funzionamento. ● Oppure, installazione di SAP Crystal Reports 9 o versione successiva è installato e verifica del relativo funzionamento. Nota In SAP Crystal Reports 9 e 10 File di server è sostituito: non viene più visualizzato come nodo sotto Crystal Services. Tuttavia, è sempre possibile scrivere manualmente il codice di File di server. Nota questa procedura può essere utilizzata solo con progetti creati in base a quanto indicato in Impostazione di un progetto [pagina 16], che prevede riferimenti specifici allo spazio dei nomi e la configurazione di codice richiesta per questa procedura; non è possibile completare la procedura senza questa configurazione. 1. All'interno del metodo ConfigureCrystalReports() creato durante i passaggi in Impostazione di un progetto, dichiarare un'istanza di ServerFileReport. Dim myServerFileReport As CrystalDecisions.Shared.ServerFileReport = _ New CrystalDecisions.Shared.ServerFileReport() CrystalDecisions.Shared.ServerFileReport serverFileReport = new CrystalDecisions.Shared.ServerFileReport(); 2. Impostare la proprietà ObjectType di ServerFileReport su REPORT. myServerFileReport.ObjectType = CrystalDecisions. [Shared].EnumServerFileType.REPORT serverFileReport.ObjectType = CrystalDecisions.Shared.EnumServerFileType.REPORT; 3. Impostare la proprietà ReportPath di ServerFileReport sul report e sulla relativa sottodirectory. myServerFileReport.ReportPath = "\General Business\World Sales Report.rpt" serverFileReport.ReportPath = "\\General Business\\World Sales Report.rpt"; 4. Impostare la proprietà WebServiceURL di ServerFileReport sulla directory virtuale visualizzatori per la versione installata di SAP Crystal Reports. 168 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Nota In questo codice di esempio, la directory virtuale visualizzatori viene configurata per SAP Crystal Reports 10. myServerFileReport.WebServiceUrl = "http://localhost/crystalreportviewers10/ ServerFileReportService.asmx" serverFileReport.WebServiceUrl = "http://localhost/crystalreportviewers10/ ServerFileReportService.asmx"; 5. Impostare la proprietà ReportSource del controllo CrystalReportViewersull'istanza di ServerFileReport. myCrystalReportViewer.ReportSource = myServerFileReport crystalReportViewer.ReportSource = serverFileReport1; 1.4.5.3.1.5.2 Collegamento a Crystal Enterprise (VS .NET 2003) Lo scenario di collegamento fa riferimento a tecnologia esistente ed è indirizzato a utenti che già dispongono di un'installazione di Crystal Enterprise. Crystal Enterprise è stato sostituito da SAP Crystal Reports Server e dalla piattaforma SAP BusinessObjects Business Intelligence. modello a oggetti In questo scenario di collegamento dei report viene utilizzato CrystalReportViewer. Vedere Collegamento dei report con il modello a oggetti CrystalReportViewer [pagina 156]. Posizione dei report Il report è situato nel server WCS (Web Component Server) di Crystal Enterprise 8, 8.5, 9 o 10. I report del server WCS vengono esposti come servizi Web report tramite il servizio Web EnterpriseReportService.asmx. Questo servizio Web è situato nella directory virtuale visualizzatori di Web Component Server. Panoramica di Crystal Services Questo scenario di collegamento dei report si applica ai report a cui si accede dal nodo Crystal Services in Esplora server. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 169 In questa sezione viene descritto il nodo secondario Crystal Enterprise di Crystal Services. all'interno di Visual Studio .NET 2003. [SERVERNAME] ● Crystal Services ○ Crystal Enterprise Descrizione Il nodo secondario Crystal Enterprise accede ai report esposti come servizi Web report da un server WCS e li visualizza. Affinché il nodo secondario Crystal Enterprise possa accedere e visualizzare correttamente un elenco di report dal server WCS di Crystal Enterprise è necessario che vengano soddisfatte le seguenti condizioni: ● Sul server attualmente visualizzato in Esplora server è in esecuzione Crystal Enterprise 8 o 8.5. Nota Per connettersi a Crystal Enterprise 9 o versioni successive, è necessario aggiornare SAP Crystal Reports per Visual Studio 2003 a SAP Crystal Reports Developer (versione 9 o successiva). ● Il server WCS (Web Component Server) di Crystal Enterprise è installato sul server Crystal Enterprise. Nota Il server WCS è installato per impostazione predefinita in Crystal Enterprise 9 e 10. In Crystal Enterprise 8 e 8.5 il server WCS deve essere installato separatamente. ● Per configurare i servizi Web report sul server Crystal Enterprise 10, è necessario installare Visual Studio .NET 2003 sul server Crystal Enterprise, quindi eseguire la procedura di installazione personalizzata per aggiungere Crystal Services. Se l'amministratore di Crystal Enterprise non desidera installare una versione completa di Visual Studio .NET 2003 sul server Crystal Enterprise, è possibile procedere come segue: ○ Installare il modulo di unione managed.msm. ○ Individuare la directory virtuale visualizzatori sul computer di sviluppo e copiare il file EnterpriseReportService.asmx da questa directory alla directory virtuale visualizzatori del server. Dopo aver visualizzato correttamente i report in Crystal Services, selezionare un report, trascinarlo e rilasciarlo sul Web Form o il Windows Form. Una volta rilasciato sul form, il report viene racchiuso in una classe wrapper e visualizzato come istanza del report nella barra dei componenti. Nota Sono disponibili diversi tipi di classi wrapper del report a seconda dell'origine del report sul server e del protocollo di connessione. Essi variano in base alle diverse versioni di SAP Crystal Reports. 170 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Installazione di Crystal Services Crystal Services non viene installato per impostazione predefinita durante l'installazione di Visual Studio .NET 2003. Per aggiungerlo è necessario caricare il CD di installazione di Microsoft Visual Studio .NET, individuare Crystal Reports, selezionare Servizio Web Crystal e fare clic sul pulsante di aggiornamento. Vantaggi ● Semplicità di accesso ai report Crystal Enterprise da un'applicazione Web o Windows. Svantaggi ● Modello a oggetti limitato: questo scenario di collegamento rende disponibile solo il modello a oggetti limitato che fa parte del controllo CrystalReportViewer. Nota In SAP Crystal Reports 9 e 10 Crystal Services viene aggiornato a una classe wrapper e un protocollo di connessione diversi. Informazioni correlate Directory dei visualizzatori [pagina 14] Utilizzo di Crystal Services [pagina 81] Collegamento a File di server (Visual Studio 2005 e versioni successive) [pagina 172] 1.4.5.3.1.5.2.1 Per accedere a Crystal Services>Crystal Enterprise in Esplora server 1. Dal menu Visualizza scegliere Altre finestre, quindi Esplora server. 2. Se il server Crystal Enterprise utilizzato risiede su un computer diverso dal computer locale (configurazione consigliata): a. Fare clic con il pulsante destro del mouse su Server, quindi fare clic su Aggiungi server. b. Nel campo Computer della finestra di dialogo Aggiungi server, immettere il nome di rete del server Crystal Enterprise e fare clic su OK. c. All'interno del nodo Server, espandere il nodo secondario per il nuovo server aggiunto, quindi il nodo secondario Crystal Services in esso contenuto. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 171 d. Nella finestra di dialogo Connessione a Enterprise, immettere i valori nei campi Nome utente e Password, quindi fare clic su OK. 3. Se il server Crystal Enterprise risiede sul computer locale: a. All'interno del nodo Server, espandere il nodo secondario per il computer locale, quindi il nodo secondario Crystal Services in esso contenuto. b. Nella finestra di dialogo Connessione a Enterprise, immettere i valori nei campi Nome utente e Password, quindi fare clic su OK. Ora è possibile configurare Crystal Services>Crystal Enterprise nel progetto Web o Windows. 1.4.5.3.1.5.2.2 Per configurare un report Crystal Services>Crystal Enterprise questa procedura può essere utilizzata solo con progetti creati in base a quanto indicato in Impostazione di un progetto [pagina 16], che prevede riferimenti specifici allo spazio dei nomi e la configurazione di codice richiesta per questa procedura; non è possibile completare la procedura senza questa configurazione. 1. Selezionare un report dal nodo secondario Crystal Enterprise e trascinarlo nel Web Form o nel Windows Form. Nella parte inferiore del form all'interno della barra dei componenti verrà visualizzato un oggetto enterpriseReport1. 2. Passare alla visualizzazione del codice e aprire l'area relativa al codice generato di Progettazione Web Form o Progettazione Windows Form. Nota All'interno di quest'area è stata creata un'istanza della classe EnterpriseReport. È stata inoltre eseguita la configurazione di tale classe. 3. All'interno del metodo ConfigureCrystalReports() creato durante i passaggi in Impostazione di un progetto [pagina 16], assegnare l'istanza di EnterpriseReport alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = enterpriseReport1 crystalReportViewer.ReportSource = enterpriseReport1; 4. Per visualizzare il report, creare ed eseguire il progetto. 1.4.5.3.1.5.3 Collegamento a File di server (Visual Studio 2005 e versioni successive) Modello a oggetti In questo scenario di collegamento viene utilizzato il modello a oggetti CrystalReportViewer. 172 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Posizione dei report I report si trovano in una cartella di report nella directory dei file locali. I report situati in questa posizione vengono esposti come servizi Web report. Panoramica di File di server Questo scenario di collegamento dei report si applica ai report a cui si accede come File di server tramite un servizio Web. Descrizione Il servizio Web Server di file accede ai report che sono stati esposti come servizi Web report da una directory di file locale e li visualizza. In Visual Studio 2005 e versioni successive, è possibile accedere a File di server a livello di codice. Vantaggi ● Accesso centrale ai report: offre un unico punto di accesso a tutti i report della directory dei report di esempio, che consente di creare un efficace repository di report nel disco rigido locale. Svantaggi ● Modello a oggetti limitato: questo scenario di collegamento rende disponibile solo il modello a oggetti limitato che fa parte di CrystalReportViewer. Configurazione di File di server L'accesso a File di server in SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio viene eseguito a livello di codice. Tutte le versioni di SAP Crystal Reports Developer continuano a fornire supporto a livello di codice per File di server nell'SDK. Informazioni correlate Configurazione di File di server in Visual Studio 2005 e versioni successive [pagina 85] Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 173 1.4.5.3.1.5.3.1 Per scrivere manualmente il codice di File di server ● Configurazione di un servizio Web report che consente l'accesso ai File di server a livello di codice e verifica del relativo funzionamento. ● Oppure, installazione di SAP Crystal Reports Developer e verifica del funzionamento. Nota questa procedura può essere utilizzata solo con progetti creati in base a quanto indicato in Impostazione di un progetto [pagina 16], che prevede riferimenti specifici allo spazio dei nomi e la configurazione di codice richiesta per questa procedura; non è possibile completare la procedura senza questa configurazione. 1. All'interno del metodo ConfigureCrystalReports() creato durante i passaggi in Impostazione di un progetto [pagina 16], dichiarare un'istanza di ServerFileReport. Dim myServerFileReport As CrystalDecisions.Shared.ServerFileReport = _New CrystalDecisions.Shared.ServerFileReport() CrystalDecisions.Shared.ServerFileReport serverFileReport = new CrystalDecisions.Shared.ServerFileReport(); 2. Impostare la proprietà ObjectType di ServerFileReport su REPORT. myServerFileReport.ObjectType = CrystalDecisions. [Shared].EnumServerFileType.REPORT serverFileReport.ObjectType = CrystalDecisions.Shared.EnumServerFileType.REPORT; 3. Impostare la proprietà ReportPath di ServerFileReport sul report e sulla relativa sottodirectory. myServerFileReport.ReportPath = "\General Business\World Sales Report.rpt" serverFileReport.ReportPath = "\\General Business\\World Sales Report.rpt"; 4. Impostare la proprietà WebServiceURL di ServerFileReport sulla posizione del servizio Web report. Se SAP Crystal Reports Developer è installato, la posizione corrisponde alla directory virtuale visualizzatori della versione installata di SAP Crystal Reports. Vedere Directory dei visualizzatori [pagina 14]. Se SAP Crystal Reports Developer non è installato, la posizione corrisponde all'URL del servizio Web report creato in Configurazione di File di server in Visual Studio 2005 e versioni successive [pagina 85]. Nota Nel codice seguente la directory virtuale visualizzatori viene configurata per SAP Crystal Reports per Visual Studio 2005. myServerFileReport.WebServiceUrl = "http://localhost/CrystalReportsWebServices2005/ServerFileReportService.asmx" serverFileReport.WebServiceUrl = 174 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net "http://localhost/CrystalReportsWebServices2005/ServerFileReportService.asmx"; 5. Impostare la proprietà ReportSource del controllo CrystalReportViewersull'istanza di ServerFileReport. myCrystalReportViewer.ReportSource = myServerFileReport crystalReportViewer.ReportSource = serverFileReport1; 1.4.5.3.1.5.4 Collegamento a SAP Crystal Reports Server o alla piattaforma SAP BusinessObjects Business Intelligence (Visual Studio) modello a oggetti In questo scenario di collegamento dei report viene utilizzato CrystalReportViewer. Vedere Collegamento dei report con il modello a oggetti CrystalReportViewer [pagina 156]. Posizione dei report Il report è situato nel server WCS (Web Component Server) in SAP Crystal Reports Server o nella piattaforma SAP BusinessObjects Business Intelligence. I report del server WCS vengono esposti come servizi Web report tramite il servizio Web EnterpriseReportService.asmx. Questo servizio Web è situato nella directory virtuale visualizzatori di Web Component Server. Panoramica di Crystal Services Questo scenario di collegamento dei report si applica ai report a cui si accede dal nodo Crystal Services in Esplora server. In questa sezione viene descritto il nodo secondario SAP Crystal Reports Services di Crystal Services all'interno di Visual Studio. [SERVERNAME] ● SAP Crystal Reports Services ○ Report del server Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 175 Descrizione Il nodo secondario della piattaforma SAP BusinessObjects Business Intelligence accede ai report esposti come servizi Web report da un server WCS di una piattaforma SAP BusinessObjects Business Intelligence e li visualizza. Affinché il nodo secondario della piattaforma SAP BusinessObjects Business Intelligence possa accedere a un elenco di report dal server WCS della piattaforma SAP BusinessObjects Business Intelligence e visualizzarlo correttamente, è necessario che vengano soddisfatte le condizioni seguenti: ● Sul server attualmente visualizzato in Esplora server è in esecuzione la piattaforma SAP BusinessObjects Business Intelligence. ● Per configurare i servizi Web report nella piattaforma SAP BusinessObjects Business Intelligence è necessario installare Visual Studio nel server della piattaforma SAP BusinessObjects Business Intelligence, quindi eseguire la procedura di installazione personalizzata per aggiungere Crystal Services. Nota l'installazione del server della piattaforma SAP BusinessObjects Business Intelligence di Visual Studio e l'installazione personalizzata di Crystal Services sono operazioni necessarie per la corretta installazione e configurazione del file EnterpriseReportService.asmx nella directory virtuale dei visualizzatori. Se invece l'amministratore di Crystal Enterprise non desidera installare la versione completa di Visual Studio nel server della piattaforma SAP BusinessObjects Business Intelligence, è possibile procedere come segue: ○ Installare il modulo di unione managed.msm. ○ Individuare la directory virtuale visualizzatori sul computer di sviluppo e copiare il file EnterpriseReportService.asmx da questa directory alla directory virtuale visualizzatori del server. Dopo aver visualizzato correttamente i report in Servizi SAP BusinessObjects, è possibile collegare un controllo CrystalReportsViewer a uno qualsiasi dei report dell'elenco. Per ulteriori informazioni, consultare la documentazione relativa alla piattaforma SAP BusinessObjects Business Intelligence. Vantaggi ● Facilità di accesso ai report della piattaforma SAP BusinessObjects Business Intelligence da un'applicazione Web o Windows. Svantaggi ● Modello a oggetti limitato: questo scenario di collegamento rende disponibile solo il modello a oggetti limitato che fa parte del controllo CrystalReportViewer. Nota In SAP Crystal Reports 9 e 10 Crystal Services viene aggiornato a una classe wrapper e un protocollo di connessione diversi. 176 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Informazioni correlate Directory dei visualizzatori [pagina 14] Utilizzo di Crystal Services [pagina 81] Scelta del modello a oggetti appropriato al progetto [pagina 31] 1.4.5.3.1.5.4.1 To access Crystal Services>Server Reports in Server Explorer 1. From the View menu, click Other Windows, and then Server Explorer. 2. If your Crystal Enterprise server is on a machine other than your local machine (recommended): a. Right-click on Servers and click Add Server... b. In the Add Server dialog box, in the Computers field, enter the network name of the Crystal Enterprise server, and then click OK. c. Within the Servers node, expand the sub node for the new server you have added, and then within it expand the Crystal Services sub node. d. In the Enterprise Logon dialog box, enter values into the User name and Password fields, and then click OK. 3. If your Crystal Enterprise server is on your local machine: a. Within the Servers node, expand the sub node for your local machine, and then within it expand the Crystal Services sub node. b. In the Enterprise Logon dialog box, enter values into the User name and Password fields, and then click OK. You are now ready to configure the Crystal Services>Crystal Enterprise in your Web or Windows project. 1.4.5.3.1.6 Collegamento a ReportSource (SAP Crystal Reports Server o SAP BusinessObjects Enterprise 11) Nota Questa pagina descrive una funzionalità che non è disponibile in SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio ma che è invece disponibile in una delle versioni aggiornate. Modello a oggetti In questo scenario di collegamento dei report viene utilizzato il modello a oggetti CrystalReportViewer. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 177 Posizione dei report L'accesso ai report avviene da Page Server nella piattaforma SAP BusinessObjects Business Intelligence. Descrizione SAP Crystal Reports Server o la piattaforma SAP BusinessObjects Business Intelligence consente la distribuzione di report dai server situati nel framework Enterprise. Un report memorizzato in SAP Crystal Reports Server o nella piattaforma SAP BusinessObjects Business Intelligence può essere visualizzato da server differenti in momenti diversi, a seconda delle necessità. Se si desidera ottenere prestazioni ottimali durante la visualizzazione di un report e non sono necessarie modifiche significative a livello di codice, in SAP Crystal Reports Server o nella piattaforma SAP BusinessObjects Business Intelligence visualizzare il report direttamente da Page Server con la classe ReportSource. La classe ReportSource class non è associata a un modello a oggetti. Se si desidera modificare i parametri o le impostazioni del database, è possibile utilizzare il modello a oggetti limitato fornito con il controllo CrystalReportViewer. Tuttavia, per un'interazione a livello di codice più complessa con il report, utilizzare uno degli altri scenari di collegamento dei report di SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence. Nota Per un confronto tra diversi scenari che utilizzano server differenti in SAP Crystal Reports Server o nella piattaforma SAP BusinessObjects Business Intelligence, vedere gli scenari di collegamento consigliati per SAP Crystal Reports Server o per la piattaforma SAP BusinessObjects Business Intelligence nella sezione Scenari di collegamento dei report [pagina 154]. Può essere necessario adeguare le impostazioni del firewall per poter accedere al CMS della piattaforma SAP BusinessObjects Business Intelligence. La porta predefinita per il CMS è 6400. Rivolgersi all'amministratore del sistema per ulteriori informazioni sull'impostazione dell'indirizzo di rete e della porta per il sistema della piattaforma SAP BusinessObjects Business Intelligence. Per ulteriori informazioni sulla personalizzazione delle porte, consultare il Manuale dell'amministratore della piattaforma Business Intelligence SAP BusinessObjects. Vantaggi ● Estrema rapidità: prestazioni ottimali per la visualizzazione di un report di SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence. Svantaggi ● Modello a oggetti limitato: la modifica a livello programmatico dell'accesso al database o delle impostazioni dei parametri è limitata al modello a oggetti CrystalReportViewer. 178 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ● Disponibilità limitata: questo scenario è disponibile solo in Crystal Enterprise versione 10, SAP Crystal Reports Server o SAP BusinessObjects Enterprise XI. Informazioni correlate Collegamento dei report con il modello a oggetti ReportDocument [pagina 182] 1.4.5.3.1.6.1 Per collegare il controllo CrystalReportViewer a un report eseguito all'esterno di Page Server di SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence ● Installazione di SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence e verifica del relativo funzionamento. ● Installazione dell'SDK di SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence(inclusi gli assembly .NET) e verifica del relativo funzionamento. Nota Se nel computer di sviluppo è stata eseguita l'installazione di SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence, l'SDK sarà incluso nell'installazione. 1. Individuare e scrivere il nome di un server SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence. Ai fini di questo esempio, il nome del server è "BOE01". a. Per individuare il nome del server fare clic con il pulsante destro del mouse sull'icona Risorse del computer, quindi selezionare Proprietà. b. Nella finestra di dialogo Proprietà del sistema, fare clic sulla scheda ID della rete. c. Il nome del computer si trova nel campo "Nome computer completo". 2. Utilizzare Pubblicazione guidata per pubblicare la classe Chart.rpt nel server SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence. Nota Per informazioni su come utilizzare Pubblicazione guidata, consultare la documentazione per l'utente di SAP Crystal Reports Server o della piattaforma SAP BusinessObjects Business Intelligence. 3. Aggiungere al progetto i seguenti riferimenti relativi agli assembly: ○ CrystalDecisions.Enterprise.Framework ○ CrystalDecisions.Enterprise.InfoStore ○ CrystalDecisions.Enterprise.Viewing.ReportSource ○ CrystalDecisions.ReportAppServer.Controllers Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 179 4. Dal menu Visualizza, scegliere Codice per visualizzare la classe di codice sottostante relativa al Web Form o al Windows Form. Sopra la classe, aggiungere una dichiarazione "Imports" [Visual Basic] o "using" [C#] per lo spazio dei nomi CrystalDecisions.Enterprise. Imports CrystalDecisions.Enterprise Imports CrystalDecisions.Enterprise.Viewing Imports CrystalDecisions.ReportAppServer.Controllers using CrystalDecisions.Enterprise; using CrystalDecisions.Enterprise.Viewing; using CrystalDecisions.ReportAppServer.Controllers; 1.4.5.3.1.6.2 Per accedere a SAP Crystal Reports Server o SAP BusinessObjects Enterprise 1. Nel metodo ConfigureCrystalReports() (creato in Impostazione di un progetto [pagina 16] ) dichiarare una variabile di stringa serverName e impostarla sul nome del server SAP Crystal Reports Server o SAP BusinessObjects Enterprise. Dim serverName As String = "BOE01" string serverName = "BOE01"; 2. Dichiarare e creare un'istanza della classe SessionMgr. Dim mySessionMgr As SessionMgr = New SessionMgr() SessionMgr sessionMgr = new SessionMgr(); 3. Passare il nome utente (Administrator), la password (vuota), la variabile serverName e il tipo di accesso (secEnterprise) al metodo Logon dell'istanza di SessionMgr e recuperarla come un'istanza di EnterpriseSession. Dim myEnterpriseSession As EnterpriseSession = mySessionMgr.Logon( _ "Administrator", "", serverName, "secEnterprise") EnterpriseSession enterpriseSession = sessionMgr.Logon( "Administrator", "", serverName, "secEnterprise"); 4. Recuperare il servizio InfoStore (come EnterpriseService) dal metodo GetService di EnterpriseSession. Dim myEnterpriseService As EnterpriseService = _ myEnterpriseSession.GetService("InfoStore") EnterpriseService enterpriseService = enterpriseSession.GetService("InfoStore"); 5. Dichiarare e creare un'istanza di InfoStore e passare il servizio EnterpriseService recuperato a InfoStore come parametro. Dim myInfoStore As InfoStore = New InfoStore(myEnterpriseService) 180 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net InfoStore infoStore = new InfoStore(enterpriseService); 1.4.5.3.1.6.3 Per recuperare il report di raggruppamento gerarchico da SAP Crystal Reports Server o SAP BusinessObjects Enterprise 1. Per riassegnare il valore dell'istanza di EnterpriseService al servizio factory dei report di Page Server, passare la stringa "PSReportFactory" al metodo GetService() di EnterpriseService. myEnterpriseService = myEnterpriseSession.GetService("PSReportFactory") enterpriseService = enterpriseSession.GetService("PSReportFactory"); 2. Impostare di nuovo la proprietà Interface di EnterpriseService come variabile oggetto. Dim psrfObject As Object = myEnterpriseService.Interface Object psrfObject = enterpriseService.Interface; 3. Eseguire il cast della variabile oggetto in un'istanza di PSReportFactory. Dim myPSReportFactory As PSReportFactory = CType(psrfObject, PSReportFactory) PSReportFactory psReportFactory = (PSReportFactory)psrfObject; 4. Inserire la stringa di query riportata di seguito per ricercare il report in SAP Crystal Reports Server o SAP BusinessObjects Enterprise. Dim queryString As String = "Select SI_ID, SI_NAME, SI_PARENTID From CI_INFOOBJECTS " _ & "Where SI_PROGID='CrystalEnterprise.Report' " _ & "And SI_NAME Like 'Chart'" string queryString = "Select SI_ID, SI_NAME, SI_PARENTID From CI_INFOOBJECTS " + "Where SI_PROGID='CrystalEnterprise.Report' " + "And SI_NAME Like 'Chart'"; 5. Passare la stringa di query al metodo Query di InfoStore per recuperare una classe indicizzata InfoObjectscontenente il risultato della query. Dim myInfoObjects As InfoObjects = myInfoStore.Query(queryString) InfoObjects infoObjects = infoStore.Query(queryString); 6. Recuperare InfoObject dalla prima colonna della classe indicizzata InfoObjects. Dim myInfoObject As InfoObject = myInfoObjects(1) InfoObject infoObject = infoObjects[1]; Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 181 7. Dichiarare e compilare un'istanza di ReportSource dal metodo OpenReportSource() dell'istanza di PSReportFactory, passando la proprietà ID di InfoObject. Dim myReportSource As ReportSource = myPSReportFactory.OpenReportSource(myInfoObject.ID) ReportSource reportSource = psReportFactory.OpenReportSource(infoObject.ID); 8. Collegare l'istanza di ReportSource alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = myReportSource crystalReportViewer.ReportSource = reportSource; 9. Per visualizzare il report, creare ed eseguire il progetto. Il report è ora visualizzato da Page Server di SAP Crystal Reports Server o SAP BusinessObjects Enterprise in base al relativo ID. Se si utilizza un metodo alternativo per accedere a reportID (ad esempio la scelta dell'ID da un elenco di report in un controllo DropDownList), non sarà necessario eseguire una query di InfoStore e generare un InfoObject per recuperare reportID. 1.4.5.3.2 Collegamento dei report con il modello a oggetti ReportDocument ReportDocument rappresenta il modello a oggetti più efficace e completo fornito con SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. Si tratta del modello a oggetti più appropriato da utilizzare per lo sviluppo di un progetto con SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. 1.4.5.3.2.1 Collegamento a una classe di report incorporati Modello a oggetti In questo scenario di collegamento dei report viene utilizzato il modello a oggetti ReportDocument. Posizione dei report I report vengono incorporati nel progetto. Nota nelle versioni precedenti della presente documentazione i report incorporati venivano denominati report "con tipizzazione forte". Un report aggiunto o importato in un progetto Visual Studio è attualmente definito "incorporato". 182 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Descrizione In questo scenario un report viene incorporato nel progetto. Per incorporare un report, è possibile creare un nuovo report con SAP Crystal Reports Designer incorporato (contenuto in Visual Studio) oppure importare un report esistente nel progetto. Quando il report viene creato o importato, viene generata automaticamente una classe wrapper che ha la funzione di rappresentarlo. Questa classe è associata allo stesso nome del report. Poiché deriva dalla classe base ReportDocument, ne eredita tutte le proprietà e tutti i metodi: fa pertanto parte del modello a oggetti ReportDocument. Vantaggi ● Maggiore sicurezza: il report viene incorporato e distribuito pertanto come parte dell'applicazione. ● Ampia interazione a livello di programmazione: consente di accedere al potente modello a oggetti ReportDocument. ● Maggiore sicurezza: offre il massimo controllo sull'accesso alle origini report. ● Utilizzo diffuso: la maggior parte degli sviluppatori ritiene che questo scenario offra moltissimi vantaggi. Svantaggi ● Ulteriore attività di gestione: le modifiche apportate ai report richiedono la ricompilazione e la ridistribuzione dell'applicazione. 1.4.5.3.2.1.1 Per eseguire il collegamento a una classe di report incorporati Quando si crea o si importa un report, viene generata automaticamente una classe wrapper che ha la funzione di rappresentarlo. Questa classe è associata allo stesso nome del report. Poiché deriva dalla classe base ReportDocument, ne eredita tutte le proprietà e tutti i metodi: fa pertanto parte del modello a oggetti ReportDocument. 1. Aggiungere un controllo CrystalReportViewer a un Windows Form. Nota Tutte le versioni di SAP Crystal Reports supportano il collegamento a una classe di report incorporati per le applicazioni Windows. Alcune configurazioni forniscono il supporto per questo scenario di collegamento per i siti Web tramite un compilatore avanzato. 2. Aggiungere un report al progetto. In questo modo viene generata automaticamente una classe wrapper del report con lo stesso nome del report. 3. Creare un'istanza di tale classe. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 183 Dim myReport As New QuarterlySalesReport() QuarterlySalesReport myReport = new QuarterlySalesReport(); 4. Assegnarla alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = myReport crystalReportViewer.ReportSource = myReport; 1.4.5.3.2.2 Collegamento a un report non incorporato caricato nella classe ReportDocument Modello a oggetti In questo scenario di collegamento dei report viene utilizzato il modello a oggetti ReportDocument. Posizione dei report I report sono situati nella directory dei file. Descrizione Questo scenario di collegamento dei report consente di utilizzare il modello a oggetti più potente, ovvero ReportDocument, con report non incorporati, ossia esterni al progetto. In Collegamento a un percorso della directory di file tramite codice [pagina 156] viene eseguito il collegamento ai report in base alle rispettive stringhe di percorso della directory di file; tuttavia, anziché collegare i percorsi di directory direttamente al visualizzatore, effettuarne il passaggio al metodo ReportDocument.Load(). Ciò consente di utilizzare il modello a oggetti ReportDocument. Inoltre, poiché ogni report esterno viene caricato nella classe comune ReportDocument, è possibile sviluppare un processo di selezione dei report che condivida il codice comune di collegamento per tutti i report. Vantaggi ● Bassa manutenzione: è possibile aggiungere, rimuovere o modificare i report senza ricompilare l'applicazione. ● Ampia interazione a livello di programmazione: consente di accedere al potente modello a oggetti ReportDocument. 184 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ● Riduzione della scrittura di codice grazie alla condivisione: i report possono condividere il codice poiché sono situati tutti nella classe comune ReportDocument. Svantaggi ● Distribuzione limitata: i report devono trovarsi sullo stesso computer dell'applicazione. L'accesso da parte dell'account utente ASPNET del server Web ad altri server della rete è in genere limitato. ● Attività di distribuzione supplementare: i report devono essere distribuiti insieme all'applicazione nel percorso relativo corretto. ● Origine report meno sicura: esiste il rischio che i report vengano riposizionati o rimossi in fase di esecuzione dal computer di distribuzione. 1.4.5.3.2.2.1 Per eseguire il collegamento a un report non incorporato mediante il modello a oggetti ReportDocument Nota questa procedura può essere utilizzata solo con progetti creati in base a quanto indicato in Impostazione di un progetto [pagina 16], che prevede riferimenti specifici allo spazio dei nomi e la configurazione di codice richiesta per questa procedura; non è possibile completare la procedura senza questa configurazione. 1. All'inizio della classe aggiungere un'istruzione "Imports" [Visual Basic] o "using" [C#]] per lo spazio dei nomi CrystalDecisions.CrystalReports.Engine. Nota La dichiarazione di questo spazio dei nomi è necessaria per poter accedere alla classe ReportDocument senza un prefisso dello spazio dei nomi. Imports CrystalDecisions.CrystalReports.Engine using CrystalDecisions.CrystalReports.Engine; 2. Individuare il file World Sales Report.rpt nella sottodirectory General Business della versione in uso di SAP Crystal Reports. 3. Copiare il percorso completo della directory di file negli Appunti, incluso World Sales Report.rpt. 4. All'interno del metodo ConfigureCrystalReports() creato durante i passaggi in Impostazione di un progetto [pagina 16], dichiarare una variabile di stringa reportPath e assegnare una stringa che contiene il percorso della directory del file World Sales Report copiato nel precedente passaggio. Dim reportPath As String = _ "C:\Programmi\Microsoft Visual Studio 9.0\" _ & "Crystal Reports\Samples\En \Reports\General Business\" _ & "World Sales Report.rpt" Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 185 string reportPath = "C:\\Programmi\\Microsoft Visual Studio 9.0\\" + "Crystal Reports\\Samples\\En \\Reports\\General Business\\" + "World Sales Report.rpt"; 5. Sotto la dichiarazione della stringa, dichiarare un'istanza di ReportDocument. Dim myReportDocument As ReportDocument = New ReportDocument() ReportDocument reportDocument = new ReportDocument(); 6. Caricare la variabile di stringa. che contiene il percorso della directory di file, al report non incorporato in ReportDocument. myReportDocument.Load(reportPath) reportDocument.Load(reportPath); 7. Assegnare l'istanza di ReportDocument (contenente ora il report non incorporato caricato) alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = myReportDocument crystalReportViewer.ReportSource = reportDocument; 8. Per visualizzare il report, creare ed eseguire il progetto. 1.4.5.3.2.3 Collegamento a una classe di report incorporati e memorizzati nella cache Modello a oggetti In questo scenario di collegamento dei report viene utilizzato il modello a oggetti ReportDocument. Posizione dei report I report vengono incorporati nel progetto. Descrizione Quando un report viene incorporato in un progetto Visual Studio, viene generata automaticamente una classe wrapper del report che rappresenta il file di report nel progetto. Contemporaneamente, viene generata automaticamente anche una classe di utilità per la gestione della cache per tale report. 186 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net In questo scenario il controllo CrystalReportViewer viene collegato alla classe di utilità per la gestione della cache, in modo che la memorizzazione nella cache del report all'interno dell'oggetto Cache di ASP.NET venga gestita automaticamente. Memorizzazione nella cache L'operazione di memorizzazione nella cache ha un utilizzo limitato e specifico: se non viene gestita con attenzione può comportare un eccessivo sfruttamento delle risorse di sistema. Memorizzazione nella cache di report non incorporati Se si desidera gestire la memorizzazione nella cache di report non incorporati, è necessario creare una classe di utilità per la gestione della cache personalizzata. Per ulteriori informazioni, vedere Collegamento a un report non incorporato caricato in una classe di utilità per la gestione della cache [pagina 188]. Vantaggi ● Appositamente studiato per la condivisibilità: ideale per la memorizzazione dei report che presentano elevata condivisibilità e poche permutazioni nei parametri o nelle informazioni di accesso. ● Consente di ottimizzare l'accesso ai dati: se i report con elevata condivisibilità sono di dimensioni molto grandi o presentano una query talmente complessa da richiedere diversi minuti per il recupero, l'uso della classe di utilità per la gestione della Svantaggi ● Affaticamento del server: i report che rimangono nell'oggetto Cache di ASP.NET possono implicare un utilizzo eccessivo delle risorse di memoria del server. ● Problemi di persistenza: la cache dispone di alcune dipendenze che consentono di verificare le modifiche apportate in un'istanza del report e memorizzare nuovamente tale istanza nella cache. Tuttavia, l'istanza del report nell'oggetto Cache non viene aggiornata in base a eventuali modifiche apportate al database. ● Consumo di risorse: un report dotato di parametri che vengono chiamati frequentemente con differenti stringhe di parametro comporta ogni volta una nuova memorizzazione nella cache, in particolare se uno di tali parametri corrisponde all'ID utente. Tale operazione richiede un elevato utilizzo delle risorse di sistema. Se il report non presenta un alto livello di condivisione, la relativa istanza dovrà essere assegnata a un oggetto Session. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 187 Informazioni correlate Utilizzo di report normali o memorizzati nella cache [pagina 202] Modello a oggetti ReportDocument [pagina 36] Session e persistenza del modello a oggetti ReportDocument [pagina 56] 1.4.5.3.2.3.1 Per eseguire il collegamento a una classe di utilità per la gestione della cache Nota questa procedura può essere utilizzata solo con progetti creati in base a quanto indicato in Impostazione di un progetto [pagina 16], che prevede riferimenti specifici allo spazio dei nomi e la configurazione di codice richiesta per questa procedura; non è possibile completare la procedura senza questa configurazione. 1. Nel metodo ConfigureCrystalReports() (creato in Impostazione di un progetto [pagina 16]), eliminare le righe di codice esistenti per sostituire la classe wrapper del report con la classe dell'utilità di gestione della cache. 2. Creare un'istanza della classe di utilità per la gestione della cache associata a Hierarchical Grouping.rpt. Dim cachedHierarchicalGroupingReport As CachedHierarchical_Grouping = New CachedHierarchical_Grouping() CachedHierarchical_Grouping cachedHierarchicalGroupingReport = new CachedHierarchical_Grouping(); 3. Passare l'istanza dell'utilità di gestione della cache al controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = cachedHierarchicalGroupingReport crystalReportViewer.ReportSource = cachedHierarchicalGroupingReport; 4. Per visualizzare il report, creare ed eseguire il progetto. 1.4.5.3.2.4 Collegamento a un report non incorporato caricato in una classe di utilità per la gestione della cache Modello a oggetti In questo scenario di collegamento dei report viene utilizzato il modello a oggetti ReportDocument. 188 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Posizione dei report I report sono situati nella directory dei file. Descrizione Questo scenario di collegamento dei report è simile allo scenario Collegamento a una classe di report incorporati e memorizzati nella cache [pagina 186]. La differenza con tale scenario è che i report non sono incorporati. Per ulteriori informazioni sui report non incorporati, vedere Confronto tra i report incorporati e quelli non incorporati [pagina 150]. In SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio sono disponibili due funzionalità per la memorizzazione dei report nell'oggetto cache di ASP.NET: ● Una struttura incorporata per la gestione della cache dei report in grado di rilevare se report identici presentano parametri e credenziali di accesso univoche che richiedono una chiave univoca per ogni istanza memorizzata nella cache. ● Un'interfaccia IcachedReport che consente l'identificazione delle classi dell'utilità di gestione della cache dei report in tale struttura. In Collegamento a una classe di report incorporati e memorizzati nella cache [pagina 186], è stata descritta la classe Cached[nome report] creata automaticamente quando un report viene incorporato nel progetto. È possibile tuttavia creare manualmente una classe di utilità per la gestione della cache in grado di gestire i report non incorporati. Per un esempio di codice, vedere la sezione Implementazione di seguito. Memorizzazione nella cache L'operazione di memorizzazione nella cache ha un utilizzo limitato e specifico: se non viene gestita con attenzione può comportare un eccessivo sfruttamento delle risorse di sistema. Vantaggi ● Appositamente studiato per la condivisibilità: ideale per la memorizzazione dei report che presentano elevata condivisibilità e poche permutazioni nei parametri o nelle informazioni di accesso. ● Consente di ottimizzare l'accesso ai dati: se i report con elevata condivisibilità sono di dimensioni molto grandi o presentano una query talmente complessa da richiedere diversi minuti per il recupero, l'uso della classe di utilità per la gestione della Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 189 Svantaggi ● Affaticamento del server: i report che rimangono nell'oggetto Cache di ASP.NET possono implicare un utilizzo eccessivo delle risorse di memoria del server. ● Problemi di persistenza: la cache dispone di alcune dipendenze che consentono di verificare le modifiche apportate in un'istanza del report e memorizzare nuovamente tale istanza nella cache. Tuttavia, l'istanza del report nell'oggetto Cache non viene aggiornata in base a eventuali modifiche apportate al database. ● Consumo di risorse: un report dotato di parametri che vengono chiamati frequentemente con differenti stringhe di parametro comporta ogni volta una nuova memorizzazione nella cache, in particolare se uno di tali parametri corrisponde all'ID utente. Tale operazione richiede un elevato utilizzo delle risorse di sistema. Se il report non presenta un alto livello di condivisione, la relativa istanza dovrà essere assegnata a un oggetto Session. Informazioni correlate Collegamento con il componente ReportDocument [pagina 194] Modello a oggetti ReportDocument [pagina 36] Session e persistenza del modello a oggetti ReportDocument [pagina 56] 1.4.5.3.2.4.1 Per memorizzare nella cache e collegare un report non incorporato a un controllo CrystalReportViewer Nota questa procedura può essere utilizzata solo con progetti creati in base a quanto indicato in Impostazione di un progetto [pagina 16], che prevede riferimenti specifici allo spazio dei nomi e la configurazione di codice richiesta per questa procedura; non è possibile completare la procedura senza questa configurazione. 1. Individuare il file World Sales Report.rpt nella sottodirectory General Business. 2. Copiare il percorso completo della directory di file negli Appunti, incluso World Sales Report.rpt. 3. Nel metodo ConfigureCrystalReports(), creato in Impostazione di un progetto [pagina 16], dichiarare una variabile di stringa reportPath e assegnare una stringa che contiene il percorso della directory del file World Sales Report copiato nel precedente passaggio. Dim reportPath As String = _ "C:\Program Files\Microsoft Visual Studio 9.0\" _ & "Crystal Reports\Samples\En\Reports\General Business\" _ & "World Sales Report.rpt" string reportPath = "C:\\Program Files\\Microsoft Visual Studio 9.0\\" + "Crystal Reports\\Samples\\En\\Reports\\General Business\\" + "World Sales Report.rpt"; 190 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 4. Dichiarare e creare un'istanza della classe NonEmbeddedReportCacher e passare a essa la variabile di stringa reportFile. Nota Per informazioni su come creare la classe NonEmbeddedReportCacher, fare riferimento alla successiva procedura. Dim myNonEmbeddedReportCacher As NonEmbeddedReportCacher = _New NonEmbeddedReportCacher(reportFile) NonEmbeddedReportCacher nonEmbeddedReportCacher = new NonEmbeddedReportCacher(reportFile); 5. Assegnare l'istanza della classe di utilità per la gestione della cache dei report alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = myNonEmbeddedReportCacher crystalReportViewer.ReportSource = nonEmbeddedReportCacher; 1.4.5.3.2.4.2 Per creare la classe di utilità per la gestione della cache NonEmbeddedReportCacher 1. Creare una nuova classe nel progetto denominata NonEmbeddedReportCacher. Public Class NonEmbeddedReportCacher End Class using System; namespace MyWebApplication { public class NonEmbeddedReportCacher { public NonEmbeddedReportCacher() { } } } 2. Aggiungere l'interfaccia ICachedReport alla firma della classe. Public Class NonEmbeddedReportCacher Implements ICachedReport public class NonEmbeddedReportCacher : ICachedReport 3. All'inizio della classe aggiungere tre istruzioni [C#] "Imports" [Visual Basic] o "using". Imports CrystalDecisions.Shared Imports CrystalDecisions.ReportSource Imports CrystalDecisions.CrystalReports.Engine Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 191 using CrystalDecisions.Shared; using CrystalDecisions.ReportSource; using CrystalDecisions.CrystalReports.Engine; 4. All'interno della classe, dichiarare due istanze a livello di classe: un'istanza di stringa denominata reportFileName e un'istanza di ReportDocument denominata nonEmbeddedReportDocument. Private reportFileName As String Private nonEmbeddedReportDocument As ReportDocument private string reportFileName; private ReportDocument nonEmbeddedReportDocument; 5. Impostare il costruttore in modo che accetti una stringa reportFileName e assegnare tale stringa alla variabile di classe reportFileName, all'interno del costruttore stesso. Public Sub New(ByVal reportFileName As String) Me.reportFileName = reportFileName End Sub public NonEmbeddedReportCacher(string reportFileName) { this.reportFileName = reportFileName; } I restanti passaggi implementano proprietà o metodi richiesti dall'interfaccia: ○ IsCacheable ○ ShareDBLogonInfo ○ CacheTimeOut ○ CreateReport() ○ GetCustomizedCacheKey(RequestContext request) 6. Creare la proprietà IsCacheable che dovrebbe restituire True. Public Overridable Property IsCacheable() As Boolean Implements ICachedReport.IsCacheable Get Return True End Get Set(ByVal Value As Boolean) End Set End Property public virtual Boolean IsCacheable { get { return true; } set { } } 7. Creare la proprietà ShareDBLogonInfo che dovrebbe restituire False. Public Overridable Property ShareDBLogonInfo() As Boolean Implements ICachedReport.ShareDBLogonInfo Get 192 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Return False End Get Set(ByVal Value As Boolean) End Set End Property public virtual Boolean ShareDBLogonInfo { get { return false; } set { } } 8. Creare la proprietà CacheTimeOut che restituisce una costante della classe CachedReportConstants. Public Overridable Property CacheTimeOut() As TimeSpan Implements ICachedReport.CacheTimeOut Get Return CachedReportConstants.DEFAULT_TIMEOUT End Get Set(ByVal Value As TimeSpan) End Set End Property public virtual TimeSpan CacheTimeOut { get { return CachedReportConstants.DEFAULT_TIMEOUT; } set { } } 9. Creare il metodo CreateReport() che restituisce un report non incorporato caricato nell'istanza di ReportDocument a livello di classe. Public Overridable Function CreateReport() As ReportDocument Implements ICachedReport.CreateReport nonEmbeddedReportDocument = New ReportDocument() nonEmbeddedReportDocument.Load(reportFileName) Return nonEmbeddedReportDocument End Function public virtual ReportDocument CreateReport() { nonEmbeddedReportDocument = new ReportDocument(); nonEmbeddedReportDocument.Load(reportFileName); return nonEmbeddedReportDocument; } 10. Creare il metodo GetCustomizedCacheKey() che restituisce un valore Null. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 193 Nota La restituzione di un valore Null da parte di questo metodo indica all'SDK di SAP Crystal Reports .NET di gestire autonomamente la chiave di ricerca della cache. In alternativa, è possibile creare e aggiungere un proprio metodo personalizzato per la chiave di cache. Public Overridable Function GetCustomizedCacheKey(ByVal request As RequestContext) As String Implements ICachedReport.GetCustomizedCacheKey Return Nothing End Function public virtual String GetCustomizedCacheKey(RequestContext request) { return null; } 11. Per visualizzare il report, creare ed eseguire il progetto. 1.4.5.3.2.5 Collegamento con il componente ReportDocument Modello a oggetti In questo scenario di collegamento dei report viene utilizzato il modello a oggetti ReportDocument. Posizione dei report I report sono situati nella directory dei file. Descrizione Il componente ReportDocument si trova nella casella degli strumenti e fornisce un metodo basato GUI per generare il codice per la creazione dell'istanza della classe per il report nella classe di codice sottostante. È possibile specificare un report non incorporato, un report incorporato o un report incorporato e memorizzato nella cache. Nota Nella finestra di dialogo vengono utilizzati i termini "report non tipizzato" per fare riferimento a un report non incorporato e "report con tipizzazione forte" per fare riferimento a un report incorporato. Se si utilizza questa finestra per aggiungere ReportDocument come componente, viene creata un'istanza della classe ReportDocument o della classe wrapper del report incorporato nell'area a generazione automatica della 194 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net classe di codice sottostante. Contemporaneamente, nella barra dei componenti dell'IDE viene visualizzata un'icona per rappresentare in modo visivo la classe del report di cui è stata creata l'istanza. Nota Non è necessario aggiungere un componente ReportDocument al progetto per creare un'istanza del report nella classi di codice sottostante. Per un maggiore controllo del codice, si consiglia di aggiungere manualmente il codice per la creazione dell'istanza della classe. Informazioni correlate Modello a oggetti ReportDocument [pagina 36] 1.4.5.3.2.6 Scenari di collegamento a ReportDocument basati sull'utilizzo di Crystal Services (VS.NET 2003) Crystal Services consente di accedere con facilità ai report in Visual Studio 2003. Questa funzione non è disponibile in Visual Studio 2005 o Visual Studio 2008. Se SAP Crystal Reports e Crystal Services sono entrambi installati, quest'ultimo viene visualizzato come nodo secondario sotto ciascun server all'interno del nodo Server in Esplora server. Il nodo Crystal Services si espande in modo da visualizzare gli elenchi di report situati in diverse posizioni: ● Directory dei file locali sul disco rigido. ● Report Application Server (RAS) ● Piattaforma SAP Business Intelligence (BIP) È possibile trascinare tutti i report di questi elenchi su un Web Form o un Windows Form. Crystal Services espone in genere due nodi secondari che possono essere espandibili, in base alla versione di SAP Crystal Reports attualmente installata e a eventuali altre licenze di cui si dispone per RAS (Report Application Server) o la piattaforma SAP BusinessObjects Business Intelligence. Nella tabella contenuta nella sezione che segue vengono descritti i requisiti necessari per accedere a un particolare nodo. Nota alcune versioni della piattaforma SAP BusinessObjects Business Intelligence non includono il supporto per Crystal Services. Per ulteriori informazioni, consultare la documentazione relativa alla piattaforma SAP BusinessObjects Business Intelligence. Può essere necessario adeguare le impostazioni del firewall per poter accedere al CMS della piattaforma SAP BusinessObjects Business Intelligence. La porta predefinita per il CMS è 6400. Rivolgersi all'amministratore del sistema per ulteriori informazioni sull'impostazione dell'indirizzo di rete e della porta per il sistema della piattaforma SAP BusinessObjects Business Intelligence. Per ulteriori informazioni sulla personalizzazione delle porte, consultare il Manuale dell'amministratore della piattaforma Business Intelligence SAP BusinessObjects. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 195 Classi wrapper Quando si trascina un report da Crystal Services in un Web Form o Windows Form, viene creata l'istanza di una classe wrapper che fa riferimento al report nell'area relativa al codice generato da Progettazione Web Form o Progettazione Windows Form della classe di codice sottostante. Nota Il tipo di classe wrapper varia nelle diverse versioni di SAP Crystal Reports. Fare riferimento alla tabella riportata di seguito. Gli esempi di Crystal Services elencati nella tabella successiva espongono tipi di classe wrapper ReportDocument. Questi due tipi di Crystal Services vengono forniti con SAP Crystal Reports 10 Espongono gruppi di report eseguiti da un server RAS non gestito o un server RAS gestito. La classe wrapper è stata modificata in ReportDocument a partire da SAP Crystal Reports 9. Tabella 8: Classe wrapper espo­ sta mediante Crystal Services Nome del nodo in Cry­ stal Services ReportDocument Report Application Ser­ SAP Crystal Reports 10 ver Installare un server Espone i report di un RAS non gestito. server RAS caricato in ReportDocument. Per ulteriori informazioni, vedere Collegamento a Report Application Ser­ ver (SAP Crystal Re­ ports 10 e versioni suc­ cessive) [pagina 197]. ReportDocument Crystal Enterprise Espone i report del ser­ Installare Crystal Enter­ prise. ver RAS gestito cari­ cato in ReportDocu­ ment. Per ulteriori in­ formazioni, vedere Col­ legamento a Crystal Enterprise (SAP Crystal Reports 10 e versioni successive) [pagina 199]. Versioni di SAP Cry­ stal Reports SAP Crystal Reports 10 Descrizione Requisiti per accedere al nodo Le versioni precedenti di Crystal Services espongono tipi di classe wrapper che non utilizzano il modello a oggetti ReportDocument. Tali tipi di classe dipendono pertanto dal modello a oggetti limitato fornito con il controllo CrystalReportViewer. Per ulteriori informazioni, vedere Scenari di collegamento a CrystalReportViewer basati sull'utilizzo di Crystal Services [pagina 163]. 196 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.4.5.3.2.6.1 Collegamento a Report Application Server (SAP Crystal Reports 10 e versioni successive) Nota Questa pagina descrive una funzionalità che non è disponibile in SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio ma che è invece disponibile in una delle versioni aggiornate. Modello a oggetti In questo scenario di collegamento dei report viene utilizzato il modello a oggetti ReportDocument. Posizione dei report I report sono situati sul server RAS non gestito. e sono racchiusi nella classe ReportDocument. Panoramica di Crystal Services Questo scenario di collegamento dei report si applica ai report a cui si accede dal nodo Crystal Services in Esplora server. In questa sezione viene descritto il nodo secondario RAS (Report Application Server) di Crystal Services all'interno di SAP Crystal Reports Developer. [SERVERNAME] ● Crystal Services ○ Report Application Server Descrizione Il nodo secondario RAS (Report Application Server) accede e visualizza i report esposti da un server RAS non gestito. Il nodo RAS è attivo solo quando il server RAS non gestito è stato installato sul computer di sviluppo. Quando si trascina un report dal nodo Crystal Services>piattaforma SAP BusinessObjects Business Intelligence in un Web Form o un Windows Form, viene generata un'istanza di ReportDocument. La classe ReportDocument agisce come classe wrapper Ha la funzione di racchiudere (rappresentare) il report passato dal server RAS non gestito. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 197 Vantaggi ● Accesso semplice: i report del server RAS non gestito possono essere visualizzati con facilità in una visualizzazione struttura e trascinati in un Web Form. ● Ampia interazione a livello di programmazione: consente di accedere al potente modello a oggetti ReportDocument. La classe wrapper del report in questa versione è ReportDocument. Questa è la prima versione di Crystal Services che consente l'accesso al modello a oggetti ReportDocument. Svantaggi ● La scrittura di codice è meno diretta: non così diretta quanto la scrittura di codice per i report di RAS con il modello a oggetti ReportClientDocument. Informazioni correlate Collegamento a Crystal Enterprise (SAP Crystal Reports 10 e versioni successive) [pagina 199] Modello a oggetti ReportDocument [pagina 36] Utilizzo di Crystal Services [pagina 81] 1.4.5.3.2.6.1.1 Per utilizzare Crystal Services>Report Application Server ● Installazione di SAP Crystal Reports 10 o versioni successive e verifica del relativo funzionamento. ● Installazione del server RAS non gestito e verifica del relativo funzionamento. Nota questa procedura può essere utilizzata solo con progetti creati in base a quanto indicato in Impostazione di un progetto [pagina 16], che prevede riferimenti specifici allo spazio dei nomi e la configurazione di codice richiesta per questa procedura; non è possibile completare la procedura senza questa configurazione. 1. In Visual Studio aprire Esplora server. 2. Espandere Crystal Services, quindi Report Application Server. 3. Selezionare un report dalla struttura Report Application Server e trascinarlo nel Web Form o Windows Form. Nella parte inferiore del form in visualizzazione Progettazione, viene visualizzato un oggetto reportDocument1. Nota Quando un report Report Application Server viene inserito nel form, viene aggiunta un'istanza della classe ReportDocument nell'area del form relativa al codice generato dalla finestra di progettazione. 198 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net In seguito alla creazione di un'istanza e della configurazione delle classi che ereditano da System.ComponentModel.Component (ad esempio, ReportDocument) all'interno dell'area di codice generato dalla finestra di progettazione, nella parte inferiore del form in visualizzazione Progettazione appare un'icona della classe per cui è stata creata l'istanza. 4. Passare alla visualizzazione del codice e aprire l'area relativa al codice generato da Progettazione Web Form o Progettazione Windows Form. Nota All'interno di quest'area è stata creata un'istanza della classe ReportDocument. È stata inoltre eseguita la configurazione di tale classe. 5. All'interno del metodo ConfigureCrystalReports() creato durante i passaggi in Impostazione di un progetto [pagina 16], assegnare l'istanza di ReportDocument alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = reportDocument1 crystalReportViewer.ReportSource = reportDocument1; 6. Per visualizzare il report, creare ed eseguire il progetto. 1.4.5.3.2.6.2 Collegamento a Crystal Enterprise (SAP Crystal Reports 10 e versioni successive) Nota Questa pagina descrive una funzionalità che non è disponibile in SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio ma che è invece disponibile in una delle versioni aggiornate. Modello a oggetti In questo scenario di collegamento dei report viene utilizzato il modello a oggetti ReportDocument. Posizione dei report I report sono situati nel server RAS gestito. e sono racchiusi nella classe ReportDocument. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 199 Panoramica di Crystal Services Questo scenario di collegamento dei report si applica ai report a cui si accede dal nodo Crystal Services in Esplora server. In questa sezione viene descritto il nodo secondario della piattaforma SAP BusinessObjects Business Intelligence di Crystal Services all'interno di SAP Crystal Reports Developer. [SERVERNAME] ● Crystal Services ○ Crystal Enterprise Descrizione Il nodo secondario della piattaforma SAP BusinessObjects Business Intelligence accede ai report esposti da un server RAS gestito all'interno della piattaforma SAP BusinessObjects Business Intelligence e li visualizza. Il nodo Crystal Services>piattaforma SAP BusinessObjects Business Intelligence espone i report da Crystal Enterprise mediante il server RAS gestito. Il nodo della piattaforma SAP BusinessObjects Business Intelligence è attivo. Se tuttavia la piattaforma SAP BusinessObjects Business Intelligence non è stata installata nel computer di sviluppo, accedere alla finestra delle proprietà di questo nodo e impostare il nome del server della piattaforma SAP BusinessObjects Business Intelligence nella rete. Quando si trascina un report dal nodo Crystal Services>piattaforma SAP BusinessObjects Business Intelligence in un Web Form o un Windows Form, viene generata un'istanza di ReportDocument. La classe ReportDocument agisce come classe wrapper e ha la funzione di racchiudere (rappresentare) il report passato dal server RAS all'interno di Crystal Enterprise. Vantaggi ● Facilità di accesso: accesso estremamente semplice ai report RAS di Crystal Enterprise da un'applicazione Web. ● Ampia interazione a livello di programmazione: consente di accedere al potente modello a oggetti ReportDocument. La classe wrapper del report in questa versione è ReportDocument. Questa è la prima versione di Crystal Services che consente l'accesso al modello a oggetti ReportDocument. Svantaggi ● La scrittura di codice è meno diretta: non così diretta quanto la scrittura di codice per i report di RAS con il modello a oggetti ReportClientDocument. 200 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Informazioni correlate Utilizzo di Crystal Services [pagina 81] 1.4.5.3.2.6.2.1 Per utilizzare Crystal Services>Crystal Enterprise ● Installazione di SAP Crystal Reports 10 o XI e verifica del relativo funzionamento. Nota questa procedura può essere utilizzata solo con progetti creati in base a quanto indicato in Impostazione di un progetto [pagina 16], che prevede riferimenti specifici allo spazio dei nomi e la configurazione di codice richiesta per questa procedura; non è possibile completare la procedura senza questa configurazione. 1. In Visual Studio aprire Esplora server. 2. Espandere Crystal Services, quindi Crystal Enterprise. 3. Selezionare un report dalla struttura Crystal Enterprise e trascinarlo nel form. Nella parte inferiore del form in visualizzazione Progettazione, viene visualizzato un oggetto reportDocument1. Nota Quando un report Crystal Enterprise viene inserito nel form, viene aggiunta un'istanza della classe ReportDocument nell'area del form relativa al codice generato dalla finestra di progettazione. In seguito alla creazione di un'istanza e della configurazione delle classi che ereditano da System.ComponentModel.Component (ad esempio, ReportDocument) all'interno dell'area di codice generato dalla finestra di progettazione, nella parte inferiore del form in visualizzazione Progettazione 4. Passare alla visualizzazione del codice e aprire l'area relativa al codice generato da Progettazione Web Form o Progettazione Windows Form. All'interno di quest'area è stata creata un'istanza della classe ReportDocument. È stata inoltre eseguita la configurazione di tale classe. 5. All'interno del metodo ConfigureCrystalReports() creato durante i passaggi in Impostazione di un progetto [pagina 16], assegnare l'istanza di ReportDocument alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = reportDocument1 crystalReportViewer.ReportSource = reportDocument1; 6. Creare ed eseguire il progetto Web per visualizzare il report. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 201 1.4.5.4 Utilizzo di report normali o memorizzati nella cache Quando si pianifica la creazione di un'applicazione con l'SDK di SAP Crystal Reports, uno degli aspetti più importanti da considerare è se utilizzare report normali o memorizzati nella cache. È importante conoscere le nozioni di base dell'SDK che si riferiscono alla memorizzazione di report nella cache per poter scegliere la struttura più adeguata per il progetto SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. Definizione di report memorizzati nella cache I report memorizzati nella cache sono oggetti report archiviati nell'oggetto Cache di ASP.NET per accrescerne le prestazioni e la scalabilità. SAP Crystal Reports fornisce una struttura specifica per inserire le istanze di ReportDocument nella cache. Questa struttura memorizza automaticamente nella cache tutti i report che implementano l'interfaccia ICachedReport. Definizione di oggetto Cache di ASP.NET Sia in ASP che in ASP.NET gli oggetti report vengono inseriti in Session o Application sul server Web per due ragioni: 1. Per rendere persistente lo stato dell'oggetto report nelle operazioni di ricaricamento delle pagine. 2. Per migliorare la scalabilità e le prestazioni mediante l'inserimento dei report di grandi dimensioni o lenti da caricare nella memoria del server. In ASP.NET è stata introdotta una variazione avanzata dell'oggetto Application, denominata Cache. Come Application, Cache rende persistenti le singole istanze di un oggetto report. Tuttavia, nell'oggetto Cache sono presenti ulteriori funzionalità per la ricerca di dipendenze basate su file, su chiavi o temporizzate. Tali dipendenze possono implicare la scadenza automatica o l'aggiornamento degli oggetti report all'interno dell'oggetto Cache, in modo da mantenerne aggiornati i contenuti. I report utilizzati in Cache sono sia specifici dell'utente che specifici della sessione. Nota I termini "oggetto Cache" e "Cache", così come i termini "oggetto Session" e "Session" o "oggetto Application" e "Application", vengono utilizzati in maniera intercambiabile e hanno lo stesso significato. Il termine "oggetto" sottolinea che si tratta di oggetti di persistenza eseguiti all'interno dello spazio di memoria di .NET Framework sul server Web. Modalità di inserimento degli oggetti report nell'oggetto Cache di ASP.NET Gli oggetti report possono essere inseriti nell'oggetto Cache di ASP.NET in due modi: ● Assegnare l'oggetto report a Cache con la stessa sintassi con cui viene assegnato un oggetto report a Session o Application (assegnazione esplicita). 202 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ● Creare un'istanza di una versione del report che implementa l'interfaccia ICachedReport. Il modulo report ricerca tutti gli oggetti report che implementano questa interfaccia e inserisce automaticamente l'oggetto report appropriato all'interno di Cache (assegnazione implicita). Definizione dell'interfaccia ICachedReport L'interfaccia ICachedReport contrassegna con flag tutte le classi di report che consentono a ICachedReport di utilizzare la struttura di memorizzazione nella cache di SAP Crystal Reports. Questa struttura personalizzata offre un livello in più rispetto all'oggetto Cache di ASP.NET, per soddisfare specifiche esigenze di memorizzazione nella cache dei report. L'interfaccia ICachedReport è dotata di firme dei metodi che, una volta implementate nella classe di report, indicano alla struttura il modo in cui memorizzare nella cache questa classe. Funzioni di memorizzazione nella cache dei report disponibili quando si incorpora un report in un progetto Visual Studio Quando si crea o si importa un report in un progetto Visual Studio, tale report viene incorporato nel progetto e vengono automaticamente generate due classi: ● Una classe wrapper del report, che presenta lo stesso nome del report. Questa classe wrapper rappresenta il report nel progetto ed eredita da ReportDocument. Per ulteriori informazioni, vedere Confronto tra i report incorporati e quelli non incorporati [pagina 150]. ● Una classe di utilità per la gestione della cache, denominata classe Cached[NomeReport]. Questa classe gestisce la memorizzazione nella cache del report incorporato, mediante l'oggetto Cache di ASP.NET e la struttura di memorizzazione nella cache incorporata nell'SDK di SAP Crystal Reports. Nella tabella che segue sono presentati gli elementi che vengono generati quando si aggiunge il report Hierarchical Grouping: Tabella 9: Nome Descrizione Hierarchical Grouping.rpt Report Classe Hierarchical_Grouping Classe wrapper del report Classe CachedHierarchical_Grouping La classe di utilità per la gestione della cache viene utilizzata per gestire la memorizzazione nella cache della classe wrap­ per del report La classe wrapper del report e la classe di utilità per la gestione della cache svolgono attività distinte: ● La classe wrapper del report eredita da ReportDocument e ha pertanto accesso al modello a oggetti ReportDocument completo. Si tratta della classe principale programmata per l'interazione con il report. ● La classe di utilità per la gestione della cache gestisce e memorizza le istanze della classe wrapper del report nell'oggetto Cache di ASP.NET. Tale classe riconosce le diverse istanze della classe wrapper del report e impedisce che tali istanze si sovrascrivano reciprocamente nell'oggetto Cache. È ad esempio in grado di riconoscere le differenze create quando vengono modificati i parametri e gli accessi. Per eseguire questa operazione, tale classe assegna una chiave univoca per ogni istanza univoca della classe wrapper del report. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 203 ● Ai fini dell'identificazione nell'ambito della funzionalità di memorizzazione nella cache di .NET Framework di SAP Crystal Reports, la classe di utilità per la gestione della cache implementa l'interfaccia ICachedReport. La classe wrapper del report e la classe di utilità per la gestione della cache vengono generate nello stesso file di classe. Per visualizzare entrambe le classi fare clic con il pulsante destro del mouse sul file di classe del report in Esplora soluzioni, quindi scegliere Visualizza codice. All'apertura del file, il codice relativo alla classe wrapper del report viene visualizzato nella parte superiore e la classe di utilità per la gestione della cache viene visualizzata verso la metà. Nota Per informazioni su come collegare il controllo CrystalReportViewer alla classe di utilità per la gestione della cache, vedere Collegamento a una classe di report incorporati e memorizzati nella cache [pagina 186]. Per creare una classe di utilità per la gestione della cache personalizzata per il collegamento a report non incorporati, vedere Collegamento a un report non incorporato caricato in una classe di utilità per la gestione della cache [pagina 188]. Casi in cui è necessario memorizzare i report nella cache È consigliabile conservare solo una piccola percentuale di oggetti report nell'oggetto Cache di ASP.NET. La maggior parte degli oggetti report presenta infatti una bassa condivisibilità: tali oggetti non vengono utilizzati come risorse condivise con altri oggetti e non sfruttano pertanto in modo adeguato l'oggetto Cache. Se è richiesta la persistenza, inserire gli oggetti report nell'oggetto Session dell'utente. Posizionare l'oggetto report nell'oggetto Cache di ASP.NET solo quando il report deve essere visualizzato molte volte da un solo utente in una determinata sessione. Ciò è particolarmente importante nel caso di un oggetto report di dimensioni molto grandi o con una query talmente complessa da impiegare diversi minuti per il recupero dei dati. Informazioni correlate Collegamento a una classe di report incorporati e memorizzati nella cache [pagina 186] 1.4.5.5 Visualizzazione di un report in fase di progettazione SAP Crystal Reports consente di visualizzare in anteprima un report in fase di progettazione all'interno di Visual Studio. Quando il report viene assegnato alla proprietà ReportSource nella finestra Proprietà, un'anteprima del report viene visualizzata nel Windows Form o nella pagina ASPX. I dati statici, come le date, le immagini o i campi di testo, vengono visualizzati come appariranno in fase di esecuzione. Per i dati dinamici, ad esempio i dati estratti da un database, possono essere utilizzati valori artificiali al posto dei dati provenienti dall'origine dati. Se il report contiene dati salvati, tali dati appariranno nell'anteprima in fase di progettazione. 204 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net L'interfaccia SAP Crystal Reports Designer incorporata fornisce ulteriori funzionalità di visualizzazione mediante la scheda Anteprima. Quando si visualizza il report nella scheda Anteprima, SAP Crystal Reports tenta di recuperare nuovi dati dall'origine dati specificata. L'anteprima in fase di progettazione non riguarda l'acquisizione dei dati, ma visualizza tutti i dati attualmente salvati nel report. Nota La scheda Anteprima non è disponibile nell'interfaccia SAP Crystal Reports Designer incorporata per Visual Studio .NET 2003. Informazioni correlate Scheda Anteprima [pagina 565] 1.4.6 Personalizzazione del controllo CrystalReportViewer Il controllo CrystalReportViewer viene utilizzato in .NET Framework per collegare e visualizzare i report. Il controllo CrystalReportViewer predefinito include elementi dell'interfaccia utente che semplificano le operazioni di visualizzazione, salvataggio e spostamento in un report. In base al tipo di applicazione, potrebbe essere necessario modificare alcuni elementi del controllo predefinito. SAP Crystal Reports consente di personalizzare l'aspetto del visualizzatore nell'applicazione in diversi modi, ad esempio: ● la barra degli strumenti di CrystalReportViewer può essere rimossa dal visualizzatore ● i pulsanti della barra degli strumenti di CrystalReportViewer possono essere aggiunti o rimossi a livello di codice ● il controllo CrystalReportViewer supporta la personalizzazione mediante CSS o temi. In questa sezione viene descritta la procedura di modifica del visualizzatore. Classi utilizzate per la visualizzazione dei report ● CrystalDecisions.Windows.Forms.CrystalReportViewer Fornisce le proprietà, i metodi e gli eventi che modificano o recuperano le informazioni relative all'aspetto del controllo CrystalReportViewer e alle relative funzioni. ● CrystalDecisions.Web.CrystalReportViewer Fornisce le proprietà, i metodi e gli eventi che modificano o recuperano le informazioni relative all'aspetto del controllo CrystalReportViewer e alle relative funzioni. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 205 Informazioni correlate Modalità di utilizzo dei controlli dei visualizzatori report [pagina 42] 1.4.6.1 Indicatore di elaborazione del report L'indicatore di elaborazione del report fornisce un'indicazione visiva del tempo di elaborazione nel sito Web SAP Crystal Reports. Quando il tempo di elaborazione supera una soglia specificata, viene visualizzata una finestra di dialogo per indicare l'avanzamento dell'azione in corso. Il testo della finestra di dialogo e il ritardo con cui viene visualizzata la finestra possono essere specificati nel file Web.Config relativo al sito Web. Il testo predefinito è: Attendere il completamento dell'elaborazione del documento. Il tempo predefinito di attesa della visualizzazione dell'indicatore di elaborazione del report è 200 ms. Informazioni correlate Configurazione del file Web.Config [pagina 19] 1.4.6.1.1 Personalizzazione del testo dell'indicatore di elaborazione del report Il testo del messaggio dell'indicatore di elaborazione del report viene configurato nel file Web.Config del sito Web. 1. Aggiungere un controllo CrystalReportViewer all'applicazione. 2. Aprire il file Web.Config. Se non si dispone di un file Web.Config, fare clic su Debug Avvia debug per eseguire il debug dell'applicazione. Visual Studio richiederà la creazione di un nuovo file Web.Config. Fare clic su OK per creare il nuovo file. 3. Nel file Web.Config aggiungere l'impostazione NameValueSectionHandler come primo elemento secondario dell'elemento configuration. <configSections> <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections> 206 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net L'elemento configSections deve essere il primo elemento secondario univoco dell'elemento configuration. Se è già stato definito un elemento configSections per SAP Crystal Reports, aggiungere l'elemento section per CrystalReportViewer al nodo configSections esistente. 4. Aggiungere l'impostazione processingIndicatorText direttamente dopo l'elemento configSections. <businessObjects> <crystalReports> <crystalReportViewer> <add key="processingIndicatorText" value="Thank you for waiting"/> </crystalReportViewer> </crystalReports> </businessObjects> 5. Sostituire il testo dell'attributo value con il messaggio che si desidera visualizzare nell'indicatore di elaborazione del report. L'elemento processingIndicatorText controlla il testo visualizzato nell'indicatore di elaborazione del report. Il testo predefinito è: Attendere il completamento dell'elaborazione del documento. Il controllo CrystalReportViewer utilizzerà il messaggio personalizzato dell'indicatore di elaborazione del report. Esempio In questo esempio il ritardo per l'indicatore di elaborazione del report viene ridotto a 20 ms e il messaggio visualizzato è «Thank you for waiting». <?xml version="1.0"?> <configuration> <configSections> <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections> <businessObjects> <crystalReports> <crystalReportViewer> <add key="processingIndicatorText" value="Thank you for waiting."/> <add key="processingIndicatorDelay" value="20"/> </crystalReportViewer> </crystalReports> </businessObjects> <appSettings> <add key="CrystalImageCleaner-AutoStart" value="true"/> <add key="CrystalImageCleaner-Sleep" value="60000"/> <add key="CrystalImageCleaner-Age" value="120000"/> </appSettings> <connectionStrings/> <system.web> <compilation debug="true"> <assemblies> <add assembly="CrystalDecisions.Web, Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="CrystalDecisions.Shared, Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="CrystalDecisions.ReportSource, Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="CrystalDecisions.CrystalReports.Engine, Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> </assemblies> </compilation> Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 207 <authentication mode="Windows"/> <httpHandlers> <add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/> </httpHandlers> </system.web> </configuration> 1.4.6.1.2 Modifica del ritardo per la visualizzazione dell'indicatore di elaborazione del report L'intervallo di tempo che precede la visualizzazione dell'indicatore di elaborazione del report viene configurato nel file Web.Config del sito Web. L'elemento processingIndicatorDelay controlla l'intervallo di tempo che trascorre prima della visualizzazione dell'indicatore di elaborazione del report. 1. Aggiungere un controllo CrystalReportViewer all'applicazione. 2. Aprire il file Web.Config. Se non si dispone di un file Web.Config, fare clic su Debug Avvia debug per eseguire il debug dell'applicazione. Visual Studio richiederà la creazione di un nuovo file Web.Config. Fare clic su OK per creare il nuovo file. 3. Nel file Web.Config aggiungere l'impostazione NameValueSectionHandler come primo elemento secondario dell'elemento configuration. <configSections> <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections> L'elemento configSections deve essere il primo elemento secondario univoco dell'elemento configuration. Se è già stato definito un elemento configSections per SAP Crystal Reports, aggiungere l'elemento section per CrystalReportViewer al nodo configSections esistente. 4. Aggiungere l'impostazione processingIndicatorDelay direttamente dopo l'elemento configSections. <businessObjects> <crystalReports> <crystalReportViewer> <add key="processingIndicatorDelay" value="20"/> </crystalReportViewer> </crystalReports> </businessObjects> 5. Sostituire il testo dell'attributo value con la durata del periodo di tempo che deve trascorrere prima della visualizzazione dell'indicatore di elaborazione del report. Il valore è specificato in millisecondi. Se il valore viene impostato su 0, l'indicatore di elaborazione del report viene disattivato. Il valore predefinito è 200 ms. 208 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Esempio In questo esempio il ritardo per l'indicatore di elaborazione del report viene ridotto a 20 ms e il messaggio visualizzato è «Thank you for waiting». <?xml version="1.0"?> <configuration> <configSections> <sectionGroup name="businessObjects"> <sectionGroup name="crystalReports"> <section name="crystalReportViewer" type="System.Configuration.NameValueSectionHandler" /> </sectionGroup> </sectionGroup> </configSections> <businessObjects> <crystalReports> <crystalReportViewer> <add key="processingIndicatorText" value="Thank you for waiting."/> <add key="processingIndicatorDelay" value="20"/> </crystalReportViewer> </crystalReports> </businessObjects> <appSettings> <add key="CrystalImageCleaner-AutoStart" value="true"/> <add key="CrystalImageCleaner-Sleep" value="60000"/> <add key="CrystalImageCleaner-Age" value="120000"/> </appSettings> <connectionStrings/> <system.web> <compilation debug="true"> <assemblies> <add assembly="CrystalDecisions.Web, Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="CrystalDecisions.Shared, Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="CrystalDecisions.ReportSource, Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> <add assembly="CrystalDecisions.CrystalReports.Engine, Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/> </assemblies> </compilation> <authentication mode="Windows"/> <httpHandlers> <add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/> </httpHandlers> </system.web> </configuration> 1.4.6.2 Supporto di più lingue con il controllo CrystalReportViewer SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio include il supporto per i client Windows e Web multilingue mediante la localizzazione dinamica. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 209 La localizzazione dinamica consente agli utenti di visualizzare le descrizioni dei comandi e altri contenuti del controllo CrystalReportViewer nella lingua preferita. Per consentire la localizzazione dinamica, è necessario rendere disponibili i file di risorse di lingua nella lingua desiderata. Informazioni correlate Esercitazione: Configurazione del supporto client multilingue [pagina 508] 1.4.6.2.1 File di risorse di lingua I file di risorse di lingua contengono una serie di coppie chiave/valore che forniscono il testo visualizzato nell'applicazione. Per ogni elemento di testo visualizzato in un'applicazione Crystal Reports esiste un valore corrispondente nel file di risorse di lingua che specifica in che modo il testo deve essere visualizzato per ciascuna lingua. File di risorse di lingua Nel server Web o nel client Windows è possibile accedere alle risorse di lingua per il controllo CrystalReportViewer dalle due origini indicate di seguito. ● DLL di risorse di lingua predefinite, che includono le seguenti lingue: ○ Inglese (en) ○ Francese (fr) ○ Tedesco (de) ○ Spagnolo (es) ○ Italiano (it) ○ Giapponese (jp) ○ Coreano (ko) ○ Cinese semplificato (zh-chs) ○ Cinese tradizionale (zh-cht) ● File di risorse di lingua personalizzati, creati come stringhe di testo, quindi compilati come DLL di risorse di lingua personalizzate. Risorse neutre e non neutre Sono disponibili risorse di lingua neutre e non neutre. Le risorse neutre rappresentano un'impostazione di lingua generale, ad esempio en per l'inglese, fr per il francese e jp per il giapponese. 210 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Le risorse non neutre rappresentano la versione della lingua qualificata in base a un criterio supplementare, come la regione: ad esempio , de-AT per il tedesco (Austria). Risorse globali e locali Poiché le risorse di lingua predefinite sono installate nella cache di assembly globale (GAC, Global Assembly Cache), sono sempre disponibili a livello globale. È possibile invece accedere alle risorse di lingua personalizzate a livello globale o locale. La cartella delle risorse di lingua personalizzate può essere memorizzata in una posizione centrale, quindi condivisa oppure può essere copiata nella directory locale dell'applicazione Web o Windows. Le risorse di lingua personalizzate memorizzate in una posizione centrale vengono denominate risorse globali. In questo scenario è necessario indicare all'applicazione Web o Windows la posizione delle risorse tramite le impostazioni di un file di configurazione XML. Affinché una risorsa globale venga caricata correttamente, è necessario che il nome della cartella che contiene i file di risorse corrisponda all'impostazione della lingua. Le risorse di lingua personalizzate copiate nella directory locale vengono denominate risorse locali. In questo scenario non è necessario alcun file di configurazione. Affinché una risorsa locale venga caricata correttamente, la lingua dei file di risorse e il nome della cartella che contiene i file di risorse devono corrispondere all'impostazione della lingua. Risorse globali o risorse locali La risorse globali sono la soluzione ideale quando occorre condividere le risorse tra più applicazioni. Un server Web con più siti che richiedono la condivisione di un insieme comune di risorse di lingua è l'ambiente ideale per l'utilizzo delle risorse globali. Le risorse locali sono invece più appropriate quando si utilizza un'unica applicazione la cui ampia distribuzione richiede una configurazione semplice. Ad esempio, un'applicazione Windows costituita da una sola cartella delle applicazioni e destinata a un'ampia distribuzione è l'ambiente ideale per l'utilizzo delle risorse locali. In generale, le applicazioni Web sono più appropriate per le risorse globali, mentre le applicazioni Windows sono più adatte alle risorse locali. Ordine di caricamento delle risorse Se si configurano sia risorse locali che risorse globali per una particolare applicazione, le prime hanno una priorità più alta e vengono pertanto caricate per prime. Per accertarsi che le risorse globali vengano effettivamente utilizzate, verificare la correttezza del file di configurazione e rimuovere la cartella delle risorse locali. L'ordine di caricamento ha impatto anche sulle risorse non neutre e neutre. Se per una lingua specifica sono state configurate sia risorse non neutre che neutre, ad esempio "Tedesco (Austria)" e "Tedesco", la risorsa non neutra viene controllata per prima. In entrambi i casi la selezione specifica è prioritaria rispetto a quella generale. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 211 Visualizzazione lato client Di seguito vengono indicati i fattori che determinano la lingua visualizzata dall'applicazione client in fase di esecuzione. In un'applicazione Windows: ● Le impostazioni internazionali dell'ambiente su ciascun computer dell'utente. In un sito Web: ● Le impostazioni internazionali dell'ambiente del server Web. ● Le impostazioni di lingua del browser client. ● La proprietà Lingua impostata su una pagina ASPX separata. 1.4.6.2.2 Supporto delle codifiche dei caratteri Unicode e GB18030 SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio offre supporto per gli standard dei set di caratteri internazionali seguenti: ● Unicode ● GB18030 Per comprendere come SAP Crystal Reports supporti le codifiche Unicode e GB18030, è necessario avere familiarità con i tre diversi tipi di carattere: repertorio di caratteri, caratteri come punti di codice e caratteri come dati codificati. Inoltre, è necessario capire la relazione che intercorre tra i punti di codice (termine più preciso rispetto a caratteri codificati) e le unità di codice. 1.4.6.2.2.1 Tipi di carattere Per capire gli standard dei set di caratteri occorre effettuare una distinzione tra tre tipi di carattere: ● Repertorio di caratteri (l'elenco astratto dei caratteri). ● Caratteri come punti di codice con valori scalari. ● Caratteri come dati codificati. Repertorio di caratteri (elenco astratto dei caratteri) Il repertorio di caratteri è un elenco astratto di oltre un milione di caratteri presenti in un'ampia serie di script, tra cui quelli latini, cirillici, cinesi, coreani, giapponesi, ebraici e aramaici. Nel repertorio di caratteri sono inclusi anche altri simboli, ad esempio la notazione musicale. Gli standard Unicode e GB18030 dispongono entrambi di un repertorio di caratteri. Se in uno standard vengono aggiunti nuovi caratteri, questi vengono inseriti anche nell'altro standard al fine di conservarne la parità. 212 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Caratteri come punti di codice con valori scalari. Nota questo secondo tipo di carattere si applica solo al formato Unicode, non a GB18030. Ogni carattere del repertorio è assegnato a un punto di codice. Ogni punto di codice ha un valore numerico specifico, definito valore scalare. Il valore scalare è spesso espresso in esadecimale. I punti di codice si trovano in uno spazio di codice, il quale è costituito da un intervallo di valori scalari suddivisi su due livelli: ● Livello multilingue base (64 KB). Nel formato Unicode l'espressione esadecimale dei valori di questo livello inferiore è compresa tra U+0000 e U+FFFF. ● Livello multilingue supplementare (16 sezioni supplementari di 64 KB). Nel formato Unicode l'espressione esadecimale dei valori di questo livello superiore è compresa tra U+10000 e U+10FFFF. Lo spazio di codice completo di tutti i possibili valori scalari si ottiene moltiplicando 17 per la dimensione di 64 KB (1.088.000 valori possibili). Caratteri come dati codificati Ogni formato di codifica converte i caratteri dal repertorio di caratteri nei dati codificati. In GB18030, i dati codificati derivano direttamente dal repertorio di caratteri; il concetto di valore scalare come intermediario tra il repertorio di caratteri e i dati codificati è limitato esclusivamente a Unicode. Nel formato Unicode i dati codificati derivano dall'applicazione di un algoritmo al valore scalare. Unicode definisce tre formati di codifica dei caratteri: ● UTF-8 ● UTF-16 ● UTF-32 1.4.6.2.2.2 Relazione tra punti di codice e unità di codice Per comprendere come SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio</pname> supporti GB18030 e Unicode, è importante capire la relazione che intercorre tra i punti di codice e le unità di codice. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 213 Punti di codice e unità di codice In ogni codifica i punti di codice sono mappati a una o più unità di codice. È definita unità di codice una singola unità all'interno di ciascun formato di codifica. La dimensione dell'unità di codice è equivalente alla dimensione in bit della codifica specifica: ● Un'unità di codice in UTF-8 è costituita da 8 bit. ● Un'unità di codice in UTF-16 è costituita da 16 bit. ● Un'unità di codice in UTF-32 è costituita da 32 bit. ● Nel formato GB18030 un'unità di codice è costituita da 8 bit. Numero delle unità di codice in ogni punto di codice Il numero delle unità di codice che è necessario mappare a un punto di codice varia in base al formato di codifica: ● UTF-8 Nel formato UTF-8 vengono in genere mappate più unità di codice per punto di codice, a causa delle dimensioni ridotte delle unità di codice. I punti di codice vengono mappati a una, due, tre o quattro unità di codice. ● UTF-16 Le dimensioni delle unità di codice UTF-16 sono raddoppiate rispetto alla unità di codice a 8 bit. Di conseguenza, i punti di codice con valore scalare inferiore a U+10000 vengono codificati in una singola unità di codice. Per i punti di codice con valore scalare pari a U+10000 o superiore sono richieste due unità di codice per punto di codice. Queste coppie di unità di codice in UTF-16 sono entrambe definite con il termine "coppie di surrogati di Unicode". Nota Il supporto per le coppie di surrogati Unicode viene illustrato di seguito. ● UTF-32 L'unità di codice a 32 bit utilizzata nel formato UTF-32 è sufficientemente ampia da consentire che ogni punto di codice venga codificato come una singola unità di codice. ● GB18030 Nel formato GB18030 vengono in genere mappate più unità di codice per punto di codice, a causa delle dimensioni ridotte delle unità di codice. I punti di codice vengono mappati a una, due o quattro unità di codice. Supporto per coppie di surrogati Unicode Alcuni script supportati da Unicode contengono caratteri i cui punti di codice presentano un valore scalare pari a U+10000 o superiore. Nel formato UTF-16 tali punti di codice sono codificati mediante coppie di surrogati. È importante che le coppie di surrogati Unicode siano gestite correttamente. Ad esempio, nel caso del testo di un'applicazione che utilizza la codifica UTF-16, è necessario che il cursore di testo consideri ogni punto di codice 214 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net come un singolo carattere di testo durante l'aggiunta, l'eliminazione o la selezione dei caratteri per le operazioni di taglio, copia o incolla. 1.4.6.2.2.3 Supporto di GB18030 mediante Unicode in SAP Crystal Reports SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio</pname> non supporta GB18030 in modo diretto. ma accede a tale formato tramite valori che sono stati già convertiti in uno dei formati di codifica Unicode. Le conversioni vengono fornite da numerose origini, tra cui .NET Framework, alcuni driver di database e il sistema operativo Windows. Il testo è in genere memorizzato sul disco rigido come UTF-8 e caricato in memoria come UTF-16. SAP Crystal Reports supporta le coppie di surrogati Unicode in UTF-16. Esempi del supporto GB18030 mediante Unicode Di seguito vengono descritti gli aspetti più rilevanti da tenere in considerazione in caso di supporto della codifica GB18030 fornito mediante conversione Unicode. ● I database che contengono dati codificati in GB18030. I dati dei database codificati in GB18030 sono supportati solo se i driver di database convertono i dati in UTF-16 in fase di recupero. Nota Microsoft SQL Server 2005 converte i dati GB18030 in UTF-16 in fase di recupero. Per altri server, contattare il fornitore del database. ● I DataSet che espongono i dati da un'origine GB18030. Indipendentemente dall'origine principale, i DataSet sono formattati come XML, che è codificato con UTF-8. ● I servizi Web che espongono i dati da un'origine GB18030. Tutto il testo inviato o ricevuto tramite un servizio Web è già convertito in Unicode. Scenari GB18030 non supportati Il formato GB18030 non è supportato in SAP Crystal Reports principalmente nei casi di accesso o importazione dei file di testo codificati in GB18030. Il file di testo codificato in GB18030 deve essere prima convertito da una terza parte in Unicode per permettere a SAP Crystal Reports di interagire con esso come se fosse un file codificato in Unicode. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 215 1.4.6.3 Gestione degli eventi Error Nelle versioni precedenti di SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio ogni volta che si utilizza il controllo CrystalReportViewer, è necessario rilevare tutte le possibili eccezioni generate. Le eccezioni non rilevate compromettono la corretta elaborazione della pagina e determinano la visualizzazione di un errore. Per impedire problemi ed errori, è stato aggiunto al controllo CrystalReportViewer un nuovo evento, denominato Error. Se si utilizza tale evento, gli eventuali messaggi di eccezione vengono visualizzati nella parte superiore del controllo CrystalReportViewer senza che si verifichino problemi. 1.4.6.3.1 Per eliminare la pagina di errore con il metodo di evento Error Per eliminare l'eccezione generata, è necessario chiamare il metodo di evento Error e impostare ErrorEventArgs.Handled su True nel gestore dell'evento. 1. Aggiungere il metodo di evento Error alla classe di codice sottostante. 2. Impostare ErrorEventArgs.Handled su True nel gestore dell'evento. Esempio Sub myCrystalReportViewer_Error(ByVal source As Object, ByVal e As CrystalDecisions.Web.ErrorEventArgs) e.Handled = True End Sub void crystalReportViewer_Error(object source, CrystalDecisions.Web.ErrorEventArgs e) { e.Handled = true; } 1.4.6.4 Personalizzazione del controllo CrystalReportViewer con CSS L'aspetto del controllo CrystalReportViewer viene creato mediante l'uso di elementi grafici e fogli di stile CSS. Il foglio di stile, denominato default.css, è memorizzato in una sottodirectory della directory virtuale del visualizzatore denominata css. Nota In Visual Studio 2005 e versioni successive e in ASP.NET versione 2.0 l'aspetto dei controlli visivi può essere gestito tramite un nuovo strumento denominato Temi. I temi possono essere applicati al controllo 216 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net CrystalReportViewer, per conferire un aspetto uniforme ai controlli all'interno di una pagina o di un intero sito Web. Informazioni correlate Personalizzazione del controllo CrystalReportViewer con i temi [pagina 217] Finestra di dialogo Imposta classe CSS [pagina 840] Formattazione dei report mediante le classi CSS (Cascading Style Sheets) [pagina 640] 1.4.6.4.1 Personalizzazione di CSS per il controllo CrystalReportViewer Al foglio di stile si accede dalla proprietà CssFileNamedel controllo CrystalReportViewer, che è possibile visualizzare nella finestra Proprietà quando il controllo CrystalReportViewer è selezionato in visualizzazione Progettazione. 1. Creare un sito Web con un controllo CrystalReportViewer e un report Crystal. 2. Compilare ed eseguire il progetto almeno una volta per visualizzare il controllo CrystalReportViewer con le impostazioni di stile predefinite, quindi uscire dalla modalità di debug. 3. Aprire la pagina Default.aspx in visualizzazione Progettazione. 4. Fare clic sul controllo CrystalReportViewer per selezionarlo. 5. Nella finestra Proprietà individuare il percorso della directory del file "default.css" nella proprietà CssFileName. 6. In Esplora risorse individuare il suddetto file e copiarlo nella directory del sito Web. 7. Rinominare il file "custom.css". 8. Modificare la proprietà CssFileName in modo che punti alla directory del sito Web e al nome file "custom.css". 9. Ricompilare e verificare che il controllo CrystalReportViewer visualizzi il file custom.css nella directory locale del sito Web. 10. Uscire dalla modalità di debug. 11. Aprire il file "custom.css" e modificare il foglio di stile. 12. Eseguire la ricompilazione e verificare che le modifiche apportate siano state applicate al controllo CrystalReportViewer. 1.4.6.5 Personalizzazione del controllo CrystalReportViewer con i temi I temi sono uno strumento che consente di conferire un aspetto omogeneo a tutti i controlli visivi di una pagina o di un sito Web. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 217 A livello di pagina, per gestire l'aspetto di un controllo visivo, occorre impostarne la proprietà Theme sul nome del tema desiderato. Il tema verrà applicato a tutti i controlli visivi della pagina. Il controllo CrystalReportViewer è compatibile con i temi di ASP.NET 2.0. Qualsiasi modifica apportata a un tema viene estesa al controllo CrystalReportViewer e a tutti gli altri controlli visivi all'interno della pagina. Per ulteriori informazioni su come impostare e personalizzare i temi in ASP.NET 2.0, consultare la documentazione relativa a .NET Framework versione 2.0. Informazioni correlate Personalizzazione del controllo CrystalReportViewer con CSS [pagina 216] 1.4.6.6 Personalizzazione della barra degli strumenti di CrystalReportViewer La barra degli strumenti di CrystalReportViewer contiene pulsanti che gestiscono le funzioni comuni del controllo CrystalReportVIewer, ad esempio stampa, esportazione o modifica della pagina attualmente visualizzabile. Personalizzazione dei pulsanti della barra degli strumenti La barra degli strumenti di CrystalReportViewer contiene pulsanti che gestiscono le funzioni comuni del controllo CrystalReportVIewer, ad esempio stampa, esportazione o modifica della pagina attualmente visualizzabile. La visibilità di ciascun pulsante del controllo CrystalReportViewer viene gestita mediante una proprietà corrispondente della classe CrystalReportViewer. I nomi delle proprietà differiscono tra le versioni Windows e Web del controllo CrystalReportViewer. In un sito Web, l'aspetto della barra degli strumenti può essere controllato mediante CSS o i temi di ASP .Net. È possibile modificare l'aspetto delle icone predefinite dei pulsanti modificando le immagini nella directory virtuale del visualizzatore. Rimozione della barra degli strumenti La barra degli strumenti dal controllo CrystalReportViewer può essere rimossa a livello di codice oppure dal riquadro Smart Task. È possibile creare controlli personalizzati per replicare il comportamento di molti pulsanti della barra degli strumenti di CrystalReportViewer. 218 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Informazioni correlate Personalizzazione del controllo CrystalReportViewer con CSS [pagina 216] Personalizzazione del controllo CrystalReportViewer con i temi [pagina 217] Directory dei visualizzatori [pagina 14] 1.4.6.6.1 Controllo dei pulsanti visualizzati sulla barra degli strumenti di CrystalReportViewer Ogni pulsante della barra degli strumenti di CrystalReportViewer può essere abilitato o disabilitato separatamente. La visibilità di ciascun pulsante del controllo CrystalReportViewer viene gestita mediante una proprietà corrispondente della classe CrystalReportViewer. Esistono due controlli CrystalReportViewer nell'SDK di SAP Crystal Reports .NET. Per un sito Web si utilizza la classe CrystalDecisions.Web.CrystalReportViewer. Per un'applicazione Windows si utilizza la classe CrystalDecisions.Windows.Forms.CrystalReportViewer. Il nome della proprietà che controlla la visibilità di un pulsante della barra degli strumenti cambia in base alla versione del controllo CrystalReportViewer in uso. Per la classe CrystalDecisions.Web.CrystalReportViewer, ogni proprietà inizia con «Has», ad esempio HasExportButton, HasPrintButton o HasSearchButton. Per la classe CrystalDecisions.Windows.Forms.CrystalReportViewer, ogni proprietà inizia con «Show», ad esempio ShowExportButton, ShowPrintButton o ShowSearchButton. Per ulteriori informazioni sulla classe CrystalDecisions.Web.CrystalReportViewer o la classe CrystalDecisions.Windows.Forms.CrystalReportViewer, vedere SAP Crystal Reports .NET API Reference. Nota la rimozione di un pulsante dalla barra degli strumenti non implica la disabilitazione del comportamento corrispondente. Esempio Questo esempio mostra come rimuovere alcuni pulsanti dalla barra degli strumenti di CrystalReportViewer in un sito Web. Private Sub ConfigureCrystalReports() CrystalReportViewer1.HasPrintButton = False CrystalReportViewer1.HasExportButton = False CrystalReportViewer1.HasSearchButton = False End Sub private void ConfigureCrystalReports() { InitializeComponent(); crystalReportViewer1.HasPrintButton = false; crystalReportViewer1.HasExportButton = false; Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 219 } crystalReportViewer1.HasSearchButton = false; Informazioni correlate Rimozione del pulsante di stampa dal controllo CrystalReportViewer [pagina 107] Rimozione del pulsante di esportazione dal controllo CrystalReportViewer [pagina 118] 1.4.6.6.2 Rimozione della barra degli strumenti di CrystalReportViewer Suggerimento la barra degli strumenti può essere rimossa dall'applicazione a livello di codice oppure mediante la deselezione della casella di controllo Visualizza barra degli strumenti del riquadro Smart Task Attività di CrystalReportViewer. 1. Aggiungere un controllo CrystalReportViewer all'applicazione. 2. Impostare la proprietà CrystalReportViewer.DisplayToolbar su falso. Quando si esegue l'applicazione, la barra degli strumenti non viene più visualizzata sul controllo CrystalReportViewer. Esempio Private Sub ConfigureCrystalReports() CrystalReportViewer1.DisplayToolbar = False End Sub private void ConfigureCrystalReports() { InitializeComponent(); crystalReportViewer1.DisplayToolbar = false; } 1.4.6.6.3 Modifica dei pulsanti predefiniti della barra degli strumenti nel visualizzatore Web La barra degli strumenti di CrystalReportViewer include diversi elementi grafici che rappresentano la maggior parte delle proprietà disponibili. Gli elementi grafici sono memorizzati nella directory virtuale del visualizzatore per la versione diSAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio in uso. In un sito Web, la barra degli strumenti utilizza elementi grafici per rappresentare le seguenti proprietà: 220 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ● Albero dei gruppi ● Esportazione ● Stampa ● Drill-up ● Spostamento sulle pagine: prima pagina, ultima pagina, pagina precedente e pagina successiva ● Vai a pagina ● Cerca ● Logo di SAP BusinessObjects È possibile modificare i pulsanti utilizzando un proprio insieme di icone personalizzate. 1. Passare alla directory virtuale del visualizzatore. 2. Fare doppio clic sulla cartella immagini. 3. Fare doppio clic sulla cartella barra degli strumenti. Nella cartella barra degli strumenti sono contenute tutte le immagini utilizzate per la barra degli strumenti di CrystalReportViewer. 4. Sostituire le immagini con quelle desiderate o aprire le immagini in un editor grafico per modificarle. Il nome delle immagini deve tuttavia rimanere invariato. Le immagini della barra degli strumenti di CrystalReportViewer verranno modificate per tutte le applicazioni Web che utilizzano la directory virtuale del visualizzatore specifica. Informazioni correlate Directory dei visualizzatori [pagina 14] 1.4.7 Utilizzo di report SAP Crystal Reports Solo lettura (RPTR) I report SAP Crystal Reports Solo lettura (RPTR) sono report Crystal che possono essere visualizzati con applicazioni di visualizzazione report, ma che non possono essere modificati con l'SDK né aperti con applicazioni di progettazione di report. Ciò consente la protezione della proprietà intellettuale impedendo agli utenti di modificare il report o di ottenere informazioni sulla logica aziendale proprietaria archiviata nella definizione report. I report in formato SAP Crystal Reports Solo lettura utilizzano l'estensione file RPTR invece dell'estensione RPT dei report Crystal. È possibile creare un report RPTR esportando un report RPT in formato RPTR. Non è tuttavia supportata la conversione di un report RPTR in un report RPT. Poiché la definizione di un report RPTR non può essere modificata, non è possibile utilizzare questo SDK per impostare il percorso dell'origine dati di un report RPTR mediante il controller del database. È possibile, tuttavia, aggiornare in fase di esecuzione i dati contenuti in un report RPTR. È possibile utilizzare questo SDK per effettuare le seguenti attività: ● Creare un report RPTR esportando un report Crystal (RPT) in formato RPTR. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 221 Nota Solo i report creati con SAP Crystal Reports 2011 possono essere esportati in formato RPTR. ● Visualizzare un report RPTR ottenendone l'origine e passandola a un visualizzatore. ● Aggiornare in fase di esecuzione i dati di un report RPTR. ● Aprire un report RPTR ed esportarlo in formati diversi dal formato RPT. Non è possibile utilizzare questo SDK per effettuare le seguenti attività: ● Modificare la definizione report di un report RPTR. ● Impostare il percorso dell'origine dati di un report. ● Recuperare informazioni sulla definizione report di un report RPTR, incluse le formule, i campi, le sezioni e gli oggetti che costituiscono il report. ● Esportare un report RPTR in formato RPT. ● Aggiungere un report RPTR come sottoreport a un report RPT. 1.5 Esercitazioni 1.5.1 Esercitazioni relative al modello a oggetti CrystalReportViewer Le esercitazioni di questa sezione utilizzano metodi e proprietà della classe CrystalReportViewer e classi dello spazio dei nomi CrystalDecisions.Shared. Le esercitazioni di questa sezione utilizzano metodi e proprietà della classe CrystalReportViewer e classi dello spazio dei nomi CrystalDecisions.Shared. 1.5.1.1 Esercitazione: Accesso a un database SQL Server protetto mediante la protezione integrata In questa esercitazione viene descritto come aggiungere codice di accesso per visualizzare un report contenente informazioni provenienti da un database SQL Server protetto. Introduzione Quando si accede a un database SQL Server protetto mediante il modello a oggetti CrystalReportViewer, è necessario utilizzare classi dello spazio dei nomi CrystalDecisions.Shared. 222 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Per effettuare la connessione al server di database o alle origini dati ODBC, vengono utilizzate le proprietà della classe ConnectionInfo. In questa esercitazione, impostare le proprietà ServerName, DatabaseName, UserID e Password. Se si sceglie di impostare solo le proprietà DatabaseName, UserID e Password, si ha accesso al server predefinito del database specificato all'interno del report. Se, invece, si sceglie di assegnare la proprietà ServerName e specificare un server alternativo, in fase di esecuzione è possibile reindirizzare il report a un server diverso. L'istanza TableLogOnInfos viene recuperata dalla proprietà LogOnInfo del controllo CrystalReportViewer, quindi l'istanza ConnectionInfo viene assegnata a ciascun oggetto TableLogOnInfo presente nell'istanza TableLogOnInfos. Il codice di accesso fornito in questa esercitazione è valido anche per i sottoreport inseriti nel report principale. Per poter utilizzare il modello a oggetti ReportDocument nei sottoreport, occorre modificarne il codice (vedere Esercitazione: Accesso a un database SQL Server protetto con un sottoreport [pagina 335]). Per creare questa esercitazione utilizzando il modello a oggetti ReportDocument, vedere Esercitazione: Accesso a un database SQL Server protetto mediante la protezione integrata [pagina 222]. Il modello a oggetti ReportDocument è preferibile al modello a oggetti CrystalReportViewer. Codice di esempio Ciascuna esercitazione viene fornita con un codice di esempio in linguaggio Visual Basic e C# che illustra la versione completa del progetto. Seguire le istruzioni riportate in questa esercitazione per creare un nuovo progetto o aprire il progetto del codice di esempio per utilizzare una versione completa. Il codice di esempio si trova in cartelle classificate per lingua e tipo di progetto. I nomi delle cartelle per ciascuna versione di codice di esempio sono i seguenti: ● Sito Web in C#: CS_Web_CRVObjMod_DBLogon ● Progetto Windows C#: CS_Win_CRVObjMod_DBLogon ● Sito Web in Visual Basic: VB_Web_CRVObjMod_DBLogon ● Progetto Windows Visual Basic: VB_Win_CRVObjMod_DBLogon Informazioni correlate Scelta del modello a oggetti appropriato al progetto [pagina 31] Directory dei report di esempio [pagina 15] 1.5.1.1.1 Creazione di un report connesso a un database SQL Server protetto ● Configurazione di SQL Server: ○ Se è stato installato SQL Server (o la versione OEM, MSDE), è necessario configurarlo in modo che richieda l'Autenticazione SQL Server. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 223 ○ Se SQL Server (o la versione OEM, MSDE) non è stato installato, è necessario installare MSDE con l'Autenticazione SQL Server impostata su "True". ● È necessario installare il database Northwind fornito con SQL Server e verificare che richieda l'Autenticazione SQL Server. ● È necessario creare un account con accesso limitato da utilizzare nel sito Web. Una volta configurato SQL Server e il database Northwind in base alle istruzioni fornite nelle sezioni indicate, è possibile creare un report le cui informazioni provengano in modo sicuro dal database Northwind. Nota questa procedura può essere utilizzata solo con progetti creati in base a quanto indicato in Impostazione di un progetto [pagina 16], che prevede riferimenti specifici allo spazio dei nomi e la configurazione di codice richiesta per questa procedura; non è possibile completare la procedura senza questa configurazione. 1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome del progetto in grassetto, selezionare Aggiungi, quindi scegliere Aggiungi nuovo elemento. 2. Nella finestra di dialogo Aggiungi nuovo elemento, in visualizzazione Modelli, selezionare il modello Crystal Report. 3. Nel campo Nome, inserire il nome "NorthwindCustomers.rpt", quindi fare clic su Apri. 4. Nel riquadro Crea un nuovo documento Crystal Report della finestra di dialogo Galleria Crystal Reports, selezionare Uso della procedura guidata Report. 5. Nel riquadro Scegli un esperto selezionare Standard, quindi fare clic su OK. Viene visualizzata la finestra di dialogo Procedura guidata per la creazione di report standard. 6. Nel riquadro Origini dati disponibili, espandere la cartella Crea nuova connessione. 7. Dalla sottocartella, espandere la cartella OLE DB (ADO). Viene visualizzata la finestra OLE DB (ADO). 8. Selezionare Provider Microsoft OLE DB per SQL Server, quindi fare clic su Avanti. 9. Inserire i valori desiderati per server di database, ID utente e password nei campi Server, User ID e Password. 10. Dall’elenco a discesa Database, selezionare "Northwind". Lasciare deselezionata la casella di controllo Protezione integrata, poiché è in uso l’autenticazione SQL Server invece di quella NT. 11. Fare clic su Fine. La cartella OLE DB è ora estesa, mostra il server di database e, al suo interno, il database Northwind. 12. Espandere i nodi Northwind, dbo e Tables, quindi selezionare la tabella Customers. 13. Fare clic sul simbolo > per spostare la tabella nel riquadro Tabelle selezionate, quindi scegliere Avanti. 14. Espandere la tabella Customer, quindi tenendo premuto il tasto Ctrl fare clic su CompanyName, ContactName e City. 15. Fare clic sul simbolo > per spostare questi campi nel riquadro Campi da visualizzare, quindi scegliere Avanti. 16. Nel riquadro Campi disponibili, in Campi report, selezionare Customer.City, fare clic sul simbolo > per spostare il campo nel riquadro Raggruppa in base a, quindi scegliere Fine. Il report NorthwindCustomers viene creato e caricato nella finestra principale di Visual Studio. 224 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.1.1.2 Collegamento del report senza codice di accesso In Impostazione di un progetto [pagina 16], un controllo CrystalReportViewer è stato inserito nel Web Form o nel Windows Form. Nel passaggio precedente è stato aggiunto un report NorthwindCustomers al progetto. In questa sezione, il percorso della directory di file del report NorthwindCustomers viene collegato al controllo CrystalReportViewer, quindi si verifica se il report viene visualizzato correttamente quando il codice di accesso al database non è stato ancora impostato. 1.5.1.1.2.1 Per collegare il percorso della directory di file del report NorthwindCustomers al controllo CrystalReportViewer 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Individuare il metodo ConfigureCrystalReports() creato in Impostazione di un progetto [pagina 16]. 4. Dichiarare una variabile di stringa, denominarla reportPath e assegnarle un percorso della fase di esecuzione del report locale. Questo percorso viene determinato in modo diverso a seconda che si tratti di siti Web o di progetti Windows: ○ In un sito Web, trasferire il nome del file di report locale come parametro stringa nel metodo Server.MapPath(). In questo modo, in fase di esecuzione viene eseguita la mappatura del report locale al percorso della directory di file del disco rigido. Dim reportPath As String = Server.MapPath("NorthwindCustomers.rpt") string reportPath = Server.MapPath("NorthwindCustomers.rpt"); ○ In un progetto Windows, concatenare la proprietà Application.StartupPath con una barra rovesciata e il nome del file di report locale. In questo modo viene eseguita la mappatura del report nella stessa directory dell'eseguibile Windows. Nota Al momento della compilazione, copiare il report nella directory contenente il file eseguibile. Dim reportPath As String = Application.StartupPath & "\" & "NorthwindCustomers.rpt" string reportPath = Application.StartupPath + "\\" + "NorthwindCustomers.rpt"; 5. Assegnare il percorso della directory di file del report NorthwindCustomers alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = reportPath crystalReportViewer.ReportSource = reportPath; Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 225 1.5.1.1.2.2 Per verificare il caricamento del report NorthwindCustomers A questo punto è possibile creare ed eseguire il progetto. È previsto che il caricamento del report abbia esito negativo, poiché il codice per accedere al database non è stato ancora scritto. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Se si utilizza un report non incorporato in un progetto Windows, individuare l'eseguibile Windows compilato nella sottodirectory \bin\debug\ e copiarvi il report. Nota Affinché il report non incorporato venga caricato dall'eseguibile Windows in fase di esecuzione, è necessario salvare il report nella stessa directory dell'eseguibile. 4. Dal menu Debug, scegliere Avvia. Il report NorthwindCustomers non verrà visualizzato. Per visualizzarlo, è necessario aggiungere il codice di accesso al database. Nota I risultati possono variare, in base alla versione di SAP Crystal Reports in uso. Ad esempio, se è stato installato SAP Crystal Reports 10 o versione successiva, viene chiesto di fornire le informazioni di accesso al database per il report. Se si sta utilizzando una versione precedente di SAP Crystal Reports, viene generata un’eccezione. In entrambi i casi, per creare un'applicazione completamente funzionale è necessario seguire la procedura successiva. 5. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.1.3 Aggiunta del codice di accesso del report A questo punto è possibile aggiungere il codice di accesso alla classe di codice sottostante. Iniziare creando un metodo di supporto privato, SetDBLogonForReport(). 1.5.1.1.3.1 Per creare e codificare il metodo SetDBLogonForReport() 1. Tornare alla classe di codice sottostante del Web Form o Windows Form. 2. Alla fine della classe, creare un nuovo metodo privato denominato SetDBLogonForReport() con l'inserimento di ConnectionInfo nella firma. Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo) End Sub 226 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net private void SetDBLogonForReport(ConnectionInfo connectionInfo) { } 3. All'interno di questo metodo, recuperare l'istanza TableLogOnInfos dalla proprietà LogOnInfo della classe CrystalReportViewer. Nota TableLogOnInfos è una classe indicizzata che contiene istanze della classe TableLogOnInfo. Dim myTableLogOnInfos As TableLogOnInfos = myCrystalReportViewer.LogOnInfo TableLogOnInfos tableLogOnInfos = crystalReportViewer.LogOnInfo; 4. Creare un ciclo foreach che passi attraverso ogni istanza nell’istanza TableLogOnInfo della classe indicizzata TableLogOnInfos. For Each myTableLogOnInfo As TableLogOnInfo In myTableLogOnInfos Next foreach(TableLogOnInfo tableLogOnInfo in tableLogOnInfos) { } 5. All'interno del ciclo foreach, impostare la proprietà ConnectionInfo di TableLogOnInfosul parametro ConnectionInfo. myTableLogOnInfo.ConnectionInfo = myConnectionInfo tableLogOnInfo.ConnectionInfo = connectionInfo; 1.5.1.1.3.2 Per modificare il metodo ConfigureCrystalReports() in modo da fare riferimento al codice di accesso al database Con questa procedura è stato creato un metodo per impostare l’accesso al database. A questo punto diventa necessario modificare il metodo ConfigureCrystalReports() in modo da fare riferimento al metodo appena creato e consentire al report di rilevare le informazioni di accesso al database. Per modificare il metodo ConfigureCrystalReports() occorre effettuare due operazioni: ● Configurare l'istanza ConnectionInfo. ● Chiamare il metodo SetDBLogonForReport(). 1. Nel metodo ConfigureCrystalReports() dichiarare e creare un'istanza della classe ConnectionInfo sotto il codice che collega il report al controllo CrystalReportViewer. Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo() ConnectionInfo connectionInfo = new ConnectionInfo(); Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 227 2. Nella riga successiva chiamare il metodo SetDBLogonForReport() passando l'istanza di ConnectionInfo. SetDBLogonForReport(myConnectionInfo) SetDBLogonForReport(connectionInfo); 3. Impostare le proprietà DatabaseName, UserID, Passworde dell’istanza ConnectionInfo. Nota Per motivi di sicurezza, è importante utilizzare un account di database con autorizzazioni di accesso limitate. Nel codice scritto, sostituire la password di esempio 1234 (riportata in di seguito) con una password personalizzata. myConnectionInfo.DatabaseName = "Northwind" myConnectionInfo.UserID = "limitedPermissionAccount" myConnectionInfo.Password = "1234" connectionInfo.DatabaseName = "Northwind"; connectionInfo.UserID = "limitedPermissionAccount"; connectionInfo.Password = "1234"; 1.5.1.1.3.3 Per verificare il caricamento del report NorthwindCustomers A questo punto è possibile creare ed eseguire il progetto. Il report dovrebbe essere caricato correttamente, perché è stato aggiunto codice per accedere al database. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Il report NorthwindCustomers viene visualizzato. 4. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.1.4 Aggiunta della possibilità di modificare la posizione del database in fase di esecuzione In questa sezione viene descritto come modificare la posizione del database in fase di esecuzione. Questa operazione richiede solo una piccola modifica all'istanza di ConnectionInfo. Nota In questa esercitazione verrà modificato il nome del server del database e non il nome del database. Non è possibile modificare il nome del database con il controllo CrystalReportViewer. 228 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.1.1.4.1 Per modificare la posizione del database in fase di esecuzione 1. Nel metodo ConfigureCrystalReports() creare nel codice una coppia di interruzioni di riga, dopo la riga che chiama il metodo SetDBLogonForReport(). 2. All'interno delle interruzioni di riga, impostare la proprietà ServerName dell'istanza di ConnectionInfo. Nota Nel codice scritto, sostituire il nome del server di esempio DevDatabaseServer (riportato in basso) con quello del proprio server. myConnectionInfo.ServerName = "DevDatabaseServer" connectionInfo.ServerName = "DevDatabaseServer"; 1.5.1.1.4.2 Per verificare che il report possa essere reimpostato per un server di database alternativo in fase di esecuzione A questo punto è possibile creare ed eseguire il progetto. In fase di esecuzione, il report dovrebbe essere reindirizzato al server di database alternativo. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Il report NorthwindCustomers viene visualizzato. 4. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.2 Esercitazione: Lettura e impostazione di parametri discreti In questa esercitazione viene descritto come creare un report i cui dati possano essere filtrati in base a un parametro discreto. Introduzione Un parametro discreto è un valore singolo, al contrario di un parametro di intervallo che si riferisce a un intervallo di valori. Agli elementi di testo (come le città) si accede in genere tramite parametri discreti. Agli elementi numerici (come gli stipendi dei dipendenti) si accede in genere tramite parametri di intervallo. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 229 In questa esercitazione viene impostato un valore per un parametro discreto che consente di visualizzare un report clienti basato su un campo. Il report mostra solo i clienti che vivono nelle città selezionate da un apposito elenco. L’elenco delle città deriva dai valori predefiniti del parametro Città. Tali valori predefiniti sono incapsulati all'interno nel report. Iniziare creando un report clienti con un parametro Città. I dati del report sono derivati dal database di esempio fornito con SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. Quando si crea un’istanza del report nel codice, si crea un ArrayList contenente nomi di città (Paris, Tokyo) e si passa l’istanza ArrayList a un metodo di supporto che imposta tali nomi come i valori correnti del parametro Città. A questo punto, collegare il report al controllo CrystalReportViewer e visualizzare il report mostrando solo i clienti che vivono a Parigi e Tokyo. Nella parte successiva dell'esercitazione vengono effettuate le seguenti operazioni: ● Creazione di un metodo che recupera tutti i valori predefiniti e li restituisce in un ArrayList. ● Aggiunta di un controllo ListBox al form e compilazione dello stesso dall’ArrayList. ● Aggiunta di un controllo Button per rivisualizzare il report in base alle selezioni nel controllo ListBox. Nella parte finale dell’esercitazione, viene codificato l’evento clic del controllo Button per recuperare tutti gli elementi selezionati nel controllo ListBox, quindi tali valori vengono impostati come valori correnti del parametro Città. Il report viene nuovamente visualizzato mostrando solo i clienti che vivono nelle città selezionate nel controllo ListBox. Codice di esempio Ciascuna esercitazione viene fornita con un codice di esempio in linguaggio Visual Basic e C# che illustra la versione completa del progetto. Seguire le istruzioni riportate in questa esercitazione per creare un nuovo progetto o aprire il progetto del codice di esempio per utilizzare una versione completa. Il codice di esempio si trova in cartelle classificate per lingua e tipo di progetto. I nomi delle cartelle per ciascuna versione di codice di esempio sono i seguenti: ● Sito Web in C#: CS_Web_CRVObjMod_Parameters ● Progetto Windows C#: CS_Win_CRVObjMod_Parameters ● Sito Web in Visual Basic: VB_Web_CRVObjMod_Parameters ● Progetto Windows Visual Basic: VB_Win_CRVObjMod_Parameters Database Xtreme Il database Xtreme viene utilizzato in alcune delle esercitazioni. È incluso nel pacchetto del codice di esempio scaricabile da http://www.sdn.sap.com/irj/boc/sdklibrary . È necessario creare manualmente una connessione ODBC al database. Informazioni correlate Directory dei report di esempio [pagina 15] 230 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.1.2.1 Creazione di un report con parametri Per iniziare, creare un report con informazioni provenienti dal database Xtreme. 1.5.1.2.1.1 Creazione di un report con parametri 1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome del progetto in grassetto, selezionare Aggiungi, quindi scegliere Aggiungi nuovo elemento. 2. Nella finestra di dialogo Aggiungi nuovo elemento, in visualizzazione Modelli, selezionare il modello Crystal Report. 3. Nel campo Nome immettere il nome CustomersByCity.rpt e fare clic su Aggiungi. 4. Nel riquadro Crea un nuovo documento Crystal Report della finestra di dialogo Galleria Crystal Reports, selezionare Uso della procedura guidata Report. 5. Nel riquadro Scegli un esperto selezionare Standard, quindi fare clic su OK. 6. Nel riquadro Origini dati disponibili della finestra Procedura guidata per la creazione di report standard, espandere la cartella Crea nuova connessione. 7. Dalla sottocartella, espandere la cartella ODBC (RDO). 8. Nella finestra ODBC (RDO) selezionare la voce ODBC DSN corretta per il database Xtreme e quindi fare clic su Fine. 9. Espandere il nodo Tabelle, fare doppio clic sulla tabella Clienti per spostarla nel riquadro Tabelle selezionate, quindi scegliere Avanti. 10. Espandere la tabella Clienti, quindi tenendo premuto il tasto Ctrl fare clic su Nome cliente, Titolo contatto, Indirizzo1, Cognome contatto e Città. 11. Fare clic sul simbolo > per spostare questi campi nel riquadro Campi da visualizzare, quindi scegliere Avanti. 12. Nel riquadro Campi disponibili, in Campi report, fare doppio clic su Clienti.Città per spostare il campo nel riquadro Raggruppa in base a, quindi scegliere Fine. Il report CustomersByCity viene creato e caricato nella finestra principale di Visual Studio. 1.5.1.2.1.2 Per aggiungere un parametro Città A questo punto è possibile aggiungere un parametro denominato Città e compilarlo con i valori predefiniti. Explorer Campo deve essere visibile poiché garantisce l’accesso alle diverse funzionalità del report, inclusi i parametri. Per rendere Explorer Campo visibile, fare clic sul menu Crystal Reports, quindi scegliere Explorer Campo. 1. Se Explorer Campo non è visibile, nella barra degli strumenti di Crystal Reports fare clic sul pulsante Alterna visualizzazione campi. Suggerimento per visualizzare Explorer Campo, è possibile anche selezionare il menu Crystal Reports e scegliere Explorer Campo. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 231 2. In Explorer Campo, fare clic con il pulsante destro del mouse su Campi parametro, quindi selezionare Nuovo…. 3. Nella finestra di dialogo Crea campo parametro: a. Impostare Nome su Città. b. Impostare Tipo su Stringa. Impostare Testo prompt su Selezionare una o più città. c. Impostare Campo valore su Città. d. Fare clic su Azioni, quindi selezionare Aggiungi tutti i valori del database. Verrà così aggiunto al riquadro centrale l'intero elenco di città. e. Nel riquadro Opzioni dei valori impostare Testo prompt su Selezionare una o più città. f. Nello stesso riquadro impostare Consenti valori multipli su True. g. Impostare Consenti valori discreti su True. 4. Fare clic su OK per chiudere la finestra di dialogo Crea campo parametro. 1.5.1.2.1.3 Per connettere il parametro Città alla colonna Città del database Il campo Valori predefiniti è stato impostato per contenere un lungo elenco di città. Più avanti nel corso di questa esercitazione si accederà allo stesso elenco di valori predefiniti a livello di programmazione, tramite la proprietà ParameterFieldInfo della classe CrystalReportViewer. A questo punto, utilizzare l’Esperto selezione per impostare una formula che connetta la colonna Città del database al campo parametro Città appena creato. 1. Nella barra degli strumenti di Crystal Reports, fare clic su Esperto selezione. 2. Nella finestra di dialogo Scegli campo, in Campi report, selezionare Clienti.Città, quindi scegliere OK. 3. Nella finestra di dialogo Select Expert, all'interno della scheda Customer.City, impostare l’elenco a discesa su "è uguale a". 4. Nel nuovo elenco a discesa visualizzato a destra, selezionare la prima opzione disponibile, {?Città}, quindi fare clic su OK. Nota questa selezione, {?City}, corrisponde al parametro Città creato in precedenza. 5. Dal menu File, scegliere Salva tutto. È ora possibile collegare il report al controllo CrystalReportViewer e impostare il parametro Città con due valori iniziali, Parigi e Tokyo. 1.5.1.2.2 Collegamento del report Durante l'esecuzione delle istruzioni fornite in Impostazione di un progetto [pagina 16] come preparazione a questa esercitazione, è stato inserito un controllo CrystalReportViewer nel Web Form o nel Windows Form. Nei passaggi precedenti, il report CustomersByCity è stato aggiunto al progetto. 232 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net In questa sezione, il percorso della directory di file del report CustomersByCity viene collegato al controllo CrystalReportViewer. Viene quindi verificato se è possibile visualizzare correttamente il report quando i valori correnti del campo parametro non sono ancora stati impostati. 1.5.1.2.2.1 Per collegare il percorso della directory di file del report CustomersByCity al controllo CrystalReportViewer 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice per visualizzare la classe di codice sottostante relativa al Web Form o al Windows Form. 3. Individuare il metodo ConfigureCrystalReports() creato in Impostazione di un progetto [pagina 16]. 4. Dichiarare una variabile di stringa, denominarla reportPath e assegnarle un percorso della fase di esecuzione del report locale. Questo percorso viene determinato in modo diverso a seconda che si tratti di siti Web o di progetti Windows: ○ In un sito Web, trasferire il nome del file di report locale come parametro stringa nel metodo Server.MapPath(). In questo modo, in fase di esecuzione viene eseguita la mappatura del report locale al percorso della directory di file del disco rigido. Dim reportPath As String = Server.MapPath("CustomersByCity.rpt") string reportPath = Server.MapPath("CustomersByCity.rpt"); ○ In un progetto Windows, concatenare la proprietà Application.StartupPath con una barra rovesciata e il nome del file di report locale. In questo modo viene eseguita la mappatura del report nella stessa directory dell'eseguibile Windows. Nota Al momento della compilazione, copiare il report nella directory contenente il file eseguibile. Dim reportPath As String = Application.StartupPath & "\" & "CustomersByCity.rpt" string reportPath = Application.StartupPath + "\\" + "CustomersByCity.rpt"; 5. Assegnare il percorso della directory di file del report CustomersByCity alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = reportPath crystalReportViewer.ReportSource = reportPath; Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 233 1.5.1.2.2.2 Per verificare il caricamento del report CustomersByCity A questo punto è possibile creare ed eseguire il progetto. È previsto che il caricamento del report abbia esito negativo, poiché il codice per l'impostazione di un valore per campo parametro Città non è stato ancora scritto. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Se si utilizza un report non incorporato in un progetto Windows, individuare l'eseguibile Windows compilato nella sottodirectory \bin\ [Visual Basic] o \bin\debug\ [C#] e copiarvi il report. Nota Affinché il report non incorporato venga caricato dall'eseguibile Windows in fase di esecuzione, è necessario salvare il report nella stessa directory dell'eseguibile. 4. Dal menu Debug, scegliere Avvia. Il report CustomersByCity non verrà visualizzato. Per visualizzarlo, è necessario aggiungere un valore per il campo parametro Città, più avanti nel corso di questa esercitazione. Nota I risultati possono variare, in base alla versione di SAP Crystal Reports in uso. Nelle versioni più recenti, viene visualizzato un form in cui si richiede di inserire i valori per il parametro del report. In quelle precedenti, invece, viene generata l'eccezione "Valore corrente del campo parametro mancante". In entrambi i casi, per creare un'applicazione completamente funzionale è necessario aggiungere codice supplementare. 5. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.2.3 Impostazione manuale di parametri nel codice A questo punto è possibile impostare due valori ("Paris" e "Tokyo") nel campo parametro Città del report CustomersByCity. Ciò implica l'esigenza di aggiungere nuovo codice, operazione che è opportuno suddividere nei seguenti processi: ● È necessaria una costante PARAMETER_FIELD_NAME per contenere il nome del campo parametro "Città". ● Il codice per l’aggiunta di valori correnti al parametro Città viene utilizzato in diversi punti di questa esercitazione; per questo motivo viene creato come metodo di supporto separato. ● All’interno del metodo ConfigureCrystalReports(), aggiungere i parametri "Paris" e "Tokyo" a un’istanza ArrayList e passare il report e l’istanza ArrayList al metodo di supporto per l’elaborazione. 234 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.1.2.3.1 Creazione di una costante PARAMETER_FIELD_NAME 1. Tornare alla classe di codice sottostante del Web Form o Windows Form. 2. A livello di classe, creare una nuova costante di stringa, PARAMETER_FIELD_NAME, e impostarne il valore su "Città". Private Const PARAMETER_FIELD_NAME As String = "City" private const string PARAMETER_FIELD_NAME = "City"; 1.5.1.2.3.2 Creazione di un metodo di supporto che aggiunga valori correnti al parametro del report A questo punto è possibile creare il metodo di supporto che aggiunge valori correnti al parametro del report. 1. Tornare alla classe di codice sottostante del Web Form o Windows Form. 2. Sopra la firma della classe, all'inizio della classe, aggiungere una dichiarazione "Imports" [Visual Basic] o "using" [C#] per lo spazio dei nomi System.Collections (se non è stato già dichiarato). Nota Questa dichiarazione è necessaria per accedere alla classe ArrayList. Imports System.Collections using System.Collections; 3. Alla fine della classe, creare un nuovo metodo privato denominato SetCurrentValuesForParameterField() con due variabili nella firma: ParameterFields e ArrayList. Private Sub SetCurrentValuesForParameterField(ByVal myParameterFields As ParameterFields, ByVal myArrayList As ArrayList) End Sub private void SetCurrentValuesForParameterField(ParameterFields parameterFields, ArrayList arrayList) { } 4. In questo metodo dichiarare e creare un'istanza della classe ParameterValues come variabile currentParameterValues. Nota Affinché sia possibile accedere alla classe ParameterValues, è necessario includere una dichiarazione "Imports" [Visual Basic] o "using" [C#] all'inizio della classe di codice sottostante per lo spazio Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 235 dei nomi CrystalDecisions.Shared. (tale dichiarazione è stata aggiunta in Impostazione di un progetto [pagina 16]). Dim currentParameterValues As ParameterValues = New ParameterValues() ParameterValues currentParameterValues = new ParameterValues(); 5. Creare un ciclo foreach per recuperare tutti i valori inseriti (come tipo Object) dall’istanza ArrayList. Nota In questo metodo, vengono recuperati i valori da ArrayList e in seguito viene scritto il codice per aggiungere i valori ad ArrayList. For Each submittedValue As Object In myArrayList Next foreach(object submittedValue in arrayList) { } 6. All’interno del ciclo foreach, dichiarare e creare un’istanza per la classe ParameterDiscreteValue. Dim myParameterDiscreteValue As ParameterDiscreteValue = New ParameterDiscreteValue() ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue(); 7. Nel ciclo foreach, convertire submittedValue in stringa e passarla alla proprietà Value dell’istanza ParameterDiscreteValue. myParameterDiscreteValue.Value = submittedValue.ToString() parameterDiscreteValue.Value = submittedValue.ToString(); 8. Nel ciclo foreach, aggiungere l’istanza ParameterDiscreteValue nella classe indicizzata currentParameterValues. Questo completa il codice nel ciclo foreach. Il resto del codice, descritto nei passaggi successivi, viene posizionato dopo il ciclo foreach. currentParameterValues.Add(myParameterDiscreteValue) currentParameterValues.Add(parameterDiscreteValue); 9. Fuori dal ciclo foreach, recuperare l'istanza ParameterField dalla classe indicizzata ParameterFields basata sulla voce di indice della costante PARAMETER_FIELD_NAME. Dim myParameterField As ParameterField = myParameterFields(PARAMETER_FIELD_NAME) ParameterField parameterField = parameterFields[PARAMETER_FIELD_NAME]; 10. Passare l’istanza currentParameterValues alla proprietà CurrentValues dell’istanza ParameterField. 236 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net myParameterField.CurrentValues = currentParameterValues parameterField.CurrentValues = currentParameterValues; 1.5.1.2.3.3 Per chiamare il metodo SetCurrentValuesForParameterField () prima che il report sia collegato al controllo CrystalReportViewer In questa procedura è stato descritto come creare un metodo che recupera valori da un’istanza ArrayList e li posiziona come valori correnti in un’istanza ParameterField. A questo punto, affinché il report rilevi le impostazioni del parametro, è necessario chiamare il metodo prima di collegare il report al controllo CrystalReportViewer. 1. Nel metodo ConfigureCrystalReports(), dichiarare e creare un'istanza ArrayList sopra la riga che collega il report al controllo CrystalReportViewer. Dim myArrayList As ArrayList = New ArrayList() ArrayList arrayList = new ArrayList(); 2. Aggiungere i nomi di città "Paris" e "Tokyo" come stringhe all’istanza ArrayList. myArrayList.Add("Paris") myArrayList.Add("Tokyo") arrayList.Add("Paris"); arrayList.Add("Tokyo"); 3. Sotto il codice che collega il controllo CrystalReportViewer, recuperare l'istanza ParameterFields dalla proprietà ParameterFieldInfo del controllo CrystalReportViewer. Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo ParameterFields parameterFields = crystalReportViewer.ParameterFieldInfo; 4. Chiamare il metodo SetCurrentValuesForParameterField() e passare le istanze ParameterFields e ArrayList. SetCurrentValuesForParameterField(myParameterFields, myArrayList) SetCurrentValuesForParameterField(parameterFields, arrayList); Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 237 1.5.1.2.3.4 Per verificare il caricamento del report CustomersByCity A questo punto è possibile creare ed eseguire il progetto. È previsto che il report venga visualizzato correttamente poiché è stato scritto il codice per l'impostazione dei valori correnti nel campo parametro. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. 4. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. Nella sezione successiva viene descritto come recuperare i valori predefiniti dal campo parametro e impostare tali valori in un controllo ListBox. Questi valori verranno utilizzati al termine dell’esercitazione per selezionare nuove città in modo dinamico e filtrare il report in base alle nuove città selezionate. 1.5.1.2.4 Creazione di un controllo ListBox che visualizzi i parametri predefiniti Nella restante parte dell’esercitazione viene descritto come visualizzare un elenco completo di valori predefiniti per il campo parametro in un controllo ListBox e come filtrare il contenuto del report in base alle selezioni effettuate nel controllo ListBox. In questa sezione viene descritto come compilare il controllo ListBox con i valori predefiniti del campo parametro. Nota È importante ricordare che i valori predefiniti, ovvero un lungo elenco di città, sono stati impostati al momento della creazione del report all’inizio dell’esercitazione. A questo punto è necessario aggiungere e configurare un controllo ListBox, quindi creare un metodo di supporto per compilare il controllo ListBox. 1.5.1.2.4.1 Per creare e configurare un controllo ListBox sul form 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Se si sta sviluppando un sito Web, effettuare le seguenti operazioni: a. Fare clic sul controllo CrystalReportViewer per selezionarlo. b. Premere il tasto freccia sinistra sulla tastiera per visualizzare un cursore lampeggiante, quindi premere Invio. 4. Se si sta sviluppando un progetto Windows, effettuare le seguenti operazioni: 238 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net a. Fare clic sul controllo CrystalReportViewer per selezionarlo. b. Nella finestra Proprietà, impostare Dock su "Bottom." c. Ridimensionare il controllo CrystalReportViewer, in modo da lasciare spazio sufficiente sopra di esso per il controllo ListBox. d. Nella finestra Proprietà, impostare Anchor su "Top, Bottom, Left, Right." 5. Dalla casella degli strumenti, trascinare un controllo ListBox sul controllo CrystalReportViewer. 6. Fare clic sul controllo ListBox per selezionarlo. 7. Nella finestra Proprietà, effettuare le seguenti operazioni: a. Impostare ID o Name su "defaultParameterValuesList". b. Impostare SelectionMode su "Multiple" (ovvero su "MultiExtended" in un progetto Windows). 8. Dal menu File, scegliere Salva tutto. 1.5.1.2.4.2 Per creare un metodo di supporto che recuperi i valori predefiniti dal campo parametro A questo punto è possibile creare un metodo di supporto che recuperi i valori predefiniti dal campo parametro. 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Alla fine della classe, creare un nuovo metodo privato denominato GetDefaultValuesFromParameterField() che restituisca un’istanza ArrayList, con ParameterFields passato nella firma del metodo. Private Function GetDefaultValuesFromParameterField(ByVal myParameterFields As ParameterFields) As ArrayList End Function private ArrayList GetDefaultValuesFromParameterField(ParameterFields parameterFields) { } 4. Recuperare l’istanza ParameterField dalla classe indicizzata ParameterFields, basata sulla voce di indice della costante PARAMETER_FIELD_NAME. Dim myParameterField As ParameterField = myParameterFields(PARAMETER_FIELD_NAME) ParameterField parameterField = parameterFields[PARAMETER_FIELD_NAME]; 5. Recuperare una classe indicizzata ParameterValues (come variabile defaultParameterValues) dalla proprietà DefaultValues dell’istanza ParameterField. Dim defaultParameterValues As ParameterValues = myParameterField.DefaultValues ParameterValues defaultParameterValues = parameterField.DefaultValues; Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 239 6. Dichiarare e creare un’istanza di ArrayList. Dim myArrayList As ArrayList = New ArrayList() ArrayList arrayList = new ArrayList(); 7. Creare un ciclo foreach per recuperare tutte le istanze ParameterValue da defaultParameterValues. All’interno del ciclo foreach, creare un blocco condizionale nidificato che verifichi i valori di parametro discreto (in opposizione a quelli di intervallo). Esistono due versioni di questo blocco condizionale, poiché l'API è leggermente cambiata nelle diverse versioni di SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. Controllare l’API (utilizzando IntelliSense) per verificare quale proprietà è disponibile in ParameterValue: For Each myParameterValue As ParameterValue In defaultParameterValues Next foreach(ParameterValue parameterValue in defaultParameterValues) { } 8. Se la proprietà disponibile è IsRange, all'interno del ciclo foreach inserire il seguente codice: If (Not myParameterValue.IsRange) Then End If if(!parameterValue.IsRange) { } 9. Oppure, se la proprietà disponibile è Kind (DiscreteOrRangeKind, un'enumerazione con tre valori: DiscreteValue, RangeValue, DiscreteAndRangeValue) immettere il seguente codice all'interno del suddetto ciclo: If (myParameterValue.Kind = DiscreteOrRangeKind.DiscreteValue) Then End If if(parameterValue.Kind == DiscreteOrRangeKind.DiscreteValue) { } 10. All'interno del blocco condizionale nidificato, eseguire il cast dell’istanza ParameterValue nella classe estesa, DiscreteParameterValue. Dim myParameterDiscreteValue As ParameterDiscreteValue = CType(myParameterValue, ParameterDiscreteValue) ParameterDiscreteValue parameterDiscreteValue = (ParameterDiscreteValue)parameterValue; 11. Sempre all'interno del blocco condizionale nidificato, aggiungere la proprietà Value dell’istanza ParameterDiscreteValue (convertita in stringa) all’istanza ArrayList. myArrayList.Add(myParameterDiscreteValue.Value.ToString()) arrayList.Add(parameterDiscreteValue.Value.ToString()); 240 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 12. Fuori dal blocco condizionale e dal ciclo foreach, alla fine del metodo, restituire l’istanza ArrayList dal metodo. Return myArrayList return arrayList; 1.5.1.2.4.3 Per collegare l'ArrayList restituito dal metodo al controllo ListBox in un progetto Web I valori predefiniti sono stati recuperati dal campo parametro e restituiti dal metodo come ArrayList. A questo punto è possibile collegare questo ArrayList al controllo ListBox defaultParameterValuesList. Il codice varia leggermente a seconda che si utilizzi un progetto Web o Windows; pertanto, assicurarsi di completare solo la procedura appropriata, Web o Windows, tra quelle riportate di seguito. 1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, subito dopo la riga che recupera l'istanza ParameterFields. 2. All'interno delle interruzioni di riga, creare un blocco condizionale Not IsPostBack. Nota Il blocco condizionale Not IsPostBack viene utilizzato per incapsulare il codice che deve essere eseguito solo la prima volta che viene caricata la pagina. I controlli vengono in genere collegati ai valori dei dati nei blocchi condizionali Not IsPostBack, in modo che i valori dei dati (e tutti i successivi eventi di controllo) non siano reimpostati durante i ricaricamenti di pagina. If Not IsPostBack Then End If if(!IsPostBack) { } 3. All'interno del blocco condizionale Not IsPostBack, impostare la proprietà DataSource del controllo ListBox defaultParameterValuesList sul metodo di supporto GetDefaultValuesFromParameterField(), passando l’istanza ParameterFields come parametro di metodo. defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(myParameterFields) defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(parameterFields); 4. Sempre all'interno del blocco condizionale Not IsPostBack, chiamare il metodo DataBind() del controllo ListBox defaultParameterValuesList. defaultParameterValuesList.DataBind() Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 241 defaultParameterValuesList.DataBind(); 1.5.1.2.4.4 Per collegare l'ArrayList restituito dal metodo al controllo ListBox in un progetto Windows 1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, subito dopo la riga che recupera l'istanza ParameterFields. All'interno delle interruzioni di riga create è possibile inserire codice aggiuntivo per impostare l'origine dati per il controllo ListBox defaultParameterValuesList quando la pagina viene caricata per la prima volta. 2. All'interno delle interruzioni di riga, impostare la proprietà DataSource del controllo ListBox defaultParameterValuesList sul metodo di supporto GetDefaultValuesFromParameterField(), passando l’istanza ParameterFields come parametro di metodo. defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(myParameterFields) defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(parameterFields); 1.5.1.2.4.5 Per verificare la compilazione del controllo ListBox defaultParameterValuesList A questo punto è possibile creare ed eseguire il progetto per verificare se il controllo ListBox defaultParameterValuesList è stato compilato. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Il controllo ListBox defaultParameterValuesList visualizza un elenco completo di valori predefiniti (ovvero città in questa esercitazione). 4. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.2.5 Impostazione di parametri dalle selezioni di ListBox In questa sezione viene descritto come aggiungere un pulsante per rivisualizzare il report in base alle selezioni effettuate nel ListBox defaultParameterValuesList controllo. All’interno del metodo di evento per questo pulsante, viene chiamato lo stesso metodo chiamato al primo caricamento della pagina:SetCurrentValuesForParameterField() Questa volta, tuttavia, anziché passare valori arbitrari (Paris e Tokyo), vengono passati i valori selezionati nel controllo ListBox defaultParameterValuesList. 242 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.1.2.5.1 Per creare e configurare un pulsante di rivisualizzazione sul form 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Dalla casella degli strumenti, trascinare un controllo Button a destra del controllo ListBox. 4. Fare clic sul controllo Button per selezionarlo. 5. Nella finestra Proprietà, effettuare le seguenti operazioni: a. Impostare ID (o Name) su "redisplay." b. Impostare Text su "Rivisualizza report". 1.5.1.2.5.2 Per creare il metodo di evento clic per il controllo Button di rivisualizzazione in un progetto Web A questo punto è possibile creare un metodo di evento clic per il controlloListBox che ricerchi gli elementi selezionati nel controllo e li passi al metodo SetCurrentValuesForParameterField(). Il codice varia leggermente a seconda che si utilizzi un progetto Web o Windows, quindi completare solo la procedura appropriata, Web o Windows, tra quelle riportate di seguito. 1. Fare doppio clic sul pulsante Rivisualizza report. Si torna alla classe di codice sottostante in cui è stato generato automaticamente il metodo di evento redisplay_Click(). 2. Sopra la firma della classe, all'inizio della classe, aggiungere una dichiarazione "Imports" [Visual Basic] o "using" [C#] per lo spazio dei nomi System.Web.UI.WebControls (se non è stato già dichiarato). Imports System.Web.UI.WebControls using System.Web.UI.WebControls; 3. All'interno del metodo di evento redisplay_Click()appena generato automaticamente, dichiarare e creare un'istanza ArrayList. Dim myArrayList As ArrayList = New ArrayList() ArrayList arrayList = new ArrayList(); 4. Creare un ciclo foreach per recuperare tutte le istanze ListItem dalla proprietà Items del controllo ListBox defaultParameterValuesList. For Each item As ListItem In defaultParameterValuesList.Items Next foreach(ListItem item in defaultParameterValuesList.Items) { } Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 243 5. All’interno del ciclo foreach, creare un blocco condizionale nidificato che controlli se la proprietà Selected dell’istanza Item corrente sia impostata su True. If item.Selected Then End If if(item.Selected) { } 6. All'interno del blocco condizionale, aggiungere la proprietà Value dell’istanza Item all’istanza ArrayList. myArrayList.Add(item.Value) arrayList.Add(item.Value); 7. Fuori dal blocco condizionale e dal ciclo foreach, collegare nuovamente il percorso della directory di file del report CustomersByCity alla proprietà ReportSource della classe CrystalReportViewer. Nota Il percorso della directory di file visualizzato di seguito riguarda un progetto Visual Studio. "NomeProgetto" viene sostituito dal nome del sito Web. "NomeUtente" viene sostituito dal nome di accesso in uso. Il percorso predefinito per un progetto di sito Web è: myCrystalReportViewer.ReportSource = "C:\WebSites\ NomeProgetto \CustomersByCity.rpt" crystalReportViewer.ReportSource = "C:\\WebSites\\ NomeProgetto\ \CustomersByCity.rpt"; 8. Recuperare l'istanza ParameterFields dalla proprietà del controllo CrystalReportViewer ParameterFieldInfo. Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo ParameterFields parameterFields = crystalReportViewer.ParameterFieldInfo; 9. Passare le istanze ParameterFields e ArrayList al metodo SetCurrentValuesForParameterField(). SetCurrentValuesForParameterField(myParameterFields, myArrayList) SetCurrentValuesForParameterField(parameterFields, arrayList); 244 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.1.2.5.3 Per creare il metodo di evento clic per il controllo Button di rivisualizzazione in un progetto Windows 1. Fare doppio clic sul controllo Button di rivisualizzazione. Si torna alla classe di codice sottostante in cui è stato generato automaticamente il metodo di evento redisplay_Click(). 2. All'interno del metodo di evento redisplay_Click()appena generato automaticamente, dichiarare e creare un'istanza ArrayList. Dim myArrayList As ArrayList = New ArrayList() ArrayList arrayList = new ArrayList(); 3. Creare un ciclo foreach per recuperare tutti gli elementi (come stringa) dalla proprietà SelectedItems del controllo ListBox defaultParameterValuesList. For Each item As String In defaultParameterValuesList.SelectedItems Next foreach(string item in defaultParameterValuesList.SelectedItems) { } 4. All'interno del ciclo foreach, aggiungere un'istanza di stringa dell'elemento all'istanza ArrayList. myArrayList.Add(item) arrayList.Add(item); 5. Fuori dal ciclo foreach, collegare nuovamente il percorso della directory di file del report CustomersByCity alla proprietà ReportSource della classe CrystalReportViewer. Nota Il percorso della directory di file visualizzato di seguito riguarda un progetto Visual Studio. "NomeProgetto" viene sostituito dal nome del progetto Windows. "NomeUtente" viene sostituito dal nome di accesso in uso. Il percorso predefinito per un progetto Windows è: myCrystalReportViewer.ReportSource = "C:\Documents and Settings\NomeUtente \Documenti\Visual Studio\Projects\ProjectName\CustomersByCity.rpt" crystalReportViewer.ReportSource = "C:\\Documents and Settings\\NomeUtente\ \Documenti\\Visual Studio\\Projects\\ProjectName\\CustomersByCity.rpt"; 6. Recuperare l'istanza ParameterFields dalla proprietà del controllo CrystalReportViewer ParameterFieldInfo. Dim myParameterFields As ParameterFields = myCrystalReportViewer.ParameterFieldInfo Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 245 ParameterFields parameterFields = crystalReportViewer.ParameterFieldInfo; 7. Passare le istanze ParameterFields e ArrayList al metodo SetCurrentValuesForParameterField(). SetCurrentValuesForParameterField(myParameterFields, myArrayList) SetCurrentValuesForParameterField(parameterFields, arrayList); 1.5.1.2.5.4 Per verificare la compilazione del controllo ListBox defaultParameterValuesList Ora che i valori selezionati nel controllo ListBox sono stati applicati come valori correnti per il campo parametro, è possibile rivisualizzare il report. A questo punto è possibile creare ed eseguire il progetto per verificare se il campo parametro è stato reimpostato correttamente. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. 4. Nel controllo ListBox, tenendo premuto il tasto Ctrl fare clic per selezionare più città dall'elenco. 5. Fare clic sul pulsante Rivisualizza report. La pagina viene ricaricata visualizzando i record dei clienti che nelle città selezionate. 6. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.2.6 Configurazione della persistenza dei parametri In questa sezione viene descritto come configurare, in un'esercitazione basata sul Web, la persistenza per le selezioni del campo parametro effettuate nel controllo ListBox. 1.5.1.2.6.1 Per dimostrare la mancanza di persistenza nelle selezioni del parametro 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. 4. Nel controllo ListBox, tenendo premuto il tasto Maiusc fare clic per selezionare tutte le città dell'elenco. 5. Fare clic su Rivisualizza report. 246 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net La pagina viene ricaricata visualizzando i record di tutti i clienti di tutte le città. Si tratta di un report di grandi dimensioni contenente numerose pagine. 6. Nella barra degli strumenti di CrystalReportViewer, fare clic su Pagina seguente. L'elenco delle città selezionate non viene mantenuto e la pagina 2 del report non viene visualizzata. Vengono invece mostrate nuovamente le impostazioni iniziali del parametro (Paris e Tokyo). 7. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. Per rendere persistenti le modifiche apportate all'interno del modello a oggetti ReportDocument quando le pagine Web vengono ricaricate, è necessario aggiungere codice di persistenza all'applicazione. Iniziare aggiungendo il codice di persistenza al metodo ConfigureCrystalReports(), quindi aggiungere un blocco Else al blocco condizionale Not IsPostBack. Proseguire impostando valori univoci per l'istanza ArrayList per una delle condizioni all'interno del blocco condizionale. All'avvio della pagina, impostare i valori predefiniti ("Paris" e "Tokyo") nell'istanza ArrayList. Ai successivi caricamenti della pagina, recuperare l'istanza ArrayList salvata in Session. 1.5.1.2.6.2 Per aggiungere codice di persistenza al metodo ConfigureCrystalReports() Per rendere persistenti le modifiche apportate al ricaricamento delle pagine Web, è necessario aggiungere codice di persistenza all'applicazione. Iniziare aggiungendo il codice di persistenza al metodo ConfigureCrystalReports(), quindi aggiungere un blocco Else al blocco condizionale If Not IsPostBack. Proseguire impostando valori univoci per l'istanza ArrayList per una delle condizioni all'interno del blocco condizionale. All'avvio della pagina, impostare i valori predefiniti ("Paris" e "Tokyo") nell'istanza ArrayList. Ai successivi caricamenti della pagina, recuperare l'istanza ArrayList salvata in Session. 1. All'interno del metodo ConfigureCrystalReports(), tagliare e incollare le due righe di codice che aggiungono Paris e Tokyo all'ArrayList, alla fine del blocco condizionale Not IsPostBack. Al termine dell'operazione, il blocco condizionale dovrebbe presentarsi come segue: If Not IsPostBack Then defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(myParameterFields) defaultParameterValuesList.DataBind() myArrayList.Add("Paris") myArrayList.Add("Tokyo") End If if (!IsPostBack) { defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(parameterFields); defaultParameterValuesList.DataBind(); arrayList.Add("Paris"); arrayList.Add("Tokyo"); } 2. Aggiungere una riga di codice finale al blocco condizionale che assegni l'istanza ArrayList a Session. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 247 Nota Per la persistenza Session che viene aggiunta, è possibile utilizzare il nome della variabile come identificatore di stringa. Session("myArrayList") = myArrayList Session["arrayList"] = arrayList; 3. Aggiungere una condizione Else al blocco condizionale Not IsPostBack. 4. All'interno del blocco Else, recuperare l'istanza ArrayList da Session ed eseguirne il cast in ArrayList. myArrayList = Ctype(Session("myArrayList"), ArrayList) arrayList = (ArrayList)Session["arrayList"]; Al termine dell'operazione, il blocco condizionale dovrebbe presentarsi come segue: If Not IsPostBack Then defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(myParameterFields) defaultParameterValuesList.DataBind() myArrayList.Add("Paris") myArrayList.Add("Tokyo") Session("myArrayList") = myArrayList Else myArrayList = Ctype(Session("myArrayList"), ArrayList) End If if (!IsPostBack) { defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(parameterFields); defaultParameterValuesList.DataBind(); arrayList.Add("Paris"); arrayList.Add("Tokyo"); Session["arrayList"] = arrayList; } else { arrayList = (ArrayList)Session["arrayList"]; } Le modifiche apportate al metodo ConfigureCrystalReports()assicurano che l'istanza ArrayList corrente sia sempre disponibile per essere passata al metodo SetCurrentValuesForParameterField(). Nella sezione successiva vengono apportate due modifiche al codice dell'evento clic del controllo Button: ● Assegnazione a Session dell'istanza ArrayList creata. ● Sostituzione delle ultime due righe di codice, che consentono di configurare e visualizzare il report, con una chiamata al metodo ConfigureCrystalReports() per eseguire tale funzione su una serie di righe di codice comuni. 248 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.1.2.6.3 Per modificare il codice nel metodo di evento clic del controllo Button in modo da utilizzare la persistenza Session 1. Eliminare le ultime tre righe di codice del metodo di evento clic del controllo Button. ○ La prima riga di codice da eliminare è quella che collega il percorso della directory di file del report alla proprietà ReportSource del controllo CrystalReportViewer. ○ La seconda riga di codice da eliminare è quella che consente di recuperare l'istanza ParameterFields dalla proprietà ParameterFieldInfo del controllo CrystalReportViewer. ○ La terza riga di codice da eliminare è la chiamata al metodo SetCurrentValuesForParameterField(). Nel passaggio successivo vengono aggiunte due nuove righe di codice per sostituire quelle eliminate. 2. All'interno del metodo di evento clic del controllo Button, fuori dal ciclo foreach, aggiungere una riga di codice che assegni l'istanza ArrayList a Session. Nota Per la Session che viene aggiunta, è possibile utilizzare il nome della variabile come identificatore di stringa. Session("myArrayList") = myArrayList Session["arrayList"] = arrayList; 3. Chiamare il metodo ConfigureCrystalReports(). Ciò consente di recuperare l'istanza ArrayList, applicarla al report e collegare quest'ultimo al controllo CrystalReportViewer. ConfigureCrystalReports() ConfigureCrystalReports(); 1.5.1.2.6.4 Per verificare la compilazione del controllo ListBox defaultParameterValuesList A questo punto è possibile creare ed eseguire il progetto per verificare se il campo parametro è stato reimpostato correttamente. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. 4. Nel controllo ListBox, tenendo premuto il tasto Maiusc fare clic per selezionare tutte le città dell'elenco. 5. Fare clic su Rivisualizza report. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 249 La pagina viene ricaricata visualizzando i record dei clienti di tutte le città. Si tratta di un report di grandi dimensioni contenente numerose pagine. 6. Nella barra degli strumenti di CrystalReportViewer, fare clic su Pagina seguente. 7. L'elenco delle città selezionate viene mantenuto e viene visualizzata la pagina 2 del report. 8. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.3 Esercitazione: Lettura e impostazione di parametri di intervallo per un sottoreport In questa esercitazione verrà esaminata un'ulteriore complicazione: cosa accade quando il report che richiede determinati parametri contiene un sottoreport che richiede parametri diversi da quelli del report. Introduzione Nell'esercitazione precedente, Esercitazione: Lettura e impostazione di parametri discreti [pagina 229], è stato descritto come creare un report con un parametro discreto e come scrivere codice per impostare tale parametro in fase di esecuzione, sia con valori di parametro hardcoded che con valori di parametro passati da un controllo ListBox o TextBox. In questa esercitazione viene descritto come aggiungere parametri di intervallo a un sottoreport. È necessario apportare quattro modifiche al progetto creato in precedenza: ● Aggiungere un sottoreport al report originale. Questo sottoreport fa riferimento alla tabella Ordini del database Xtreme. La tabella Ordini è associata alla tabella Clienti utilizzata nell'esercitazione precedente tramite una chiave esterna ID cliente. ● Aggiungere un parametro di intervallo al sottoreport per filtrare i dati in base a un intervallo di date degli ordini. ● Aggiungere due controlli Text al modulo: orderStartDate e orderEndDate, per impostare l'intervallo di date degli ordini in fase di esecuzione. ● Modificare il metodo SetCurrentValuesForParameter() creato nell'esercitazione precedente. Questo metodo crea un'istanza ParameterRangeValue contenente i valori startDate ed endDate e passa l'istanza al parametro di intervallo all'interno del sottoreport. Una volta completata questa esercitazione, è possibile filtrare i valori visualizzati sul report in fase di esecuzione. Il codice aggiunto limita il numero di città visualizzate nel report principale e l'intervallo di date degli ordini da visualizzare nel sottoreport. L'esercitazione può essere completata anche con classi del modello a oggetti ReportDocument, vedere Esercitazione: Lettura e impostazione di parametri con un sottoreport [pagina 363]. 250 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Codice di esempio Ciascuna esercitazione viene fornita con un codice di esempio in linguaggio Visual Basic e C# che illustra la versione completa del progetto. Seguire le istruzioni riportate in questa esercitazione per creare un nuovo progetto o aprire il progetto del codice di esempio per utilizzare una versione completa. Il codice di esempio si trova in cartelle classificate per lingua e tipo di progetto. I nomi delle cartelle per ciascuna versione di codice di esempio sono i seguenti: ● Sito Web in C#: CS_Web_CRVObjMod_ParametersSubrpt ● Progetto Windows C#: CS_Win_CRVObjMod_ParametersSubrpt ● Sito Web in Visual Basic: VB_Web_CRVObjMod_ParametersSubrpt ● Progetto Windows Visual Basic: VB_Win_CRVObjMod_ParametersSubrpt Informazioni correlate Scelta del modello a oggetti appropriato al progetto [pagina 31] Directory dei report di esempio [pagina 15] 1.5.1.3.1 Aggiunta di un sottoreport al report originale Iniziare aggiungendo un sottoreport al report originale. 1.5.1.3.1.1 Per aggiungere un sottoreport 1. Aprire il progetto creato nell'esercitazione precedente, Esercitazione: Lettura e impostazione di parametri discreti [pagina 229]. 2. In Esplora soluzioni, fare doppio clic sul report CustomersByCity per aprirlo. 3. Fare clic con il pulsante destro del mouse sulla barra grigia Dettagli, quindi selezionare Inserisci sezione sotto. 4. Fare clic con il pulsante destro del mouse sulla nuova sezione Dettagli b appena creata, selezionare Inserisci, quindi fare clic su Sottoreport. Viene visualizzato un riquadro grigio intorno al cursore del mouse. 5. Trascinare il rettangolo grigio nella nuova sezione Dettagli b, quindi fare clic per rilasciarlo. 6. Nella scheda Sottoreport della finestra di dialogo Inserisci sottoreport, selezionare Crea un sottoreport con la creazione guidata report. Nota la finestra di dialogo Inserisci sottoreport include altre opzioni che consentono di scegliere un report esistente e sottoreport su richiesta. Per ulteriori informazioni su tali funzioni, vedere Scheda Sottoreport (finestra di dialogo Inserisci sottoreport) [pagina 825]. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 251 7. Nel campo Nuovo nome del report digitare "CustomerOrders". 8. Fare clic su Procedura guidata report. 9. Nel riquadro Origini dati disponibili della finestra Procedura guidata per la creazione di report standard, espandere la cartella Crea nuova connessione. 10. Dalla sottocartella, espandere la cartella ODBC (RDO). 11. Nella finestra ODBC (RDO) selezionare la voce ODBC DSN corretta per il database Xtreme e quindi fare clic su Fine. La cartella ODBC (RDO) si espande e visualizza il database Xtreme. 12. Selezionare la tabella Ordini e fare clic sul simbolo > per spostarla nel riquadro Seleziona tabelle, quindi scegliere Avanti. 13. Nel riquadro Campi disponibili, selezionare ID ordine, Data ordine, Data spedizione e Spedizione via. 14. Fare clic sul simbolo > per spostare questi campi nel riquadro Campi da visualizzare, quindi scegliere Fine. 15. Nella finestra di dialogo Inserisci sottoreport, selezionare la scheda Collegamento. 16. Nell'elenco Campi disponibili del riquadro Campo/i del report contenitore a cui collegarsi espandere la tabella Clienti, selezionare ID cliente, quindi fare clic sul simbolo >. 17. Nel riquadro Collegamento al campo Clienti.ID cliente visualizzato, lasciare invariate le selezioni predefinite. Tali selezioni di parametri e dati generano automaticamente una relazione tra il report principale e il sottoreport. 18. Fare clic su OK. Il nuovo sottoreport CustomerOrders viene visualizzato nella sezione Dettagli b del report principale. Nota quando si aggiunge un sottoreport alla sezione Dettagli, il sottoreport viene visualizzato per ogni riga, aumentando i requisiti di prestazioni del report. Se non sono necessarie informazioni sul sottoreport con tale livello di dettaglio, posizionare il sottoreport in una sezione Gruppo invece che nella sezione Dettagli. 1.5.1.3.1.2 Per verificare le impostazioni nel sottoreport 1. Nella sezione Dettagli, fare doppio clic sul sottoreport CustomerOrders per visualizzarlo. Nella parte inferiore della finestra di progettazione sono presenti pulsanti di spostamento per il report principale e il sottoreport CustomerOrders. 2. Se Explorer Campo non è visibile, nella barra degli strumenti di Crystal Reports fare clic sul pulsante Alterna visualizzazione campi. Nota per visualizzare Explorer Campo, è possibile anche selezionare il menu Crystal Reports e scegliere Explorer Campo. 3. Nell'Explorer Campo, espandere Campi parametro. 4. Verificare che il campo parametro Clienti-PM.ID Cliente sia stato generato automaticamente al momento del collegamento del sottoreport. 252 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 5. Nella barra degli strumenti di Crystal Reports, fare clic su Esperto selezione. 6. Nella finestra di dialogo Esperto selezione, verificare che sia impostato il criterio Ordini.ID cliente è uguale a {Clienti-PM.ID cliente}, quindi fare clic su OK. 7. Dal menu File, scegliere Salva tutto. Il sottoreport CustomerOrders è stato aggiunto al report CustomersByCity. 1.5.1.3.1.3 Per aggiungere un parametro OrderDateRange al sottoreport 1. In Explorer Campo, fare clic con il pulsante destro del mouse su Campi parametro, quindi selezionare Nuovo…. 2. Nella finestra di dialogo Crea campo parametro: a. Impostare Nome su "OrderDateRange". b. Impostare Testo richiesta su "Specificare un intervallo di date degli ordini da visualizzare". c. Impostare Tipo valore su "Data". d. Impostare Opzioni su una sola selezione, "Valore/i intervallo". 3. Fare clic su OK. 4. Nella barra degli strumenti di Crystal Reports, fare clic su Esperto selezione. 5. Fare clic sulla scheda Nuovo. 6. Nella finestra di dialogo Scegli campo, espandere la tabella Ordini, selezionare Data ordine, quindi fare clic su OK. 7. Nella nuova scheda Ordini.Data ordine, dall'elenco a discesa dei criteri selezionare formula e digitare la seguente formula: {Ordini.DataOrdine} in {?OrderDateRange} 8. Fare clic su OK. 9. Dal menu File, scegliere Salva tutto. Il parametro OrderDateRange è stato aggiunto al sottoreport e collegato alla colonna Ordini.DataOrdine. Nella sezione successiva viene descritto come aggiungere codice per fare riferimento al parametro OrderDateRange all'interno del sottoreport. 1.5.1.3.2 Aggiunta del codice del parametro del sottoreport A questo punto è possibile aggiungere il codice del parametro per il sottoreport nella classe di codice sottostante. Iniziare creando il metodo di supporto privato SetDateRangeForOrders(). 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. All'inizio della classe, aggiungere due nuove costanti sotto la costante PARAMETER_FIELD_NAME esistente, aggiunta durante l'esercitazione precedente. Private Const SUBREPORT_PARAMETER_FIELD_NAME As String = "OrderDateRange" Private Const SUBREPORT_NAME As String = "CustomerOrders" Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 253 private const string SUBREPORT_PARAMETER_FIELD_NAME = "OrderDateRange"; private const string SUBREPORT_NAME = "CustomerOrders"; 4. Alla fine della classe creare un nuovo metodo privato denominato SetDateRangeForOrders() con tre parametri: ParameterFields, string startDate e string endDate. Private Sub SetDateRangeForOrders(ByVal myParameterFields As ParameterFields, ByVal startDate As String, ByVal endDate As String) End Sub private void SetDateRangeForOrders(ParameterFields parameterFields, string startDate, string endDate) { } 5. All’interno del metodo, dichiarare e creare un’istanza per la classe ParameterRangeValue. Nota Affinché la classe ParameterRangeValue sia accessibile, è necessario includere un'istruzione "Imports" [Visual Basic] o "using" [C#] all'inizio della classe di codice sottostante per lo spazio dei nomi CrystalDecisions.Shared. (tale dichiarazione è stata aggiunta in Impostazione di un progetto [pagina 16]). Dim myParameterRangeValue As ParameterRangeValue = New ParameterRangeValue() ParameterRangeValue parameterRangeValue = new ParameterRangeValue(); 6. Impostare la proprietà StartValue dell'istanza ParameterRangeValue sul parametro del metodo startDate. Nota Le proprietà StartValue ed EndValue della classe ParameterRangeValue accettano valori di tipo Object. Questo tipo generico consente di passare valori di intervallo di diversi tipi, inclusi testo, numero, data, valuta o ora. myParameterRangeValue.StartValue = startDate parameterRangeValue.StartValue = startDate; 7. Impostare la proprietà EndValue dell'istanza ParameterRangeValue sul parametro del metodo endDate. myParameterRangeValue.EndValue = endDate parameterRangeValue.EndValue = endDate; 8. Impostare i limiti superiore e inferiore per la proprietà BoundInclusive. 254 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Nota La proprietà BoundInclusive implica che i valori di intervallo superiore e inferiore sono inclusi nell'intervallo. myParameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusive myParameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive parameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusive; parameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive; A questo punto è possibile assegnare l'istanza ParameterRangeValue al parametro del sottoreport. 9. Recuperare l'istanza ParameterField dalla classe indicizzata ParameterFields, basata su due valori indicizzati: il nome del campo di parametro del sottoreport e il nome del sottoreport. Passare i valori delle due costanti dichiarate all'inizio della classe. Dim myParameterField As ParameterField = myParameterFields(SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME) ParameterField parameterField = parameterFields[SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME]; 10. Chiamare il metodo Clear() della proprietà CurrentValues dell'istanza ParameterField per rimuovere eventuali valori esistenti dalla proprietà CurrentValues. myParameterField.CurrentValues.Clear() parameterField.CurrentValues.Clear(); 11. Aggiungere l'istanza ParameterRangeValue, creata in precedenza, alla proprietà CurrentValues dell'istanza ParameterField. myParameterField.CurrentValues.Add(myParameterRangeValue) parameterField.CurrentValues.Add(parameterRangeValue); In questa procedura è stato descritto come impostare i valori delle date iniziale e finale in un'istanza ParameterRangeValue e come passare tali valori al parametro OrderDateRange nel sottoreport CustomerOrders. 1.5.1.3.3 Aggiunta di controlli TextBox per contenere i valori dei parametri di intervallo In questa sezione viene descritto come aggiungere due controlli TextBox per fornire al parametro di intervallo OrderDateRange nel sottoreport CustomerOrders i valori delle date iniziale e finale, in fase di esecuzione. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 255 Nota Se si esegue questa esercitazione in un sito Web, la persistenza dei valori delle date inseriti dagli utenti nelle caselle di testo viene assicurata da ViewState. 1.5.1.3.3.1 Per creare e configurare un pulsante di rivisualizzazione sul form 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Se si sta sviluppando un sito Web, effettuare le seguenti operazioni: a. Fare clic tra i controlli ListBox e Button. b. Premere Invio tre volte per creare due righe tra i controlli ListBox e Button. c. Nella prima riga creata sotto il controllo ListBox digitare Data inizio ordine. d. Nella seconda riga creata sotto il controllo ListBox digitare Data fine ordine. 4. Se si sta sviluppando un progetto Windows, effettuare le seguenti operazioni: a. Dalla casella degli strumenti, trascinare due controlli Label a destra del controllo ListBox. Posizionare le etichette una sull'altra e sopra il controllo Button. b. Selezionare il primo controllo Label e nella finestra Proprietà impostare la proprietà Text su Data inizio ordine. c. Selezionare il secondo controllo Label e nella finestra Proprietà impostare la proprietà Text su Data fine ordine. 5. Dalla casella degli strumenti, trascinare un controllo a destra di "Data inizio ordine". 6. Fare clic sul controllo TextBox per selezionarlo. 7. Nella finestra Proprietà, impostare ID (o Name) su orderStartDate. 8. Dalla casella degli strumenti, trascinare un controllo TextBox a destra di "Data fine ordine". 9. Fare clic sul controllo TextBox per selezionarlo. 10. Nella finestra Proprietà, impostare ID (o Name) su orderStartDate. 11. Dal menu File, scegliere Salva tutto. 1.5.1.3.4 Modifica dei metodi di chiamata del sottoreport A questo punto, per ottenere l'elaborazione delle informazioni per i parametri dei sottoreport, è necessario modificare il metodo ConfigureCrystalReports() e il metodo di evento redisplay_Click() per ricevere dai controlli TextBox le informazioni da applicare al metodo SetDateRangeForOrders(). Nell'esercitazione precedente, Esercitazione: Lettura e impostazione di parametri discreti [pagina 229], questi metodi sono stati progettati in due modi diversi, a seconda che sia stata o meno inclusa la persistenza Session. Nota I progetti Windows non richiedono la persistenza Session, che è in genere richiesta dai siti Web. 256 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Scegliere una delle seguenti procedure. Modificare i metodi che escludono la persistenza Session o modificare i metodi che la includono: 1.5.1.3.4.1 Modifica dei metodi che escludono la persistenza Session Se nell'esercitazione precedente, Esercitazione: Lettura e impostazione di parametri discreti [pagina 229], è stata esclusa la persistenza Session, effettuare le procedure riportate di seguito. Altrimenti, passare a Modifica dei metodi che includono la persistenza Session [pagina 258]. 1.5.1.3.4.1.1 Per modificare il metodo ConfigureCrystalReports() che esclude la persistenza Session 1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, dopo le righe che assegnano "Paris" e "Tokyo" come variabili ArrayList. 2. Tra le interruzioni di riga dichiarare e impostare valori hardcoded per due variabili stringa, startDate ed endDate. Dim startDate As String = "8/1/1997" Dim endDate As String = "8/31/1997" string startDate = "8/1/1997"; string endDate = "8/31/1997"; 3. Sotto il codice che chiama SetCurrentValuesForParameterField(), chiamare il metodo SetDateRangeForOrders() e passare l'istanza ParameterFields e le variabili startDate ed endDate. SetDateRangeForOrders(myParameterFields, startDate, endDate) SetDateRangeForOrders(parameterFields, startDate, endDate); 4. Dal menu File, scegliere Salva tutto. 1.5.1.3.4.1.2 Per modificare il metodo redisplay_Click() che esclude la persistenza Session 1. Nel metodo di evento redisplay_Click(), creare nel codice una coppia di interruzioni di riga, sopra la riga che collega il report al controllo CrystalReportViewer. 2. Tra le interruzioni di riga dichiarare e impostare i valori per le due variabili stringa, startDate ed endDate, in base ai controlli TextBox aggiunti al Web Form o al Windows Form. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 257 Dim startDate As String = orderStartDate.Text Dim endDate As String = orderEndDate.Text string startDate = orderStartDate.Text; string endDate = orderEndDate.Text; 3. Sotto il codice che chiama SetCurrentValuesForParameterField(), chiamare il metodo SetDateRangeForOrders() e passare l'istanza ParameterFields e le variabili startDate ed endDate. SetDateRangeForOrders(myParameterFields, startDate, endDate) SetDateRangeForOrders(parameterFields, startDate, endDate); 4. Dal menu File, scegliere Salva tutto. 1.5.1.3.4.2 Modifica dei metodi che includono la persistenza Session Se nell'esercitazione precedente, Esercitazione: Lettura e impostazione di parametri discreti [pagina 229], è stata inclusa la persistenza Session, effettuare le procedure riportate di seguito. Altrimenti, passare a Modifica dei metodi che escludono la persistenza Session [pagina 257]. 1.5.1.3.4.2.1 Per modificare il metodo ConfigureCrystalReports() che include la persistenza Session 1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, dopo la riga che dichiara e crea un'istanza ArrayList. 2. Tra le interruzioni di riga dichiarare due variabili stringa, startDate ed endDate. Dim startDate As String Dim endDate As String string startDate; string endDate; 3. All'interno del blocco condizionale Not IsPostBack, inserire i valori predefiniti per le variabili startDate ed endDate. startDate = "8/1/1997" endDate = "8/31/1997" startDate = "8/1/1997"; endDate = "8/31/1997"; 258 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 4. All'interno del blocco condizionale Not IsPostBack, assegnare le variabili startDate ed endDate a Session. Session("startDate") = startDate Session("endDate") = endDate Session["startDate"] = startDate; Session["endDate"] = endDate; 5. All'interno del blocco Else, dopo aver recuperato l'istanza ArrayList da Session, recuperare anche le variabili startDate ed endDate. startDate = Session("startDate").ToString() endDate = Session("endDate").ToString() startDate = Session["startDate"].ToString(); endDate = Session["endDate"].ToString(); In questo modo, si raggiunge la fine del blocco con le variabili data assegnate in entrambi i casi, seguendo la logica dell'assegnazione della variabile ArrayList configurata nell'esercitazione precedente. 6. Sotto il codice che chiama SetCurrentValuesForParameterField(), chiamare il metodo SetDateRangeForOrders() e passare l'istanza ParameterFields e le variabili startDate ed endDate. SetDateRangeForOrders(myParameterFields, startDate, endDate) SetDateRangeForOrders(parameterFields, startDate, endDate); 7. Dal menu File, scegliere Salva tutto. 1.5.1.3.4.2.2 Per modificare il metodo redisplay_Click() che include la persistenza Session A questo punto, modificare il metodo di evento redisplay_Click. 1. Nel metodo di evento redisplay_Click(), creare nel codice una coppia di interruzioni di riga, dopo la riga che assegna l'istanza ArrayList a Session. 2. Tra le interruzioni di riga, assegnare la proprietà Text degli oggetti TextBox orderStartDate e orderEndDate alle variabili Session. Session("startDate") = orderStartDate.Text Session("endDate") = orderEndDate.Text Session["startDate"] = orderStartDate.Text; Session["endDate"] = orderEndDate.Text; 3. Dal menu File, scegliere Salva tutto. Quando viene chiamato il metodo ConfigureCrystalReports(), i valori Session startDate ed endDate vengono recuperati e applicati. A questo punto è possibile creare ed eseguire il progetto per verificare che i valori TextBox reimpostino il parametro di intervallo nel sottoreport. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 259 1.5.1.3.5 Verifica del parametro del sottoreport A questo punto è possibile verificare l'impostazione del parametro del sottoreport con i valori del controllo TextBox. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. 4. Nel controllo ListBox, tenendo premuto il tasto Ctrl fare clic per selezionare almeno quattro diverse città nell’elenco. 5. Nel controllo TestBox orderStartDate immettere 1/1/1997. 6. Nel controllo TestBox orderEndDate immettere 8/31/1997. 7. Fare clic sul pulsante Rivisualizza report. La pagina viene ricaricata e visualizza i record dei clienti che vivono nelle città selezionate, nonché un sottoreport con gli ordini inclusi nell'intervallo di date specificato. 8. Nel controllo CrystalReportViewer, impostare il livello Zoom su 125%. La pagina viene ricaricata con un rapporto di zoom del 125%. I valori selezionati per le città e l'intervallo di date degli ordini vengono mantenuti. 9. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.4 Esercitazione: Filtro di dati mediante formule di selezione In questa esercitazione viene descritto come utilizzare le formule di selezione per filtrare i record da visualizzare in un report Crystal. Introduzione Le formule di selezione consentono di filtrare i record da visualizzare in un report Crystal. Per creare formule di selezione, è possibile utilizzare la sintassi Basic e la sintassi Crystal. In questa esercitazione viene creata una formula di selezione per filtrare i record cliente in cui il valore del campo Vendite anno precedente è maggiore rispetto a un valore specifico e il campo Nome cliente viene confrontato con un'altra stringa. Un controllo ListBox consente di selezionare un operatore di confronto per il campo Nome cliente. È possibile scegliere di visualizzare i nomi dei clienti che siano uguali, minori, maggiori, minori o uguali, maggiori o uguali oppure diversi dal valore della stringa specificata. La formula viene passata come variabile di stringa alla proprietà SelectionFormula della classe CrystalReportViewer. Dopo aver impostato la proprietà, il report Crystal collegato al controllo CrystalReportViewer viene filtrato prima di essere visualizzato. 260 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Codice di esempio Ciascuna esercitazione viene fornita con un codice di esempio in linguaggio Visual Basic e C# che illustra la versione completa del progetto. Seguire le istruzioni riportate in questa esercitazione per creare un nuovo progetto o aprire il progetto del codice di esempio per utilizzare una versione completa. Il codice di esempio si trova in cartelle classificate per lingua e tipo di progetto. I nomi delle cartelle per ciascuna versione di codice di esempio sono i seguenti: ● Sito Web in C#: CS_Web_CRVObjMod_FilteringData ● Progetto Windows C#: CS_Win_CRVObjMod_FilteringData ● Sito Web in Visual Basic: VB_Web_CRVObjMod_FilteringData ● Progetto Windows Visual Basic: VB_Win_CRVObjMod_FilteringData Informazioni correlate Creazione di formule [pagina 678] Directory dei report di esempio [pagina 15] 1.5.1.4.1 Creazione di un report con una formula di selezione In questa sezione viene creato un report con informazioni provenienti dal database Xtreme. 1.5.1.4.1.1 Creazione di un report con dati sicuri provenienti dal database Xtreme 1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome del progetto in grassetto, selezionare Aggiungi, quindi scegliere Aggiungi nuovo elemento. 2. Nella finestra di dialogo Aggiungi nuovo elemento, in visualizzazione Modelli, selezionare il modello Crystal Report. 3. Nel campo Nome immettere il nome CustomersBySalesName.rpt e fare clic su Aggiungi. 4. Nel riquadro Crea un nuovo documento Crystal Report della finestra di dialogo Galleria Crystal Reports, selezionare Uso della procedura guidata Report. 5. Nel riquadro Scegli un esperto selezionare Standard, quindi fare clic su OK. 6. Nel riquadro Origini dati disponibili della finestra Procedura guidata per la creazione di report standard, espandere la cartella Crea nuova connessione. 7. Dalla sottocartella, espandere la cartella ODBC (RDO). 8. Nella finestra ODBC (RDO) selezionare la voce ODBC DSN corretta per il database di esempio Xtreme e quindi fare clic su Fine. La cartella ODBC (RDO) si espande e visualizza il database Xtreme. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 261 9. Espandere il nodo Tabelle, fare doppio clic sulla tabella Clienti per spostarla nel riquadro Tabelle selezionate, quindi scegliere Avanti. 10. Espandere la tabella Clienti, quindi tenendo premuto il tasto Ctrl fare clic su Nome cliente e Vendite anno precedente. 11. Fare clic sul simbolo > per spostare questi campi nel riquadro Campi da visualizzare, quindi scegliere Avanti. 12. Nel riquadro Campi disponibili, in Campi report, fare doppio clic su Cliente.Nome cliente per spostare il campo nel riquadro Raggruppa in base a, quindi scegliere Fine. Il report CustomersBySalesName viene creato e caricato nella finestra principale di Visual Studio. 1.5.1.4.1.2 Per creare una formula di selezione basata su Vendite anno precedente Successivamente, viene creata una formula di selezione per filtrare i dati in base al campo Vendite anno precedente. 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice per visualizzare la classe di codice sottostante relativa al Web Form o al Windows Form. 3. Nel caso di un sito Web, nel metodo ConfigureCrystalReports() (creato in Impostazione di un progetto [pagina 16]), creare un blocco condizionale Not IsPostBack. Nota il blocco condizionale Not IsPostBack viene utilizzato per incapsulare il codice che deve essere eseguito solo la prima volta che viene caricata la pagina. If Not IsPostBack Then End If if(!IsPostBack) { } 4. In un sito Web, aggiungere le seguenti righe di codice al blocco condizionale Not IsPostBack. In un progetto Windows, aggiungere il codice al metodo ConfigureCrystalReports(), senza il blocco condizionale Not IsPostBack. a. Inserire la formula per selezionare solo i record in cui il valore del campo Vendite anno precedente è maggiore di $ 11.000 e i nomi dei clienti iniziano con la lettera "A". Dim mySelectFormula As String = "{Customer.Last Year's Sales} > 11000.00 " _ & "AND Mid({Customer.Customer Name}, 1, 1) = ""A"" " string selectFormula = "{Customer.Last Year's Sales} > 11000.00 " + "AND Mid({Customer.Customer Name}, 1, 1) = \"A\""; 262 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net b. Assegnare la stringa della formula di selezione alla proprietà SelectionFormula del controllo CrystalReportViewer. myCrystalReportViewer.SelectionFormula = mySelectFormula crystalReportViewer.SelectionFormula = selectFormula; 1.5.1.4.2 Collegamento del report Durante lo svolgimento delle istruzioni riportate nella sezione Impostazione di un progetto [pagina 16] di preparazione a questa esercitazione, un controllo CrystalReportViewer è stato inserito nel Web Form o nel Windows Form. Nei passaggi precedenti, sono stati aggiunti al progetto un report CustomersBySalesName e una formula di selezione. In questa sezione, il percorso della directory di file del report CustomersBySalesName viene collegato al controllo CrystalReportViewer. e viene verificata la corretta visualizzazione del report con i record filtrati dalla formula di selezione. 1.5.1.4.2.1 Per collegare il percorso della directory di file del report CustomersBySalesName al controllo CrystalReportViewer 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice per visualizzare la classe di codice sottostante relativa al Web Form o al Windows Form. 3. Individuare il metodo ConfigureCrystalReports() creato in Impostazione di un progetto [pagina 16]. 4. Dichiarare una variabile di stringa, denominarla reportPath e assegnarle un percorso della fase di esecuzione del report locale. Questo percorso viene determinato in modo diverso a seconda che si tratti di siti Web o di progetti Windows: ○ In un sito Web, trasferire il nome del file di report locale come parametro stringa nel metodo Server.MapPath(). In questo modo, in fase di esecuzione viene eseguita la mappatura del report locale al percorso della directory di file del disco rigido. Dim reportPath As String = Server.MapPath("CustomersBySalesName.rpt") string reportPath = Server.MapPath("CustomersBySalesName.rpt"); ○ In un progetto Windows, concatenare la proprietà Application.StartupPath con una barra rovesciata e il nome del file di report locale. In questo modo viene eseguita la mappatura del report nella stessa directory dell'eseguibile Windows. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 263 Nota Al momento della compilazione, copiare il report nella directory contenente il file eseguibile. Dim reportPath As String = Application.StartupPath & "\" & "CustomersBySalesName.rpt" string reportPath = Application.StartupPath + "\\" + "CustomersBySalesName.rpt"; 5. Assegnare il percorso della directory di file del report NorthwindCustomers alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = reportPath crystalReportViewer.ReportSource = reportPath; 1.5.1.4.2.2 Per verificare la formula di selezione per il report CustomersBySalesName 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Se si utilizza un report non incorporato in un progetto Windows, individuare l'eseguibile Windows compilato nella sottodirectory \bin\ [Visual Basic] o \bin\debug\ [C#] e copiarvi il report. Nota Affinché il report non incorporato venga caricato dall'eseguibile Windows in fase di esecuzione, è necessario salvare il report nella stessa directory dell'eseguibile. 4. Dal menu Debug, scegliere Avvia. Nel report Crystal verranno visualizzati quattro record cliente: Alley Cat Cycles, Ankara Bicycle Company, Arsenault et Maurier e Athens Bicycle Co. 5. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.4.3 Aggiunta di controlli da utilizzare nella formula di selezione In questa sezione vengono aggiunti controlli per modificare dinamicamente i valori utilizzati nella formula di selezione. Per il campo Vendite anno precedente, viene aggiunta una casella di testo che consente di specificare il valore minimo di vendite da visualizzare nel report Crystal. Per il campo Nome cliente, vengono aggiunti i controlli DropDownList e TextBox che consentono di specificare i nomi dei clienti da visualizzare. 1. Aprire il Web Form o il Windows Form. 264 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Se si sta sviluppando un sito Web, effettuare le seguenti operazioni: a. Fare clic sul controllo CrystalReportViewer per selezionarlo. b. Premere il tasto freccia sinistra sulla tastiera per visualizzare un cursore lampeggiante, quindi premere Invio tre volte. Il controllo CrystalReportViewer viene spostato di tre righe verso il basso. 4. Se si sta sviluppando un progetto Windows, effettuare le seguenti operazioni: a. Fare clic sul controllo CrystalReportViewer per selezionarlo. b. Nella finestra Proprietà, impostare Dock su "Bottom". c. Ridimensionare il controllo CrystalReportViewer in modo che vengano visualizzate approssimativamente tre righe sopra di esso. d. Nella finestra Proprietà, impostare Anchor su "Top, Bottom, Left, Right". 5. Se si sta sviluppando un sito Web, sulla prima riga digitare Inserire il valore minimo per le vendite dell'anno precedente: $. 6. Se si sta sviluppando un progetto Windows, effettuare le seguenti operazioni: a. Dalla casella degli strumenti, trascinare un controllo Label nella parte superiore del Form. b. Nella finestra Proprietà, impostare la proprietà Text su Inserire il valore minimo per le vendite dell'anno precedente: $. 7. Dalla casella degli strumenti, trascinare un controllo TextBox a destra del testo. 8. Selezionare il controllo TextBox, quindi nella finestra Proprietà effettuare le seguenti operazioni: a. Impostare ID (o Name) su lastYearsSales. b. Impostare Text su 11000. 9. Se si sta sviluppando un sito Web, nella seconda riga digitare Visualizzare i nomi dei clienti. 10. Se si sta sviluppando un progetto Windows, effettuare le seguenti operazioni: a. Dalla casella degli strumenti, trascinare un controllo Label nella seconda riga del Form. b. Nella finestra Proprietà, impostare la proprietà Text su "Visualizzare i nomi dei clienti". 11. Dalla casella degli strumenti, trascinare un controllo DropDownList (ComboBox in un progetto Windows) a destra del testo. 12. Selezionare il controllo DropDownList (ComboBox), quindi nella finestra Proprietà impostare ID (o Name) su "selectOperatorList". 13. Dalla casella degli strumenti, trascinare un controllo TextBox a destra del controllo DropDownList. 14. Selezionare il controllo TextBox, quindi nella finestra Proprietà effettuare le seguenti operazioni: a. Impostare ID (o Name) su customerName. b. Impostare Text su A. 15. Dalla casella degli strumenti, trascinare un controllo Button sulla terza riga del Form, sopra il controllo CrystalReportViewer. 16. Selezionare il controllo Button, quindi nella finestra Proprietà effettuare le seguenti operazioni: a. Impostare ID (o Name) su redisplay. b. Impostare Text su Rivisualizza report. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 265 1.5.1.4.4 Impostazione manuale della formula di selezione nel codice A questo punto è possibile aggiungere codice per modificare la formula di selezione nella classe di codice sottostante. 1.5.1.4.4.1 Per aggiungere codice alla formula di selezione 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Fare doppio clic su Rivisualizza report. Viene visualizzata la classe di codice sottostante del report per indicare che il metodo di evento redisplay_Click() è stato generato automaticamente. 4. Per la formula di selezione, creare una variabile di stringa che utilizzi i valori dei controlli TextBox. La formula di selezione è simile al testo digitato all'interno del metodo ConfigureCrystalReports(). Al posto del valore minimo di vendite pari a $ 11.000, utilizzare il valore del controllo TextBox lastYearsSales. Per il campo Nome cliente, utilizzare il valore del controllo TextBox customerName. Dim mySelectFormula As String = "{Customer.Last Year's Sales} > " & lastYearsSales.Text _ & " AND Mid({Customer.Customer Name}, 1, 1) > """ & customerName.Text & """" string selectFormula = "{Customer.Last Year's Sales} > " + lastYearsSales.Text + " AND Mid({Customer.Customer Name}, 1, 1) > \"" + customerName.Text + "\""; 5. Assegnare la variabile di stringa alla proprietà SelectionFormula del controllo CrystalReportViewer. myCrystalReportViewer.SelectionFormula = mySelectFormula crystalReportViewer.SelectionFormula = selectFormula; 6. Collegare nuovamente il report CustomerBySalesName alla proprietà ReportSource del controllo CrystalReportViewer. Nota Il percorso della directory di file visualizzato di seguito riguarda un progetto Visual Studio. NomeProgetto viene sostituito dal nome del progetto Web o Windows. NomeUtente viene sostituito dal nome di accesso al computer in uso. ○ Il percorso predefinito per un progetto di sito Web è il seguente: myCrystalReportViewer.ReportSource = "C:\WebSites\ NomeProgetto \CustomersBySalesName.rpt" 266 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net crystalReportViewer.ReportSource = "C:\\WebSites\\ NomeProgetto\ \CustomersBySalesName.rpt"; ○ Il percorso predefinito per un progetto Windows è il seguente: myCrystalReportViewer.ReportSource = "C:\Documents and Settings\ NomeUtente \Documenti\Visual Studio\Projects\ ProjectName\CustomersBySalesName.rpt" crystalReportViewer.ReportSource = "C:\\Documents and Settings\\ NomeUtente\ \Documenti\\Visual Studio\\Projects\\ NomeProgetto\\CustomersBySalesName. rpt"; È stata creata una formula di selezione che può essere modificata in fase di esecuzione. 1.5.1.4.4.2 Per verificare la formula di selezione 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. 4. Nel controllo TextBox lastYearsSales, digitare 200000. 5. Nel controllo TextBox customerName, digitare SAB. 6. Fare clic su Rivisualizza report. Nel report Crystal verranno visualizzati tre record cliente: SAB Mountain, Tek Bikes e Tienda de Bicicletas El Pardo. Sono stati visualizzati solo i record cliente con nomi alfabeticamente successivi a "SAB" e vendite dell'anno precedente maggiori di "200000". 7. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.4.5 Utilizzo di un controllo DropDownList per modificare la formula di selezione In questa sezione, il controllo DropDownList viene compilato con gli operatori di confronto. e viene creata un'enumerazione contenente tali operatori. Il controllo DropDownList consente di selezionare se visualizzare nomi di clienti uguali, minori, maggiori, minori o uguali, maggiori o uguali oppure diversi dal testo inserito nel controllo TextBox. Nel metodo di evento redisplay_Click(), la stringa correntemente assegnata alla proprietà SelectionFormula del controllo CrystalReportViewer viene modificata. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 267 1.5.1.4.5.1 Per creare l'enumerazione CeComparisonOperator 1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome del progetto in grassetto, selezionare Aggiungi, quindi scegliere Aggiungi nuovo elemento. 2. Nella finestra di dialogo Aggiungi nuovo elemento, in visualizzazione Modelli, selezionare Classe. 3. Nel campo Nome digitare CeComparisonOperator, quindi scegliere Aggiungi. Nota Potrebbe essere richiesto di inserire questa classe in una directory di codice. Fare clic su Sì. 4. Nella firma della classe, modificare "class" in "enum" per convertire la classe in un'enumerazione. In un progetto Windows C#, è inoltre necessario modificare lo spazio dei nomi con il nome del progetto. Nota In Visual Basic, modificare in "enum" entrambe le firme di apertura e di chiusura della classe. 5. Poiché le enumerazioni non prevedono costruttori, eliminare il metodo costruttore predefinito fornito nella versione C# del codice. 6. All'interno dell'enumerazione, inserire i seguenti valori: EqualTo LessThan GreaterThan LessThan_or_EqualTo GreaterThan_or_EqualTo Not_EqualTo EqualTo, LessThan, GreaterThan, LessThan_or_EqualTo, GreaterThan_or_EqualTo, Not_EqualTo 1.5.1.4.5.2 Per compilare il controllo DropDownList con i valori dell'enumerazione CeComparisonOperator in un sito Web Nella procedure seguenti viene descritto come collegare l'enumerazione CeComparisonOperator al controllo DropDownList in un sito Web o in un progetto Windows. Completare le istruzioni di una delle procedure seguenti. 1. Aprire il Web Form. 2. Dal menu Visualizza, scegliere Codice. 268 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 3. All'interno del blocco condizionale Not IsPostBack del metodo ConfigureCrystalReports(), prima della dichiarazione della stringa della formula di selezione, impostare la proprietà DataSource del controllo DropDownList sui valori dell'enumerazione CeComparisonOperator. selectOperatorList.DataSource = System.Enum.GetValues(GetType(CeComparisonOperator)) selectOperatorList.DataSource = System.Enum.GetValues(typeof(CeComparisonOperator)); 4. Chiamare il metodo DataBind() del controllo DropDownList selectOperatorList per collegare i valori al controllo. selectOperatorList.DataBind() selectOperatorList.DataBind(); 1.5.1.4.5.3 Per compilare il controllo DropDownList con i valori dell'enumerazione CeComparisonOperator in un progetto Windows 1. Aprire il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. All'interno del metodo ConfigureCrystalReports(), prima della dichiarazione della stringa della formula di selezione, impostare la proprietà DataSource del controllo ComboBox selectOperatorList sui valori dell'enumerazione CeComparisonOperator. selectOperatorList.DataSource = System.Enum.GetValues(GetType(CeComparisonOperator)) selectOperatorList.DataSource = System.Enum.GetValues(typeof(CeComparisonOperator)); 1.5.1.4.5.4 Per creare il metodo di supporto GetSelectedCompareOperator() A questo punto, creare il metodo di supporto GetSelectedCompareOperator() per restituire l'indice selezionato come stringa e rappresentare un segno di operatore di confronto. 1. Alla fine della classe, creare un metodo di supporto privato denominato GetSelectedCompareOperator() che restituisca una variabile di stringa. Private Function GetSelectedCompareOperator() As String End Function private string GetSelectedCompareOperator() Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 269 { } 2. All'interno del metodo, creare un'istruzione "Select Case" [Visual Basic] o "switch" [C#] che rimandi ai membri dell'enumerazione CeComparisonOperator e restituisca il segno dell'operatore di confronto come variabile di stringa. Select Case selectOperatorList.SelectedIndex Case CeComparisonOperator.EqualTo return "=" Case CeComparisonOperator.LessThan return "<" Case CeComparisonOperator.GreaterThan return ">" Case CeComparisonOperator.LessThan_or_EqualTo return "<=" Case CeComparisonOperator.GreaterThan_or_EqualTo return ">=" Case CeComparisonOperator.Not_EqualTo return "<>" Case Else return "=" End Select switch ((CeComparisonOperator)selectOperatorList.SelectedIndex) { case CeComparisonOperator.EqualTo: return "="; case CeComparisonOperator.LessThan: return "<"; case CeComparisonOperator.GreaterThan: return ">"; case CeComparisonOperator.LessThan_or_EqualTo: return "<="; case CeComparisonOperator.GreaterThan_or_EqualTo: return ">="; case CeComparisonOperator.Not_EqualTo: return "<>"; default: return "="; } 1.5.1.4.5.5 Per modificare l'operatore di confronto del campo Nome cliente assegnato alla proprietà SelectionFormula Nel metodo di evento redisplay_Click(), è utilizzato il segno "maggiore di" (">") per la selezione del campo Nome cliente. Successivamente, viene descritto come modificare il segno con l'operatore di confronto selezionato dai valori del controllo DropDownList. Il segno selezionato viene restituito come stringa quando si effettua la chiamata al metodo di supporto GetSelectedCompareOperator(). 1. All'inizio del metodo di evento redisplay_Click(), chiamare il metodo di supporto GetSelectedCompareOperator() e assegnare il risultato a una variabile di stringa. Dim mySelectedOperator As String = GetSelectedCompareOperator() 270 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net string selectedOperator = GetSelectedCompareOperator(); 2. Per la variabile di stringa della formula di selezione, sostituire il segno "maggiore di" (">") con la stringa dell'operatore selezionato. Dim mySelectFormula As String = "{Customer.Last Year's Sales} > " & lastYearsSales.Text _ & " AND Mid({Customer.Customer Name}, 1, 1) " & mySelectedOperator & " """ & customerName.Text & """" string selectFormula = "{Customer.Last Year's Sales} > " + lastYearsSales.Text + " AND Mid({Customer.Customer Name}, 1, 1) " + selectedOperator + " \"" + customerName.Text + "\""; 1.5.1.4.5.6 Per verificare la formula di selezione per il report CustomersBySalesName È stata creata una formula di selezione che dipende dai valori inseriti per il campo Vendite anno precedente e per il campo Nome cliente. A questo punto è possibile creare e verificare la formula di selezione. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. a. Nel controllo TextBox lastYearsSales, digitare 40000. b. Nel controllo TextBox customerName, digitare Athens Bicycle Co. c. Nel controllo DropDownList, selezionare LessThan. d. Fare clic su Rivisualizza report. Nel report Crystal verranno visualizzati due record cliente: Alley Cat Cycles e Ankara Bicycle Company. 4. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.5 Esercitazione: personalizzazione del controllo CrystalReportViewer In questa esercitazione viene illustrato come personalizzare la visualizzazione del controllo CrystalReportViewer. Introduzione In questa esercitazione viene descritto come personalizzare l'aspetto del controllo CrystalReportViewer mediante l'utilizzo delle proprietà della corrispondente classe sottostante. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 271 Viene inoltre descritto come utilizzare i metodi per selezionare pagine, applicare lo zoom, effettuare ricerche ed eseguire la stampa. Viene innanzitutto descritto come personalizzare la barra degli strumenti di CrystalReportViewer. A tal fine, è necessario un controllo ListBox che memorizzi le proprietà disponibili per la barra degli strumenti, poiché solo le proprietà selezionate dal controllo ListBox vengono visualizzate sulla barra degli strumenti di CrystalReportViewer. A questo punto, viene aggiunto un secondo controllo ListBox in cui memorizzare gli elementi del report. Per un sito Web, è possibile scegliere se visualizzare tutte le pagine del report come una pagina singola o più pagine distinte. Viene quindi descritto come personalizzare il colore di sfondo tramite un controllo DropDownList. Viene poi descritto come selezionare la pagina del report da visualizzare. Sono necessari un controllo TextBox per inserire il numero di pagina, un controllo Button per ricaricare il report nella pagina selezionata, nonché un controllo TextBox e un controllo Button per modificare il fattore di zoom e ricercare del testo nel report. Per un sito Web, è possibile accedere alle proprietà del controllo CrystalReportViewer non disponibili in un progetto Windows: una proprietà per selezionare la modalità di stampa e altre proprietà per modificare la larghezza, lo stile e il colore dei bord Codice di esempio Ciascuna esercitazione viene fornita con un codice di esempio in linguaggio Visual Basic e C# che illustra la versione completa del progetto. Seguire le istruzioni riportate in questa esercitazione per creare un nuovo progetto o aprire il progetto del codice di esempio per utilizzare una versione completa. Il codice di esempio si trova in cartelle classificate per lingua e tipo di progetto. I nomi delle cartelle per ciascuna versione di codice di esempio sono i seguenti: ● Sito Web in C#: CS_Web_CRVObjMod_CustomizeViewer ● Progetto Windows C#: CS_Win_CRVObjMod_CustomizeViewer ● Sito Web in Visual Basic: VB_Web_CRVObjMod_CustomizeViewer ● Progetto Windows Visual Basic: VB_Win_CRVObjMod_CustomizeViewer Informazioni correlate Directory dei report di esempio [pagina 15] 1.5.1.5.1 Creazione di una tabella delle impostazioni personalizzate In questa sezione viene creata e configurata una tabella in un sito Web o un controllo TableLayoutPanel in un progetto Windows che contenga i vari controlli che costituiscono la tabella delle impostazioni personalizzate. 272 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Poiché i siti Web e i progetti Windows utilizzano tipi di tabella diversi, seguire le istruzioni della procedura appropriata. 1.5.1.5.1.1 Per creare una tabella delle impostazioni personalizzate per un sito Web 1. Aprire la pagina Default.aspx (il Web Form) in visualizzazione Progettazione. 2. Fare clic sul controllo CrystalReportViewer per selezionarlo. 3. Premere il tasto freccia sinistra sulla tastiera per spostare il cursore a sinistra del controllo CrystalReportViewer, quindi premere Invio. 4. Premere il tasto freccia verso l'alto per spostare il cursore sulla riga vuota sopra il controllo CrystalReportViewer. 5. Dal menu Layout, scegliere Inserisci tabella. 6. Nella finestra di dialogo Inserisci tabella, selezionare il pulsante di opzione Personalizza. 7. Nel riquadro Layout, selezionare la casella di controllo Larghezza e impostare il valore su 100%. 8. Specificare 6 per il numero di Righe e 4 per quello delle Colonne. 9. Nel riquadro Attributi, selezionare la casella di controllo Bordo e aumentare il conteggio fino a 1. 10. Fare clic sul pulsante Proprietà cella.... 11. Nel riquadro Layout della finestra di dialogo Proprietà cella, impostare la casella combinata Allineamento verticale su Alto. 12. Selezionare la casella di controllo No Wrap, quindi fare clic su OK. 13. Fare di nuovo clic su OK per chiudere la finestra di dialogo Inserisci tabella. A questo punto è possibile aggiungere i controlli personalizzati nella tabella per il sito Web. Passare a Elementi di report e barra degli strumenti del controllo CrystalReportViewer [pagina 274]. 1.5.1.5.1.2 Per creare una tabella delle impostazioni personalizzate per un progetto Windows Nota questa procedura può essere utilizzata solo con progetti creati in base a quanto indicato in Impostazione di un progetto [pagina 16], che prevede riferimenti specifici allo spazio dei nomi e la configurazione di codice richiesta per questa procedura; non è possibile completare la procedura senza questa configurazione. 1. Aprire il Windows Form in visualizzazione Progettazione. 2. Fare clic sulla barra del titolo per selezionare l'intero Form, quindi trascinare l'angolo inferiore destro del Form fino ad ingrandirlo quanto l'area principale. 3. Fare clic sul controllo CrystalReportViewer per selezionarlo. 4. Nella finestra Proprietà, impostare Dock su "Bottom." Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 273 5. Nella finestra Proprietà, impostare Anchor su "Top, Bottom, Left, Right." 6. Dalla casella degli strumenti, trascinare il controllo TableLayoutPanel in alto a sinistra del Windows Form. Viene visualizzato un controllo TableLayoutPanel contenente due colonne e due righe. 7. Se il riquadro Smart Task non è aperto, fare clic sul pulsante triangolare nell'angolo superiore destro del controllo TableLayoutPanel. Viene visualizzato il riquadro Smart Task "Attività di TableLayoutPanel". 8. Nel tag Attività di TableLayoutPanel, fare clic sul collegamento Modifica righe e colonne. 9. Nella casella combinata Tipo di membro della finestra di dialogo Stili riga e colonna, selezionare Colonne. 10. Fare clic su Aggiungi fino a inserire un totale di quattro colonne. 11. Per ogni colonna, effettuare le seguenti operazioni: a. Selezionare la colonna. b. Nel riquadro Tipo dimensione, selezionare Percentuale. c. Impostare il valore su 25%. 12. Nella casella combinata Tipo di membro, selezionare Righe. 13. Fare clic su Aggiungi fino a inserire un totale di cinque righe. Nota La tabella di un progetto Windows richiede una riga in meno rispetto alla tabella di un sito Web perché nel controllo CrystalReportViewer per un progetto Windows vi sono meno opzioni configurabili. 14. Per ogni riga, effettuare le seguenti operazioni: a. Selezionare la riga. b. Nel riquadro Tipo dimensione, selezionare Percentuale. c. Impostare il valore della prima riga su 40% e i valori delle righe successive su 15%. Nota (1 x 40%) e (4 x 15%) = 100% dello spazio disponibile. 15. Fare clic su OK. 16. Chiudere il tag delle attività di TableLayoutPanel. 17. Trascinare l'angolo inferiore destro del controllo TableLayoutPanel per ingrandire la tabella fino a riempire lo spazio creato sopra il controllo CrystalReportViewer. A questo punto è possibile aggiungere i controlli personalizzati nella tabella per il progetto Windows. 1.5.1.5.2 Elementi di report e barra degli strumenti del controllo CrystalReportViewer In questa esercitazione vengono utilizzati i vari elementi di report e barra degli strumenti del controllo CrystalReportViewer. 274 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Elementi del visualizzatore Gli elementi predefiniti del controllo CrystalReportViewer per i siti Web variano leggermente da quelli per i progetti Windows. ● Per siti Web e progetti Windows: ○ Barra degli strumenti: consente di visualizzare una barra degli strumenti sopra l'area principale del report. I singoli elementi della barra degli strumenti sono controllati separatamente. Nota Per ulteriori informazioni, vedere più avanti la sezione relativa agli elementi della barra degli strumenti. ○ Struttura di gruppo: contiene le intestazioni di ciascun gruppo nel report, in modo simile a una struttura di directory. Tale struttura viene visualizzata nel riquadro della colonna di sinistra del report. ● Solo per siti Web: ○ Pagina principale: consente di visualizzare il report nell'area principale della pagina. ○ Abilitare pagine separate: consente di determinare se visualizzare il report in una pagina Web singola o in più pagine formattate separatamente. ● Solo per progetti Windows: ○ Barra di stato: consente di visualizzare il numero di pagina corrente e altre informazioni sul report nella parte inferiore dell'area del report. Elementi della barra degli strumenti Gli elementi predefiniti della barra degli strumenti per i siti Web variano leggermente da quelli per i progetti Windows. ● Per siti Web e progetti Windows: ○ Pulsante Struttura di gruppo: consente di mostrare o nascondere la sezione della struttura gruppi del report. ○ Esporta: consente di salvare il report Crystal in un altro formato di file, come .RPT, .PDF, .DOC, .XLS o .RTF. ○ Stampa: consente di stampare il report Crystal in un file PDF o visualizzare la finestra di dialogo Stampa. ○ Spostamento sulle pagine: consente di selezionare la pagina precedente o successiva oppure la prima o l'ultima pagina da visualizzare. ○ Vai a pagina: consente di digitare il numero della pagina da visualizzare. ○ Cerca: consente di digitare una stringa da cercare nel report. ○ Fattore di zoom: consente di selezionare il fattore di zoom per il report. ● Solo per siti Web: ○ Elenco di visualizzazione (solo per un sito Web): consente di scegliere la visualizzazione del report da mostrare (ad esempio, i sottoreport e così via). ○ Drill-up: consente di aprire una pagina con informazioni più specifiche rispetto a quelle dell'argomento corrente. ○ Logo Crystal: consente di visualizzare il logo di SAP Crystal Reports. ● Solo per progetti Windows: Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 275 ○ Aggiorna: consente di rivisualizzare il report. ○ Chiudi finestra corrente: consente di chiudere la visualizzazione corrente del report, se ne è aperta più di una. 1.5.1.5.3 Aggiunta di un meccanismo mostra/nascondi per gli elementi di report e barra degli strumenti In questa sezione viene descritto come aggiungere un meccanismo mostra/nascondi al fine di determinare gli elementi da visualizzare nella barra degli strumenti del controllo CrystalReportViewer. Iniziare aggiungendo i controlli ListBox e Button nella tabella nel Web Form o Windows Form. Creare quindi due enumerazioni che elenchino gli elementi del report e della barra degli strumenti e popolare ogni ListBox con i valori di un'enumerazione. Successivamente, codificare l'evento clic del controllo Button per aggiornare gli elementi del report e della barra degli strumenti. Nel gestore dell'evento, le proprietà della classe CrystalReportViewer sono impostate in base alle selezioni effettuate nei due controlli ListBox. Se si seleziona un elemento dal controllo ListBox, la proprietà della barra degli strumenti viene impostata su True. Durante l'esercitazione, il controllo Button viene utilizzato per aggiornare ulteriori selezioni. In fase di esecuzione, sarà possibile selezionare gli elementi del report e della barra degli strumenti da visualizzare. Iniziare aggiungendo i controlli nella tabella nella parte superiore del Web Form o del Windows Form. 1. Aprire il Web Form o il Windows Form in visualizzazione Progettazione. 2. Dalla casella degli strumenti, trascinare un controllo Label nella prima riga della prima colonna della tabella. 3. Selezionare il controllo Label, quindi nella finestra Proprietà impostare la proprietà Text su Seleziona elementi report da visualizzare. 4. Dalla casella degli strumenti, trascinare un controllo ListBox nella prima riga della seconda colonna della tabella. 5. Selezionare il controllo ListBox, quindi nella finestra Proprietà effettuare le seguenti operazioni: a. Impostare l'ID su listCRVReport. b. Impostare SelectionMode su Multiple (in un progetto Windows, MultiExtended). 6. Dalla casella degli strumenti, trascinare un secondo controllo Label nella prima riga della terza colonna della tabella. 7. Selezionare il controllo Label, quindi nella finestra Proprietà impostare la proprietà Text su Seleziona elementi barra degli strumenti da visualizzare. 8. Dalla casella degli strumenti, trascinare un controllo Button nella terza riga della prima colonna della tabella. 9. Fare clic sul controllo Button per selezionarlo. 10. Nella finestra Proprietà: a. Impostare ID su "redisplay". b. Impostare Text su "Rivisualizza report". 276 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 11. In un progetto Windows, ridimensionare il controllo Button per visualizzare l'intero nome del pulsante. Le procedure successive variano a seconda che si stia creando un sito Web o un progetto Windows. Scegliere una delle seguenti procedure: ● Configurazione dei controlli ListBox in un sito Web [pagina 277] ● Configurazione dei controlli ListBox in un progetto Windows [pagina 282] 1.5.1.5.4 Configurazione dei controlli ListBox in un sito Web In questa sezione viene descritto come configurare i controlli ListBox in un sito Web. Se si sta creando un progetto Windows, vedere Configurazione dei controlli ListBox in un progetto Windows [pagina 282]. A questo punto è possibile creare il gestore dell'evento clic per il controllo Button e aggiungervi il codice. Il gestore dell'evento consente di impostare diversi valori booleani per le proprietà della barra degli strumenti della classe CrystalReportViewer, in base alle selezioni effettuate dell'utente nel controllo ListBox. Prima del gestore dell'evento, è necessario creare due enumerazioni: CeWebCRVReportOptions e CeWebCRVToolbarOptions. Queste enumerazioni forniscono l'elenco degli elementi selezionabili per report e barra degli strumenti. 1.5.1.5.4.1 Per creare l'enumerazione CeWebCRVReportOptions 1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome del sito Web, selezionare Aggiungi, quindi scegliere Aggiungi nuovo elemento. 2. Nella finestra di dialogo Aggiungi nuovo elemento, in visualizzazione Modelli, selezionare Classe. 3. Nel campo Nome digitare "CeWebCRVReportOptions", quindi scegliere Aggiungi. Nota Potrebbe essere richiesto di inserire questa classe in una directory App_Code. Fare clic su Sì. 4. Nella firma della classe, modificare "class" in "enum" per convertire la classe in un'enumerazione. Nota In Visual Basic, modificare in "enum" entrambe le firme di apertura e di chiusura della classe. 5. Poiché le enumerazioni non prevedono costruttori, eliminare il metodo costruttore predefinito fornito nella versione C# del codice. 6. All'interno dell'enumerazione, inserire i seguenti valori: Toolbar Group_Tree Main_Page Enable_Separate_Pages Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 277 Toolbar, Group_Tree, Main_Page, Enable_Separate_Pages 7. Dal menu File, scegliere Salva tutto. 1.5.1.5.4.2 Per creare l'enumerazione CeWebCRVToolbarOptions 1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome del sito Web, selezionare Aggiungi, quindi scegliere Aggiungi nuovo elemento. 2. Nella finestra di dialogo Aggiungi nuovo elemento, in visualizzazione Modelli, selezionare Classe. 3. Nel campo Nome digitare CeWebCRVToolbarOptions, quindi scegliere Aggiungi. Nota Potrebbe essere richiesto di inserire questa classe in una directory App_Code. Fare clic su Sì. 4. Nella firma della classe, modificare "class" in "enum" per convertire la classe in un'enumerazione. Nota In Visual Basic, modificare in "enum" entrambe le firme di apertura e di chiusura della classe. 5. Poiché le enumerazioni non prevedono costruttori, eliminare il metodo costruttore predefinito fornito nella versione C# del codice. 6. All'interno dell'enumerazione, inserire i seguenti valori: Group_Tree_Button Export_Button Print_Button View_List_Button Drill_Up_Button Page_Navigation_Button Go_to_Page_Button Search_Button Zoom_Button Crystal_Logo Group_Tree_Button, Export_Button, Print_Button, View_List_Button, Drill_Up_Button, Page_Navigation_Button, Go_to_Page_Button, Search_Button, Zoom_Button, Crystal_Logo 7. Dal menu File, scegliere Salva tutto. 278 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.1.5.4.3 Per compilare i controlli ListBox con le enumerazioni A questo punto è possibile compilare i controlli ListBox con i valori di enumerazione, che rappresentano le proprietà disponibili per la barra degli strumenti di CrystalReportViewer. 1. Aprire il Web Form. 2. Dal menu Visualizza, scegliere Codice. 3. Nel metodo ConfigureCrystalReports(), aggiungere un blocco condizionale Not IsPostBack. Nota Il metodo ConfigureCrystalReports() è stato creato in Impostazione di un progetto [pagina 16] all'inizio dell'esercitazione. If Not IsPostBack Then End If if (!IsPostBack) { } 4. Nel blocco condizionale, impostare la proprietà DataSource del controllo ListBox listCRVReport sui valori dell'enumerazione CeWebCRVReportOptions. listCRVReport.DataSource = System.Enum.GetValues(GetType(CeWebCRVReportOptions)) listCRVReport.DataSource = System.Enum.GetValues(typeof(CeWebCRVReportOptions)); 5. Chiamare il metodo DataBind() del controllo ListBox listCRVReport per collegare i valori al controllo. listCRVReport.DataBind() listCRVReport.DataBind(); 6. Impostare la proprietà DataSource del controllo ListBox listCRVToolbar sui valori dell'enumerazione CeWebCRVToolbarOptions. listCRVToolbar.DataSource = System.Enum.GetValues(GetType(CeWebCRVToolbarOptions)) listCRVToolbar.DataSource = System.Enum.GetValues(typeof(CeWebCRVToolbarOptions)); 7. Chiamare il metodo DataBind() del controllo ListBox listCRVToolbar per collegare i valori al controllo. listCRVToolbar.DataBind() listCRVToolbar.DataBind(); 8. All'esterno del blocco condizionale Not IsPostBack, collegare il file Chart.rpt alla proprietà ReportSource del controllo CrystalReportViewer. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 279 Per informazioni sui report di esempio, vedere Directory dei report di esempio [pagina 15]. myCrystalReportViewer.ReportSource = "C:\Programmi\Microsoft Visual Studio 9.0\Crystal Reports\Samples\En\Reports\Feature Examples\Chart.rpt" crystalReportViewer.ReportSource = "C:\\Programmi\\Microsoft Visual Studio 9.0\ \Crystal Reports\\Samples\\En\\Reports\\Feature Examples\\Chart.rpt"; 1.5.1.5.4.4 Per codificare il controllo Button di rivisualizzazione in un sito Web A questo punto è possibile aggiungere codice all'evento clic del controllo Button. Il metodo clic consente di impostare valori booleani per gli elementi di report e barra degli strumenti della classe CrystalReportViewer. Se si seleziona un elemento, il valore booleano viene impostato su True e l'elemento del report o della barra degli strumenti viene visualizzato. Se una proprietà non viene selezionata, il valore booleano viene impostato su False e l'elemento del report o della barra degli strumenti non viene visualizzato. 1. Aprire il Web Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Fare doppio clic sul controllo Button di rivisualizzazione. Viene visualizzata la classe di codice sottostante del report per indicare che il metodo di evento redisplay_Click() è stato generato automaticamente. 4. Nel metodo di evento redisplay_Click(), chiamare la proprietà Selected per ciascun elemento dei controlli ListBox listCRVReport e listCRVToolbar. La proprietà Selected restituisce un valore booleano per l'impostazione delle proprietà della barra degli strumenti di CrystalReportViewer. Nota Gli elementi di report e barra degli strumenti CrystalReportViewer di vengono impostati sui valori corrispondenti delle enumerazioni CeWebCRVReportOptionse CeWebCRVToolbarOptions. I valori della classe di enumerazione restituiscono una stringa, necessaria per la conversione in un numero intero. myCrystalReportViewer.HasToggleGroupTreeButton = listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Group_Tree_Button)).S elected myCrystalReportViewer.HasExportButton = listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Export_Button)).Selec ted myCrystalReportViewer.HasPrintButton = listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Print_Button)).Select ed myCrystalReportViewer.HasViewList = listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.View_List_Button)).Se lected myCrystalReportViewer.HasDrillUpButton = listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Drill_Up_Button)).Sel ected myCrystalReportViewer.HasPageNavigationButtons = listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Page_Navigation_Butto n)).Selected 280 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net myCrystalReportViewer.HasGotoPageButton = listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Go_to_Page_Button)).S elected myCrystalReportViewer.HasSearchButton = listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Search_Button)).Selec ted myCrystalReportViewer.HasZoomFactorList = listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Zoom_Button)).Selecte d myCrystalReportViewer.HasCrystalLogo = listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Crystal_Logo)).Select ed myCrystalReportViewer.DisplayToolbar = listCRVReport.Items(Convert.ToInt32(CeWebCRVReportOptions.Toolbar)).Selected myCrystalReportViewer.DisplayGroupTree = listCRVReport.Items(Convert.ToInt32(CeWebCRVReportOptions.Group_Tree)).Selected myCrystalReportViewer.DisplayPage = listCRVReport.Items(Convert.ToInt32(CeWebCRVReportOptions.Main_Page)).Selected myCrystalReportViewer.SeparatePages = listCRVReport.Items(Convert.ToInt32(CeWebCRVReportOptions.Enable_Separate_Pages)) .Selected crystalReportViewer.HasToggleGroupTreeButton = listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Group_Tree_Button)].S elected; crystalReportViewer.HasExportButton = listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Export_Button)].Selec ted; crystalReportViewer.HasPrintButton = listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Print_Button)].Select ed; crystalReportViewer.HasViewList = listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.View_List_Button)].Se lected; crystalReportViewer.HasDrillUpButton = listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Drill_Up_Button)].Sel ected; crystalReportViewer.HasPageNavigationButtons = listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Page_Navigation_Butto n)].Selected; crystalReportViewer.HasGotoPageButton = listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Go_to_Page_Button)].S elected; crystalReportViewer.HasSearchButton = listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Search_Button)].Selec ted; crystalReportViewer.HasZoomFactorList = listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Zoom_Button)].Selecte d; crystalReportViewer.HasCrystalLogo = listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Crystal_Logo)].Select ed; crystalReportViewer.DisplayToolbar = listCRVReport.Items[Convert.ToInt32(CeWebCRVReportOptions.Toolbar)].Selected; crystalReportViewer.DisplayGroupTree = listCRVReport.Items[Convert.ToInt32(CeWebCRVReportOptions.Group_Tree)].Selected; crystalReportViewer.DisplayPage = listCRVReport.Items[Convert.ToInt32(CeWebCRVReportOptions.Main_Page)].Selected; crystalReportViewer.SeparatePages = listCRVReport.Items[Convert.ToInt32(CeWebCRVReportOptions.Enable_Separate_Pages)] .Selected; Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 281 1.5.1.5.4.5 Per verificare il controllo Button di rivisualizzazione A questo punto è possibile creare ed eseguire il progetto per personalizzare la barra degli strumenti di CrystalReportViewer. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. I controlli ListBox listCRVReport e listCRVToolbar visualizzano l'elenco completo delle opzioni di report e barra degli strumenti di CrystalReportViewer. 4. Nel controllo ListBox delle opzioni della barra degli strumenti, selezionare "Page_Navigation_Button", "Print_Button" e "Export_Button". 5. Nel controllo ListBox delle opzioni del report, selezionare "Toolbar", "Group_Tree" e "Main_Page". 6. Fare clic su Rivisualizza report. La pagina viene ricaricata con la visualizzazione di un controllo CrystalReportViewer con una barra degli strumenti, una struttura di gruppi e una pagina principale visibili. Nella barra degli strumenti sono visibili solo i pulsanti Spostamento sulle pagine, Stampa e Esporta. 7. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.5.5 Configurazione dei controlli ListBox in un progetto Windows In questa sezione viene descritto come configurare i controlli ListBox in un progetto Windows. Se si sta creando un sito Web, vedere Configurazione dei controlli ListBox in un sito Web [pagina 277]. A questo punto è possibile creare il gestore dell'evento clic per il controllo Button e aggiungervi il codice. Il gestore dell'evento consente di impostare diversi valori booleani per le proprietà della barra degli strumenti della classe CrystalReportViewer, in base alle selezioni effettuate dell'utente nel controllo ListBox. Prima del gestore dell'evento, è necessario creare due enumerazioni: CeWinCRVReportOptions e CeWinCRVToolbarOptions. Queste enumerazioni forniscono l'elenco degli elementi selezionabili per report e barra degli strumenti. 1.5.1.5.5.1 Creazione dell'enumerazione CeWinCRVReportOptions 1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome del progetto in grassetto, selezionare Aggiungi, quindi scegliere Classe. 2. Nel campo Nome della finestra di dialogo Aggiungi nuovo elemento, digitare CeWinCRVReportOptions, quindi fare clic su Aggiungi. 282 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Nota In Visual Studio, potrebbe essere richiesto di posizionare questa classe in una directory App_Code. Fare clic su Sì. 3. Nella firma della classe, modificare "class" in "enum" per convertire la classe in un'enumerazione. Nota In Visual Basic, modificare in "enum" entrambe le firme di apertura e di chiusura della classe. 4. Poiché le enumerazioni non prevedono costruttori, eliminare il metodo costruttore predefinito fornito nella versione C# del codice. 5. All'interno dell'enumerazione, inserire i seguenti valori: Toolbar Group_Tree Status_Bar Toolbar, Group_Tree, Status_Bar 6. Dal menu File, scegliere Salva tutto. 1.5.1.5.5.2 Creazione dell'enumerazione CeWinCRVToolbarOptions 1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome del progetto in grassetto, selezionare Aggiungi, quindi scegliere Classe. 2. Nel campo Nome della finestra di dialogo Aggiungi nuovo elemento, digitare "CeWinCRVToolbarOptions", quindi fare clic su Aggiungi. Nota Potrebbe essere richiesto di inserire questa classe in una directory App_Code. Fare clic su Sì. 3. Nella firma della classe, modificare "class" in "enum" per convertire la classe in un'enumerazione. Nota In Visual Basic, modificare in "enum" entrambe le firme di apertura e di chiusura della classe. 4. Poiché le enumerazioni non prevedono costruttori, eliminare il metodo costruttore predefinito fornito nella versione C# del codice. 5. All'interno dell'enumerazione, inserire i seguenti valori: Page_Navigation_Button Go_to_Page_Button Close_View_Button Print_Button Refresh_Button Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 283 Export_Button Group_Tree_Button Zoom_Button Search_Button Page_Navigation_Button, Go_to_Page_Button, Close_View_Button, Print_Button, Refresh_Button, Export_Button, Group_Tree_Button, Zoom_Button, Search_Button 6. Dal menu File, scegliere Salva tutto. 1.5.1.5.5.3 Compilazione dei controlli ListBox con le enumerazioni A questo punto è possibile compilare i controlli ListBox con i valori di enumerazione, che rappresentano le proprietà disponibili per la barra degli strumenti di CrystalReportViewer. 1. Aprire il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Nel metodo ConfigureCrystalReports(), impostare la proprietà DataSource del controllo ListBox listCRVReport sui valori dell'enumerazione CeWinCRVReportOptions. Nota Il metodo ConfigureCrystalReports() è stato creato in Impostazione di un progetto [pagina 16] all'inizio dell'esercitazione. listCRVReport.DataSource = System.Enum.GetValues(GetType(CeWinCRVReportOptions)) listCRVReport.DataSource = System.Enum.GetValues(typeof(CeWinCRVReportOptions)); 4. Impostare la proprietà DataSource del controllo ListBox listCRVToolbar sui valori dell'enumerazione CeWinCRVToolbarOptions. listCRVToolbar.DataSource = System.Enum.GetValues(GetType(CeWinCRVToolbarOptions)) listCRVToolbar.DataSource = System.Enum.GetValues(typeof(CeWinCRVToolbarOptions)); 5. Collegare il file Chart.rpt alla proprietà ReportSource del CrystalReportViewercontrol.. Per informazioni sui report di esempio, vedere Directory dei report di esempio [pagina 15]. myCrystalReportViewer.ReportSource = "C:\Programmi\Microsoft Visual Studio 9.0\Crystal Reports\Samples\En\Reports\Feature Examples\Chart.rpt" 284 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net crystalReportViewer.ReportSource = "C:\\Programmi\\Microsoft Visual Studio 9.0\ \Crystal Reports\\Samples\\En\\Reports\\Feature Examples\\Chart.rpt"; 1.5.1.5.5.4 Codifica del controllo Button di rivisualizzazione in un progetto Windows A questo punto è possibile aggiungere codice all'evento clic del controllo Button. Il metodo clic consente di impostare valori booleani per gli elementi di report e barra degli strumenti della classe CrystalReportViewer. Se si seleziona un elemento, il valore booleano viene impostato su True e l'elemento del report o della barra degli strumenti viene visualizzato. Se una proprietà non viene selezionata, il valore booleano viene impostato su False e l'elemento del report o della barra degli strumenti non viene visualizzato. 1. Aprire il Windows Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Fare doppio clic sul controllo Button di rivisualizzazione. Viene visualizzata la classe di codice sottostante del report per indicare che il metodo di evento redisplay_Click() è stato generato automaticamente. 4. Nel metodo di evento redisplay_Click(), chiamare il metodo GetSelected() e passare ciascun elemento del controllo ListBox. Il metodo GetSelected() restituisce un valore booleano per l'impostazione delle proprietà del report o della barra degli strumenti di CrystalReportViewer. Nota Gli elementi di report e barra degli strumenti CrystalReportViewer di vengono impostati sui valori corrispondenti delle enumerazioni CeWinCRVReportOptionse CeWinCRVToolbarOptions. myCrystalReportViewer.ShowPageNavigateButtons = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Page_Navigation_Button) myCrystalReportViewer.ShowGotoPageButton = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Go_to_Page_Button) myCrystalReportViewer.ShowCloseButton = listCRVToolbar. GetSelected(CeWinCRVToolbarOptions.Close_View_Button) myCrystalReportViewer.ShowPrintButton = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Print_Button) myCrystalReportViewer.ShowRefreshButton = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Refresh_Button) myCrystalReportViewer.ShowExportButton = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Export_Button) myCrystalReportViewer.ShowGroupTreeButton = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Group_Tree_Button) myCrystalReportViewer.ShowZoomButton = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Zoom_Button) myCrystalReportViewer.ShowTextSearchButton = listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Search_Button) myCrystalReportViewer.DisplayToolbar = listCRVReport.GetSelected(CeWinCRVReportOptions.Toolbar) myCrystalReportViewer.DisplayGroupTree = listCRVReport.GetSelected(CeWinCRVReportOptions.Group_Tree) myCrystalReportViewer.DisplayStatusBar = listCRVReport.GetSelected(CeWinCRVReportOptions.Status_Bar) Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 285 crystalReportViewer.ShowPageNavigateButtons = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Page_Navigation _Button)); crystalReportViewer.ShowGotoPageButton = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Go_to_Page_Butt on)); crystalReportViewer.ShowCloseButton = listCRVToolbar. GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Close_View_Button)); crystalReportViewer.ShowPrintButton = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Print_Button)); crystalReportViewer.ShowRefreshButton = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Refresh_Button) ); crystalReportViewer.ShowExportButton = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Export_Button)) ; crystalReportViewer.ShowGroupTreeButton = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Group_Tree_Butt on)); crystalReportViewer.ShowZoomButton = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Zoom_Button)); crystalReportViewer.ShowTextSearchButton = listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Search_Button)) ; crystalReportViewer.DisplayToolbar = listCRVReport.GetSelected(Convert.ToInt32(CeWinCRVReportOptions.Toolbar)); crystalReportViewer.DisplayGroupTree = listCRVReport.GetSelected(Convert.ToInt32(CeWinCRVReportOptions.Group_Tree)); crystalReportViewer.DisplayStatusBar = listCRVReport.GetSelected(Convert.ToInt32(CeWinCRVReportOptions.Status_Bar)); 1.5.1.5.5.5 Verifica del controllo Button di rivisualizzazione A questo punto è possibile creare ed eseguire il progetto per personalizzare la barra degli strumenti di CrystalReportViewer. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. I controlli ListBox listCRVReport e listCRVToolbar visualizzano un elenco completo delle opzioni di report e barra degli strumenti di CrystalReportViewer. 4. Nel controllo ListBox delle opzioni della barra degli strumenti, selezionare "Page_Navigation_Button", "Print_Button" e "Export_Button". 5. Nel controllo ListBox delle opzioni del report, selezionare "Toolbar", "Group_Tree" e "Main_Page". 6. Fare clic su Rivisualizza report. La pagina viene ricaricata con la visualizzazione di un controllo CrystalReportViewer con una barra degli strumenti, una struttura di gruppi e una pagina principale visibili. Nella barra degli strumenti sono visibili solo i pulsanti Spostamento sulle pagine, Stampa e Esporta. 7. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 286 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.1.5.6 Modifica del colore di sfondo del report In questa sezione vengono fornite le informazioni per modificare il colore di sfondo del report. Per iniziare, aggiungere un controllo DropDownList per la selezione del colore di sfondo. 1.5.1.5.6.1 Per aggiungere i controlli per la modifica del colore di sfondo 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Dalla casella degli strumenti, trascinare un controllo Label nella seconda riga della prima colonna della tabella. 4. Selezionare il controllo Label, quindi nella finestra Proprietà impostare la proprietàText su Selezionare colore di sfondo. 5. Nella casella degli strumenti, trascinare un controllo DropDownList (per i siti Web) o ComboBox (per i progetti Windows) nella seconda riga della seconda colonna della tabella. 6. Selezionare il controllo DropDownList/ComboBox, quindi nella finestra Proprietà impostare ID/Namesu "selectBackColor". 1.5.1.5.6.2 Per impostare i valori predefiniti dei controlli A questo punto è necessario aggiungere codice al metodo ConfigureCrystalReports() per impostare i valori predefiniti per l'elenco dei colori di sfondo e le caselle di controllo dei componenti del report. 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. Quindi, nel metodo ConfigureCrystalReports(), aggiungere il codice per impostare i valori predefiniti dei controlli. Nota Se si sta creando un sito Web, inserire le righe di codice all'interno del blocco condizionale Not IsPostBack. Se si sta creando un progetto Windows, inserire le righe di codice nell'area principale del metodo ConfigureCrystalReports(). 3. Assegnare l'enumerazione KnownColor alla proprietà DataSource del controllo DropDownList selectBackColor. selectBackColor.DataSource = System.Enum.GetValues(GetType(KnownColor)) selectBackColor.DataSource = System.Enum.GetValues(typeof(KnownColor)); 4. Per un sito Web, collegare l'origine dati al controllo DropDownList selectBackColor. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 287 selectBackColor.DataBind() selectBackColor.DataBind(); 1.5.1.5.6.3 Per assegnare la selezione del colore di sfondo in un sito Web Quindi, aggiungere il codice all'evento clic di Button per rivisualizzare il report in base alla selezione DropDownList selectBackColor. Il codice per un sito Web è diverso da quello per un progetto Windows. Selezionare di seguito la procedura appropriata per il sito Web o il progetto Windows. 1. Aprire il Web Form. 2. Dal menu Visualizza, scegliere Codice. 3. Sopra la firma della classe, aggiungere una dichiarazione "Imports" [Visual Basic] o "using" [C#] all'inizio della classe per System.Drawing (se questo spazio dei nomi non è stato già dichiarato). Imports System.Drawing using System.Drawing; 4. Nel gestore eventi redisplay_Click(), aggiungere il seguente codice: dal controllo DropDownList selectBackColor, recuperare l'elemento selezionato come stringa e passarlo al metodo FromName() della classe Color. Assegnare il valore Color alla proprietà BackColor del controllo CrystalReportViewer. myCrystalReportViewer.BackColor = Color.FromName(selectBackColor.SelectedItem.Text) crystalReportViewer.BackColor = Color.FromName(selectBackColor.SelectedItem.Text); 1.5.1.5.6.4 Per assegnare la selezione del colore di sfondo in un progetto Windows A questo punto è possibile verificare il pulsante Rivisualizza report. Passare alla sezione pertinente riportata di seguito. 1. Aprire il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Sopra la firma della classe, aggiungere una dichiarazione "Imports" [Visual Basic] o "using" [C#] all'inizio della classe per System.Drawing (se questo spazio dei nomi non è stato già dichiarato). Imports System.Drawing using System.Drawing; 288 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 4. Nel gestore eventi redisplay_Click(), aggiungere il codice per recuperare l'elemento sezionato da ComboBox selectBackColor e convertirlo in un'istanza di KnownColor. Dim mySelectedKnownColor As KnownColor = CType(selectBackColor.SelectedItem, KnownColor) KnownColor selectedKnownColor = (KnownColor)selectBackColor.SelectedItem; 5. Creare un blocco condizionale per verificare che il colore selezionato per lo sfondo non sia trasparente. If Not mySelectedKnownColor = KnownColor.Transparent Then End If if (selectedKnownColor != KnownColor.Transparent) { } 6. All'interno del blocco If, passare l'istanza KnownColor al metodo FromKnownName() della classe System.Drawing.Color. Assegnare il valore Color alla proprietà BackColor del controllo CrystalReportViewer. myCrystalReportViewer.BackColor = System.Drawing.Color.FromKnownColor(mySelectedKnownColor) crystalReportViewer.BackColor = System.Drawing.Color.FromKnownColor(selectedKnownColor); 1.5.1.5.6.5 Per verificare il controllo Button di rivisualizzazione A questo punto è possibile verificare il pulsante Rivisualizza report. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. DropDownList/ComboBox viene visualizzato insieme ai controlli ListBox e Button aggiunti nella precedente procedura. 4. Nel controllo DropDownList selectBackColor, selezionare "Blue." Nota Ricordarsi di selezionare gli elementi di report, specialmente Main_Page, in modo da renderli visibili. 5. Fare clic su Rivisualizza report. La pagina viene ricaricata per visualizzare il report su uno sfondo blu. 6. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 289 1.5.1.5.7 Aggiunta di codice per selezionare una pagina del report CrystalReportViewerIn questa sezione viene descritto come codificare l'opzione "Vai a pagina" della barra degli strumenti di La barra degli strumenti di CrystalReportViewer include pulsanti di spostamento tra le pagine e una casella di testo per la selezione delle pagine del report. Per scrivere manualmente il codice per le selezioni delle pagine, è possibile utilizzare i seguenti metodi della classe CrystalReportViewer: ● ShowFirstPage() ● ShowLastPage() ● ShowNextPage() ● ShowNthPage(int PageNumber) ● ShowPreviousPage() Quando si chiama uno di questi metodi, viene visualizzata la pagina selezionata per il report corrente. 1.5.1.5.7.1 Per aggiungere i controlli TextBox e Button per l'opzione "Vai a pagina" 1. Aprire il Web Form o il Windows Form in visualizzazione Progettazione. 2. Dalla casella degli strumenti, trascinare un controllo TextBox nella quarta riga della prima colonna della tabella. 3. Selezionare il controllo TextBox, quindi nella finestra Proprietà effettuare le seguenti operazioni: a. Impostare ID (o Name) su "pageNumber". b. Lasciare vuota la proprietà Text. 4. Dalla casella degli strumenti, trascinare un controllo Button nella quarta riga della seconda colonna della tabella. 5. Selezionare il controllo Button, quindi nella finestra Proprietà effettuare le seguenti operazioni: a. Impostare ID (o Name) su "goToPage". b. Impostare Text su "Vai a pagina". 1.5.1.5.7.2 Per codificare il gestore dell'evento Click() per il controllo Button 1. Fare doppio clic sul controllo Button Vai a pagina. Viene visualizzata la classe di codice sottostante del report indicante che il gestore dell'evento goToPage_Click() è stato generato automaticamente. 2. Convertire il testo digitato nel controllo TextBox in un numero intero, quindi passare il valore al metodo ShowNthPage() del controllo CrystalReportViewer. 290 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Nota Il numero intero inserito nel controllo TextBox non è stato convalidato. Nel caso di un'applicazione di produzione, è opportuno aggiungere un controllo di convalida configurato per il controllo TextBox. myCrystalReportViewer.ShowNthPage(Convert.ToInt32(pageNumber.Text)) crystalReportViewer.ShowNthPage(Convert.ToInt32(pageNumber.Text)); 1.5.1.5.7.3 Per verificare il controllo Button goToPage 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Vengono visualizzati il report Chart e tutti i controlli aggiunti. 4. Inserire 3 nel controllo TextBox pageNumber, quindi fare clic su Vai a pagina. La pagina viene ricaricata per visualizzare la pagina 3 del report. 5. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.5.8 Modifica del fattore di zoom Per impostazione predefinita, la barra degli strumenti di CrystalReportViewer consente di selezionare un fattore di zoom compreso tra il 25% e il 400%, in incrementi fissi di 25%, 50% o 100%. In questa sezione viene descritto come aggiungere codice per consentire la selezione di qualsiasi fattore di zoom desiderato. A tal fine, è necessario un controllo TextBox in cui digitare il fattore di zoom desiderato e un controllo Button per ricaricare la pagina. 1.5.1.5.8.1 Aggiunta dei controlli TextBox e Button per l'opzione Zoom 1. Aprire il Web Form o il Windows Form in visualizzazione Progettazione. 2. Dalla casella degli strumenti, trascinare un controllo TextBox nella quarta riga della terza colonna della tabella. 3. Selezionare il controllo TextBox, quindi nella finestra Proprietà effettuare le seguenti operazioni: a. Impostare ID (o Name) su "zoomFactor". b. Lasciare vuota la proprietà Text. 4. Dalla casella degli strumenti, trascinare un controllo Button nella quarta riga della quarta colonna della tabella. 5. Selezionare il controllo Button, quindi nella finestra Proprietà effettuare le seguenti operazioni: Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 291 a. Impostare ID (o Name) su "updateZoomFactor". b. Impostare Text su "% Zoom". 1.5.1.5.8.2 Codifica del gestore dell'evento Click() per il controllo Button 1. Fare doppio clic sul controllo Button updateZoomFactor. Viene visualizzata la classe di codice sottostante del report indicante che il gestore dell'evento updateZoomFactor_Click() è stato generato automaticamente. 2. Convertire il testo digitato nel controllo TextBox in un numero intero, quindi passare il valore al metodo Zoom() del controllo CrystalReportViewer. Nota Il numero intero inserito nel controllo TextBox non è stato convalidato. Nel caso di un'applicazione di produzione, è opportuno aggiungere un controllo di convalida configurato per il controllo TextBox. myCrystalReportViewer.Zoom(Convert.ToInt32(zoomFactor.Text)) crystalReportViewer.Zoom(Convert.ToInt32(zoomFactor.Text)); 1.5.1.5.8.3 Verifica del controllo Button updateZoomFactor 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Vengono visualizzati il report Chart e tutti i controlli aggiunti. 4. Immettere "38" nel controllo TextBox zoomFactor e fare clic su Zoom. La pagina viene ricaricata per visualizzare la pagina corrente al 38% della dimensione originale. 5. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.5.9 Ricerche nel report In questa sezione viene descritto come cercare del testo in un report Crystal collegato al controllo CrystalReportViewer. A tal fine sono necessari un controllo TextBox in cui digitare la stringa da cercare, un controllo Button per eseguire la ricerca nel report e un controllo Label per notificare l'esito della ricerca. 292 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.1.5.9.1 Per aggiungere i controlli TextBox, Button e Label per l'opzione Cerca 1. Aprire il Web Form o il Windows Form in visualizzazione Progettazione. 2. Dalla casella degli strumenti, trascinare un controllo TextBox nella quinta riga della prima colonna della tabella. 3. Selezionare il controllo TextBox, quindi nella finestra Proprietà effettuare le seguenti operazioni: a. Impostare ID (o Name) su "searchText". b. Lasciare vuota la proprietà Text. 4. Dalla casella degli strumenti, trascinare un controllo Button nella quinta riga della seconda colonna della tabella. 5. Selezionare il controllo Button, quindi nella finestra Proprietà effettuare le seguenti operazioni: a. Impostare ID (o Name) su "search". b. Impostare Text su "Cerca testo". 6. Dalla casella degli strumenti, trascinare un controllo Label nella quinta riga della terza colonna della tabella. a. Impostare ID (o Name) su "message". b. Lasciare vuoto Text. c. Impostare ForeColor su Rosso. 7. Creare la classe MessageConstants per salvare le risposte standard come costanti di stringa per la ricerca. 1.5.1.5.9.2 Per codificare il gestore dell'evento search_Click() in un sito Web A questo punto è necessario chiamare il metodo SearchAndHighlightText() nel controllo Button di ricerca. Nota Il funzionamento del metodo SearchAndHighlightText() in un sito Web differisce da quelle in un progetto Windows. Poiché il funzionamento del metodo è differente in un sito Web rispetto a un progetto Windows, completare la procedura appropriata riportata di seguito. 1. Fare doppio clic sul controllo Button search. Viene visualizzata la classe di codice sottostante del report indicante che il gestore dell'evento search_Click() è stato generato automaticamente. 2. Recuperare il testo digitato nel controllo TextBox e passare il valore al metodo SearchAndHighlightText() del controllo CrystalReportViewer. Assegnare la chiamata del metodo a una variabile booleana. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 293 Nota Affinché la classe SearchDirection sia accessibile, è necessario includere un'istruzione "Imports" [Visual Basic] o "using" [C#] all'inizio della classe di codice sottostante per lo spazio dei nomi CrystalDecisions.Shared. (tale dichiarazione è stata aggiunta in Impostazione di un progetto [pagina 16]). Dim mySearchResult As Boolean = myCrystalReportViewer.SearchAndHighlightText(searchText.Text, SearchDirection.Forward) bool searchResult = crystalReportViewer.SearchAndHighlightText(searchText.Text, SearchDirection.Forward); 3. Creare un blocco condizionale che verifichi l'esito della ricerca. If Not mySearchResult Then Else End If if(!searchResult) { } else { } 4. All'interno del blocco If, assegnare la constante MessageConstants.SUCCESS alla proprietà Text del controllo Label message. message.Text = MessageConstants.SUCCESS message.Text = MessageConstants.SUCCESS; 5. All'interno del blocco Else, assegnare la constante MessageConstants.FAILURE alla proprietà Text del controllo Label message. message.Text = MessageConstants.FAILURE message.Text = MessageConstants.FAILURE; 1.5.1.5.9.3 Per codificare il gestore dell'evento search_Click() in un progetto Windows Ignorare la seguente procedura per un progetto Windows e passare alla procedura di verifica riportata di seguito. 1. Fare doppio clic sul controllo Button search. Viene visualizzata la classe di codice sottostante del report indicante che il gestore dell'evento search_Click() è stato generato automaticamente. 294 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 2. Recuperare il testo digitato nel controllo TextBox e passare il valore al metodo SearchAndHighlightText() del controllo CrystalReportViewer. Assegnare la chiamata del metodo a una variabile booleana. Dim mySearchResult As Boolean = myCrystalReportViewer.SearchAndHighlightText(searchText.Text) bool searchResult = crystalReportViewer.SearchAndHighlightText(searchText.Text); 3. Creare un blocco condizionale che verifichi l'esito della ricerca. If mySearchResult Then Else End If if(searchResult) { } else { } 4. All'interno del blocco If, assegnare la constante MessageConstants.SUCCESS alla proprietà Text del controllo Label message. message.Text = MessageConstants.SUCCESS message.Text = MessageConstants.SUCCESS; 5. All'interno del blocco Else, assegnare la constante MessageConstants.FAILUREalla proprietà Text del controllo messageLabel. message.Text = MessageConstants.FAILURE message.Text = MessageConstants.FAILURE; 1.5.1.5.9.4 Per verificare il controllo Button di ricerca 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Vengono visualizzati il report Chart e tutti i controlli aggiunti. 4. Immettere China in searchText nel controllo TextBox e fare clic su Cerca. La pagina viene ricaricata per visualizzare il risultato della ricerca e il messaggio di completamento. 5. Immettere hello nel controllo TextBox searchText e fare clic su Cerca. La pagina viene ricaricata per visualizzare il messaggio indicante che il testo cercato non è stato trovato. 6. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. Le restanti opzioni di configurazione sono disponibili solo per la versione Web del controllo CrystalReportViewer. Se si sta sviluppando un sito Web, passare a Aggiunta di un bordo al report in un sito Web [pagina 296]. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 295 Se si sviluppa un progetto Windows, l'esercitazione è terminata. 1.5.1.5.10 Aggiunta di un bordo al report in un sito Web In questa sezione viene descritto come aggiungere un bordo personalizzato al report Crystal in un sito Web. Per un progetto Windows, le proprietà relative a larghezza, stile e colore del bordo non sono disponibili. Gli stili del bordo sono elencati nell'enumerazione BorderStyle, mentre i colori sono elencati nell'enumerazione KnownColor. Tuttavia, la proprietà BorderColor del controllo CrystalReportViewer prende i valori dalla classe Color. Pertanto, è necessario convertire il valore KnownColor in Color. Iniziare aggiungendo i controlli necessari al Web Form, ovvero un controllo TextBox, due controlli DropDownList e un controllo Button per tracciare il bordo. 1.5.1.5.10.1 Per aggiungere i controlli per l'impostazione di larghezza, stile e colore del bordo 1. Aprire il Web Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Dalla casella degli strumenti, trascinare un controllo Label nella sesta riga della prima colonna della tabella. 4. Selezionare il controllo Label, quindi nella finestra Proprietà impostare la proprietà Text su "Larghezza bordo". 5. Dalla casella degli strumenti, trascinare un controllo TextBox nella stessa cella di tabella del controllo Label. 6. Selezionare il controllo TextBox, quindi nella finestra Proprietà impostare ID (o Name) su "borderWidth". 7. Dalla casella degli strumenti, trascinare un secondo controllo Label nella sesta riga della seconda colonna della tabella. 8. Selezionare il controllo Label, quindi nella finestra Proprietà impostare la proprietà Text su "Stile bordo". 9. Dalla casella degli strumenti, trascinare un controllo DropDownList nella stessa cella di tabella del controllo Label. 10. Selezionare il controllo DropDownList, quindi nella finestra Proprietà impostare ID (o Name) su "selectBorderStyle". 11. Dalla casella degli strumenti, trascinare un terzo controllo Label nella sesta riga della terza colonna della tabella. 12. Selezionare il controllo Label, quindi nella finestra Proprietà impostare la proprietà Text su "Colore bordo". 13. Dalla casella degli strumenti, trascinare un controllo DropDownList nella stessa cella di tabella del controllo Label. 14. Selezionare il controllo DropDownList, quindi nella finestra Proprietà impostare ID (o Name) su "selectBorderColor". 15. Dalla casella degli strumenti, trascinare un controllo Button nella sesta riga della quarta colonna della tabella. 16. Selezionare il controllo Button, quindi nella finestra Proprietà effettuare le seguenti operazioni: a. Impostare ID (o Name) su "drawBorder". b. Impostare la proprietà Text su "Disegna bordo". 296 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.1.5.10.2 Per compilare i controlli DropDownList A questo punto è necessario compilare i controlli DropDownList con gli stili e i colori del bordo disponibili per il controllo CrystalReportViewer. I controlli DropDownList vengono compilati nel metodo ConfigureCrystalReports(). Per un sito Web, gli stili del bordo vengono salvati nell'enumerazione System.Web.UI.WebControls.BorderStyle. I colori del bordo vengono recuperati dall'enumerazione System.Drawing.KnownColor. 1. Sopra la firma della classe, aggiungere una dichiarazione "Imports" [Visual Basic] o "using" [C#] all'inizio della classe per System.Web.UI.WebControls e System.Drawing (se questo spazio dei nomi non è già stato dichiarato). Imports System.Web.UI.WebControls Imports System.Drawing using System.Web.UI.WebControls; using System.Drawing; 2. All'interno del metodo ConfigureCrystalReports(), nel blocco condizionale Not IsPostBack, assegnare l'enumerazione BorderStyle alla proprietà DataSource del controllo DropDownList selectBorderStyle. selectBorderStyle.DataSource = System.Enum.GetValues(GetType(BorderStyle)) selectBorderStyle.DataSource = System.Enum.GetValues(typeof(BorderStyle)); 3. Collegare l'origine dati a DropDownList selectBorderStyle. selectBorderStyle.DataBind() selectBorderStyle.DataBind(); 4. Sempre all'interno del blocco condizionale Not IsPostBack, assegnare l'enumerazione KnownColor alla proprietà DataSource del controllo DropDownList selectBorderColor. selectBorderColor.DataSource = System.Enum.GetValues(GetType(KnownColor)) selectBorderColor.DataSource = System.Enum.GetValues(typeof(KnownColor)); 5. Collegare l'origine dati a DropDownList selectBorderColor. selectBorderColor.DataBind() selectBorderColor.DataBind(); Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 297 1.5.1.5.10.3 Per codificare il controllo Button DrawBorder A questo punto è possibile assegnare i valori alle proprietà BorderWidth, BorderStyle e BorderColor del controllo CrystalReportViewer. 1. Aprire il Web Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Fare doppio clic sul controllo Button DrawBorder. Viene visualizzata la classe di codice sottostante del report indicante che il gestore dell'evento drawBorder_Click() è stato generato automaticamente. 4. All'interno del gestore eventi drawBorder_Click(), assegnare il testo digitato in TextBox borderWidth alla proprietà BorderWidth del controllo CrystalReportViewer. Nota Il numero intero inserito nel controllo TextBox non è stato convalidato. Nel caso di un'applicazione di produzione, è opportuno aggiungere un controllo di convalida configurato per il controllo TextBox. myCrystalReportViewer.BorderWidth = Unit.Parse(borderWidth.Text.ToString()) crystalReportViewer.BorderWidth = Convert.ToInt32(borderWidth.Text); 5. Da DropDownList selectBorderStyle, recuperare l'indice selezionato e convertirlo in un valore BorderStyle. Assegnare il valore BorderStyle alla proprietà BorderStyle del controllo CrystalReportViewer. myCrystalReportViewer.BorderStyle = CType(selectBorderStyle.SelectedIndex, BorderStyle) crystalReportViewer.BorderStyle = (BorderStyle)selectBorderStyle.SelectedIndex; 6. Dal controllo DropDownList selectBorderColor, recuperare l'elemento selezionato come stringa e passarlo al metodo FromName() della classe Color. Assegnare il valore Color alla proprietà BorderColor del controllo CrystalReportViewer. myCrystalReportViewer.BorderColor = Color.FromName(selectBorderColor.SelectedItem.Text) crystalReportViewer.BorderColor = Color.FromName(selectBorderColor.SelectedItem.Text); 1.5.1.5.10.4 Per tracciare un bordo intorno al report Crystal 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 298 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 3. Dal menu Debug, scegliere Avvia. 4. Digitare 10 per la larghezza del bordo. 5. Selezionare Doppio per lo stile del bordo. 6. Selezionare SteelBlue per il colore del bordo. 7. Fare clic sul pulsante Disegna bordo. La pagina viene ricaricata per visualizzare un bordo intorno al report Crystal. 8. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.1.5.11 Configurazione della persistenza Session in un sito Web In questa sezione viene descritto come configurare la persistenza Session per gli eventi clic del controllo Button. Quando la pagina Web viene ricaricata in seguito a un evento clic del pulsante Button, le modifiche apportate al modello a oggetti CrystalReportViewer vanno perdute. 1.5.1.5.11.1 Per dimostrare la mancanza di persistenza in un sito Web 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. 4. Nel controlloDropDownList selectBackColor, selezionare "Blue". 5. Fare clic su Rivisualizza report. La pagina viene ricaricata per visualizzare il report senza barra degli strumenti e su uno sfondo blu. 6. Digitare "10" per la larghezza del bordo. 7. Selezionare "Doppio" per lo stile del bordo. 8. Selezionare "SteelBlue" per il colore del bordo. 9. Fare clic su Disegna bordo. La pagina viene ricaricata per visualizzare un bordo attorno al report Crystal ma il colore di sfondo non è più blu. 10. Inserire "3" nel controllo TextBox pageNumber, quindi fare clic su Vai a pagina. La pagina viene ricaricata per visualizzare la pagina 3 del report ma il bordo attorno al report non è più visibile. 11. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 299 1.5.1.5.11.2 Per aggiungere il codice di assegnazione Session al gestore dell'evento drawBorder_Click() È necessario aggiungere all'applicazione il codice di persistenza, in modo che le modifiche apportate nel modello a oggetti CrystalReportViewer siano mantenute quando le pagine Web vengono ricaricate. Iniziare aggiungendo il codice di persistenza per i valori dei bordi al gestore dell'evento drawBorder_Click(), dove tali valori vengono assegnati per primi. Successivamente, nel metodo ConfigureCrystalReports(), i valori memorizzati in Session vengono recuperati e assegnati alla rispettiva proprietà della classe CrystalReportViewer. Nel gestore dell'evento drawBorder_Click(), alla fine del codice esistente, aggiungere quattro assegnazioni Session per BackColor, BorderColor, BorderStyle e BorderWidth. Session("myBorderColor") = myCrystalReportViewer.BorderColor.ToString() Session("myBorderStyle") = myCrystalReportViewer.BorderStyle Session("myBorderWidth") = myCrystalReportViewer.BorderWidth Session["borderColor"] = crystalReportViewer.BorderColor.ToString(); Session["borderStyle"] = crystalReportViewer.BorderStyle; Session["borderWidth"] = crystalReportViewer.BorderWidth; 1.5.1.5.11.3 Per aggiungere il codice di recupero Session al metodo ConfigureCrystalReports() A questo punto è possibile recuperare questi valori da Session nel metodo ConfigureCrystalReports(). 1. Alla fine del metodo ConfigureCrystalReports(), creare un blocco If che controlli se la variabile Session BackColor non è null. Se non lo è, all'interno del blocco If recuperare la proprietà BackColor da Session ed eseguirne il cast in una stringa. Passare la stringa al metodo FromName() della classe Color e assegnare l'istanza Color alla proprietà BackColor dell'istanza CrystalReportViewer. If Not IsNothing(Session("myBackColor")) Then myCrystalReportViewer.BackColor = Color.FromName(CType(Session("myBackColor"), String)) End If if (Session["backColor"] != null) { crystalReportViewer.BackColor = Color.FromName((string)Session["backColor"]); } 2. Creare un secondo blocco If che controlli se la variabile Session BorderColor non è null. Se non lo è, all'interno del blocco If recuperare la proprietà BorderColor da Session ed eseguirne il cast in una stringa. Passare la stringa al metodo FromName() della classe Color e assegnare l'istanza Color alla proprietà BorderColor dell'istanza CrystalReportViewer. If Not IsNothing(Session("myBorderColor")) Then 300 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net myCrystalReportViewer.BorderColor = Color.FromName(CType(Session("myBorderColor"), String)) End If if (Session["borderColor"] != null) { crystalReportViewer.BorderColor = Color.FromName((string)Session["borderColor"]); } 3. Creare un terzo blocco If che controlli se la variabile Session BorderStyle non è null. Se non lo è, all'interno del blocco If recuperare la proprietà BorderStyle da Session ed eseguirne il cast in BorderStyle. myCrystalReportViewer.BorderStyle = CType(Session("myBorderStyle"), BorderStyle) if (Session["borderStyle"] != null) { crystalReportViewer.BorderStyle = (BorderStyle)Session["borderStyle"]; } 4. Creare un quarto blocco If che controlli se la variabile Session BorderWidth non è null. Se non lo è, all'interno del blocco If recuperare la proprietà BorderWidth da Session e convertirla in un numero intero. myCrystalReportViewer.BorderWidth = Convert.ToInt32(Session("myBorderWidth")) if (Session["borderStyle"] != null) { crystalReportViewer.BorderWidth = Convert.ToInt32(Session["borderStyle"]); } 1.5.1.5.11.4 Per codificare il controllo Button drawBorder Nella procedura seguente, la persistenza Session viene aggiunta al gestore dell'evento clic del controllo Button di rivisualizzazione. 1. All'interno del gestore dell'evento redisplay_Click(), assegnare a Session l'elemento selezionato nel controllo selectBackColor DropDownList. Session("myBackColor") = selectBackColor.SelectedItem.Text Session["backColor"] = selectBackColor.SelectedItem.Text; 2. All'interno del gestore dell'evento drawBorder_Click(), assegnare a Session la proprietà Text del controllo TextBox borderWidth. Session("myBorderWidth") = borderWidth.Text Session["borderWidth"] = borderWidth.Text; 3. Assegnare a Session l'indice selezionato nel controllo DropDownList selectBorderStyle. Session("myBorderStyle") = selectBorderStyle.SelectedIndex Session["borderStyle"] = selectBorderStyle.SelectedIndex; Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 301 4. Assegnare a Session l'elemento selezionato nel controllo DropDownList selectBorderColor. Session("myBorderColor") = selectBorderColor.SelectedItem.Text Session["borderColor"] = selectBorderColor.SelectedItem.Text; A questo punto è possibile creare ed eseguire il progetto per verificare che le modifiche apportate al report siano persistenti quando si utilizzano gli eventi di clic del controllo Button. 1.5.2 Esercitazioni relative al modello a oggetti ReportDocument In questa sezione sono contenute diverse esercitazioni relative al modello a oggetti ReportDocument. In questa sezione sono contenute diverse esercitazioni relative al modello a oggetti ReportDocument. 1.5.2.1 Esercitazione: Persistenza del modello a oggetti ReportDocument mediante Session In questa esercitazione viene utilizzato il modello a oggetti ReportDocument e vengono apportate modifiche a un report a livello di codice in fase di esecuzione. In questa esercitazione viene utilizzato il modello a oggetti ReportDocument e vengono apportate modifiche a un report a livello di codice in fase di esecuzione. Quindi viene descritto come utilizzare Session per rendere persistenti tali modifiche nei successivi caricamenti di pagine Web. Poiché solo le applicazioni Web richiedono la persistenza Session, questa esercitazione non può essere utilizzata per i progetti Windows. Introduzione Nel progetto che viene creato in questa esercitazione viene utilizzato un Web Form contenente un controllo CrystalReportViewer e due pulsanti, che consentono di modificare l’ordinamento del report all'interno del modello a oggetti ReportDocument. Inizialmente, il progetto viene creato senza persistenza Session per dimostrare che senza la persistenza la modifica all’ordinamento non viene mantenuta quando si verifica un evento clic di pulsante. A questo punto, la persistenza Session viene aggiunta al progetto. L’istanza ReportDocument viene inserita in Session in fase di creazione e in tutti i punti in cui lo stato dell’istanza ReportDocument viene modificato. Ogni volta che il report viene rivisualizzato, l’istanza ReportDocument viene estratta da Session e collegata al controllo CrystalReportViewer. In questo modo, ogni volta che il report viene visualizzato, l’utente vede la versione più aggiornata dell'istanza ReportDocument. 302 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Nota in questa esercitazione viene utilizzato Session per rendere persistenti le modifiche al modello a oggetti ReportDocument. Se si intende utilizzare solo il modello a oggetti limitato contenuto nel controllo CrystalReportViewer, utilizzare esclusivamente ViewState. Se si utilizza Session per rendere persistente un oggetto ReportDocument sono coinvolti altri modelli di persistenza? Se si utilizza Session per rendere persistente un oggetto ReportDocument sono coinvolti altri modelli di persistenza? Sì. Per ottenere la persistenza in un’applicazione Web ASP.NET, gli oggetti utilizzano in genere Session, mentre i controlli server Web utilizzano ViewState. Poiché un'applicazione Web SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio utilizza nei report sia oggetti che controlli server Web, la persistenza viene condivisa da Session e ViewState: ● Session rende persistente il modello a oggetti ReportDocument, che in fase di esecuzione interagisce a livello di codice con il report. ● ViewState rende persistente il controllo CrystalReportViewer, che visualizza il report. In particolare, ViewState rende persistenti le proprietà di visualizzazione, impostate nella barra degli strumenti di CrystalReportViewer, nonché agli eventi (come zoom, NextPage e così via) che vengono attivati dai pulsanti della barra degli strumenti. La persistenza ViewState viene gestita automaticamente. Pertanto, in questa esercitazione viene codificata solo la persistenza Session. Codice di esempio Ciascuna esercitazione viene fornita con un codice di esempio in linguaggio Visual Basic e C# che illustra la versione completa del progetto. Seguire le istruzioni riportate in questa esercitazione per creare un nuovo progetto o aprire il progetto del codice di esempio per utilizzare una versione completa. Il codice di esempio si trova in cartelle classificate per lingua e tipo di progetto. I nomi delle cartelle per ciascuna versione di codice di esempio sono i seguenti: ● Sito Web C#: CS_Web_RDObjMod_Session ● Sito Web Visual Basic: VB_Web_RDObjMod_Session Informazioni correlate Approccio di persistenza da utilizzare con SAP Crystal Reports [pagina 51] Directory dei report di esempio [pagina 15] Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 303 1.5.2.1.1 Configurazione di pulsanti sul Web Form Iniziare aggiungendo due pulsanti al Web Form, assegnare loro un nome e creare gli eventi clic per ciascuno di essi. 1.5.2.1.1.1 Per aggiungere pulsanti al Web Form 1. Aprire la pagina Default.aspx. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Fare clic sul controllo CrystalReportViewer e premere il tasto freccia sinistra sulla tastiera per visualizzare un cursore lampeggiante, quindi premere Invio. Il controllo CrystalReportViewer si sposta in basso di una riga. 4. Dalla casella degli strumenti, trascinare un controllo server Web Button sopra il controllo CrystalReportViewer. 5. Fare clic a destra del controllo Button per visualizzare il cursore lampeggiate, quindi premere due volte la barra spaziatrice. 6. Dalla casella degli strumenti, trascinare un secondo controllo server Web Button a destra del primo controllo Button. 1.5.2.1.1.2 Per impostare le proprietà Text e ID di ciascun controllo Button 1. Fare clic sul primo controllo server Web Button per selezionarlo. 2. Nella finestra Proprietà: ○ Impostare ID su "sortOrderDescending". ○ Impostare Text su "Modifica ordinamento in decrescente". 3. Fare clic sul secondo controllo server Web Button per selezionarlo. 4. Nella finestra Proprietà: ○ Impostare ID su "sortOrderAscending". ○ Impostare Text su "Modifica ordinamento in crescente". 1.5.2.1.1.3 Creazione di eventi clic per ciascun controllo Button 1. Fare doppio clic sul primo controllo server Web Button. La classe di codice sottostante si apre e alla fine di essa viene creato un nuovo metodo di evento, sortOrderDescending_Click(). 2. Ritornare alla visualizzazione Progettazione della pagina Default.aspx. 3. Fare doppio clic sul secondo controllo server Web Button. 304 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net La classe di codice sottostante si apre e alla fine di essa viene creato un nuovo metodo di evento, sortOrderAscending_Click(). 1.5.2.1.2 Programmazione degli eventi Button con criteri di ordinamento In questa procedura viene descritto come programmare il modello a oggetti ReportDocument del report nel metodo di evento per impostare l’ordinamento crescente in un metodo di evento e quello decrescente nell’altro. 1.5.2.1.2.1 Per programmare il modello a oggetti ReportDocument del report nel metodo di evento sortOrderDescending_Click 1. Aprire la classe di codice sottostante e individuare il metodo di evento sortOrderDescending_Click(). 2. Nel metodo di evento, recuperare la proprietà SortFields dalla proprietà DataDefinition dell’istanza del report e assegnarla a un’istanza della classe indicizzata SortFields. Dim mySortFields As SortFields = hierarchicalGroupingReport.DataDefinition.SortFields SortFields sortFields = hierarchicalGroupingReport.DataDefinition.SortFields; 3. Recuperare la prima istanza SortField dalla classe indicizzata SortFields e assegnarla a una variabile denominata firstSortField. Nota La classe indicizzata SortFields è in base zero. Dim firstSortField As SortField = mySortFields(0) SortField firstSortField = sortFields[0]; 4. Impostare la proprietà SortDirection di firstSortField sull’ordine decrescente mediante la selezione DescendingOrder dell’enumerazione SortDirection. firstSortField.SortDirection = SortDirection.DescendingOrder firstSortField.SortDirection = SortDirection.DescendingOrder; 5. A questo punto, riassegnare il report (con l’ordinamento modificato nel modello a oggetti ReportDocument) alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = hierarchicalGroupingReport Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 305 crystalReportViewer.ReportSource = hierarchicalGroupingReport; A questo punto, verrà immesso il codice per il metodo dell'evento sortOrderAscending_Click(). Il codice è identico, ad eccezione dell’impostazione della proprietà SortDirection. 1.5.2.1.2.2 Per programmare il modello a oggetti ReportDocument del report nel metodo di evento sortOrderAscending_Click 1. Aprire la classe di codice sottostante e individuare il metodo di evento sortOrderAscending_Click(). 2. Nel metodo di evento, recuperare la proprietà SortFields dalla proprietà DataDefinition dell’istanza del report e assegnarla a un’istanza della classe indicizzata SortFields. Dim mySortFields As SortFields = hierarchicalGroupingReport.DataDefinition.SortFields SortFields sortFields = hierarchicalGroupingReport.DataDefinition.SortFields; 3. Recuperare la prima istanza SortField dalla classe indicizzata SortFields e assegnarla a una variabile denominata firstSortField. Nota La classe indicizzata SortFields è in base zero. Dim firstSortField As SortField = mySortFields(0) SortField firstSortField = sortFields[0]; 4. Impostare la proprietà SortDirection dell'istanza firstSortField sull'ordine crescente selezionando AscendingOrder nell'enumerazione SortDirection. firstSortField.SortDirection = SortDirection.AscendingOrder firstSortField.SortDirection = SortDirection.AscendingOrder; 5. A questo punto, riassegnare il report (con l’ordinamento modificato nel modello a oggetti ReportDocument) alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = hierarchicalGroupingReport crystalReportViewer.ReportSource = hierarchicalGroupingReport; Viene così completata la programmazione del modello a oggetti ReportDocument del report in ciascun metodo di evento. Nella sezione successiva viene verificato se le modifiche all’ordinamento funzionano e se vengono mantenute nel caso in cui Session non venga applicato. 306 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.2.1.3 Verifica e determinazione degli errori di persistenza In questa sezione viene dimostrato che senza l'utilizzo della persistenza Session, le modifiche all’ordinamento non vengono mantenute quando la pagina viene ricaricata per riflettere le modifiche apportate alle impostazioni di visualizzazione. 1.5.2.1.3.1 Per verificare le modifiche a livello di codice al criterio di ordinamento 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Se non si verificano errori di generazione, la pagina Default.aspx viene caricata nel browser con il report Hierarchical Grouping generato nel form. 4. Osservare attentamente l’ordinamento. Può essere opportuno stampare la pagina per confrontare le modifiche al criterio di ordinamento. 5. Fare clic sul pulsante Modifica ordinamento in decrescente. L’ordinamento viene invertito. 6. Fare clic sul pulsante Modifica ordinamento in crescente. L’ordinamento ritorna all’impostazione originale (crescente). 1.5.2.1.3.2 Per verificare se le modifiche all'ordinamento vengono mantenute quando si modificano le impostazioni di visualizzazione Nella procedura successiva viene verificato se l’ordinamento viene mantenuto quando si applicano altre modifiche alla pagina, ad esempio alle impostazioni di visualizzazione. 1. Fare clic sul pulsante Modifica ordinamento in decrescente. L’ordinamento viene invertito. 2. Dalla barra degli strumenti del report, regolare lo zoom da 100% a 125%. La pagina viene ricaricata con uno zoom del 125%, ma la modifica all’ordinamento non viene mantenuta. 3. Fare di nuovo clic sul pulsante Modifica ordinamento in decrescente. L’ordinamento viene invertito. 4. Dalla barra degli strumenti del report, regolare lo zoom da 125% a 100%. 5. La pagina viene ricaricata con uno zoom del 100%, ma la modifica all’ordinamento non viene mantenuta. 6. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. Questo test ha dimostrato che, a questo punto dell’esercitazione, non vi è persistenza. L’ordinamento viene applicato solo quando si fa clic su uno dei pulsanti di ordinamento e viene annullato quando l’utente interagisce con la pagina per regolare lo zoom o apre un’altra pagina in un report con più pagine. È pertanto necessario aggiungere codice per rendere persistente mediante Session la modifica all’ordinamento apportata nel modello a oggetti ReportDocument. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 307 1.5.2.1.4 Aggiunta di codice Session In questa sezione viene descritto come utilizzare Session per rendere persistente la modifica all’ordinamento del report. Al metodo ConfigureCrystalReports(), creato quando è stato impostato il progetto (vedere Impostazione di un progetto [pagina 16]), aggiungere codice che esegua la ricerca di Session e il ricaricamento immediato dell'istanza del report in Session quando un utente modifica l'ordinamento. 1.5.2.1.4.1 Per aggiungere il codice di controllo di Session al metodo ConfigureCrystalReports() 1. Nel metodo ConfigureCrystalReports(), prima del codice esistente, creare un blocco condizionale if/ else che controlli se esiste un oggetto Session denominato hierarchicalGroupingReport. A questo oggetto Session è possibile assegnare un nome di identificazione a scelta. Utilizzare un identificatore univoco, come il nome dell’istanza report. If (Session("hierarchicalGroupingReport") Is Nothing) Then Else End If if(Session["hierarchicalGroupingReport"] == null) { } else { } 2. Se si sta utilizzando un report incorporato, spostare la riga di codice che dichiara e crea un'istanza del report dalla posizione corrente al blocco If. If (Session("hierarchicalGroupingReport") Is Nothing) Then hierarchicalGroupingReport = New Hierarchical_Grouping() Else End If if (Session["hierarchicalGroupingReport"] == null) { hierarchicalGroupingReport = new Hierarchical_Grouping(); } else { } 3. Se si sta utilizzando un report non incorporato, spostare le due righe di codice che dichiarano e creano un'istanza del report e che caricano il report dal percorso della directory, dalla posizione corrente al blocco If. Nota vedere Directory dei report di esempio [pagina 15] per determinare il percorso corretto dei report di esempio. If (Session("hierarchicalGroupingReport") Is Nothing) Then hierarchicalGroupingReport = New ReportDocument() 308 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net hierarchicalGroupingReport.Load("C:\Programmi\Microsoft Visual Studio 9.0\Crystal Reports\Samples\En\Reports\Feature Examples\Hierarchical Grouping.rpt") Else End If if(Session["hierarchicalGroupingReport"] == null) { hierarchicalGroupingReport = new ReportDocument(); hierarchicalGroupingReport.Load("C:\Programmi\Microsoft Visual Studio 9.0\Crystal Reports\Samples\En\Reports\Feature Examples\Hierarchical Grouping.rpt"); } else { } 4. Nel blocco If, assegnare il report a Session, utilizzando il nome della variabile del report come stringa di identificazione di Session. Session("hierarchicalGroupingReport") = hierarchicalGroupingReport Session["hierarchicalGroupingReport"] = hierarchicalGroupingReport; Il blocco If è completato e viene eseguito se il report non esiste in Session. Il blocco Else viene invece eseguito se il report si trova in Session. Pertanto, lo scopo di questo blocco è recuperare il report da Session in un’istanza di report. 5. Nel blocco Else, assegnare il report memorizzato in Session all’istanza report. hierarchicalGroupingReport = CType(Session("hierarchicalGroupingReport"), ReportDocument) hierarchicalGroupingReport = (ReportDocument)Session["hierarchicalGroupingReport"]; Nota Poiché Session restituisce solo oggetti generici, è necessario eseguire il cast del report in un tipo di report. A prescindere dal fatto che si utilizzino report incorporati o non incorporati, eseguire il cast dell'oggetto recuperato nel tipo ReportDocument. Fuori e alla fine del blocco condizionale, il resto del codice collega l'istanza del report alla proprietà ReportSource del controllo CrystalReportViewer. Facendo riferimento alla configurazione del progetto (vedere Impostazione di un progetto [pagina 16]), il metodo ConfigureCrystalReports() viene chiamato ogni volta che viene caricata una pagina. Pertanto, la modifica a questo metodo garantisce che venga sempre recuperato e caricato il report più aggiornato (sia esso nuovo o memorizzato in Session). Tuttavia, non è stato ancora scritto alcun codice per aggiornare l’istanza del report. Nella sezione successiva, l’istanza del report viene aggiornata in Session ogni volta che si modifica l’ordinamento. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 309 1.5.2.1.4.2 Per aggiornare l'istanza del report in Session per il metodo di evento sortOrderDescending_Click 1. Nel metodo di evento sortOrderDescending_Click(), eliminare l'ultima riga di codice che collega il controllo CrystalReportViewer al report. A questo punto dovrebbero restare le tre righe di codice che modificano il criterio di ordinamento. 2. Sotto queste tre righe di codice, assegnare l'istanza hierarchicalGroupingReport (aggiornata con il nuovo criterio di ordinamento) in Session servendosi dello stesso identificatore utilizzato nel metodo ConfigureCrystalReports(). Nota Per semplicità copiare/incollare questa riga di codice dal metodo ConfigureCrystalReports(). Session("hierarchicalGroupingReport") = hierarchicalGroupingReport Session["hierarchicalGroupingReport"] = hierarchicalGroupingReport; 3. Infine, aggiungere una chiamata al metodo ConfigureCrystalReports() per recuperare da Session l'ultima istanza hierarchicalGroupingReport (quella aggiornata nel passaggio precedente) e collegarla al controllo CrystalReportViewer. ConfigureCrystalReports() ConfigureCrystalReports(); A questo punto, ripetere la stessa procedura per il secondo metodo di evento. 1.5.2.1.4.3 Per aggiornare l'istanza del report in Session per il metodo di evento sortOrderAscending_Click 1. Nel metodo di evento sortOrderAscending_Click(), eliminare l'ultima riga di codice che collega il controllo CrystalReportViewer al report. A questo punto dovrebbero restare le tre righe di codice che modificano il criterio di ordinamento. 2. Sotto queste tre righe di codice, assegnare l'istanza hierarchicalGroupingReport (aggiornata con il nuovo criterio di ordinamento) in Session servendosi dello stesso identificatore utilizzato nel metodo ConfigureCrystalReports(). Per semplicità, copiare e incollare questa riga di codice dal metodo ConfigureCrystalReports(). Session("hierarchicalGroupingReport") = hierarchicalGroupingReport Session["hierarchicalGroupingReport"] = hierarchicalGroupingReport; 310 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 3. Infine, aggiungere una chiamata al metodo ConfigureCrystalReports() per recuperare da Session l'ultima istanza hierarchicalGroupingReport (quella aggiornata nel passaggio precedente) e collegarla al controllo CrystalReportViewer. ConfigureCrystalReports() ConfigureCrystalReports(); A questo punto è possibile verificare se le modifiche all’ordinamento sono persistenti o meno. 1.5.2.1.5 Verifica e determinazione della persistenza In questa sezione viene verificato se utilizzando la persistenza Session le modifiche all'ordinamento vengono rese persistenti. 1.5.2.1.5.1 Per verificare se le modifiche all'ordinamento vengono mantenute 1. Dal menu Genera, scegliere Genera soluzione. Se si verificano errori di generazione, correggerli. 2. Dal menu Debug, scegliere Avvia. Se non si verificano errori di generazione, la pagina Default.aspx viene caricata nel browser con il report Hierarchical Grouping generato nel form. 3. Osservare attentamente l’ordinamento. Può essere opportuno stampare la pagina per confrontare le modifiche al criterio di ordinamento. 4. Fare clic sul pulsante Modifica ordinamento in decrescente. L’ordinamento viene invertito. 5. Dalla barra degli strumenti del report, regolare lo zoom da 100% a 125%. La pagina del report viene ricaricata con uno zoom del 125%. L’inversione dell’ordinamento è stata resa persistente. 6. Fare clic sul pulsante Modifica ordinamento in crescente. L’ordinamento viene ripristinato. 7. Dalla barra degli strumenti del report, regolare lo zoom da 125% a 100%. La pagina del report viene ricaricata con uno zoom del 100%. L’ordinamento conserva l’impostazione del passaggio precedente. Da questo test risulta evidente che la persistenza ha avuto esito positivo. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 311 1.5.2.2 Esercitazione: Accesso a un database SQL Server protetto mediante l'autenticazione SQL In questa esercitazione viene descritto come aggiungere codice di accesso per visualizzare un report contenente informazioni provenienti da un database SQL Server protetto. Introduzione Per accedere a un database SQL Server protetto, utilizzare classi del modello a oggetti ReportDocument. L'oggetto ReportDocument dispone di una proprietà Database che restituisce un'istanza di Database. Questa istanza di Database contiene le informazioni di database per il report, inclusa una proprietà Tables che restituisce un'istanza di classe indicizzata Tables. Le singole istanze Table possono essere recuperate dalla classe indicizzata Tables. L'accesso viene eseguito a livello granulare di ogni istanza di Table, a cui deve essere concesso l'accesso al database SQL Server protetto. Questa operazione viene eseguita inserendo le informazioni di accesso in un'istanza di ConnectionInfo e quindi, in un ciclo for, applicando l'istanza di ConnectionInfo alla proprietà ConnectionInfo di ogni istanza di Table. Le proprietà della classe includono includono: ● ServerName ● DatabaseName ● UserID ● Password ● IntegratedSecurity (non utilizzata nell'esercitazione) Nota per un'esercitazione che utilizzi l'autenticazione Windows e quindi la proprietà IntegratedSecurity invece delle proprietà UserID e Password, vedere Esercitazione: Accesso a un database SQL Server protetto mediante la protezione integrata [pagina 326]. Se si sceglie di impostare solo le proprietà DatabaseName, UserID e Password, si ha accesso al server e al database predefiniti specificati nel report. Se, invece, si sceglie di assegnare la proprietà ServerName e specificare un server alternativo, in fase di esecuzione è possibile reindirizzare il report a un server diverso. Iniziare creando un report contenente dati provenienti da un database SQL Server protetto. L'esercitazione può essere completata anche utilizzando classi del modello a oggetti CrystalReportViewer, ma si consiglia di utilizzare il modello a oggetti ReportDocument. 312 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Codice di esempio Ciascuna esercitazione viene fornita con un codice di esempio in linguaggio Visual Basic e C# che illustra la versione completa del progetto. Seguire le istruzioni riportate in questa esercitazione per creare un nuovo progetto o aprire il progetto del codice di esempio per utilizzare una versione completa. Il codice di esempio si trova in cartelle classificate per lingua e tipo di progetto. I nomi delle cartelle per ciascuna versione di codice di esempio sono i seguenti: ● Sito Web in C#: CS_Web_RDObjMod_DBLogon ● Progetto Windows C#: CS_Win_RDObjMod_DBLogon ● Sito Web in Visual Basic: VB_Web_RDObjMod_DBLogon ● Progetto Windows Visual Basic: VB_Win_RDObjMod_DBLogon Informazioni correlate Scelta del modello a oggetti appropriato al progetto [pagina 31] Esercitazione: Accesso a un database SQL Server protetto mediante la protezione integrata [pagina 222] Directory dei report di esempio [pagina 15] 1.5.2.2.1 Creazione di un report connesso a un database SQL Server protetto Iniziare creando un report le cui informazioni provengano dal database Northwind. Nota Northwind è un database di esempio fornito con SQL Server. Per questa esercitazione sono necessarie alcune operazioni di configurazione. Informazioni correlate Esercitazione: Accesso a un database SQL Server protetto mediante l'autenticazione SQL [pagina 312] 1.5.2.2.1.1 Prerequisiti di configurazione del database 1. Configurazione di SQL Server: ○ Se è stato installato SQL Server (o la versione OEM, MSDE), per utilizzarlo con questa esercitazione è necessario configurarlo in modo che richieda l’Autenticazione SQL Server. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 313 ○ Se SQL Server (o la versione OEM, MSDE) non è stato installato, per utilizzarlo con questa esercitazione è necessario installare MSDE con l’Autenticazione SQL Server impostata su "True". 2. È necessario installare il database Northwind fornito con SQL Server e verificare che accetti l’Autenticazione SQL Server. 3. È necessario creare un account con accesso limitato da utilizzare nel sito Web. 1.5.2.2.1.2 Per creare un report con dati protetti provenienti dal database Northwind Nota questa procedura può essere utilizzata solo con progetti creati in base a quanto indicato in Impostazione di un progetto [pagina 16], che prevede riferimenti specifici allo spazio dei nomi e la configurazione di codice richiesta per questa procedura; non è possibile completare la procedura senza questa configurazione. 1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome del progetto in grassetto, selezionare Aggiungi, quindi scegliere Aggiungi nuovo elemento. 2. Nella finestra di dialogo Aggiungi nuovo elemento, in visualizzazione Modelli, selezionare il modello Crystal Report. 3. Nel campo Nome, inserire il nome "NorthwindCustomers.rpt", quindi fare clic su Apri. 4. Nel riquadro Crea un nuovo documento Crystal Report della finestra di dialogo Galleria Crystal Reports, selezionare Uso della procedura guidata Report. 5. Nel riquadro Scegli un esperto selezionare Standard, quindi fare clic su OK. Viene visualizzata la finestra di dialogo Procedura guidata per la creazione di report standard. 6. Nel riquadro Origini dati disponibili, espandere la cartella Crea nuova connessione. 7. Dalla sottocartella, espandere la cartella OLE DB (ADO). Viene visualizzata la finestra OLE DB (ADO). 8. Selezionare Provider Microsoft OLE DB per SQL Server, quindi fare clic su Avanti. 9. Inserire i valori desiderati per server di database, ID utente e password nei campi Server, User ID e Password. 10. Dall’elenco a discesa Database, selezionare "Northwind". Lasciare deselezionata la casella di controllo Protezione integrata, poiché è in uso l’autenticazione SQL Server invece di quella NT. 11. Fare clic su Fine. La cartella OLE DB è ora estesa, mostra il server di database e, al suo interno, il database Northwind. 12. Espandere i nodi Northwind, dbo e Tables, quindi selezionare la tabella Customers. 13. Fare clic sul simbolo > per spostare la tabella nel riquadro Tabelle selezionate, quindi scegliere Avanti. 14. Tenendo premuto il tasto Ctrl fare clic su CompanyName, ContactName e City. 15. Fare clic sul simbolo > per spostare questi campi nel riquadro Campi da visualizzare, quindi scegliere Avanti. 16. Nel riquadro Campi disponibili, in Campi report, selezionare Customer.City, fare clic sul simbolo > per spostare il campo nel riquadro Raggruppa in base a, quindi scegliere Fine. Il report NorthwindCustomers viene creato e caricato nella finestra principale di Visual Studio. A questo punto è possibile collegare il report al controllo CrystalReportViewer e impostare l’accesso al database a livello di codice. 314 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.2.2.2 Collegamento del report In Impostazione di un progetto [pagina 16] è stato inserito un controllo CrystalReportViewer nel Web Form o nel Windows Form. Nel passaggio precedente è stato aggiunto un report NorthwindCustomers al progetto. In questa sezione viene descritto come creare un'istanza del report NorthwindCustomers e come collegarla al controllo CrystalReportViewer. Viene quindi verificato se è possibile visualizzare correttamente il report quando i valori correnti del campo parametro non sono ancora stati impostati. Esistono due metodi per creare e collegare un'istanza del report: ● Come report incorporato. ● Come report non incorporato. Scegliere una delle seguenti procedure. ● Se si utilizzano report incorporati, seguire la prima procedura per creare un'istanza del report come report incorporato. ● Se si utilizzano report non incorporati, seguire la seconda procedura per creare un'istanza del report come report non incorporato. 1.5.2.2.2.1 Per creare un'istanza del report NorthwindCustomers come report incorporato e collegarla al controllo CrystalReportViewer 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Aggiungere una nuova dichiarazione a livello di classe per la classe wrapper del report NorthwindCustomers, utilizzando il nome di variabile northwindCustomersReport. Impostare il modificatore di accesso su private. Private northwindCustomersReport As NorthwindCustomers private NorthwindCustomers northwindCustomersReport; 4. Nel metodo ConfigureCrystalReports(), creare un’istanza della classe wrapper del report. Nota Il metodo ConfigureCrystalReports() è stato creato in Impostazione di un progetto [pagina 16]. northwindCustomersReport = New NorthwindCustomers() northwindCustomersReport = new NorthwindCustomers(); 5. Nella riga successiva, sotto la creazione dell’istanza del report, collegare la proprietà ReportSource del controllo CrystalReportViewer alla classe del report di cui è stata creata l’istanza (nome variabile: northwindCustomersReport). myCrystalReportViewer.ReportSource = northwindCustomersReport Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 315 crystalReportViewer.ReportSource = northwindCustomersReport; A questo punto è possibile creare ed eseguire il progetto. È previsto che il caricamento del report abbia esito negativo, poiché il codice per accedere al database non è stato ancora scritto. 1.5.2.2.2.2 Per creare un'istanza del report NorthwindCustomers come report non incorporato e collegarla al controllo CrystalReportViewer 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Aggiungere una nuova dichiarazione a livello di classe per la classe wrapper del report ReportDocument, utilizzando il nome di variabile northwindCustomersReport. Impostare il modificatore di accesso su private. Private northwindCustomersReport As ReportDocument private ReportDocument northwindCustomersReport; Nota La classe ReportDocument è membro dello spazio dei nomi CrystalDecisions.CrystalReports.Engine per il quale è stata aggiunta una dichiarazione "Imports" [Visual Basic] o "using" [C#] in Impostazione di un progetto [pagina 16]. Quando si crea un'istanza di ReportDocument e si carica un report nello spazio dei nomi, si ottiene l'accesso al report tramite l'SDK, senza incorporare il report. 4. All'interno del metodo ConfigureCrystalReports() (creato in Impostazione di un progetto [pagina 16]), creare un'istanza della classe ReportDocument. northwindCustomersReport = New ReportDocument() northwindCustomersReport = new ReportDocument(); 5. Dichiarare una variabile di stringa, denominarla reportPath e assegnarle un percorso della fase di esecuzione del report locale. Questo percorso viene determinato in modo diverso a seconda che si tratti di siti Web o di progetti Windows: ○ In un sito Web, trasferire il nome del file di report locale come parametro stringa nel metodo Server.MapPath(). In questo modo, in fase di esecuzione viene eseguita la mappatura del report locale al percorso della directory di file del disco rigido. Dim reportPath As String = Server.MapPath("NorthwindCustomers.rpt") string reportPath = Server.MapPath("NorthwindCustomers.rpt"); ○ In un progetto Windows, concatenare la proprietà Application.StartupPath con una barra rovesciata e il nome del file di report locale. In questo modo viene eseguita la mappatura del report nella stessa directory dell'eseguibile Windows. 316 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Nota Al momento della compilazione, copiare il report nella directory contenente il file eseguibile. Dim reportPath As String = Application.StartupPath & "\" & "NorthwindCustomers.rpt" string reportPath = Application.StartupPath + "\\" + "NorthwindCustomers.rpt"; 6. Chiamare il metodo Load() dell'istanza ReportDocument e passare ad esso la variabile di stringa reportPath. northwindCustomersReport.Load(reportPath) northwindCustomersReport.Load(reportPath); 7. Collegare la proprietà ReportSource di CrystalReportViewer all'istanza di ReportDocument. myCrystalReportViewer.ReportSource = northwindCustomersReport crystalReportViewer.ReportSource = northwindCustomersReport; 1.5.2.2.2.3 Per verificare il caricamento del report NorthwindCustomers A prescindere dal fatto che si sia scelto di creare un'istanza di una classe di report incorporato o di una classe di report non incorporato attraverso la classe ReportDocument, il nome di variabile utilizzato è sempre lo stesso: northwindCustomersReport. Questo consente di utilizzare le stesse righe di codice nelle procedure che seguono. A questo punto è possibile creare ed eseguire il progetto. È previsto che il caricamento del report abbia esito negativo, poiché il codice per accedere al database non è stato ancora scritto. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Se si utilizza un report non incorporato in un progetto Windows, individuare l'eseguibile Windows compilato nella sottodirectory \bin\ [Visual Basic] o \bin\debug\ [C#] e copiarvi il report. Nota Affinché il report non incorporato venga caricato dall'eseguibile Windows in fase di esecuzione, è necessario salvare il report nella stessa directory dell'eseguibile. 4. Dal menu Debug, scegliere Avvia. Il report NorthwindCustomers non viene visualizzato poiché non è stato aggiunto il codice di accesso al database. Nota I risultati possono variare, in base alla versione di SAP Crystal Reports in uso. Ad esempio, se è installato SAP Crystal Reports 10 o versione successiva, viene visualizzato un form per richiedere le informazioni di Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 317 accesso al database per il report. Questa è una nuova funzione di SAP Crystal Reports Developer. Se si sta utilizzando una versione precedente di SAP Crystal Reports, viene generata un’eccezione. In entrambi i casi, per creare un'applicazione completamente funzionale è necessario seguire la procedura successiva. 5. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.2.2.3 Aggiunta del codice di accesso del report A questo punto è possibile aggiungere il codice di accesso alla classe di codice sottostante. Iniziare creando un metodo di supporto privato, SetDBLogonForReport(). 1.5.2.2.3.1 Per creare e codificare il metodo SetDBLogonForReport() 1. Tornare alla classe di codice sottostante del Web Form o Windows Form. 2. Alla fine della classe creare un nuovo metodo privato denominato SetDBLogonForReport() con due parametri ConnectionInfo e ReportDocument. Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo, ByVal myReportDocument As ReportDocument) End Sub private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument) { } 3. Nel metodo, recuperare l'istanza Tables dalla proprietà Tables della proprietà Database del parametro ReportDocument. Nota Tables è una classe indicizzata contenente istanze della classe Table. Dim myTables As Tables = myReportDocument.Database.Tables Tables tables = reportDocument.Database.Tables; 4. Creare un ciclo foreach che passi attraverso ogni istanza Table nell’istanza della classe indicizzata Tables. Nota È necessario includere l'intero percorso dello spazio dei nomi della classe Table per distinguerla dalla classe Table dello spazio dei nomi System.Web.UI.WebControls. For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables Next 318 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net foreach(CrystalDecisions.CrystalReports.Engine.Table table in tables) { } 5. All'interno del ciclo foreach, recuperare l’istanza TableLogonInfo dalla proprietà LogOnInfo dell’istanza Table. Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo TableLogOnInfo tableLogonInfo = table.LogOnInfo; 6. All'interno del ciclo foreach, impostare la proprietà ConnectionInfo di TableLogonInfo sul parametro ConnectionInfo. myTableLogonInfo.ConnectionInfo = myConnectionInfo tableLogonInfo.ConnectionInfo = connectionInfo; 7. All'interno del ciclo foreach, passare l'istanza di TableLogonInfo come parametro al metodo ApplyLogonInfo dell'istanza di Table. myTable.ApplyLogOnInfo(myTableLogonInfo) table.ApplyLogOnInfo(tableLogonInfo); Con questa procedura è stato creato un metodo per impostare l’accesso al database. A questo punto diventa necessario modificare il metodo ConfigureCrystalReports() in modo da fare riferimento al metodo appena creato e consentire al report di rilevare le informazioni di accesso al database. A tale scopo, occorre effettuare due operazioni: ● Configurare l'istanza ConnectionInfo. ● Chiamare il metodo SetDBLogonForReport(). 1.5.2.2.3.2 Per modificare il metodo ConfigureCrystalReports() in modo da fare riferimento al codice di accesso al database 1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, sopra la riga che collega il report al controllo CrystalReportViewer. 2. All’interno delle interruzioni di riga, dichiarare e creare un’istanza della classe ConnectionInfo. Nota Per rendere accessibile la classe ConnectionInfo, includere un'istruzione "Imports" [Visual Basic] o "using" [C#] all'inizio della classe di codice sottostante per lo spazio dei nomi CrystalDecisions.Shared. (tale dichiarazione è stata aggiunta in Impostazione di un progetto [pagina 16]). Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo() Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 319 ConnectionInfo connectionInfo = new ConnectionInfo(); 3. Impostare le proprietà DatabaseName, UserID e Password dell’istanza ConnectionInfo. Nota Per motivi di sicurezza, è importante utilizzare un account di database con autorizzazioni di accesso limitate. Nel codice scritto, sostituire la password di esempio 1234 (riportata in di seguito) con una password personalizzata. myConnectionInfo.DatabaseName = "Northwind" myConnectionInfo.UserID = "limitedPermissionAccount" myConnectionInfo.Password = " 1234" connectionInfo.DatabaseName = "Northwind"; connectionInfo.UserID = "limitedPermissionAccount"; connectionInfo.Password = " 1234"; 4. Inserire una chiamata al metodo SetDBLogonForReport(), passando l'istanza ConnectionInfo e il report NorthwindCustomers. SetDBLogonForReport(myConnectionInfo, northwindCustomersReport) SetDBLogonForReport(connectionInfo, northwindCustomersReport); Dopo la chiamata si trova il codice originale che collega il report al controllo CrystalReportViewer. A questo punto è possibile creare ed eseguire il progetto. Il report dovrebbe essere caricato correttamente, perché è stato aggiunto codice per accedere al database. 1.5.2.2.3.3 Per verificare il caricamento del report NorthwindCustomers 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Il report NorthwindCustomers viene visualizzato. 4. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. Il report NorthwindCustomers viene visualizzato. 320 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.2.2.4 Aggiunta della possibilità di modificare la posizione del database in fase di esecuzione In questa sezione viene descritto come modificare la posizione del database in fase di esecuzione. Questa operazione richiede solo una piccola modifica all'istanza di ConnectionInfo. 1.5.2.2.4.1 Per modificare la posizione del database in fase di esecuzione 1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, dopo la riga che dichiara e crea l'istanza di ConnectionInfo. 2. All'interno delle interruzioni di riga, impostare la proprietà ServerName dell'istanza di ConnectionInfo. Nota Nel codice scritto, sostituire il nome del server di esempio DevDatabase (riportato in basso) con quello del proprio server. myConnectionInfo.ServerName = "DevDatabase" connectionInfo.ServerName = "DevDatabase"; 1.5.2.2.4.2 Per verificare che il report possa essere reimpostato per un server di database alternativo in fase di esecuzione A questo punto è possibile creare ed eseguire il progetto. In fase di esecuzione, il report dovrebbe essere reindirizzato al server di database alternativo. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Il report NorthwindCustomers viene visualizzato. 4. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 321 1.5.2.2.5 Appendice: Miglioramenti del codice di accesso al database Seguendo l'esercitazione, è stato impostato il codice per modificare la posizione del database in fase di esecuzione. In questo esempio, il server di database utilizzato è lo stesso con la differenza è viene chiamato esplicitamente con il nome. È comunque possibile modificare la stringa del nome del server di database per specificare un altro server che contenga il database Northwind. Se si utilizza SAP Crystal Reports con Visual Studio 2005 o 2008 è possibile accedere all'API avanzata per l'accesso a un database SQL Server protetto. L'API di SAP Crystal Reports consente di ridurre al minimo la quantità di codice necessaria per accedere al database. Nelle procedure precedenti veniva illustrato come creare il metodo di supporto SetDBLogonForReport() che utilizza un ciclo foreach per impostare la proprietà ConnectionInfo di ciascuna tabella nel report Crystal. In questa esercitazione viene illustrato come eliminare il metodo di supporto e aggiungere codice per utilizzare la classe DataSourceConnections dallo spazio dei nomi CrystalDecisions.Shared o il metodo SetDatabaseLogon() dalla classe ReportDocument. La classe DataSourceConnections è un ArrayList contenente le istanze ConnectionInfo di tutte le connessioni utilizzate dal report Crystal. È possibile recuperare le istanze ConnectionInfo a un determinato livello di indice, quindi chiamare SetLogon() o SetConnection() per passare le informazioni di accesso al report. Il metodo SetLogon() consente di impostare il nome utente e la password. Questo metodo utilizza il server e il database predefiniti specificati nel report. Il metodo SetConnection() consente di impostare il nome del server, il nome del database, il nome utente e password. Per utilizzare il nuovo codice API, è necessario completare le istruzioni riportate in Creazione di un report connesso a un database SQL Server protetto [pagina 313] e Collegamento del report [pagina 315]. Quindi, è possibile utilizzare uno dei seguenti metodi API avanzati: ● Utilizzo della classe DataSourceConnections per l'accesso al database [pagina 323] ● Utilizzo del metodo SetDatabaseLogon() della classe ReportDocument [pagina 325] Se sono state completate tutte le procedure riportate in Esercitazione: Accesso a un database SQL Server protetto mediante l'autenticazione SQL [pagina 312], prima di poter utilizzare uno dei metodi API avanzati è necessario eliminare le righe di codice indicate in Modifica del progetto per l'accesso al database [pagina 322]. 1.5.2.2.5.1 Modifica del progetto per l'accesso al database Se sono state completate tutte le procedure riportate in Esercitazione: Accesso a un database SQL Server protetto mediante l'autenticazione SQL [pagina 312], è necessario eliminare le righe di codice indicate nella seguente procedura. 322 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.2.2.5.1.1 Per modificare il progetto in modo da utilizzare l'API avanzata di SAP Crystal Reports 1. Aprire il progetto completato per questa esercitazione. 2. Aprire il Web Form o il Windows Form. 3. Dal menu Visualizza, scegliere Codice. 4. Eliminare il metodo di supporto SetDBLogonForReport(). 5. Nel metodo ConfigureCrystalReports(), eliminare le seguenti righe di codice: a. Eliminare il codice che dichiara un'istanza della classe ConnectionInfo. b. Eliminare il codice che utilizza le proprietà ServerName, DatabaseName, UserID e Password della classe ConnectionInfo. c. Eliminare la chiamata al metodo SetDBLogonForReport(). A questo punto, il metodo ConfigureCrystalReports() è costituito da due righe di codice. Private Sub ConfigureCrystalReports() northwindCustomersReport = new NorthwindCustomers() myCrystalReportViewer.ReportSource = northwindCustomersReport End Sub private void ConfigureCrystalReports() { northwindCustomersReport = new NorthwindCustomers(); crystalReportViewer.ReportSource = northwindCustomersReport; } Ora è possibile scegliere di utilizzare uno dei seguenti metodi API avanzati: ● Utilizzo della classe DataSourceConnections per l'accesso al database [pagina 323] ● Utilizzo del metodo SetDatabaseLogon() della classe ReportDocument [pagina 325] 1.5.2.2.5.2 Utilizzo della classe DataSourceConnections per l'accesso al database In questa sezione viene descritto come aggiungere due righe di codice per accedere a un database SQL Server. È necessario recuperare l'istanza DataSourceConnections, quindi impostare le informazioni di accesso al database mediante SetLogon() o SetConnection(). ● È necessario creare un progetto in base alle istruzioni riportate in Creazione di un report connesso a un database SQL Server protetto [pagina 313] e Collegamento del report [pagina 315]. ● Oppure è necessario creare un progetto in base alle istruzioni riportate in Modifica del progetto per l'accesso al database [pagina 322]. Se si desidera utilizzare il server e il database predefiniti, chiamare il metodo SetLogon() con nome utente e password. In caso contrario, per utilizzare un altro server o database, chiamare il metodo SetConnection() con il proprio nome di server, nome di database, nome utente e password. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 323 1.5.2.2.5.2.1 Per utilizzare il metodo SetLogon() della classe DataSourceConnections 1. Tra le due righe di codice all'interno di ConfigureCrystalReports(), recuperare l'istanza DataSourceConnections dalla proprietà DataSourceConnections dell'istanza NorthwindCustomers. Dim myDataSourceConnections As DataSourceConnections = northwindCustomersReport.DataSourceConnections DataSourceConnections dataSourceConnections = northwindCustomersReport.DataSourceConnections; 2. Recuperare IConnectionInfo al livello di indice 0 dell'istanza DataSourceConnections. Dim myConnectInfo As IConnectionInfo = myDataSourceConnections(0) IConnectionInfo connectInfo = dataSourceConnections[0]; 3. Chiamare il metodo SetLogon() con i propri nome utente e password. Nota Per motivi di sicurezza, è importante utilizzare un account di database con autorizzazioni di accesso limitate. Nel codice scritto, sostituire la password di esempio 1234 (riportata in di seguito) con una password personalizzata. myConnectInfo.SetLogon("limitedPermissionAccount", "1234") connectInfo.SetLogon("limitedPermissionAccount", "1234"); 1.5.2.2.5.2.2 Per utilizzare il metodo SetConnection() della classe DataSourceConnections 1. Tra le due righe di codice all'interno di ConfigureCrystalReports(), recuperare l'istanza DataSourceConnections dalla proprietà DataSourceConnections dell'istanza NorthwindCustomers. Dim myDataSourceConnections As DataSourceConnections = northwindCustomersReport.DataSourceConnections DataSourceConnections dataSourceConnections = northwindCustomersReport.DataSourceConnections; 2. Recuperare IConnectionInfo al livello di indice 0 dell'istanza DataSourceConnections. Dim myConnectInfo As IConnectionInfo = myDataSourceConnections(0) IConnectionInfo connectInfo = dataSourceConnections[0]; 324 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 3. Chiamare il metodo SetConnection() con i propri nome di server, nome di database, nome utente e password. Nota Per motivi di sicurezza, è importante utilizzare un account di database con autorizzazioni di accesso limitate. Nel codice scritto, sostituire la password di esempio 1234 (riportata in di seguito) con una password personalizzata. myConnectInfo.SetConnection("ServerName", "Northwind", "limitedPermissionAccount", "1234") connectInfo.SetConnection("ServerName", "Northwind", "limitedPermissionAccount", "1234"); A questo punto è possibile creare ed eseguire il progetto per accedere al database SQL Server protetto. 1.5.2.2.5.3 Utilizzo del metodo SetDatabaseLogon() della classe ReportDocument Tra le due righe di codice in ConfigureCrystalReports(), chiamare il metodo SetDatabaseLogon() dell'istanza NorthwindCustomers e passare uno dei seguenti insiemi di parametri: 1. Chiamare il metodo SetDatabaseLogon() con i propri nome utente e password. Nota Per motivi di sicurezza, è importante utilizzare un account di database con autorizzazioni di accesso limitate. Nel codice scritto, sostituire la password di esempio 1234 (riportata in di seguito) con una password personalizzata. northwindCustomersReport.SetDatabaseLogon("limitedPermissionAccount","1234") northwindCustomersReport.SetDatabaseLogon("limitedPermissionAccount","1234"); 2. Oppure chiamare il metodo SetDatabaseLogon() con i propri nome di server, nome di database, nome utente e password. Nota Questo metodo non consente di cambiare server o database ed obbliga l'utente ad utilizzare il server e il database predefiniti specificati nel report. Nel codice scritto, sostituire la password di esempio 1234 (riportata in di seguito) con una password personalizzata. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 325 northwindCustomersReport.SetDatabaseLogon("limitedPermissionAccount","1234", "ServerName", "Northwind") northwindCustomersReport.SetDatabaseLogon("limitedPermissionAccount","1234", "ServerName", "Northwind"); 1.5.2.3 Esercitazione: Accesso a un database SQL Server protetto mediante la protezione integrata In questa esercitazione viene descritto come aggiungere codice di accesso per visualizzare un report contenente informazioni provenienti da un database SQL Server protetto. Introduzione Per accedere a un database SQL Server protetto, utilizzare classi del modello a oggetti ReportDocument. L'oggetto ReportDocument dispone di una proprietà Database che restituisce un'istanza di Database. Questa istanza di Database contiene le informazioni di database per il report, inclusa una proprietà Tables che restituisce un'istanza di classe indicizzata Tables. Le singole istanze Table possono essere recuperate dalla classe indicizzata Tables. L'accesso viene eseguito a livello granulare di ogni istanza di Table, a cui deve essere concesso l'accesso al database SQL Server protetto. Questa operazione viene eseguita inserendo le informazioni di accesso in un'istanza di ConnectionInfo e quindi, in un ciclo for, applicando l'istanza di ConnectionInfo alla proprietà ConnectionInfo di ogni istanza di Table. Le proprietà della classe includono includono: ● ServerName ● DatabaseName ● UserID (non utilizzato nell'esercitazione) ● Password (non utilizzata nell'esercitazione) ● IntegratedSecurity Nota per un'esercitazione che utilizzi l'autenticazione SQL e quindi le proprietà UserID e Password invece della proprietà IntegratedSecurity, vedere Esercitazione: Accesso a un database SQL Server protetto mediante l'autenticazione SQL [pagina 312]. Se si sceglie di impostare solo le proprietà DatabaseName e IntegratedSecurity, si accederà al server predefinito e al database specificato nel report. Se, invece, si sceglie di assegnare la proprietà ServerName, in fase di esecuzione è possibile reindirizzare il report a un server diverso. Iniziare creando un report contenente dati provenienti da un database SQL Server protetto. L'esercitazione può essere completata anche utilizzando classi del modello a oggetti CrystalReportViewer, ma si consiglia di utilizzare il modello a oggetti ReportDocument. 326 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Codice di esempio Ciascuna esercitazione viene fornita con un codice di esempio in linguaggio Visual Basic e C# che illustra la versione completa del progetto. Seguire le istruzioni riportate in questa esercitazione per creare un nuovo progetto o aprire il progetto del codice di esempio per utilizzare una versione completa. Il codice di esempio si trova in cartelle classificate per lingua e tipo di progetto. I nomi delle cartelle per ciascuna versione di codice di esempio sono i seguenti: ● Sito Web C#: CS_Web_RDObjMod_DBLogonIntegratedSecurity ● Progetto Windows C#: CS_Win_RDObjMod_DBLogonIntegratedSecurity ● Sito Web in Visual Basic: VB_Web_RDObjMod_DBLogonIntegratedSecurity ● Progetto Visual Basic Windows: VB_Win_RDObjMod_DBLogonIntegratedSecurity Informazioni correlate Scelta del modello a oggetti appropriato al progetto [pagina 31] Directory dei report di esempio [pagina 15] 1.5.2.3.1 Creazione di un report connesso a un database SQL Server protetto mediante la protezione integrata Iniziare creando un report le cui informazioni provengano dal database Northwind. Nota Northwind è un database di esempio fornito con SQL Server. Per questa esercitazione sono necessarie alcune operazioni di configurazione. 1.5.2.3.1.1 Prerequisiti di configurazione del database 1. Configurazione di SQL Server: ○ Se è stato installato SQL Server (o la versione OEM, MSDE), è necessario configurarlo in modo che accetti l'autenticazione Windows per questa esercitazione. ○ Se SQL Server (o la versione OEM, MSDE) non è stato installato, per questa esercitazione è necessario installare MSDE con l'autenticazione Windows (valore predefinito). 2. È necessario installare il database Northwind fornito con SQL Server e verificare che accetti l’Autenticazione Windows. Una volta configurato SQL Server e il database Northwind in base alle istruzioni fornite nelle sezioni indicate, è possibile creare un report le cui informazioni provengano in modo sicuro dal database Northwind. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 327 Nota questa procedura può essere utilizzata solo con progetti creati in base a quanto indicato in Impostazione di un progetto [pagina 16], che prevede riferimenti specifici allo spazio dei nomi e la configurazione di codice richiesta per questa procedura; non è possibile completare la procedura senza questa configurazione. 1.5.2.3.1.2 Per creare un report con dati protetti provenienti dal database Northwind 1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome del progetto in grassetto, selezionare Aggiungi, quindi scegliere Aggiungi nuovo elemento. 2. Nella finestra di dialogo Aggiungi nuovo elemento, in visualizzazione Modelli, selezionare il modello Crystal Report. 3. Nel campo Nome, inserire il nome "NorthwindCustomers.rpt", quindi fare clic su Apri. 4. Nel riquadro Crea un nuovo documento Crystal Report della finestra di dialogo Galleria Crystal Reports, selezionare Uso della procedura guidata Report. 5. Nel riquadro Scegli un esperto selezionare Standard, quindi fare clic su OK. Viene visualizzata la finestra di dialogo Procedura guidata per la creazione di report standard. 6. Nel riquadro Origini dati disponibili, espandere la cartella Crea nuova connessione. 7. Dalla sottocartella, espandere la cartella OLE DB (ADO). Viene visualizzata la finestra OLE DB (ADO). 8. Selezionare Provider Microsoft OLE DB per SQL Server, quindi fare clic su Avanti. 9. Nel campo Server, inserire il nome del server di database. 10. Selezionare la casella di controllo Protezione integrata. 11. Dall’elenco a discesa Database, selezionare "Northwind". 12. Fare clic su Fine. La cartella OLE DB è ora estesa, mostra il server di database e, al suo interno, il database Northwind. 13. Espandere i nodi Northwind, dbo e Tables, quindi selezionare la tabella Customers. 14. Fare clic sul simbolo > per spostare la tabella nel riquadro Tabelle selezionate, quindi scegliere Avanti. 15. Tenendo premuto il tasto Ctrl fare clic su CompanyName, ContactName e City. 16. Fare clic sul simbolo > per spostare questi campi nel riquadro Campi da visualizzare, quindi scegliere Avanti. 17. Nel riquadro Campi disponibili, in Campi report, selezionare Customer.City, fare clic sul simbolo > per spostare il campo nel riquadro Raggruppa in base a, quindi scegliere Fine. Il report NorthwindCustomers viene creato e caricato nella finestra principale di Visual Studio. A questo punto è possibile collegare il report al controllo CrystalReportViewer e impostare l’accesso al database a livello di codice. 1.5.2.3.2 Collegamento del report In Impostazione di un progetto [pagina 16]è stato inserito un controllo CrystalReportViewer nel Web Form o nel Windows Form. Nel passaggio precedente è stato aggiunto un report NorthwindCustomers al progetto. 328 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net In questa sezione viene creata un'istanza del report NorthwindCustomers da collegare al controllo CrystalReportViewer. Viene quindi verificato se è possibile visualizzare correttamente il report quando i valori correnti del campo parametro non sono ancora stati impostati. Esistono due metodi per creare e collegare un'istanza del report: ● Come report incorporato. ● Come report non incorporato. Scegliere una delle seguenti procedure. ● Se si utilizzano report incorporati, seguire la prima procedura per creare un'istanza del report come report incorporato. ● Se si utilizzano report non incorporati, seguire la seconda procedura per creare un'istanza del report come report non incorporato. 1.5.2.3.2.1 Per creare un'istanza del report NorthwindCustomers come report incorporato e collegarla al controllo CrystalReportViewer 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Aggiungere una nuova dichiarazione di livello classe per la classe wrapper del report NorthwindCustomers, utilizzando il nome di variabile northwindCustomersReport. Impostare il modificatore di accesso su private. Private northwindCustomersReport As NorthwindCustomers private NorthwindCustomers northwindCustomersReport; 4. Nel metodo ConfigureCrystalReports(), creare un’istanza della classe wrapper del report. Nota Il metodo ConfigureCrystalReports() è stato creato in Impostazione di un progetto [pagina 16]. northwindCustomersReport = New NorthwindCustomers() northwindCustomersReport = new NorthwindCustomers(); 5. Nella riga successiva, sotto la creazione dell’istanza del report, collegare la proprietà ReportSource del controllo CrystalReportViewer alla classe del report di cui è stata creata l’istanza (nome variabile: northwindCustomersReport). myCrystalReportViewer.ReportSource = northwindCustomersReport crystalReportViewer.ReportSource = northwindCustomersReport; A questo punto è possibile creare ed eseguire il progetto. È previsto che il caricamento del report abbia esito negativo, poiché il codice per accedere al database non è stato ancora scritto. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 329 1.5.2.3.2.2 Per creare un'istanza del report NorthwindCustomers come report non incorporato e collegarla al controllo CrystalReportViewer 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Aggiungere una nuova dichiarazione a livello di classe per la classe wrapper del report ReportDocument, utilizzando il nome di variabile northwindCustomersReport. Impostare il modificatore di accesso su private. Private northwindCustomersReport As ReportDocument private ReportDocument northwindCustomersReport; Nota La classe ReportDocument è membro dello spazio dei nomi CrystalDecisions.CrystalReports.Engine per il quale è stata aggiunta una dichiarazione "Imports" [Visual Basic] o "using" [C#] in Impostazione di un progetto [pagina 16]. Quando si crea un'istanza di ReportDocument e si carica un report nello spazio dei nomi, si ottiene l'accesso al report tramite l'SDK, senza incorporare il report. 4. All'interno del metodo ConfigureCrystalReports() (creato in Impostazione di un progetto [pagina 16]), creare un'istanza della classe ReportDocument. northwindCustomersReport = New ReportDocument() northwindCustomersReport = new ReportDocument(); 5. Dichiarare una variabile di stringa, denominarla reportPath e assegnarla al percorso della fase di esecuzione del report locale. Questo percorso viene determinato in modo diverso a seconda che si tratti di siti Web o di progetti Windows: ○ In un sito Web, trasferire il nome del file di report locale come parametro stringa nel metodo Server.MapPath(). In questo modo, in fase di esecuzione viene eseguita la mappatura del report locale al percorso della directory di file del disco rigido. Dim reportPath As String = Server.MapPath("NorthwindCustomers.rpt") string reportPath = Server.MapPath("NorthwindCustomers.rpt"); ○ In un progetto Windows, concatenare la proprietà Application.StartupPath con una barra rovesciata e il nome del file di report locale. In questo modo viene eseguita la mappatura del report nella stessa directory dell'eseguibile Windows. Nota Al momento della compilazione, copiare il report nella directory contenente il file eseguibile. Dim reportPath As String = Application.StartupPath & "\" & "NorthwindCustomers.rpt" 330 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net string reportPath = Application.StartupPath + "\\" + "NorthwindCustomers.rpt"; 6. Chiamare il metodo Load() dell'istanza ReportDocument e passare ad esso la variabile di stringa reportPath. northwindCustomersReport.Load(reportPath) northwindCustomersReport.Load(reportPath); 7. Collegare la proprietà ReportSource di CrystalReportViewer all'istanza di ReportDocument. myCrystalReportViewer.ReportSource = northwindCustomersReport crystalReportViewer.ReportSource = northwindCustomersReport; A prescindere dal fatto che si sia scelto di creare un'istanza di una classe di report incorporato o di una classe di report non incorporato, il nome di variabile utilizzato è sempre lo stesso: northwindCustomersReport. Questo consente di utilizzare le stesse righe di codice nelle procedure che seguono. A questo punto è possibile creare ed eseguire il progetto. È previsto che il caricamento del report abbia esito negativo, poiché il codice per accedere al database non è stato ancora scritto. 1.5.2.3.3 Aggiunta del codice di accesso del report A questo punto è possibile aggiungere il codice di accesso alla classe di codice sottostante. Iniziare creando un metodo di supporto privato, SetDBLogonForReport(). 1.5.2.3.3.1 Per creare e codificare il metodo SetDBLogonForReport() 1. Tornare alla classe di codice sottostante del Web Form o Windows Form. 2. Alla fine della classe creare un nuovo metodo privato denominato SetDBLogonForReport() con due parametri, ConnectionInfo e ReportDocument. Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo, ByVal myReportDocument As ReportDocument) End Sub private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument reportDocument) { } 3. All'interno di questo metodo, recuperare l'istanza Tables dalla proprietà Tables della proprietà Database del parametro ReportDocument. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 331 Nota Tables è una classe indicizzata contenente istanze della classe Table. Dim myTables As Tables = myReportDocument.Database.Tables Tables tables = reportDocument.Database.Tables; 4. Creare un ciclo foreach che passi attraverso ogni istanza Table nell’istanza della classe indicizzata Tables. Nota È necessario includere il percorso completo dello spazio dei nomi per la classe Table, in modo da distinguerla dalla classe Table dello spazio dei nomi System.Web.UI.WebControls. For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables Next foreach(CrystalDecisions.CrystalReports.Engine.Table table in tables) { } 5. All'interno del ciclo foreach, recuperare l’istanza TableLogonInfo dalla proprietà LogOnInfo dell’istanza Table. Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo TableLogOnInfo tableLogonInfo = table.LogOnInfo; 6. In ciascun ciclo foreach, impostare la proprietà ConnectionInfo di TableLogonInfo sul parametro ConnectionInfo. myTableLogonInfo.ConnectionInfo = myConnectionInfo tableLogonInfo.ConnectionInfo = connectionInfo; 7. All'interno del ciclo foreach, passare l’istanza TableLogonInfo come parametro al metodo ApplyLogonInfo dell’istanza Table. myTable.ApplyLogOnInfo(myTableLogonInfo) table.ApplyLogOnInfo(tableLogonInfo); Con questa procedura è stato creato un metodo per impostare l’accesso al database. A questo punto diventa necessario modificare il metodo ConfigureCrystalReports() in modo da fare riferimento al metodo appena creato e consentire al report di rilevare le informazioni di accesso al database. A tale scopo, occorre effettuare due operazioni: ● Configurare l'istanza ConnectionInfo. ● Chiamare il metodo SetDBLogonForReport(). 332 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.2.3.3.2 Per modificare il metodo ConfigureCrystalReports() in modo da fare riferimento al codice di accesso al database 1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, sopra la riga che collega il report al controllo CrystalReportViewer. 2. All’interno delle interruzioni di riga, dichiarare e creare un’istanza della classe ConnectionInfo. Nota Per rendere accessibile la classe ConnectionInfo, includere un'istruzione "Imports" [Visual Basic] o "using" [C#] all'inizio della classe di codice sottostante per lo spazio dei nomi CrystalDecisions.Shared. (tale dichiarazione è stata aggiunta in Impostazione di un progetto [pagina 16]). Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo() ConnectionInfo connectionInfo = new ConnectionInfo(); 3. Impostare le proprietà DatabaseName e IntegratedSecurity dell’istanza di ConnectionInfo. myConnectionInfo.DatabaseName = "Northwind" myConnectionInfo.IntegratedSecurity = True connectionInfo.DatabaseName = "Northwind"; connectionInfo.IntegratedSecurity = true; 4. Inserire una chiamata al metodo SetDBLogonForReport(), passando l'istanza ConnectionInfo e il report NorthwindCustomers. SetDBLogonForReport(myConnectionInfo, northwindCustomersReport) SetDBLogonForReport(connectionInfo, northwindCustomersReport); Dopo la chiamata si trova il codice originale che collega il report al controllo CrystalReportViewer. A questo punto è possibile creare ed eseguire il progetto. Il report dovrebbe essere caricato correttamente, perché è stato aggiunto codice per accedere al database. 1.5.2.3.3.3 Per verificare il caricamento del report NorthwindCustomers 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Il report NorthwindCustomers viene visualizzato. 4. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. Nella sezione successiva viene descritto come modificare la posizione del database in fase di esecuzione. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 333 1.5.2.3.4 Aggiunta della possibilità di modificare la posizione del database in fase di esecuzione In questa sezione viene descritto come modificare la posizione del database in fase di esecuzione. Questa operazione richiede solo una piccola modifica all'istanza di ConnectionInfo. 1.5.2.3.4.1 Per modificare la posizione del database in fase di esecuzione 1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, dopo la riga che dichiara e crea l'istanza di ConnectionInfo. 2. All'interno delle interruzioni di riga, impostare la proprietà ServerName dell'istanza di ConnectionInfo. Nota Nel codice scritto, sostituire il nome del server di esempio DevDatabase (riportato in basso) con quello del proprio server. myConnectionInfo.ServerName = "DevDatabase" connectionInfo.ServerName = "DevDatabase"; A questo punto è possibile creare ed eseguire il progetto. In fase di esecuzione, il report dovrebbe essere reindirizzato al server di database alternativo. 1.5.2.3.4.2 Per verificare che il report possa essere reimpostato per un server di database alternativo in fase di esecuzione 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Il report NorthwindCustomers viene visualizzato. 4. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.2.3.5 Configurazione con il metodo SetConnection In questa sezione viene descritto come applicare tutte e tre le modifiche, ovvero al nome del server, al nome del database e all'impostazione della protezione integrata, mediante il metodo SetConnection(). Quest’operazione richiede solo una piccola modifica all'istanza ConnectionInfo. 334 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1. Nel metodo ConfigureCrystalReports(), dopo la riga che dichiara e crea l'istanza della classe ConnectionInfo, eliminare le righe di codice che assegnano le proprietà ServerName, DatabaseName e IntegratedSecurity. 2. Inserire una nuova riga di codice per chiamare il metodo SetConnection() dell'istanza ConnectionInfo e passare a questo metodo il nome del server, il nome del database e l'impostazione della protezione integrata. myConnectionInfo.SetConnection("DevDatabase", "Northwind", True) connectionInfo.SetConnection("DevDatabase", "Northwind", true); A questo punto è possibile creare ed eseguire il progetto. 1.5.2.4 Esercitazione: Accesso a un database SQL Server protetto con un sottoreport In questa esercitazione si esaminerà un altro problema che potrebbe verificarsi durante l'accesso a un database SQL Server protetto: cosa accade se il report che richiede l'accesso a un database SQL Server protetto contiene un sottoreport? Introduzione In questa esercitazione viene descritto come soddisfare i requisiti di accesso per il sottoreport. È necessario apportare due modifiche al progetto creato nell'esercitazione precedente: ● Aggiungere un sottoreport al report originale. Questo sottoreport fa riferimento alla tabella Orders del database Northwind. La tabella Orders è associata alla tabella Customers utilizzata nell'esercitazione precedente da una chiave esterna CustomerID. ● Aggiungere un nuovo metodo. Il metodo recupera i sottoreport dal report principale, quindi passa ciascun sottoreport al metodo di supporto SetDBLogonForReport(). L'esercitazione può essere completata anche con classi del modello a oggetti CrystalReportViewer, ma si consiglia di utilizzare il modello a oggetti ReportDocument. Per creare questa esercitazione con il modello a oggetti CrystalReportViewer, vedere Esercitazione: Accesso a un database SQL Server protetto mediante la protezione integrata [pagina 222]. Codice di esempio Ciascuna esercitazione viene fornita con un codice di esempio in linguaggio Visual Basic e C# che illustra la versione completa del progetto. Seguire le istruzioni riportate in questa esercitazione per creare un nuovo progetto o aprire il progetto del codice di esempio per utilizzare una versione completa. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 335 Il codice di esempio si trova in cartelle classificate per lingua e tipo di progetto. I nomi delle cartelle per ciascuna versione di codice di esempio sono i seguenti: ● Sito Web in C#: CS_Web_RDObjMod_DBLogonSubrpt ● Progetto Windows C#: CS_Win_RDObjMod_DBLogonSubrpt ● Sito Web in Visual Basic: VB_Web_RDObjMod_DBLogonSubrpt ● Progetto Windows Visual Basic: VB_Win_RDObjMod_DBLogonSubrpt Informazioni correlate Directory dei report di esempio [pagina 15] 1.5.2.4.1 Aggiunta di un sottoreport al report originale Iniziare aggiungendo un sottoreport al report originale. 1.5.2.4.1.1 Per aggiungere un sottoreport 1. Aprire il progetto creato nell'esercitazione precedente, Esercitazione: Accesso a un database SQL Server protetto mediante la protezione integrata [pagina 326]. 2. In Esplora soluzioni, fare doppio clic sul report NorthwindCustomers per aprirlo. 3. Fare clic con il pulsante destro del mouse sulla barra grigia Dettagli, quindi selezionare Inserisci sezione sotto. 4. Fare clic con il pulsante destro del mouse sulla nuova sezione Dettagli b appena creata, selezionare Inserisci, quindi fare clic su Sottoreport. Viene visualizzato un riquadro grigio intorno al cursore del mouse. 5. Trascinare il rettangolo grigio nella nuova sezione Dettagli b, quindi fare clic per rilasciarlo. 6. Nella scheda Sottoreport della finestra di dialogo Inserisci sottoreport, selezionare Crea un sottoreport con la creazione guidata report. Nota La finestra di dialogo Inserisci sottoreport include altre opzioni che consentono di scegliere un report esistente e sottoreport su richiesta. Per ulteriori informazioni su tali funzionalità, vedere Scheda Sottoreport (finestra di dialogo Inserisci sottoreport) [pagina 825]. 7. Nel campo Nuovo nome del report digitare "CustomerOrders". 8. Fare clic su Procedura guidata report.... 9. Nel riquadro Origini dati disponibili della finestra di dialogo Procedura guidata per la creazione di report standard, espandere la cartella Crea nuova connessione. 10. Espandere la cartella OLE DB (ADO). La cartella contiene il server di database che è stato configurato per il report in fase di creazione del report. 336 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Nota Se il server non è visualizzato, seguire le istruzioni dell'esercitazione precedente per accedere al database SQL Server. 11. Espandere i nodi Northwind, dbo e Tables. 12. Selezionare la tabella Ordini e fare clic sul simbolo > per spostarla nel riquadro Seleziona tabelle, quindi scegliere Avanti. 13. Nel riquadro Campi disponibili, selezionare Order ID, Order Date, Shipped Date e Name Ship. 14. Fare clic sul simbolo > per spostare questi campi nel riquadro Campi da visualizzare, quindi scegliere Fine. 15. Nella finestra di dialogo Inserisci sottoreport, selezionare la scheda Collegamento. 16. Nell'elenco Campi disponibili del riquadro Campo/i del report contenitore a cui collegarsi espandere la tabella Customers, selezionare Customer ID, quindi fare clic sul simbolo >. 17. Nel riquadro Collegamento al campo Customers.CustomerID visualizzato, lasciare invariate le selezioni predefinite. Tali selezioni di parametri e dati generano automaticamente una relazione tra il report principale e il sottoreport. 18. Fare clic su OK. Il nuovo sottoreport CustomerOrders viene visualizzato nella sezione Dettagli b del report principale. Nota Quando si aggiunge un sottoreport alla sezione Dettagli, il sottoreport viene visualizzato per ogni riga, aumentando i requisiti di prestazioni del report. Se non sono necessarie informazioni sul sottoreport con tale livello di dettaglio, posizionare il sottoreport in una sezione Gruppo invece che nella sezione Dettagli. A questo punto è possibile verificare le impostazioni nel sottoreport. 1.5.2.4.1.2 Per verificare le impostazioni nel sottoreport 1. Nella sezione Dettagli, fare doppio clic sul sottoreport CustomerOrders per visualizzarlo. Nella parte inferiore della finestra di progettazione sono presenti pulsanti di spostamento per il report principale e il sottoreport CustomerOrders. 2. Se Explorer Campo non è visibile, nella barra degli strumenti di Crystal Reports fare clic sul pulsante Alterna visualizzazione campi. Nota per visualizzare Explorer Campo, è possibile anche selezionare il menu Crystal Reports e scegliere Explorer Campo. 3. Nell'Explorer Campo, espandere Campi parametro. 4. Verificare che il campo parametro Pm-Customers.CustomerID sia stato generato automaticamente al momento del collegamento del sottoreport. 5. Nella barra degli strumenti, fare clic su Esperto selezione. 6. Nella finestra di dialogo Esperto selezione, verificare che sia impostato il criterio Order.CustomerID è uguale a {?Pm-Customers.CustomerID}, quindi fare clic su OK. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 337 7. Dal menu File, scegliere Salva tutto. Il sottoreport CustomerOrders è stato aggiunto al report NorthwindCustomers. Nella sezione successiva viene descritto come aggiungere il codice per impostare le informazioni di accesso al database SQL Server protetto per tutti i sottoreport presenti nel report principale. 1.5.2.4.2 Aggiunta del codice di accesso del sottoreport A questo punto è possibile aggiungere il codice di accesso per il sottoreport nella classe di codice sottostante. Iniziare creando un metodo di supporto privato denominato SetDBLogonForSubreports(). 1.5.2.4.2.1 Per creare e codificare il metodo SetDBLogonForSubreports() 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Alla fine della classe creare un nuovo metodo privato denominato SetDBLogonForSubreports() con due parametri ConnectionInfo e ReportDocument. Private Sub SetDBLogonForSubreports(ByVal myConnectionInfo As ConnectionInfo, ByVal myReportDocument As ReportDocument) End Sub private void SetDBLogonForSubreports(ConnectionInfo connectionInfo, ReportDocument reportDocument) { } 4. All'interno del metodo, recuperare l'istanza Sections dalla proprietà Sections della proprietà ReportDefinitiondel parametro ReportDocument. Nota Sections è una classe indicizzata contenente istanze della classe Section. Dim mySections As Sections = myReportDocument.ReportDefinition.Sections Sections sections = reportDocument.ReportDefinition.Sections; 5. Creare un ciclo foreach che passi attraverso tutte le istanze Section nell’istanza della classe indicizzata Sections. For Each mySection As Section In mySections Next foreach(Section section in sections) { } 338 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 6. Nel ciclo foreach, recuperare l'istanza ReportObjects dalla proprietà ReportObjects dell'istanza Section. Dim myReportObjects As ReportObjects = mySection.ReportObjects ReportObjects reportObjects = section.ReportObjects; 7. Nel ciclo foreach, creare un nuovo ciclo foreach nidificato che passi attraverso tutte le istanze ReportObject nell'istanza della classe indicizzata ReportObjects. For Each myReportObject As ReportObject In myReportObjects Next foreach(ReportObject reportObject in reportObjects) { } 8. Nel ciclo foreach nidificato, creare un blocco condizionale che verifichi se la proprietà Kind dell'istanza ReportObject è uguale alla selezione SubreportObject dell'enumerazione ReportObjectKind. If myReportObject.Kind = ReportObjectKind.SubreportObject Then End If if(reportObject.Kind == ReportObjectKind.SubreportObject) { } 9. Nel blocco condizionale, eseguire il cast dell'istanza ReportObject in un'istanza SubreportObject. Dim mySubreportObject As SubreportObject = CType(myReportObject, SubreportObject) SubreportObject subreportObject = (SubreportObject)reportObject; 10. Sempre all'interno del blocco condizionale, dichiarare una nuova istanza di ReportDocument come variabile subReportDocument e compilarla chiamando il metodo OpenSubreport() dell'istanza SubreportObject . Dim subReportDocument As ReportDocument = mySubreportObject.OpenSubreport(mySubreportObject.SubreportName) ReportDocument subReportDocument = subreportObject.OpenSubreport(subreportObject.SubreportName); 11. Infine, nel blocco condizionale, chiamare il metodo SetDBLogonForReport() originale e passargli il parametro ConnectionInfo e la nuova variabile subReportDocument. SetDBLogonForReport(myConnectionInfo, subReportDocument) SetDBLogonForReport(connectionInfo, subReportDocument); Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 339 1.5.2.4.2.2 Per modificare il metodo ConfigureCrystalReports() in modo da fare riferimento al codice di accesso al database per i sottoreport Con questa procedura è stato creato un metodo per recuperare tutti i possibili sottoreport come istanze di ReportDocument. Ogni istanza ReportDocument di sottoreport viene quindi passata al metodo originale per l'impostazione dell'accesso a un database SQL Server protetto. A questo punto diventa necessario modificare il metodo ConfigureCrystalReports() in modo da fare riferimento al metodo originale e consentire l'elaborazione delle informazioni di accesso al database dei sottoreport. 1. Nel metodo ConfigureCrystalReports() creare nel codice una coppia di interruzioni di riga sopra la riga che collega il report al controllo CrystalReportViewer. 2. Tra le interruzioni di riga, inserire una chiamata al metodo SetDBLogonForSubreports() passando l'istanza ConnectionInfo e il report NorthwindCustomers. SetDBLogonForSubreports(myConnectionInfo, northwindCustomersReport) SetDBLogonForSubreports(connectionInfo, northwindCustomersReport); 1.5.2.4.2.3 Per verificare il caricamento del report NorthwindCustomers Dopo la chiamata si trova il codice originale che collega il report al controllo CrystalReportViewer. A questo punto è possibile creare ed eseguire il progetto. È previsto che il report e il sottoreport vengano caricati correttamente, poiché è stato scritto il codice per l'accesso al database di qualsiasi sottoreport. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Il report NorthwindCustomers, con il nuovo sottoreport CustomerOrders, viene visualizzato correttamente. 4. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.2.5 Esercitazione: Lettura e impostazione di parametri discreti In questa esercitazione viene descritto come creare un report i cui dati possano essere filtrati in base a un parametro discreto. 340 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Introduzione Un parametro discreto è un valore singolo, al contrario di un parametro di intervallo che si riferisce a un intervallo di valori. Agli elementi di testo (come le città) si accede in genere tramite parametri discreti. Agli elementi numerici (come gli stipendi dei dipendenti) si accede in genere tramite parametri di intervallo. In questa esercitazione viene impostato un valore per un parametro discreto che consente di visualizzare un report clienti basato su un campo. Il report mostra solo i clienti che vivono nelle città selezionate da un apposito elenco. L’elenco delle città deriva dai valori predefiniti del parametro Città. Tali valori predefiniti sono incapsulati all'interno nel report. Iniziare creando un report clienti con un parametro Città. I dati del report sono derivati dal database di esempio fornito con SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. Quando si crea un’istanza del report nel codice, si crea un ArrayList contenente nomi di città (Paris, Tokyo) e si passa l’istanza ArrayList a un metodo di supporto che imposta tali nomi come i valori correnti del parametro Città. A questo punto, collegare il report al controllo CrystalReportViewer e visualizzare il report mostrando solo i clienti che vivono a Parigi e Tokyo. Nella parte successiva dell'esercitazione vengono effettuate le seguenti operazioni: ● Creazione di un metodo che recupera tutti i valori predefiniti e li restituisce in un ArrayList. ● Aggiunta di un controllo ListBox al form e compilazione dello stesso dall’ArrayList. ● Aggiunta di un controllo Button per rivisualizzare il report in base alle selezioni nel controllo ListBox. Nella parte finale dell’esercitazione, viene codificato l’evento clic del controllo Button per recuperare tutti gli elementi selezionati nel controllo ListBox, quindi tali valori vengono impostati come valori correnti del parametro Città. Il report viene nuovamente visualizzato mostrando solo i clienti che vivono nelle città selezionate nel controllo ListBox. Questa esercitazione può essere completata anche con classi del modello a oggetti CrystalReportViewer, ma si consiglia di utilizzare il modello a oggetti ReportDocument. Per creare questa esercitazione con il modello a oggetti CrystalReportViewer, vedere Esercitazione: Accesso a un database SQL Server protetto mediante la protezione integrata [pagina 222]. Codice di esempio Ciascuna esercitazione viene fornita con un codice di esempio in linguaggio Visual Basic e C# che illustra la versione completa del progetto. Seguire le istruzioni riportate in questa esercitazione per creare un nuovo progetto o aprire il progetto del codice di esempio per utilizzare una versione completa. Il codice di esempio si trova in cartelle classificate per lingua e tipo di progetto. I nomi delle cartelle per ciascuna versione di codice di esempio sono i seguenti: ● Sito Web in C#: CS_Web_RDObjMod_Parameters ● Progetto Windows C#: CS_Win_RDObjMod_Parameters ● Sito Web in Visual Basic: VB_Web_RDObjMod_Parameters ● Progetto Windows Visual Basic: VB_Win_RDObjMod_Parameters Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 341 Database Xtreme In questa esercitazione viene utilizzato un database di esempio denominato Xtreme. Il file di database xtreme.mdb è incluso nel pacchetto del codice di esempio di SAP Crystal Reports .NET SDK. Per utilizzare il database Xtreme, è necessario creare manualmente una connessione ODBC a esso. Informazioni correlate Scelta del modello a oggetti appropriato al progetto [pagina 31] Directory dei report di esempio [pagina 15] 1.5.2.5.1 Creazione di un report con parametri Per iniziare, creare un report con informazioni provenienti dal database Xtreme. 1.5.2.5.1.1 Creazione di un report con parametri 1. In Esplora soluzioni, fare clic con il pulsante destro del mouse sul nome del progetto in grassetto, selezionare Aggiungi, quindi scegliere Aggiungi nuovo elemento. 2. Nella finestra di dialogo Aggiungi nuovo elemento, in visualizzazione Modelli, selezionare il modello Report Crystal. 3. Nel campo Nome immettere il nome CustomersByCity.rpt e fare clic su Aggiungi. 4. Nel riquadro Crea un nuovo documento Crystal Report della finestra di dialogo Galleria Crystal Reports, selezionare Uso della procedura guidata Report. 5. Nel riquadro Scegli un esperto selezionare Standard, quindi fare clic su OK. 6. Nel riquadro Origini dati disponibili della finestra Procedura guidata per la creazione di report standard, espandere la cartella Crea nuova connessione. Nota in Visual Studio .NET 2003, dove SAP Crystal Reports non è stato aggiornato alla versione completa, la cartella Crea nuova connessione non esiste; il contenuto viene riportato nel livello superiore. 7. Dalla sottocartella, espandere la cartella ODBC (RDO). 8. Nella finestra ODBC (RDO) selezionare la voce ODBC DSN corretta per il database Xtreme e quindi fare clic su Fine. La cartella ODBC (RDO) si espande e visualizza il database Xtreme. 9. Espandere il nodo Tabelle, quindi selezionare la tabella Clienti. 10. Fare doppio clic sulla tabella Clienti per spostarla nel riquadro Tabelle selezionate, quindi scegliere Avanti. 11. Espandere la tabella Clienti, quindi tenendo premuto il tasto Ctrl fare clic su Nome cliente, Titolo contatto, Indirizzo1, Cognome contatto e Città. 342 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 12. Fare clic sul simbolo > per spostare questi campi nel riquadro Campi da visualizzare, quindi scegliere Avanti. 13. Nel riquadro Campi disponibili, in Campi report, selezionare Clienti.Città, fare clic sul simbolo > per spostare il campo nel riquadro Raggruppa in base a, quindi scegliere Fine. Il report CustomersByCity viene creato e caricato nella finestra principale di Visual Studio. A questo punto è possibile aggiungere un parametro denominato Città e compilarlo con i valori predefiniti. 1.5.2.5.1.2 Aggiunta di un parametro Città Explorer Campo deve essere visibile poiché garantisce l’accesso alle diverse funzionalità del report, inclusi i parametri. 1. Se Explorer Campo non è visibile, nella barra degli strumenti di Crystal Reports fare clic sul pulsante Alterna visualizzazione campi. Nota per visualizzare Explorer Campo, è possibile anche selezionare il menu Crystal Reports e scegliere Explorer Campo. 2. In Explorer Campo, fare clic con il pulsante destro del mouse su Campi parametro, quindi selezionare Nuovo…. 3. Nella finestra di dialogo Crea campo parametro: a. Impostare Nome su Città. b. Impostare Tipo su Stringa. Impostare Testo prompt su Selezionare una o più città. c. Impostare Campo valore su Città. d. Fare clic su Azioni, quindi selezionare Aggiungi tutti i valori del database. Verrà così aggiunto al riquadro centrale l'intero elenco di città. e. Nel riquadro Opzioni dei valori impostare Testo prompt su Selezionare una o più città. f. Nello stesso riquadro impostare Consenti valori multipli su True. g. Impostare Consenti valori discreti su True. 4. Fare clic su OK per chiudere la finestra di dialogo Crea campo parametro. Il campo Valori predefiniti è stato impostato per contenere un lungo elenco di città. Più avanti nel corso di questa esercitazione, si accede a questo elenco di valori predefiniti a livello di codice, tramite la proprietà DefaultValues della classe ParameterFieldDefinition. A questo punto, utilizzare l’Esperto selezione per impostare una formula che connetta la colonna Città del database al campo parametro Città appena creato. 1.5.2.5.1.3 Collegamento del parametro Città alla colonna Città del database 1. Nella barra degli strumenti di Crystal Reports, fare clic su Esperto selezione. 2. Nella finestra di dialogo Scegli campo, in Campi report, selezionare Clienti.Città, quindi scegliere OK. 3. Nella finestra di dialogo Esperto selezione, all'interno della scheda Clienti.Città, impostare l'elenco a discesa su è uguale a. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 343 4. Nel nuovo elenco a discesa visualizzato a destra, selezionare la prima opzione disponibile, {?Città}, quindi fare clic su OK. Nota questa selezione, {?Città}, corrisponde al parametro Città creato in precedenza. 5. Dal menu File, scegliere Salva tutto. È ora possibile collegare il report al controllo CrystalReportViewer e impostare il parametro Città con due valori iniziali, Parigi e Tokyo. 1.5.2.5.2 Collegamento del report Durante lo svolgimento delle istruzioni riportate nella sezione Impostazione di un progetto [pagina 16] di preparazione a questa esercitazione, un controllo CrystalReportViewer è stato inserito nel Web Form o nel Windows Form. Nei passaggi precedenti, il report CustomerByCity è stato aggiunto al progetto. In questa sezione viene descritto come creare e collegare un'istanza del report CustomersByCity al controllo CrystalReportViewer. Viene quindi verificato se è possibile visualizzare correttamente il report quando i valori correnti del campo parametro non sono ancora stati impostati. Esistono due metodi per creare e collegare un'istanza del report: ● Come report incorporato. ● Come report non incorporato. Scegliere una delle seguenti procedure. ● Se si utilizzano report incorporati, seguire la prima procedura per creare un'istanza del report come report incorporato. ● Se si utilizzano report non incorporati, seguire la seconda procedura per creare un'istanza del report come report non incorporato. 1.5.2.5.2.1 Per creare un'istanza del report CustomersByCity come report incorporato e collegarla al controllo CrystalReportViewer 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice per visualizzare la classe di codice sottostante relativa al Web Form o al Windows Form. 3. Aggiungere una nuova dichiarazione a livello di classe per la classe wrapper del report CustomersByCity, utilizzando il nome di variabile customersByCityReport. Impostare il modificatore di accesso su private. Private customersByCityReport As CustomersByCity private CustomersByCity customersByCityReport; 344 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 4. Nel metodo ConfigureCrystalReports(), creare un’istanza della classe wrapper del report. Nota Il metodo ConfigureCrystalReports() è stato creato in Impostazione di un progetto [pagina 16]. customersByCityReport = New CustomersByCity() customersByCityReport = new CustomersByCity(); 5. Nella riga successiva, sotto la creazione dell’istanza del report, collegare la proprietà ReportSource del controllo CrystalReportViewer alla classe del report di cui è stata creata l’istanza (nome variabile: customersByCityReport). myCrystalReportViewer.ReportSource = customersByCityReport crystalReportViewer.ReportSource = customersByCityReport; Nota L'istanza del controllo CrystalReportViewer è accessibile nel codice poiché il controllo è stato aggiunto al Web Form o al Windows Form. Se IntelliSense non riconosce l'istanza del controllo CrystalReportViewer, verificare che il controllo CrystalReportViewer sia stato aggiunto come dichiarazione a livello di classe a questa classe di codice sottostante. 1.5.2.5.2.2 Per creare un'istanza del report CustomersByCity come report non incorporato e collegarla al controllo CrystalReportViewer A questo punto è possibile creare ed eseguire il progetto. È previsto che il caricamento del report abbia esito negativo, poiché il codice per l'impostazione di un valore per campo parametro Città non è stato ancora scritto. 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Aggiungere una nuova dichiarazione a livello di classe per la classe wrapper del report ReportDocument, utilizzando il nome di variabile customersByCityReport. Impostare il modificatore di accesso su private. Private customersByCityReport As ReportDocument private ReportDocument customersByCityReport; Nota La classe ReportDocument è membro dello spazio dei nomi CrystalDecisions.CrystalReports.Engine per il quale è stata aggiunta una dichiarazione "Imports" [Visual Basic] o "using" [C#] in Impostazione di un progetto [pagina 16]. Quando si crea un'istanza di ReportDocument e si carica un report nello spazio dei nomi, si ottiene l'accesso al report tramite l'SDK, senza incorporare il report. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 345 4. Nel metodo ConfigureCrystalReports() (aggiunto durante una delle procedure riportate in Impostazione di un progetto [pagina 16]), creare un'istanza della classe ReportDocument. customersByCityReport = New ReportDocument() customersByCityReport = new ReportDocument(); 5. Dichiarare una variabile di stringa, denominarla reportPath e assegnarle un percorso della fase di esecuzione del report locale. Questo percorso viene determinato in modo diverso a seconda che si tratti di siti Web o di progetti Windows: ○ In un sito Web, trasferire il nome del file di report locale come parametro stringa nel metodo Server.MapPath(). In questo modo, in fase di esecuzione viene eseguita la mappatura del report locale al percorso della directory di file del disco rigido. Dim reportPath As String = Server.MapPath("CustomersByCity.rpt") string reportPath = Server.MapPath("CustomersByCity.rpt"); ○ In un progetto Windows, concatenare la proprietà Application.StartupPath con una barra rovesciata e il nome del file di report locale. In questo modo viene eseguita la mappatura del report nella stessa directory dell'eseguibile Windows. Nota Al momento della compilazione, copiare il report nella directory contenente il file eseguibile. Dim reportPath As String = Application.StartupPath & "\" & "CustomersByCity.rpt" string reportPath = Application.StartupPath + "\\" + "CustomersByCity.rpt"; 6. Chiamare il metodo Load() dell'istanza ReportDocument e passargli la variabile di stringa reportPath. customersByCityReport.Load(reportPath) customersByCityReport.Load(reportPath); 7. Nella riga successiva, sotto il caricamento del report, collegare la proprietà ReportSource del controllo CrystalReportViewer all'istanza ReportDocument. myCrystalReportViewer.ReportSource = customersByCityReport crystalReportViewer.ReportSource = customersByCityReport; A prescindere dal fatto che si sia scelto di creare un'istanza di una classe di report incorporato o di una classe di report non incorporato, il nome di variabile utilizzato è sempre lo stesso: customersByCityReport. Questo consente di utilizzare le stesse righe di codice nelle procedure che seguono. A questo punto è possibile creare ed eseguire il progetto. È previsto che il caricamento del report abbia esito negativo, poiché il codice per l'impostazione di un valore per campo parametro Città non è stato ancora scritto. Più avanti nel corso di questa esercitazione viene descritto come aggiungere un valore per il campo parametro Città. 346 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.2.5.2.3 Per verificare il caricamento del report CustomersByCity 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Se si utilizza un report non incorporato in un progetto Windows, individuare l'eseguibile Windows compilato nella sottodirectory \bin\ [Visual Basic] o \bin\debug\ [C#] e copiarvi il report. Nota Affinché il report non incorporato venga caricato dall'eseguibile Windows in fase di esecuzione, è necessario salvare il report nella stessa directory dell'eseguibile. 4. Dal menu Debug, scegliere Avvia. Il report CustomersByCity non verrà visualizzato. Per visualizzarlo, è necessario aggiungere un valore per il campo parametro Città, più avanti nel corso di questa esercitazione. Nota I risultati possono variare, in base alla versione di SAP Crystal Reports in uso. Nelle versioni più recenti, viene visualizzato un form in cui si richiede di inserire i valori per il parametro del report. In quelle precedenti, invece, viene generata l'eccezione "Valore corrente del campo parametro mancante". In entrambi i casi, per creare un'applicazione completamente funzionale è necessario aggiungere codice supplementare. 5. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.2.5.3 Impostazione manuale di parametri nel codice A questo punto è possibile impostare due valori ("Paris" e "Tokyo") nel campo parametro Città del report CustomersByCity. Ciò implica l'esigenza di aggiungere nuovo codice, operazione che è opportuno suddividere nei seguenti processi: ● È necessaria una costante PARAMETER_FIELD_NAME per contenere il nome del campo parametro "Città", che verrà utilizzato diverse volte nel codice. ● Il codice per l’aggiunta di valori correnti al parametro viene utilizzato in due punti diversi di questa esercitazione; per questo motivo viene creato come metodo di supporto separato. ● All’interno del metodo ConfigureCrystalReports(), aggiungere i parametri "Paris" e "Tokyo" a un’istanza ArrayList e passare il report e l’istanza ArrayList al metodo di supporto per l’elaborazione. Nella sezione successiva viene descritto come recuperare i valori predefiniti dal campo parametro e impostare tali valori in un controllo ListBox. Questi valori verranno utilizzati al termine dell’esercitazione per selezionare nuove città in modo dinamico e filtrare il report in base alle nuove città selezionate. Passare a Creazione di un controllo ListBox che visualizzi i parametri predefiniti [pagina 351]. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 347 1.5.2.5.3.1 Creazione di una costante PARAMETER_FIELD_NAME 1. Tornare alla classe di codice sottostante del Web Form o Windows Form. 2. A livello di classe, creare una nuova costante di stringa, PARAMETER_FIELD_NAME, e impostarne il valore su "Città". Private Const PARAMETER_FIELD_NAME As String = "City" private const string PARAMETER_FIELD_NAME = "City"; 1.5.2.5.3.2 Creazione di un metodo di supporto che aggiunga valori correnti al parametro del report A questo punto è possibile creare il metodo di supporto che aggiunge valori correnti al parametro del report. 1. Tornare alla classe di codice sottostante del Web Form o Windows Form. 2. Sopra la firma della classe, all'inizio della classe, aggiungere una dichiarazione "Imports" [Visual Basic] o "using" [C#] per lo spazio dei nomi System.Collections (se non è stato già dichiarato). Imports System.Collections using System.Collections; Nota Questa dichiarazione è necessaria per accedere alla classe ArrayList. 3. Alla fine della classe, creare un nuovo metodo privato denominato SetCurrentValuesForParameterField() con due variabili nella firma: ReportDocument e ArrayList. Nota Più avanti in questa esercitazione, se è stato utilizzato un report incorporato, la classe di tale report viene passata nel parametro del metodo ReportDocument. Ciò è possibile in quanto Tutte le classi di report incorporati in SAP Crystal Reports ereditano dalla classe di base ReportDocument. Private Sub SetCurrentValuesForParameterField(ByVal myReportDocument As ReportDocument, ByVal myArrayList As ArrayList) End Sub private void SetCurrentValuesForParameterField(ReportDocument reportDocument, ArrayList arrayList) { } 4. In questo metodo, dichiarare e creare un’istanza della classe indicizzata ParameterValues come variabile currentParameterValues. 348 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Nota Affinché sia possibile accedere alla classe ParameterValues, è necessario includere una dichiarazione "Imports" [Visual Basic] o "using" [C#] all'inizio della classe di codice sottostante per lo spazio dei nomi CrystalDecisions.Shared. (tale dichiarazione è stata aggiunta in Impostazione di un progetto [pagina 16]). Dim currentParameterValues As ParameterValues = New ParameterValues() ParameterValues currentParameterValues = new ParameterValues(); 5. Creare un ciclo foreach per recuperare tutti i valori inseriti (come tipo Object) dall’istanza ArrayList. Nota In questo metodo, vengono recuperati i valori da ArrayList e in seguito viene scritto il codice per aggiungere i valori ad ArrayList. For Each submittedValue As Object In myArrayList Next foreach(object submittedValue in arrayList) { } 6. All’interno del ciclo foreach, dichiarare e creare un’istanza per la classe ParameterDiscreteValue. Dim myParameterDiscreteValue As ParameterDiscreteValue = New ParameterDiscreteValue() ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue(); 7. Nel ciclo foreach, convertire submittedValue in stringa e passarla alla proprietà Value dell’istanza ParameterDiscreteValue. myParameterDiscreteValue.Value = submittedValue.ToString() parameterDiscreteValue.Value = submittedValue.ToString(); 8. Nel ciclo foreach, aggiungere l’istanza ParameterDiscreteValue nella classe indicizzata currentParameterValues. currentParameterValues.Add(myParameterDiscreteValue) currentParameterValues.Add(parameterDiscreteValue); Questo completa il codice nel ciclo foreach. Il resto del codice, descritto nei passaggi successivi, viene posizionato dopo il ciclo foreach. 9. Fuori dal ciclo foreach, recuperare la classe indicizzata ParameterFieldDefinitions che proviene dalla proprietà DataDefinition dell’istanza ReportDocument. Dim myParameterFieldDefinitions As ParameterFieldDefinitions = myReportDocument.DataDefinition.ParameterFields Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 349 ParameterFieldDefinitions parameterFieldDefinitions = reportDocument.DataDefinition.ParameterFields; 10. Recuperare l’istanza ParameterFieldDefinition dalla classe indicizzata ParameterFieldDefinitions basata sulla voce di indice della costante PARAMETER_FIELD_NAME. Dim myParameterFieldDefinition As ParameterFieldDefinition = myParameterFieldDefinitions(PARAMETER_FIELD_NAME) ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[PARAMETER_FIELD_NAME]; 11. Passare l’istanza currentParameterValues al metodo ApplyCurrentValues dell’istanza ParameterFieldDefinition. myParameterFieldDefinition.ApplyCurrentValues(currentParameterValues) parameterFieldDefinition.ApplyCurrentValues(currentParameterValues); 1.5.2.5.3.3 Per chiamare il metodo SetCurrentValuesForParameterField () prima che il report sia collegato al controllo CrystalReportViewer In questa procedura è stato descritto come creare un metodo che recupera valori da un’istanza ArrayList e li posiziona come valori correnti in un’istanza di ParameterFieldDefinition. A questo punto, affinché il report rilevi le impostazioni del parametro, è necessario chiamare il metodo prima di collegare il report al controllo CrystalReportViewer. 1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, sopra la riga che collega il report al controllo CrystalReportViewer. In queste interruzioni di riga è possibile inserire il codice aggiuntivo che modifica il report prima che sia collegato al visualizzatore. 2. All’interno delle interruzioni di riga, dichiarare e creare un’istanza ArrayList. Dim myArrayList As ArrayList = New ArrayList() ArrayList arrayList = new ArrayList(); 3. Aggiungere i nomi di città "Paris" e "Tokyo" come stringhe all’istanza ArrayList. myArrayList.Add("Paris") myArrayList.Add("Tokyo") arrayList.Add("Paris"); arrayList.Add("Tokyo"); 4. Chiamare il metodo SetCurrentValuesForParameterField() e passare le istanze CustomersByCityReport e ArrayList. 350 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net SetCurrentValuesForParameterField(customersByCityReport, myArrayList) SetCurrentValuesForParameterField(customersByCityReport, arrayList); 1.5.2.5.3.4 Per verificare il caricamento del report CustomersByCity L'ultima riga di codice del metodo collega il report al controllo CrystalReportViewer. A questo punto è possibile creare ed eseguire il progetto. È previsto che il report venga visualizzato correttamente poiché è stato scritto il codice per l'impostazione dei valori correnti nel campo parametro. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Il report CustomersByCity viene visualizzato con i soli clienti di Paris e Tokyo. 4. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.2.5.4 Creazione di un controllo ListBox che visualizzi i parametri predefiniti Nella restante parte dell’esercitazione viene descritto come visualizzare un elenco completo di valori predefiniti per il campo parametro in un controllo ListBox e come filtrare il contenuto del report in base alle selezioni effettuate nel controllo ListBox. In questa sezione viene descritto come compilare il controllo ListBox con i valori predefiniti del campo parametro. Nota È importante ricordare che i valori predefiniti, ovvero un lungo elenco di città, sono stati impostati al momento della creazione del report all’inizio dell’esercitazione. A questo punto è necessario aggiungere e configurare un controllo ListBox, quindi creare un metodo di supporto per compilarlo. 1.5.2.5.4.1 Per creare e configurare un controllo ListBox sul form 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 351 3. Se si sta sviluppando un sito Web, effettuare le seguenti operazioni: ○ Fare clic sul controllo CrystalReportViewer per selezionarlo. ○ Premere il tasto freccia sinistra sulla tastiera per visualizzare un cursore lampeggiante, quindi premere Invio. Il controllo CrystalReportViewer si sposta in basso di una riga. 4. Se si sta sviluppando un progetto Windows, effettuare le seguenti operazioni: ○ Fare clic sul controllo CrystalReportViewer per selezionarlo. ○ Nella finestra Proprietà, impostare Dock su "Bottom". Nota In Visual Studio, quando si seleziona la proprietà Dock, viene visualizzata una cornice anziché un elenco di opzioni. Selezionare la parte della cornice che corrisponde all'impostazione “Bottom”. ○ Ridimensionare il Windows Form e il controllo CrystalReportViewer in modo che quest'ultimo sia sufficientemente grande da visualizzare un report e lasciare spazio sopra di esso per un controllo ListBox. ○ Nella finestra Proprietà, impostare Anchor su "Top, Bottom, Left, Right". ○ Ridimensionare il Windows Form e il controllo CrystalReportViewer in modo che quest'ultimo sia sufficientemente grande da visualizzare un report e lasciare spazio sopra di esso per un controllo ListBox. 5. Dalla casella degli strumenti, trascinare un controllo ListBox sul controllo CrystalReportViewer. Nota Se si utilizza Visual Studio e viene visualizzata una Smart Task nel controllo ListBox, premere Esc per chiuderla. 6. Fare clic sul controllo ListBox per selezionarlo. 7. Nella finestra Proprietà: ○ Impostare ID o Name su "defaultParameterValuesList". ○ Impostare SelectionMode su "Multiple" (ovvero su "MultiExtended" in un progetto Windows). 8. Dal menu File, scegliere Salva tutto. A questo punto è possibile creare un metodo di supporto che recuperi i valori predefiniti dal campo parametro. 1.5.2.5.4.2 Per creare un metodo di supporto che recuperi i valori predefiniti dal campo parametro 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Alla fine della classe, creare un nuovo metodo privato denominato GetDefaultValuesFromParameterField() che restituisca un’istanza ArrayList, con ReportDocument passato nella firma del metodo. Private Function GetDefaultValuesFromParameterField(ByVal myReportDocument As ReportDocument) As ArrayList End Function 352 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net private ArrayList GetDefaultValuesFromParameterField(ReportDocument reportDocument) { } 4. All’interno del metodo GetDefaultValuesFromParameterField(), recuperare la classe indicizzata ParameterFieldDefinitions, che proviene dalla proprietà DataDefinition dell’istanza ReportDocument. Dim myParameterFieldDefinitions As ParameterFieldDefinitions = myReportDocument.DataDefinition.ParameterFields ParameterFieldDefinitions parameterFieldDefinitions = reportDocument.DataDefinition.ParameterFields; 5. Recuperare l’istanza ParameterFieldDefinition dalla classe indicizzata ParameterFieldDefinitions, basata sulla voce di indice della costante PARAMETER_FIELD_NAME. Dim myParameterFieldDefinition As ParameterFieldDefinition = myParameterFieldDefinitions(PARAMETER_FIELD_NAME) ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[PARAMETER_FIELD_NAME]; 6. Recuperare una classe indicizzata ParameterValues (come variabile defaultParameterValues) dalla proprietà DefaultValues dell’istanza ParameterFieldDefinition. Dim defaultParameterValues As ParameterValues = myParameterFieldDefinition.DefaultValues ParameterValues defaultParameterValues = parameterFieldDefinition.DefaultValues; 7. Dichiarare e creare un’istanza ArrayList. Dim myArrayList As ArrayList = New ArrayList() ArrayList arrayList = new ArrayList(); 8. Creare un ciclo foreach per recuperare tutte le istanze ParameterValue da defaultParameterValues. For Each myParameterValue As ParameterValue In defaultParameterValues Next foreach(ParameterValue parameterValue in defaultParameterValues) { } All’interno del ciclo foreach, creare un blocco condizionale nidificato che verifichi i valori di parametro discreto (in opposizione a quelli di intervallo). Esistono due versioni di questo blocco condizionale, poiché l'API è leggermente cambiata nelle diverse versioni di SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio. Controllare l’API (utilizzando IntelliSense) per verificare quale proprietà è disponibile in ParameterValue: 9. Se la proprietà disponibile è IsRange, all'interno del ciclo foreach inserire il seguente codice: If (Not myParameterValue.IsRange) Then End If Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 353 if(!parameterValue.IsRange) { } 10. Oppure, se la proprietà disponibile è Kind (DiscreteOrRangeKind, un'enumerazione con tre valori: DiscreteValue, RangeValue, DiscreteAndRangeValue), immettere il seguente codice all'interno del suddetto ciclo: If (myParameterValue.Kind = DiscreteOrRangeKind.DiscreteValue) Then End If if(parameterValue.Kind == DiscreteOrRangeKind.DiscreteValue) { } 11. All'interno del blocco condizionale nidificato, eseguire il cast dell’istanza ParameterValue nella classe estesa, ParameterDiscreteValue. Dim myParameterDiscreteValue As ParameterDiscreteValue = CType(myParameterValue, ParameterDiscreteValue) ParameterDiscreteValue parameterDiscreteValue = (ParameterDiscreteValue)parameterValue; 12. Sempre all'interno del blocco condizionale nidificato, aggiungere la proprietà Value dell’istanza ParameterDiscreteValue (convertita in stringa) all’istanza ArrayList. myArrayList.Add(myParameterDiscreteValue.Value.ToString()) arrayList.Add(parameterDiscreteValue.Value.ToString()); 13. Fuori dal blocco condizionale e dal ciclo foreach, alla fine del metodo, restituire l’istanza ArrayList dal metodo. Return myArrayList return arrayList; 1.5.2.5.4.3 Per collegare l'ArrayList restituito dal metodo al controllo ListBox in un progetto Web I valori predefiniti sono stati recuperati dal campo parametro e restituiti dal metodo come ArrayList. A questo punto è possibile collegare questo ArrayList al controllo defaultParameterValuesList ListBox. Il codice varia leggermente a seconda che si utilizzi un progetto Web o Windows; pertanto, assicurarsi di completare solo la procedura appropriata, Web o Windows, tra quelle riportate di seguito. 1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, subito dopo la riga che aggiunge il valore stringa Tokyo all'istanza di ArrayList. All'interno delle interruzioni create è possibile inserire il codice aggiuntivo per l'impostazione dell'origine dati per il controllo ListBox defaultParameterValuesList quando la pagina viene caricata per la prima volta. 2. All'interno delle interruzioni di riga, creare un blocco condizionale Not IsPostBack. If Not IsPostBack Then 354 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net End If if(!IsPostBack) { } Nota Il blocco condizionale Not IsPostBack viene utilizzato per incapsulare il codice che deve essere eseguito solo la prima volta che viene caricata la pagina. I controlli vengono in genere collegati ai valori dei dati nei blocchi condizionali Not IsPostBack, in modo che i valori dei dati (e tutti i successivi eventi di controllo) non siano reimpostati durante i ricaricamenti di pagina. 3. All'interno del blocco condizionale Not IsPostBack, impostare la proprietà DataSource del controllo ListBox defaultParameterValuesList sul metodo di supporto GetDefaultValuesFromParameterField(), passando l’istanza del report CustomersByCity come parametro di metodo. defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport) defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport); 4. Sempre all'interno del blocco condizionale Not IsPostBack, chiamare il metodo DataBind() del controllo ListBox defaultParameterValuesList. defaultParameterValuesList.DataBind() defaultParameterValuesList.DataBind(); 1.5.2.5.4.4 Per collegare l'ArrayList restituito dal metodo al controllo ListBox in un progetto Windows 1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, subito dopo la riga che aggiunge il valore stringa Tokyo all'istanza di ArrayList. All'interno delle interruzioni create è possibile inserire il codice aggiuntivo per l'impostazione dell'origine dati per il controllo ListBox defaultParameterValuesList quando la pagina viene caricata per la prima volta. 2. All'interno delle interruzioni di riga, impostare la proprietà DataSource del controllo ListBox defaultParameterValuesList sul metodo di supporto GetDefaultValuesFromParameterField(), passando l’istanza del report CustomersByCity come parametro di metodo. defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport) defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport); Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 355 1.5.2.5.4.5 Per verificare la compilazione del controllo ListBox defaultParameterValuesList A questo punto è possibile creare ed eseguire il progetto per verificare se il controllo ListBox defaultParameterValuesList è stato compilato. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Il controllo ListBox defaultParameterValuesList visualizza un elenco completo di valori predefiniti (ovvero città in questa esercitazione). 4. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. Nella sezione successiva viene descritto come aggiungere un pulsante per rivisualizzare il report in base alle selezioni del controllo ListBox defaultParameterValuesList. 1.5.2.5.5 Impostazione di parametri dalle selezioni di ListBox In questa sezione viene descritto come aggiungere un pulsante per rivisualizzare il report in base alle selezioni effettuate nel controllo ListBox defaultParameterValuesList. All’interno del metodo di evento per questo pulsante, viene chiamato lo stesso metodo chiamato al primo caricamento della pagina:SetCurrentValuesForParameterField() Questa volta, tuttavia, anziché passare valori arbitrari (Paris e Tokyo), vengono passati valori selezionati nel controllo ListBox defaultParameterValuesList. 1.5.2.5.5.1 Per creare e configurare un pulsante di rivisualizzazione sul form 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Dalla casella degli strumenti, trascinare un controllo Button a destra del controllo ListBox. 4. Fare clic sul controllo Button per selezionarlo. 5. Nella finestra Proprietà: ○ Impostare ID (o Name) su "redisplay." ○ Impostare Text su "Rivisualizza report". A questo punto è possibile creare un metodo di evento clic per il controllo Button che ricerchi gli elementi selezionati nel controllo ListBox e li passi al metodo SetCurrentValuesForParameterField(). Il codice varia leggermente a seconda che si utilizzi un progetto Web o Windows, quindi completare solo la procedura appropriata, Web o Windows, tra quelle riportate di seguito. 356 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.2.5.5.2 Per creare il metodo di evento clic per il controllo Button di rivisualizzazione in un progetto Web 1. Fare doppio clic sul controllo Button di rivisualizzazione. Si torna alla classe di codice sottostante in cui è stato generato automaticamente il metodo di evento redisplay_Click(). 2. Sopra la firma della classe, all'inizio della classe, aggiungere una dichiarazione "Imports" [Visual Basic] o "using" [C#] per lo spazio dei nomi System.Web.UI.WebControls (se non è stato già dichiarato). Imports System.Web.UI.WebControls using System.Web.UI.WebControls; Nota Questa dichiarazione è necessaria per accedere alla classe ListItem. 3. All'interno del metodo di evento redisplay_Click()appena generato automaticamente, dichiarare e creare un'istanza ArrayList. Dim myArrayList As ArrayList = New ArrayList() ArrayList arrayList = new ArrayList(); 4. Creare un ciclo foreach per recuperare tutte le istanze ListItem dalla proprietà Items di defaultParameterValuesList. For Each item As ListItem In defaultParameterValuesList.Items Next foreach(ListItem item in defaultParameterValuesList.Items) { } 5. All'interno del ciclo foreach, creare un blocco condizionale nidificato che aggiunga l'istanza Item all'istanza Arraylist se la proprietà Selected dell'istanza Item corrente è impostata su True. If item.Selected Then myArrayList.Add(item.Value) End If if(item.Selected) { arrayList.Add(item.Value); } 6. All'esterno del blocco condizionale e del ciclo foreach, chiamare il metodo SetCurrentValuesForParameterField() e passare l’istanza del report CustomersByCity e l'istanza ArrayList. SetCurrentValuesForParameterField(customersByCityReport, myArrayList) SetCurrentValuesForParameterField(customersByCityReport, arrayList); Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 357 Ora che i valori selezionati nel controllo ListBox sono stati applicati come valori correnti per il campo parametro, è possibile rivisualizzare il report. 7. Ricollegare l’istanza del report CustomersByCity alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = customersByCityReport crystalReportViewer.ReportSource = customersByCityReport; 1.5.2.5.5.3 Per creare il metodo di evento clic per il controllo Button di rivisualizzazione in un progetto Windows 1. Fare doppio clic sul controllo Button di rivisualizzazione. Si torna alla classe di codice sottostante in cui è stato generato automaticamente il metodo di evento redisplay_Click(). 2. All'interno del metodo di evento redisplay_Click()appena generato automaticamente, dichiarare e creare un'istanza ArrayList. Dim myArrayList As ArrayList = New ArrayList() ArrayList arrayList = new ArrayList(); 3. Creare un ciclo foreach per recuperare tutti gli elementi (come stringa) dalla proprietà SelectedItems di defaultParameterValuesList. For Each item As String In defaultParameterValuesList.SelectedItems Next foreach(string item in defaultParameterValuesList.SelectedItems) { } 4. All'interno del blocco condizionale, aggiungere l'istanza String dell'elemento all'istanza ArrayList. myArrayList.Add(item) arrayList.Add(item); 5. Fuori dal blocco condizionale e dal ciclo foreach, chiamare il metodo SetCurrentValuesForParameterField() e passare l’istanza del report CustomersByCity e l’istanza ArrayList. SetCurrentValuesForParameterField(customersByCityReport, myArrayList) SetCurrentValuesForParameterField(customersByCityReport, arrayList); Ora che i valori selezionati nel controllo ListBox sono stati applicati come valori correnti per il campo parametro, è possibile rivisualizzare il report. 358 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 6. Ricollegare l’istanza del report CustomersByCity alla proprietà ReportSource del controllo CrystalReportViewer. myCrystalReportViewer.ReportSource = customersByCityReport crystalReportViewer.ReportSource = customersByCityReport; 1.5.2.5.5.4 Per verificare la compilazione del controllo ListBox defaultParameterValuesList A questo punto è possibile creare ed eseguire il progetto per verificare se il campo parametro è stato reimpostato correttamente. 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. 4. Nel controllo ListBox, tenendo premuto il tasto Ctrl fare clic per selezionare almeno quattro diverse città nell’elenco. 5. Fare clic su Rivisualizza report. La pagina viene ricaricata visualizzando i record dei clienti che nelle città selezionate. 6. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. Se si utilizza un'applicazione Windows, la procedura è terminata. Se si lavorando in un sito Web, passare a Configurazione della persistenza dei parametri [pagina 359]. 1.5.2.5.6 Configurazione della persistenza dei parametri In questa sezione viene descritto come configurare, in un'esercitazione basata sul Web, la persistenza per le selezioni del campo parametro effettuate nel controllo ListBox. Come dimostrato nell'esercitazione Esercitazione: Persistenza del modello a oggetti ReportDocument mediante Session [pagina 302], le modifiche effettuate nel modello a oggetti ReportDocument vanno perse quando la pagina Web viene ricaricata, ovvero ogni volta che gli utenti fanno clic sui pulsanti della barra degli strumenti di CrystalReportViewer (come Pagina seguente e Zoom). 1.5.2.5.6.1 Per dimostrare la mancanza di persistenza nelle selezioni del parametro 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 359 4. Nel controllo ListBox, tenendo premuto il tasto Maiusc fare clic per selezionare tutte le città dell'elenco. 5. Fare clic su Rivisualizza report. La pagina viene ricaricata visualizzando i record di tutti i clienti di tutte le città. Si tratta di un report di grandi dimensioni contenente numerose pagine. 6. Nella barra degli strumenti di CrystalReportViewer, fare clic su Pagina seguente. L'elenco delle città selezionate non viene mantenuto e la pagina 2 del report non viene visualizzata. Vengono invece mostrate nuovamente le impostazioni iniziali del parametro (Paris e Tokyo). 7. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. Per rendere persistenti le modifiche apportate all'interno del modello a oggetti ReportDocument quando le pagine Web vengono ricaricate, è necessario aggiungere codice di persistenza all'applicazione. Iniziare aggiungendo il codice di persistenza al metodo ConfigureCrystalReports(), quindi aggiungere un blocco Else al blocco condizionale Not IsPostBack. Proseguire impostando valori univoci per l'istanza ArrayList per una delle condizioni all'interno del blocco condizionale. All'avvio della pagina, impostare i valori predefiniti ("Paris" e "Tokyo") nell'istanza ArrayList. Ai successivi caricamenti della pagina, recuperare l'istanza ArrayList salvata in Session. 1.5.2.5.6.2 Per aggiungere codice di persistenza al metodo ConfigureCrystalReports() 1. All'interno del metodo ConfigureCrystalReports(), tagliare e incollare le due righe di codice che aggiungono Paris e Tokyo all'ArrayList, alla fine del blocco condizionale Not IsPostBack. Al termine dell'operazione, il blocco condizionale dovrebbe presentarsi come segue: If Not IsPostBack Then defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport) defaultParameterValuesList.DataBind() myArrayList.Add("Paris") myArrayList.Add("Tokyo") End If if (!IsPostBack) { defaultParameterValuesList.DataSource = GetDefaultValuesFromParameterField(customersByCityReport); defaultParameterValuesList.DataBind(); arrayList.Add("Paris"); arrayList.Add("Tokyo"); } 2. Aggiungere una riga di codice finale al blocco condizionale che assegni l'istanza ArrayList a Session. Nota Per la persistenza Session che viene aggiunta, è possibile utilizzare il nome della variabile come identificatore di stringa. Session("myArrayList") = myArrayList 360 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Session["arrayList"] = arrayList; 3. Aggiungere una condizione Else al blocco condizionale Not IsPostBack. 4. All'interno del blocco Else, recuperare l'istanza ArrayList da Session ed eseguirne il cast in ArrayList. myArrayList = Ctype(Session("myArrayList"), ArrayList) arrayList = (ArrayList)Session["arrayList"]; Al termine dell'operazione, il blocco condizionale dovrebbe presentarsi come segue: Le modifiche apportate al metodo ConfigureCrystalReports()assicurano che l'istanza ArrayList corrente sia sempre disponibile per essere passata al metodo SetCurrentValuesForParameterField(). Nella sezione successiva vengono apportate due modifiche al codice dell'evento clic del controllo Button: ● Assegnazione a Session dell'istanza ArrayList creata. ● Sostituzione delle ultime due righe di codice, che consentono di configurare e visualizzare il report, con una chiamata al metodo ConfigureCrystalReports() per eseguire tale funzione su una serie di righe di codice comuni. 1.5.2.5.6.3 Per modificare il codice nel metodo di evento clic del controllo Button in modo da utilizzare la persistenza Session 1. Eliminare le ultime due righe di codice del metodo di evento clic del controllo Button. La prima riga di codice da eliminare è la chiamata al metodo SetCurrentValuesForParameterField(). La seconda riga da eliminare è quella che collega l'istanza customersByCityReport alla proprietà ReportSource del controllo CrystalReportViewer. Nel passaggio successivo vengono aggiunte due nuove righe di codice per sostituire quelle eliminate. 2. All'interno del metodo di evento clic del controllo Button, fuori dal ciclo foreach, aggiungere una riga di codice che assegni l'istanza ArrayList a Session. Nota Per la persistenza Session che viene aggiunta, è possibile utilizzare il nome della variabile come identificatore di stringa. Session("myArrayList") = myArrayList Session["arrayList"] = arrayList; 3. Chiamare il metodo ConfigureCrystalReports(). Ciò consente di recuperare l'istanza ArrayList, applicarla al report e collegare quest'ultimo al controllo CrystalReportViewer. ConfigureCrystalReports() Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 361 ConfigureCrystalReports(); A questo punto è possibile creare ed eseguire il progetto per verificare se il campo parametro è stato reimpostato correttamente. Nota Un approccio alternativo alla persistenza consiste nel rendere persistente l'istanza ReportDocument. Per informazioni su come rendere persistente l'istanza ReportDocument in Session, vedere l'esercitazione Esercitazione: Persistenza del modello a oggetti ReportDocument mediante Session [pagina 302]. 1.5.2.5.6.4 Per verificare la compilazione del controllo ListBox defaultParameterValuesList 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. 4. Nel controllo ListBox, tenendo premuto il tasto Maiusc fare clic per selezionare tutte le città dell'elenco. 5. Fare clic su Rivisualizza report. La pagina viene ricaricata visualizzando i record dei clienti di tutte le città. Si tratta di un report di grandi dimensioni contenente numerose pagine. 6. Nella barra degli strumenti di CrystalReportViewer, fare clic su Pagina seguente. 7. L'elenco delle città selezionate viene mantenuto e viene visualizzata la pagina 2 del report. 8. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.2.5.7 Appendice: Miglioramenti al codice dei parametri discreti In questa esercitazione sono stati creati un report con un valore di parametro discreto e un metodo di supporto in grado di accettare qualsiasi serie di valori in un formato comune (un ArrayList). Tali valori sono poi stati applicati a un report basato su un nome di campo parametro specifico (la costante PARAMETER_FIELD_NAME). Se è installato Visual Studio 2005 o versioni successive o SAP Crystal Reports Developer, è possibile accedere all'API avanzata che imposta i parametri discreti nel report Crystal. L’API di SAP Crystal Reports Developer consente di ridurre al minimo la quantità di codice necessaria per impostare i parametri discreti. Nelle procedure precedenti è stato descritto come creare il metodo di supporto SetCurrentValuesForParameterField(). In questa esercitazione viene descritto come eliminare il metodo di supporto e chiamare invece il metodo SetParameterValue() della classe ReportDocument. Il metodo SetParameterValue() si presenta nei seguenti metodi di overload: ● SetParameterValue(int index, object value) 362 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ● SetParameterValue(string parameterFieldName, object value) ● SetParameterValue(string parameterFieldName, object value, string subreport) È possibile passare qualsiasi tipo di oggetto in cui il valore soddisfi i valori predefiniti per il campo parametro. L'oggetto può essere un'istanza Array che memorizza un elenco di valori di parametro. Prerequisiti: ● È necessario creare un progetto in base alle istruzioni riportate in Esercitazione: Lettura e impostazione di parametri discreti [pagina 340]. In Impostazione manuale di parametri nel codice [pagina 347] è invece necessario creare solo la costante PARAMETER_FIELD_NAME. Non è necessario creare il metodo di supporto SetCurrentValuesForParameterField(). ● Se si dispone già di un progetto create in base alle istruzioni riportate in Esercitazione: Lettura e impostazione di parametri discreti [pagina 340], eliminare il metodo di supporto SetCurrentValuesForParameterField() e la chiamata all'interno del metodo ConfigureCrystalReports(). 1.5.2.5.7.1 Per utilizzare il metodo SetParameterValue() per i parametri discreti 1. Aprire il progetto completato per questa esercitazione. 2. Aprire il Web Form o il Windows Form. 3. Dal menu Visualizza, scegliere Codice. 4. All'interno del metodo ConfigureCrystalReports(), sopra la riga che collega il report alla proprietà ReportSource del controllo CrystalReportViewer, chiamare il metodo SetParameterValue() dalla classe CustomerByCity. Passare al metodo il nome del campo parametro e i valori del parametro in un'istanza Array. customersByCityReport.SetParameterValue(PARAMETER_FIELD_NAME, arrayList.ToArray()) customersByCityReport.SetParameterValue(PARAMETER_FIELD_NAME, arrayList.ToArray()); A questo punto è possibile creare ed eseguire il progetto per la lettura e l'impostazione di parametri discreti. 1.5.2.6 Esercitazione: Lettura e impostazione di parametri con un sottoreport In questa esercitazione verrà esaminata un'ulteriore complicazione: cosa accade se il report che richiede parametri contiene un sottoreport che richiede parametri diversi? Nota per completare questa esercitazione è necessario completare l'esercitazione precedente, Esercitazione: Lettura e impostazione di parametri discreti [pagina 340]. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 363 Introduzione Nell'esercitazione precedente, Esercitazione: Lettura e impostazione di parametri discreti [pagina 340], è stato descritto come creare un report con un parametro e come scrivere codice per impostare il parametro in questione in fase di esecuzione, sia con valori di parametro hardcoded che con valori di parametro passati da un controllo ListBox. In questa esercitazione viene descritto come aggiungere parametri a un sottoreport. È necessario apportare quattro modifiche al progetto creato in Esercitazione: Lettura e impostazione di parametri discreti [pagina 340]: ● Aggiungere un sottoreport al report originale. Questo sottoreport fa riferimento alla tabella Ordini del database Xtreme. La tabella Ordini è associata alla tabella Clienti utilizzata nell'esercitazione precedente tramite una chiave esterna ID cliente. ● Aggiungere un parametro di intervallo al sottoreport per filtrare i dati in base a un intervallo di date degli ordini. ● Aggiungere due controlli Text al modulo: orderStartDate e orderEndDate, per impostare l'intervallo di date degli ordini in fase di esecuzione. ● Aggiungere un nuovo metodo. Questo metodo crea un'istanza ParameterRangeValue contenente i valori startDate ed endDate e passa l'istanza al parametro di intervallo all'interno del sottoreport. Una volta completata questa esercitazione, è possibile filtrare i valori visualizzati sul report in fase di esecuzione. Il codice aggiunto limita il numero di città visualizzate nel report principale e l'intervallo di date degli ordini da visualizzare nel sottoreport. Questa esercitazione può essere completata anche con classi del modello a oggetti CrystalReportViewer, ma si consiglia di utilizzare il modello a oggetti ReportDocument. Codice di esempio Ciascuna esercitazione viene fornita con un codice di esempio in linguaggio Visual Basic e C# che illustra la versione completa del progetto. Seguire le istruzioni riportate in questa esercitazione per creare un nuovo progetto o aprire il progetto del codice di esempio per utilizzare una versione completa. Il codice di esempio si trova in cartelle classificate per lingua e tipo di progetto. I nomi delle cartelle per ciascuna versione di codice di esempio sono i seguenti: ● Sito Web in C#: CS_Web_RDObjMod_ParametersSubrpt ● Progetto Windows C#: CS_Win_RDObjMod_ParametersSubrpt ● Sito Web in Visual Basic: VB_Web_RDObjMod_ParametersSubrpt ● Progetto Windows Visual Basic: VB_Win_RDObjMod_ParametersSubrpt 364 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Database Xtreme In questa esercitazione viene utilizzato un database di esempio denominato Xtreme. Il file di database xtreme.mdb è incluso nel pacchetto del codice di esempio di SAP Crystal Reports .NET SDK. Per utilizzare il database Xtreme, è necessario creare manualmente una connessione ODBC a esso. Informazioni correlate Scelta del modello a oggetti appropriato al progetto [pagina 31] Esercitazione: Lettura e impostazione di parametri di intervallo per un sottoreport [pagina 250] Directory dei report di esempio [pagina 15] 1.5.2.6.1 Aggiunta di un sottoreport al report originale Iniziare aggiungendo un sottoreport al report originale. 1.5.2.6.1.1 Per aggiungere un sottoreport 1. Aprire il progetto creato nell'esercitazione precedente, Esercitazione: Lettura e impostazione di parametri discreti [pagina 340]. 2. In Esplora soluzioni, fare doppio clic sul report CustomersByCity per aprirlo. 3. Fare clic con il pulsante destro del mouse sulla barra grigia Dettagli, quindi selezionare Inserisci sezione sotto. 4. Fare clic con il pulsante destro del mouse sulla nuova sezione Dettagli b appena creata, selezionare Inserisci, quindi fare clic su Sottoreport. Viene visualizzato un riquadro grigio intorno al cursore del mouse. 5. Trascinare il rettangolo grigio nella nuova sezione Dettagli b, quindi fare clic per rilasciarlo. 6. Nella scheda Sottoreport della finestra di dialogo Inserisci sottoreport, selezionare Crea un sottoreport con la creazione guidata report. Nota la finestra di dialogo Inserisci sottoreport include altre opzioni che consentono di scegliere un report esistente e sottoreport su richiesta. Per ulteriori informazioni su tali funzioni, vedere Scheda Sottoreport (finestra di dialogo Inserisci sottoreport) [pagina 825]. 7. Nel campo Nuovo nome del report digitare CustomerOrders. 8. Fare clic su Procedura guidata report.... 9. Nel riquadro Origini dati disponibili della finestra Procedura guidata per la creazione di report standard, espandere la cartella Crea nuova connessione. 10. Dalla sottocartella, espandere la cartella ODBC (RDO). Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 365 La cartella contiene il server di database che è stato configurato per il report in fase di creazione del report. Nota se il server non è visualizzato, seguire le istruzioni dell'esercitazione precedente per connettersi al database Xtreme. 11. Selezionare la tabella Ordini e fare clic sul simbolo > per spostarla nel riquadro Seleziona tabelle, quindi scegliere Avanti. 12. Nel riquadro Campi disponibili, selezionare ID ordine, Data ordine, Data spedizione e Spedizione via. 13. Fare clic sul simbolo > per spostare questi campi nel riquadro Campi da visualizzare, quindi scegliere Fine. 14. Nella finestra di dialogo Inserisci sottoreport, selezionare la scheda Collegamento. 15. Nell'elenco Campi disponibili del riquadro Campo/i del report contenitore a cui collegarsi espandere la tabella Clienti, selezionare ID cliente, quindi fare clic sul simbolo >. 16. Nel riquadro Collegamento al campo Clienti.ID cliente visualizzato, lasciare invariate le selezioni predefinite. Tali selezioni di parametri e dati generano automaticamente una relazione tra il report principale e il sottoreport. 17. Fare clic su OK. Il nuovo sottoreport CustomerOrders viene visualizzato nella sezione Dettagli b del report principale. Nota quando si aggiunge un sottoreport alla sezione Dettagli, il sottoreport viene visualizzato per ogni riga, aumentando i requisiti di prestazioni del report. Se non sono necessarie informazioni sul sottoreport con tale livello di dettaglio, posizionare il sottoreport in una sezione Gruppo invece che nella sezione Dettagli. A questo punto è possibile verificare le impostazioni nel sottoreport. 1.5.2.6.1.2 Per verificare le impostazioni nel sottoreport 1. Nella sezione Dettagli, fare doppio clic sul sottoreport CustomerOrders per visualizzarlo. Nella parte inferiore della finestra di progettazione sono presenti pulsanti di spostamento per il report principale e il sottoreport CustomerOrders. 2. Se Explorer Campo non è visibile, nella barra degli strumenti di Crystal Reports fare clic sul pulsante Alterna visualizzazione campi. Nota per visualizzare Explorer Campo, è possibile anche selezionare il menu Crystal Reports e scegliere Explorer Campo. 3. Nell'Explorer Campo, espandere Campi parametro. 4. Verificare che il campo parametro Clienti-PM.ID Cliente sia stato generato automaticamente al momento del collegamento del sottoreport. 5. Nella barra degli strumenti, fare clic su Esperto selezione. 6. Nella finestra di dialogo Esperto selezione, verificare che sia impostato il criterio Ordini.ID cliente è uguale a {Clienti-PM.ID cliente}, quindi fare clic su OK. 366 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 7. Dal menu File, scegliere Salva tutto. Il sottoreport CustomerOrders è stato aggiunto al report CustomersByCity. Nella sezione successiva verrà aggiunto un parametro OrderDateRange al sottoreport. 1.5.2.6.1.3 Per aggiungere un parametro OrderDateRange al sottoreport 1. In Explorer Campo, fare clic con il pulsante destro del mouse su Campi parametro, quindi selezionare Nuovo…. 2. Nella finestra di dialogo Crea campo parametro: ○ Impostare Nome su OrderDateRange. ○ Impostare Tipo valore su Data. ○ Impostare Testo prompt su Specificare un intervallo di date degli ordini da visualizzare. ○ Impostare Opzioni su una sola selezione, Valore/i intervallo. 3. Fare clic su OK. 4. Nella barra degli strumenti, fare clic su Esperto selezione. 5. Fare clic sulla scheda Nuovo. 6. Nella finestra di dialogo Scegli campo, espandere la tabella Ordini, selezionare Data ordine, quindi fare clic su OK. 7. Nella nuova scheda Ordini.Data ordine, dall'elenco a discesa dei criteri selezionare formula:. 8. Digitare la seguente formula: {Ordini.Data ordine} in {?OrderDateRange} 9. Fare clic su OK. 10. Dal menu File, scegliere Salva tutto. Il parametro OrderDateRange è stato aggiunto al sottoreport e collegato alla colonna Ordini.DataOrdine. Nella sezione successiva viene descritto come aggiungere codice per fare riferimento al parametro OrderDateRange all'interno del sottoreport. 1.5.2.6.2 Aggiunta del codice del parametro del sottoreport A questo punto è possibile aggiungere il codice del parametro per il sottoreport nella classe di codice sottostante. Iniziare creando il metodo di supporto privato SetDateRangeForOrders(). 1.5.2.6.2.1 Per creare e codificare il metodo SetDateRangeForOrders() 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 367 3. All'inizio della classe, aggiungere due nuove costanti sotto la costante PARAMETER_FIELD_NAME esistente, aggiunta durante l'esercitazione precedente. Private Const SUBREPORT_PARAMETER_FIELD_NAME As String = "OrderDateRange" Private Const SUBREPORT_NAME As String = "CustomerOrders" private const string SUBREPORT_PARAMETER_FIELD_NAME = "OrderDateRange"; private const string SUBREPORT_NAME = "CustomerOrders"; 4. Alla fine della classe creare un nuovo metodo privato denominato SetDateRangeForOrders() con tre parametri: ReportDocument, string startDate e string endDate. Private Sub SetDateRangeForOrders(ByVal myReportDocument As ReportDocument, ByVal startDate As String, ByVal endDate As String) End Sub private void SetDateRangeForOrders(ReportDocument reportDocument, string startDate, string endDate) { } 5. All’interno del metodo, dichiarare e creare un’istanza per la classe ParameterRangeValue. Dim myParameterRangeValue As ParameterRangeValue = New ParameterRangeValue() ParameterRangeValue parameterRangeValue = new ParameterRangeValue(); Nota Affinché la classe ParameterRangeValue sia accessibile, è necessario includere un'istruzione "Imports" [Visual Basic] o "using" [C#] all'inizio della classe di codice sottostante per lo spazio dei nomi CrystalDecisions.Shared. (tale dichiarazione è stata aggiunta in Impostazione di un progetto [pagina 16]). 6. Impostare la proprietà StartValue dell'istanza ParameterRangeValue sul parametro startDate del metodo. myParameterRangeValue.StartValue = startDate parameterRangeValue.StartValue = startDate; Nota Le proprietà StartValue ed EndValue della classe ParameterRangeValue accettano valori di tipo Oggetto. Questo tipo generico consente di passare valori di intervallo di diversi tipi, inclusi testo, numero, data, valuta o ora. 7. Impostare la proprietà EndValue dell'istanza ParameterRangeValue sul parametro endDate del metodo. myParameterRangeValue.EndValue = endDate parameterRangeValue.EndValue = endDate; 8. Impostare i limiti superiore e inferiore per la proprietà BoundInclusive. myParameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusive 368 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net myParameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive parameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusive; parameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive; Nota La proprietà BoundInclusive implica che i valori di intervallo superiore e inferiore sono inclusi nell'intervallo. A questo punto è possibile assegnare l'istanza ParameterRangeValue al parametro del sottoreport. 9. Recuperare l'oggetto ParameterFieldDefinitions, che proviene dalla proprietà DataDefinition dell'istanza ReportDocument. Nota ParameterFieldDefinitions è una classe indicizzata che contiene istanze della classe ParameterFieldDefinition. Dim myParameterFieldDefinitions As ParameterFieldDefinitions = myReportDocument.DataDefinition.ParameterFields ParameterFieldDefinitions parameterFieldDefinitions = reportDocument.DataDefinition.ParameterFields; 10. Recuperare l'istanza ParameterFieldDefinition dalla classe indicizzata ParameterFieldDefinition, basata su due valori indicizzati: il nome del campo di parametro del sottoreport e il nome del sottoreport. Passare i valori delle due costanti dichiarate all'inizio della classe. Dim myParameterFieldDefinition As ParameterFieldDefinition = myParameterFieldDefinitions(SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME) ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME]; 11. Chiamare il metodo Clear() della proprietà CurrentValues dell'istanza ParameterFieldDefinition per rimuovere eventuali valori esistenti dalla proprietà CurrentValues. myParameterFieldDefinition.CurrentValues.Clear() parameterFieldDefinition.CurrentValues.Clear(); 12. Aggiungere l'istanza ParameterRangeValue, creata in precedenza, alla proprietà CurrentValues dell'istanza ParameterFieldDefinition. myParameterFieldDefinition.CurrentValues.Add(myParameterRangeValue) parameterFieldDefinition.CurrentValues.Add(parameterRangeValue); 13. Chiamare il metodo ApplyCurrentValues() passandogli la proprietà CurrentValues dell'istanza ParameterFieldDefinition. myParameterFieldDefinition.ApplyCurrentValues(myParameterFieldDefinition.CurrentV alues) Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 369 parameterFieldDefinition.ApplyCurrentValues(parameterFieldDefinition.CurrentValue s); In questa procedura sono stati impostati i valori delle date iniziale e finale in un'istanza ParameterRangeValue e tali valori sono stati passati al parametro OrderDateRange nel sotto report CustomerOrders. 1.5.2.6.3 Aggiunta di controlli TextBox per contenere i valori dei parametri di intervallo In questa sezione viene descritto come aggiungere due controlli TextBox per fornire al parametro di intervallo OrderDateRange nel sottoreport CustomerOrders i valori delle date iniziale e finale, in fase di esecuzione. Nota Se si esegue questa esercitazione in un sito Web, la persistenza dei valori delle date inseriti dagli utenti nelle caselle di testo viene assicurata da ViewState. 1.5.2.6.3.1 Per creare e configurare un pulsante di rivisualizzazione sul form 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Se si sta sviluppando un sito Web, effettuare le seguenti operazioni: a. Fare clic tra i controlli ListBox e Button. b. Premere Invio tre volte per creare due righe tra il controllo ListBox e il controllo Button. c. Nella prima riga creata sotto il controllo ListBox, digitare "Data inizio ordine". d. Nella seconda riga creata sotto il controllo ListBox, digitare "Data fine ordine". 4. Se si sta sviluppando un progetto Windows, effettuare le seguenti operazioni: a. Dalla casella degli strumenti, trascinare due controlli Label a destra del controllo ListBox. Posizionare le etichette una sull'altra e sopra il controllo Button. b. Selezionare il primo controllo Label Nella finestra Proprietà impostare la proprietà Text su "Data inizio ordine". c. Selezionare il secondo controllo Label Nella finestra Proprietà impostare la proprietà Text su "Data fine ordine". 5. Dalla casella degli strumenti, trascinare un controllo TextBox a destra di "Data inizio ordine". 6. Fare clic sul controllo TextBox per selezionarlo. 7. Nella finestra Proprietà, impostare ID (o Name) su "orderStartDate". 8. Dalla casella degli strumenti, trascinare un controllo TextBox a destra di "Data fine ordine". 9. Fare clic sul controllo TextBox per selezionarlo. 10. Nella finestra Proprietà, impostare ID (o Name) su "orderEndDate". 370 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 11. Dal menu File, scegliere Salva tutto. 1.5.2.6.4 Modifica dei metodi di chiamata del sottoreport È ora necessario modificare il metodo ConfigureCrystalReports() e il metodo di eventi redisplay_Click() per ricevere informazioni da questi controlli TextBox e applicarli al metodo SetDateRangeForOrders(), affinché le informazioni dei parametri vengano elaborate per i sottoreport. Nell'esercitazione precedente, Esercitazione: Lettura e impostazione di parametri discreti [pagina 340], questi metodi sono stati progettati in due modi diversi, a seconda che sia stata o meno inclusa la persistenza Session. Nota I progetti Windows non richiedono la persistenza Session, che è in genere richiesta dai siti Web. Scegliere una delle seguenti procedure. Modificare i metodi che escludono la persistenza Session o modificare i metodi che la includono: 1.5.2.6.4.1 Modifica dei metodi che escludono la persistenza Session Se nell'esercitazione precedente, Esercitazione: Lettura e impostazione di parametri discreti [pagina 340], è stata esclusa la persistenza Session, effettuare le procedure riportate di seguito. Se si desidera includere la persistenza Session, vedere Modifica dei metodi che includono la persistenza Session [pagina 372]. 1.5.2.6.4.1.1 Per modificare il metodo ConfigureCrystalReports() che esclude la persistenza Session 1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, dopo le righe che assegnano "Paris" e "Tokyo" come variabili ArrayList. 2. Tra le interruzioni di riga dichiarare e impostare valori hardcoded per due variabili stringa, startDate ed endDate. Dim startDate As String = "8/1/1997" Dim endDate As String = "8/31/1997" string startDate = "8/1/1997"; string endDate = "8/31/1997"; 3. Creare nel codice una coppia di interruzioni di riga, sopra la riga che collega il report al controllo CrystalReportViewer. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 371 4. Tra le interruzioni di riga, inserire una chiamata al metodo SetDateRangeForOrders() e passare il report CustomersByCity e le variabili startDate ed endDate. SetDateRangeForOrders(customersByCityReport, startDate, endDate) SetDateRangeForOrders(customersByCityReport, startDate, endDate); Dopo la chiamata si trova il codice originale che collega il report al controllo CrystalReportViewer. 5. Dal menu File, scegliere Salva tutto. A questo punto, modificare il metodo di evento redisplay_Click. 1.5.2.6.4.1.2 Per modificare il metodo redisplay_Click() che esclude la persistenza Session 1. Nel metodo di evento redisplay_Click(), creare nel codice una coppia di interruzioni di riga, sopra la riga che collega il report al controllo CrystalReportViewer. 2. Tra le interruzioni di riga dichiarare e impostare i valori per le due variabili stringa, startDate ed endDate, in base ai controlli TextBox aggiunti al Web Form o al Windows Form. Dim startDate As String = orderStartDate.Text Dim endDate As String = orderEndDate.Text string startDate = orderStartDate.Text; string endDate = orderEndDate.Text; 3. Inserire una chiamata al metodo SetDateRangeForOrders() e passare il report CustomersByCity e le variabili startDate ed endDate. SetDateRangeForOrders(customersByCityReport, startDate, endDate) SetDateRangeForOrders(customersByCityReport, startDate, endDate); 4. Dal menu File, scegliere Salva tutto. 1.5.2.6.4.2 Modifica dei metodi che includono la persistenza Session Se nell'esercitazione precedente, Esercitazione: Lettura e impostazione di parametri discreti [pagina 340], è stata inclusa la persistenza Session, effettuare le procedure riportate di seguito. Altrimenti, passare a Modifica dei metodi che escludono la persistenza Session [pagina 371]. 372 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.2.6.4.2.1 Per modificare il metodo ConfigureCrystalReports() che include la persistenza Session 1. Nel metodo ConfigureCrystalReports(), creare nel codice una coppia di interruzioni di riga, dopo la riga che dichiara e crea un'istanza ArrayList. 2. Tra le interruzioni di riga dichiarare due variabili stringa, startDate ed endDate. Dim startDate As String Dim endDate As String string startDate; string endDate; 3. All'interno del blocco condizionale Not IsPostBack, inserire i valori predefiniti per le variabili startDate ed endDate. startDate = "8/1/1997" endDate = "8/31/1997" startDate = "8/1/1997"; endDate = "8/31/1997"; 4. All'interno del blocco condizionale Not IsPostBack, assegnare le variabili startDate ed endDate alla persistenza Session. Session("startDate") = startDate Session("endDate") = endDate Session["startDate"] = startDate; Session["endDate"] = endDate; 5. All'interno del blocco Else, dopo aver recuperato l'istanza ArrayList da Session, recuperare anche le variabili startDate ed endDate. startDate = Session("startDate").ToString() endDate = Session("endDate").ToString() startDate = Session["startDate"].ToString(); endDate = Session["endDate"].ToString(); In questo modo, si raggiunge la fine del blocco con le variabili data assegnate in entrambi i casi, seguendo la logica dell'assegnazione della variabile ArrayList configurata nell'esercitazione precedente. 6. Creare nel codice una coppia di interruzioni di riga, sopra la riga che collega il report al controllo CrystalReportViewer. 7. Tra le interruzioni di riga, inserire una chiamata al metodo SetDateRangeForOrders() e passare il report CustomersByCity e le variabili startDate ed endDate. SetDateRangeForOrders(customersByCityReport, startDate, endDate) SetDateRangeForOrders(customersByCityReport, startDate, endDate); Dopo la chiamata si trova il codice originale che collega il report al controllo CrystalReportViewer. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 373 8. Dal menu File, scegliere Salva tutto. A questo punto, modificare il metodo di evento redisplay_Click. 1.5.2.6.4.2.2 Per modificare il metodo redisplay_Click() che include la persistenza Session 1. Nel metodo di evento redisplay_Click(), creare nel codice una coppia di interruzioni di riga, dopo la riga che assegna l'istanza ArrayList a Session. 2. Tra le interruzioni di riga, assegnare la proprietà Text degli oggetti TextBox orderStartDate e orderEndDate alle variabili Session. Session("startDate") = orderStartDate.Text Session("endDate") = orderEndDate.Text Session["startDate"] = orderStartDate.Text; Session["endDate"] = orderEndDate.Text; 3. Dal menu File, scegliere Salva tutto. Quando viene chiamato il metodo ConfigureCrystalReports(), i valori Session startDate ed endDate vengono recuperati e applicati. A questo punto è possibile creare ed eseguire il progetto per verificare che i valori TextBox reimpostino il parametro di intervallo nel sottoreport. w 1.5.2.6.5 Verifica dell'impostazione del parametro del sottoreport A questo punto è possibile verificare l'impostazione del parametro del sottoreport con i valori del controllo TextBox. 1.5.2.6.5.1 Per verificare l'impostazione del parametro del sottoreport 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. 4. Nel controllo ListBox, tenendo premuto il tasto Ctrl fare clic per selezionare almeno quattro diverse città nell’elenco. 5. Nel controllo TextBox startDate inserire "1/8/1997". 6. Nel controllo TextBox endDate inserire "31/12/1997". 7. Fare clic sul pulsante Rivisualizza report. 374 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net La pagina viene ricaricata e visualizza i record dei clienti che vivono nelle città selezionate, nonché un sottoreport con gli ordini inclusi nell'intervallo di date specificato. 8. Nel controllo CrystalReportViewer, impostare il livello Zoom su 125%. La pagina viene ricaricata con un rapporto di zoom del 125%. I valori selezionati per le città e l'intervallo di date degli ordini vengono mantenuti. 9. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 1.5.2.6.6 Appendice: Miglioramenti al codice dei parametri di intervallo per i sottoreport Il progetto dell'esercitazione è stato modificato in modo da utilizzare un report contenente un sottoreport ed è stato impostato un intervallo di date degli ordini per il parametro di intervallo creato nel sottoreport. In questa appendice viene illustrato come leggere e impostare parametri in un sottoreport con le funzionalità dell'API avanzata. Nelle procedure precedenti veniva illustrato come creare il metodo di supporto SetDateRangeForOrders() che utilizza le classi ParameterFieldDefinitions e ParameterFieldDefinition. In questa esercitazione, è necessario rimuovere le righe di codice che utilizzano le classi ParameterFieldDefinitions e ParameterFieldDefinition. Viene quindi illustrato come utilizzare le classi ParameterFields e ParameterField dell'API avanzata di SAP Crystal Reports per il codice del metodo SetDateRangeForOrders(). Nota L'API avanzata include il metodo SetParameterValue(string parameterFieldName, object value, string subreport) per i sottoreport con campi di parametri discreti. Pertanto, SetParameterValue() non può essere utilizzato in questa esercitazione perché il sottoreport ha un parametro di intervallo. 1.5.2.6.6.1 Per utilizzare l'API avanzata di SAP Crystal Reports per i sottoreport con parametri di intervallo È necessario creare un progetto in base alle istruzioni riportate in Esercitazione: Lettura e impostazione di parametri con un sottoreport [pagina 363]. 1. Aprire il progetto completato per questa esercitazione. 2. Aprire il Web Form o il Windows Form. 3. Dal menu Visualizza, scegliere Codice. 4. All'interno del metodo SetDateRangeForOrders(), eliminare le righe di codice che utilizzano le classi ParameterFieldDefinitions o ParameterFieldDefinition. Eliminare le seguenti righe di codice: Dim myParameterFieldDefinitions As ParameterFieldDefinitions = myReportDocument.DataDefinition.ParameterFields Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 375 Dim myParameterFieldDefinition As ParameterFieldDefinition = myParameterFieldDefinitions(SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME) myParameterFieldDefinition.CurrentValues.Clear() myParameterFieldDefinition.CurrentValues.Add(myParameterRangeValue) myParameterFieldDefinition.ApplyCurrentValues(myParameterFieldDefinition.CurrentV alues) ParameterFieldDefinitions parameterFieldDefinitions = reportDocument.DataDefinition.ParameterFields; ParameterFieldDefinition parameterFieldDefinition = parameterFieldDefinitions[SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME]; parameterFieldDefinition.CurrentValues.Clear(); parameterFieldDefinition.CurrentValues.Add(parameterRangeValue); parameterFieldDefinition.ApplyCurrentValues(parameterFieldDefinition.CurrentValue s); Nel passaggio successivo, si aggiungono i nuovi metodi dell'API di SAP Crystal Reports al metodo SetDateRangeForOrders(), dopo il codice che imposta il tipo di limite dell'intervallo. 5. All'interno del metodo SetDateRangeForOrders(), recuperare l'istanza ParameterFields dalla proprietà ParameterFields dell'istanza ReportDocument. Dim myParameterFields As ParameterFields = reportDocument.ParameterFields ParameterFields parameterFields = reportDocument.ParameterFields; 6. Recuperare l'istanza ParameterField dalla classe indicizzata ParameterField, basata su due valori indicizzati: il nome del campo di parametro del sottoreport e il nome del sottoreport. Passare i valori delle due costanti dichiarate all'inizio della classe. Dim myParameterField As ParameterField = myParameterFields(SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME) ParameterField parameterField = parameterFields[SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME]; 7. Chiamare il metodo Clear() della proprietà CurrentValues dell'istanza ParameterField per rimuovere eventuali valori esistenti dalla proprietà CurrentValues. myParameterField.CurrentValues.Clear() parameterField.CurrentValues.Clear(); 8. Aggiungere l'istanza ParameterRangeValue, creata in precedenza, alla proprietà CurrentValues dell'istanza ParameterField. myParameterField.CurrentValues.Add(myParameterRangeValue) parameterField.CurrentValues.Add(parameterRangeValue); A questo punto è possibile creare ed eseguire il progetto per leggere e impostare parametri di intervallo per un sottoreport. 376 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.2.7 Esercitazione: Esportazione in più formati In questa esercitazione viene descritto come esportare il report a livello di codice. Introduzione In questa esercitazione viene descritto come esportare il report a livello di codice. SAP Crystal Reports può esportare in un'ampia varietà di formati. Le opzioni disponibili dipendono dalla versione di SAP Crystal Reports installata. Ogni versione di SAP Crystal Reports, versione per sviluppatori per Microsoft Visual Studio supporta le seguenti opzioni di esportazione: ● SAP Crystal Reports (RPT) ● SAP Crystal Reports Solo lettura (RPTR) ● PDF ● Rich Text Format (RTF) ● Microsoft Word (97-2003) ● Microsoft Excel (97-2003) ● Microsoft Excel (97-2003) Solo dati ● Microsoft Excel (2007) Solo dati ● HTML 4.0 SAP Crystal Reports Developer supporta i seguenti formati aggiuntivi: ● Valori separati da virgola (CSV) ● Microsoft Word - Modificabile (RTF) ● Testo separato da tabulazione (TTX) ● Testo È possibile selezionare uno di questi formati, fare clic sul pulsante Esporta del controllo CrystalReportViewer ed esportare un report nel formato scelto sul computer locale in cui viene eseguito SAP Crystal Reports, in un'applicazione Web o Windows. I report possono essere esportati anche a livello di codice, in directory specifiche sul server Web locale o sul computer Windows. Iniziare l'esercitazione aggiungendo un controllo DropDownList al Web Form o al Windows Form, quindi compilarlo con i valori dell'enumerazione ExportFormatType nello spazio dei nomi CrystalDecisions.Shared. Creare poi tre metodi di supporto privati che contengano la funzionalità di esportazione ed eseguano operazioni di configurazione specifiche per ciascuno dei formati di esportazione. Infine, creare un metodo di evento clic per un controllo Button sul Web Form o sul Windows Form e chiamare i tre metodi di supporto privati che eseguono l'esportazione. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 377 Codice di esempio Ciascuna esercitazione viene fornita con un codice di esempio in linguaggio Visual Basic e C# che illustra la versione completa del progetto. Seguire le istruzioni riportate in questa esercitazione per creare un nuovo progetto o aprire il progetto del codice di esempio per utilizzare una versione completa. Il codice di esempio si trova in cartelle classificate per lingua e tipo di progetto. I nomi delle cartelle per ciascuna versione di codice di esempio sono i seguenti: ● Sito Web in C#: CS_Web_RDObjMod_Export ● Progetto Windows C#: CS_Win_RDObjMod_Export ● Sito Web in Visual Basic: VB_Web_RDObjMod_Export ● Progetto Windows Visual Basic: VB_Win_RDObjMod_Export Informazioni correlate Directory dei report di esempio [pagina 15] 1.5.2.7.1 Aggiunta di controlli al Web Form o al Windows Form In questa sezione viene descritto come aggiungere un controllo DropDownList, un controllo Button e un controllo Label sopra il controllo CrystalReportViewer sul Web Form o sul Windows Form. 1.5.2.7.1.1 Per aggiungere controlli al Web Form o al Windows Form 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Se si sta sviluppando un sito Web, effettuare le seguenti operazioni: a. Fare clic sul controllo CrystalReportViewer per selezionarlo. b. Premere il tasto freccia sinistra sulla tastiera per visualizzare un cursore lampeggiante, quindi premere Invio. Il controllo CrystalReportViewer si sposta in basso di una riga. 4. Se si sta sviluppando un progetto Windows, effettuare le seguenti operazioni: a. Fare clic sul controllo CrystalReportViewer per selezionarlo. b. Ridimensionare il controllo CrystalReportViewer, in modo da lasciare spazio sufficiente sopra di esso per un controllo ComboBox. c. Nella finestra Proprietà, impostare Anchor su "Top, Bottom, Left, Right". 378 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 5. Dalla casella degli strumenti, trascinare un controllo DropDownList (nei siti Web) o ComboBox (nei progetti Windows) sopra il controllo CrystalReportViewer. Nota Se una Smart Task viene visualizzata nell'oggetto DropDownList (ComboBox) quando si utilizza Visual Studio 2005 o versioni successive, premere Esc per chiuderla. 6. Fare clic sul controllo DropDownList (ComboBox) per selezionarlo. 7. Nella finestra Proprietà, impostare la proprietà ID su "exportTypesList". 8. Dalla casella degli strumenti, trascinare un controllo Button a destra del controllo DropDownList (ComboBox). 9. Fare clic sul controllo Button per selezionarlo. 10. Nella finestra Proprietà, effettuare le seguenti operazioni: ○ Impostare la proprietà ID su "exportByType". ○ Impostare la proprietà Text su "Esporta come tipo selezionato". 11. Dalla casella degli strumenti, trascinare un controllo Label a destra del controllo Button. 12. Fare clic sul controllo Label per selezionarlo. 13. Nella finestra Proprietà, effettuare le seguenti operazioni: ○ Impostare la proprietà ID su "message". ○ Lasciare vuota la proprietà Text. ○ Impostare la proprietà Visible su "False". 14. Dal menu File, scegliere Salva tutto. A questo punto è necessario compilare il controllo DropDownList con l'enumerazione ExportFormatType dello spazio dei nomi CrystalDecisions.Shared. 1.5.2.7.1.2 Per compilare il controllo DropDownList con l'enumerazione ExportFormatType in un sito Web 1. Aprire il Web Form. 2. Dal menu Visualizza, scegliere Codice. 3. All'interno del metodo ConfigureCrystalReports(), alla fine, aggiungere un blocco condizionale Not IsPostBack. If Not IsPostBack Then End If if (!IsPostBack) { } 4. All'interno del blocco condizionale, impostare la proprietà DataSource del controllo ComboBox exportTypesList sui valori dell'enumerazione ExportFormatType. exportTypesList.DataSource = System.Enum.GetValues(GetType(ExportFormatType)) exportTypesList.DataSource = System.Enum.GetValues(typeof(ExportFormatType)); Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 379 5. Chiamare il metodo DataBind() del controllo DropDownList exportTypesList per collegare i valori al controllo. exportTypesList.DataBind() exportTypesList.DataBind(); 1.5.2.7.1.3 Per compilare il controllo DropDownList con l'enumerazione ExportFormatType in un progetto Windows 1. Aprire il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. All'interno del metodo ConfigureCrystalReports(), alla fine, impostare la proprietà DataSource del controllo ComboBox exportTypesList sui valori dell'enumerazione ExportFormatType. exportTypesList.DataSource = System.Enum.GetValues(GetType(ExportFormatType)) exportTypesList.DataSource = System.Enum.GetValues(typeof(ExportFormatType)); 1.5.2.7.2 Creazione di metodi per l'esecuzione dell'esportazione In questa sezione viene descritto come creare i seguenti metodi di supporto privati per l'esecuzione dell'esportazione. ● ExportSetup() ● ExportSelection() ● ExportCompletion() Nel corso dell'esercitazione, questi metodi verranno chiamati da un metodo di evento clic di un controllo Button. Iniziare creando il metodo di supporto ExportSetup(). 1.5.2.7.2.1 Creazione del metodo ExportSetup() 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. All'inizio della classe, aggiungere tre dichiarazioni di classe. Private exportPath As String Private myDiskFileDestinationOptions As DiskFileDestinationOptions 380 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Private myExportOptions As ExportOptions private string exportPath; private DiskFileDestinationOptions diskFileDestinationOptions; private ExportOptions exportOptions; Successivamente verrà descritto come creare le istanze di queste classi di supporto nel metodo ExportSetup(). 4. Alla fine della classe, creare un metodo di supporto privato denominato ExportSetup() senza valore restituito. Public Sub ExportSetup() End Sub private void ExportSetup() { } 5. All'interno del metodo, impostare la variabile di stringa exportPath sulla directory principale dell'unità disco rigido. exportPath = "C:\Exported\" exportPath = "C:\\Exported\\"; Nota Se si desidera inserire la cartella di esportazione nella directory Web del server Web, aggiungere al nome della cartella il prefisso Request.PhysicalApplicationPath. 6. Creare un blocco condizionale che verifichi se la directory nella stringa exportPath esista già. If Not System.IO.Directory.Exists(exportPath) Then End If if (!System.IO.Directory.Exists(exportPath)) { } 7. Nel blocco condizionale, chiamare il metodo CreateDirectory() di System.IO.Directory per creare la directory nella stringa exportPath. System.IO.Directory.CreateDirectory(exportPath) System.IO.Directory.CreateDirectory(exportPath); 8. Fuori dal blocco condizionale, creare un'istanza della classe DiskFileDesintationOptions. myDiskFileDestinationOptions = New DiskFileDestinationOptions() diskFileDestinationOptions = new DiskFileDestinationOptions(); 9. Compilare l'istanza ExportOptions con la proprietà ExportOptions dell'istanza hierarchicalGroupingReport. myExportOptions = hierarchicalGroupingReport.ExportOptions Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 381 exportOptions = hierarchicalGroupingReport.ExportOptions; 10. Impostare la proprietà ExportDestinationType dell'istanza ExportOptions sulla selezione dell'enumerazione ExportDestinationType.DiskFile. myExportOptions.ExportDestinationType = ExportDestinationType.DiskFile exportOptions.ExportDestinationType = ExportDestinationType.DiskFile; 11. Per un progetto Windows, eliminare i valori nella proprietà ExportFormatOptions dell'istanza di ExportOptions. Questa riga di codice non è necessaria per un sito Web, poiché il contenuto della variabile viene automaticamente eliminato ad ogni evento clic. myExportOptions.ExportFormatOptions = Nothing exportOptions.ExportFormatOptions = null; A questo punto è possibile creare il metodo di supporto ExportSelection(). 1.5.2.7.2.2 Creazione del metodo ExportSelection() 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. All'inizio della classe, aggiungere una dichiarazione booleana che viene utilizzata per verificare se non è selezionato alcun formato di esportazione. Private selectedNoFormat As Boolean = True private bool selectedNoFormat = true; 4. Alla fine della classe, creare un metodo di supporto privato denominato ExportSelection() senza valore restituito. Public Sub ExportSelection() End Sub private void ExportSelection() { } 5. All'interno del metodo, creare un'istruzione "Select Case" [Visual Basic] o "switch" [C#] che faccia riferimento ai membri dell'enumerazione ExportFormatType. L'enumerazione è basata sulla voce SelectedIndex del controllo DropDownList exportTypesList creato nella procedura precedente. Select Case exportTypesList.SelectedIndex Case ExportFormatType.NoFormat Case ExportFormatType.CrystalReport Case ExportFormatType.RichText Case ExportFormatType.WordForWindows Case ExportFormatType.Excel Case ExportFormatType.PortableDocFormat Case ExportFormatType.HTML32 Case ExportFormatType.HTML40 382 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Case Else End Select switch ((ExportFormatType)exportTypesList.SelectedIndex) { case ExportFormatType.NoFormat: break; case ExportFormatType.CrystalReport: break; case ExportFormatType.RichText: break; case ExportFormatType.WordForWindows: break; case ExportFormatType.Excel: break; case ExportFormatType.PortableDocFormat: break; case ExportFormatType.HTML32: break; case ExportFormatType.HTML40: break; default: break; } Il metodo ExportSelection() è stato completato. A questo punto è possibile creare il metodo di supporto ExportCompletion(). 1.5.2.7.2.3 Creazione del metodo ExportCompletion() 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Alla fine della classe, creare un metodo di supporto privato denominato ExportCompletion() senza valore restituito. Public Sub ExportCompletion() End Sub private void ExportCompletion() { } 4. All'interno del metodo, creare un blocco Try/Catch con la classe Exception a cui viene fatto riferimento come variabile denominata "ex". Try Catch ex As Exception End Try try { } catch (Exception ex) { } Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 383 5. Nel blocco Try, creare un blocco condizionale per verificare la variabile booleana selectedNoFormat. If selectedNoFormat Then Else End If if (selectedNoFormat) { } else { } 6. Nel blocco If, impostare la proprietà Text del controllo Label message sulla costante FORMAT_NOT_SUPPORTED della classe MessageConstants. message.Text = MessageConstants.FORMAT_NOT_SUPPORTED message.Text = MessageConstants.FORMAT_NOT_SUPPORTED; 7. Nel blocco Else, chiamare il metodo Export() dell'istanza hierarchicalGroupingReport. hierarchicalGroupingReport.Export() hierarchicalGroupingReport.Export(); 8. Sempre nel blocco Else, impostare la proprietà Text del controllo Label message sulla costante SUCCESS della classe MessageConstants. message.Text = MessageConstants.SUCCESS message.Text = MessageConstants.SUCCESS; 9. Nel blocco Catch, impostare la proprietà Text del controllo Label message sulla costante FAILURE della classe MessagesConstants, quindi aggiungervi la proprietà Message del parametro Exception. message.Text = MessageConstants.FAILURE & ex.Message message.Text = MessageConstants.FAILURE + ex.Message; 10. Fuori dal blocco Try/Catch, impostare la proprietà Visible del controllo Label message su "True". message.Visible = True message.Visible = true; La procedura di creazione dei tre metodi di supporto privati che eseguono l'esportazione è stata completata. 384 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.2.7.3 Creazione di metodi per la configurazione di più formati di esportazione In questa sezione viene descritto come creare i metodi di supporto privati per la configurazione di più formati di esportazione. Tutti i metodi vengono utilizzati in modo simile, ad eccezione di ConfigureExportToHtml32() e ConfigureExportToHtml40(), che offrono modalità diverse per l'esportazione nel formato HTML. ● ConfigureExportToRpt() ● ConfigureExportToRtf() ● ConfigureExportToDoc() ● ConfigureExportToXls() ● ConfigureExportToPdf() ● ConfigureExportToHtml32() ● ConfigureExportToHtml40() 1.5.2.7.3.1 Per creare il metodo di supporto ConfigureExportToRpt() 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Alla fine della classe, creare un metodo di supporto privato denominato ConfigureExportToRpt() senza valore restituito. Public Sub ConfigureExportToRpt() End Sub private void ConfigureExportToRpt() { } 4. Nel metodo, impostare la proprietà ExportFormatType dell'istanza ExportOptions sulla selezione CrystalReport dell'enumerazione ExportFormatType. myExportOptions.ExportFormatType = ExportFormatType.CrystalReport exportOptions.ExportFormatType = ExportFormatType.CrystalReport; 5. Impostare la proprietà DiskFileName dell'istanza di DiskFileDestinationOptions sulla stringa exportPath e quindi aggiungere il nome di un documento con estensione file rpt. myDiskFileDestinationOptions.DiskFileName = exportPath & "Report.rpt" diskFileDestinationOptions.DiskFileName = exportPath + "Report.rpt"; Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 385 6. Infine, impostare la proprietà ExportDestinationOptions dell'istanza diExportOptions sull'istanza di DiskFileDestinationOptions configurata al passaggio precedente. myExportOptions.ExportDestinationOptions = myDiskFileDestinationOptions exportOptions.ExportDestinationOptions = diskFileDestinationOptions; 1.5.2.7.3.2 Per creare il metodo di supporto ConfigureExportToRtf 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Alla fine della classe, creare un metodo di supporto privato denominato ConfigureExportToRtf() senza valore restituito. Public Sub ConfigureExportToRtf() End Sub private void ConfigureExportToRtf() { } 4. All'interno del metodo, impostare la proprietà ExportFormatType dell'istanza ExportOptions sulla selezione RichText dell'enumerazione ExportFormatType. myExportOptions.ExportFormatType = ExportFormatType.RichText exportOptions.ExportFormatType = ExportFormatType.RichText; 5. Impostare la proprietà DiskFileName dell'istanza DiskFileDestinationOptions sulla stringa exportPath, seguita dal nome di un documento con estensione .rtf. myDiskFileDestinationOptions.DiskFileName = exportPath & "RichTextFormat.rtf" diskFileDestinationOptions.DiskFileName = exportPath + "RichTextFormat.rtf"; 6. Infine, impostare la proprietà ExportDestinationOptions dell'istanza di ExportOptions sull'istanza di DiskFileDestinationOptions configurata al passaggio precedente. myExportOptions.ExportDestinationOptions = myDiskFileDestinationOptions exportOptions.ExportDestinationOptions = diskFileDestinationOptions; 386 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.2.7.3.3 Per creare il metodo di supporto ConfigureExportToDoc 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Alla fine della classe, creare un metodo di supporto privato denominato ConfigureExportToDoc() senza valore restituito. Public Sub ConfigureExportToDoc() End Sub private void ConfigureExportToDoc() { } 4. All'interno del metodo, impostare la proprietà ExportFormatType dell'istanza ExportOptions sulla selezione WordForWindows dell'enumerazione ExportFormatType. myExportOptions.ExportFormatType = ExportFormatType.WordForWindows exportOptions.ExportFormatType = ExportFormatType.WordForWindows; 5. Impostare la proprietà DiskFileName dell'istanza DiskFileDestinationOptions sulla stringa exportPath, seguita dal nome di un documento con estensione .doc. myDiskFileDestinationOptions.DiskFileName = exportPath & "Word.doc" diskFileDestinationOptions.DiskFileName = exportPath + "Word.doc"; 6. Infine, impostare la proprietà ExportDestinationOptions dell'istanza di ExportOptions sull'istanza di DiskFileDestinationOptions configurata al passaggio precedente. myExportOptions.ExportDestinationOptions = myDiskFileDestinationOptions exportOptions.ExportDestinationOptions = diskFileDestinationOptions; 1.5.2.7.3.4 Per creare il metodo di supporto ConfigureExportToXls 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Alla fine della classe, creare un metodo di supporto privato denominato ConfigureExportToXls() senza valore restituito. Public Sub ConfigureExportToXls() End Sub Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 387 private void ConfigureExportToXls() { } 4. All'interno del metodo, impostare la proprietà ExportFormatType dell'istanza ExportOptions sulla selezione Excel dell'enumerazione ExportFormatType. myExportOptions.ExportFormatType = ExportFormatType.Excel exportOptions.ExportFormatType = ExportFormatType.Excel; 5. Impostare la proprietà DiskFileName dell'istanza DiskFileDestinationOptions sulla stringa exportPath, seguita dal nome di un documento con estensione .xls. myDiskFileDestinationOptions.DiskFileName = exportPath & "Excel.xls" diskFileDestinationOptions.DiskFileName = exportPath + "Excel.xls"; 6. Infine, impostare la proprietà ExportDestinationOptions dell'istanza di ExportOptions sull'istanza di DiskFileDestinationOptions configurata al passaggio precedente. myExportOptions.ExportDestinationOptions = myDiskFileDestinationOptions exportOptions.ExportDestinationOptions = diskFileDestinationOptions; 1.5.2.7.3.5 Per creare il metodo di supporto ConfigureExportToPdf 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Alla fine della classe, creare un metodo di supporto privato denominato ConfigureExportToPdf() senza valore restituito. Public Sub ConfigureExportToPdf() End Sub private void ConfigureExportToPdf() { } 4. All'interno del metodo, impostare la proprietà ExportFormatType dell'istanza ExportOptions sulla selezione PortableDocFormat dell'enumerazione ExportFormatType. myExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat exportOptions.ExportFormatType = ExportFormatType.PortableDocFormat; 388 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 5. Impostare la proprietà DiskFileName dell'istanza DiskFileDestinationOptions sulla stringa exportPath, seguita dal nome di un documento con estensione .pdf. myDiskFileDestinationOptions.DiskFileName = exportPath & "PortableDoc.pdf" diskFileDestinationOptions.DiskFileName = exportPath + "PortableDoc.pdf"; 6. Infine, impostare la proprietà ExportDestinationOptions dell'istanza di ExportOptions sull'istanza di DiskFileDestinationOptions configurata al passaggio precedente. myExportOptions.ExportDestinationOptions = myDiskFileDestinationOptions exportOptions.ExportDestinationOptions = diskFileDestinationOptions; 1.5.2.7.3.6 Per creare il metodo di supporto ConfigureExportToHtml32 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Alla fine della classe, creare un metodo di supporto privato denominato ConfigureExportToHtml32() senza valore restituito. Public Sub ConfigureExportToHtml32() End Sub private void ConfigureExportToHtml32() { } 4. All'interno del metodo, impostare la proprietà ExportFormatType dell'istanza ExportOptions sulla selezione HTML32 dell'enumerazione ExportFormatType. myExportOptions.ExportFormatType = ExportFormatType.HTML32 exportOptions.ExportFormatType = ExportFormatType.HTML32; 5. Dichiarare e creare un'istanza della classe HTMLFormatOptions con il nome di variabile "html32FormatOptions". Dim html32FormatOptions As HTMLFormatOptions = New HTMLFormatOptions() HTMLFormatOptions html32FormatOptions = new HTMLFormatOptions(); 6. Impostare la proprietà HTMLBaseFolderName dell'istanza html32FormatOptions sulla stringa exportPath e il nome "Html32Folder". html32FormatOptions.HTMLBaseFolderName = exportPath & "Html32Folder" Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 389 html32FormatOptions.HTMLBaseFolderName = exportPath + "Html32Folder"; 7. Impostare la proprietà HTMLFileName dell'istanza html32FormatOptions sul nome "html32.html". html32FormatOptions.HTMLFileName = "html32.html" html32FormatOptions.HTMLFileName = "html32.html"; 8. Impostare la proprietà HTMLEnableSeparatedPages dell'istanza html32FormatOptions su "False". html32FormatOptions.HTMLEnableSeparatedPages = False html32FormatOptions.HTMLEnableSeparatedPages = false; 9. Impostare la proprietà HTMLHasPageNavigator dell'istanza html32FormatOptions su "False". html32FormatOptions.HTMLHasPageNavigator = False html32FormatOptions.HTMLHasPageNavigator = false; 10. Infine, assegnare l'istanza html32FormatOptions alla proprietà FormatOptions dell'istanza ExportOptions. myExportOptions.ExportFormatOptions = html32FormatOptions exportOptions.ExportFormatOptions = html32FormatOptions; 1.5.2.7.3.7 Per creare il metodo di supporto ConfigureExportToHtml40 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Codice. 3. Alla fine della classe, creare un metodo di supporto privato denominato ConfigureExportToHtml40() senza valore restituito. Public Sub ConfigureExportToHtml40() End Sub private void ConfigureExportToHtml40() { } 4. All'interno del metodo, impostare la proprietà ExportFormatType dell'istanza ExportOptions sulla selezione HTML40 dell'enumerazione ExportFormatType. myExportOptions.ExportFormatType = ExportFormatType.HTML40 exportOptions.ExportFormatType = ExportFormatType.HTML40; 390 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 5. Dichiarare e creare un'istanza della classe HTMLFormatOptions con il nome di variabile "html40FormatOptions". Dim html40FormatOptions As HTMLFormatOptions = New HTMLFormatOptions() HTMLFormatOptions html40FormatOptions = new HTMLFormatOptions(); 6. Impostare la proprietà HTMLBaseFolderName dell'istanza html40FormatOptions sulla stringa exportPath e il nome "Html40Folder". html40FormatOptions.HTMLBaseFolderName = exportPath & "Html40Folder" html40FormatOptions.HTMLBaseFolderName = exportPath + "Html40Folder"; 7. Impostare la proprietà HTMLFileName dell'istanza html40FormatOptions sul nome "html40.html". html40FormatOptions.HTMLFileName = "html40.html" html40FormatOptions.HTMLFileName = "html40.html"; 8. Impostare la proprietà HTMLEnableSeparatedPages dell'istanza html40FormatOptions su "True". html40FormatOptions.HTMLEnableSeparatedPages = True html40FormatOptions.HTMLEnableSeparatedPages = true; 9. Impostare la proprietà HTMLHasPageNavigator dell'istanza html40FormatOptions su "True". html40FormatOptions.HTMLHasPageNavigator = True html40FormatOptions.HTMLHasPageNavigator = true; 10. Impostare la proprietà FirstPageNumber dell'istanza html40FormatOptions su 1. html40FormatOptions.FirstPageNumber = 1 html40FormatOptions.FirstPageNumber = 1; 11. Impostare la proprietà LastPageNumber dell'istanza html40FormatOptions su 3. html40FormatOptions.LastPageNumber = 3 html40FormatOptions.LastPageNumber = 3; 12. Infine, assegnare l'istanza html40FormatOptions alla proprietà FormatOptions dell'istanza ExportOptions. myExportOptions.FormatOptions = html40FormatOptions exportOptions.FormatOptions = html40FormatOptions; Sono stati creati i metodi di supporto privati che configurano i diversi formati di esportazione. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 391 1.5.2.7.4 Chiamata dei metodi dall'istruzione Case Nella lezione precedente è stata creata un'istruzione Case nel metodo ExportSelection() con più case. Ogni case è collegato a una selezione dall'enumerazione ExportFormatType. In questa sezione viene descritto come chiamare ciascun metodo di configurazione dal case corrispondente e come impostare il valore della variabile booleana selectedNoFormat. 1.5.2.7.4.1 Per chiamare i metodi dall'istruzione Case 1. Individuare il metodo ExportSelection() creato nella lezione precedente. 2. All'interno dell'istruzione Case Select Case [Visual Basic] o switch [C#], per il caso ExportFormatType.NoFormat impostare la variabile booleana selectedNoFormat su True. selectedNoFormat = True selectedNoFormat = true; 3. All'interno dell'istruzione Select Case [Visual Basic] o switch [C#], per il caso ExportFormatType.CrystalReport chiamare il metodo ConfigureExportToRpt(). selectedNoFormat = False ConfigureExportToRpt() selectedNoFormat = false; ConfigureExportToRpt(); 4. All'interno dell'istruzione Select Case [Visual Basic] o switch [C#], per il caso ExportFormatType.RichText chiamare il metodo ConfigureExportToRtf(). selectedNoFormat = False ConfigureExportToRtf() selectedNoFormat = false; ConfigureExportToRtf(); 5. All'interno dell'istruzione Select Case [Visual Basic] o switch [C#], per il caso ExportFormatType.WordForWindows chiamare il metodo ConfigureExportToDoc(). selectedNoFormat = False ConfigureExportToDoc() selectedNoFormat = false; ConfigureExportToDoc(); 6. All'interno dell'istruzione Select Case [Visual Basic] o switch [C#], per il caso ExportFormatType.Excel chiamare il metodo ConfigureExportToXls(). selectedNoFormat = False ConfigureExportToXls() selectedNoFormat = false; 392 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net ConfigureExportToXls(); 7. All'interno dell'istruzione Select Case [Visual Basic] o switch [C#], per il caso ExportFormatType.PortableDocFormat chiamare il metodo ConfigureExportToPdf(). selectedNoFormat = False ConfigureExportToPdf() selectedNoFormat = false; ConfigureExportToPdf(); 8. All'interno dell'istruzione dell'istruzione Select Case [Visual Basic] o switch [C#], per il caso ExportFormatType.HTML32 chiamare il metodo ConfigureExportToHtml32(). selectedNoFormat = False ConfigureExportToHtml32() selectedNoFormat = false; ConfigureExportToHtml32(); 9. All'interno dell'istruzione Select Case [Visual Basic] o switch [C#], per il caso ExportFormatType.HTML40 chiamare il metodo ConfigureExportToHtml40(). selectedNoFormat = False ConfigureExportToHtml40() selectedNoFormat = false; ConfigureExportToHtml40(); 10. All'interno dell'istruzione Case Select Case [Visual Basic] o switch [C#], per il caso Switch Else [Visual Basic] o default: [C#], impostare la variabile booleana selectedNoFormat su True. selectedNoFormat = True selectedNoFormat = true; Se si sta creando un progetto in Visual Studio 2005 o versioni successive, è necessario completare le procedure in Creazione di metodi per i nuovi formati di esportazione [pagina 395] prima di passare a Chiamata dei metodi per l'esecuzione dell'esportazione [pagina 393]. 1.5.2.7.5 Chiamata dei metodi per l'esecuzione dell'esportazione A questo punto è possibile creare il metodo dell'evento clic per il controllo Button exportByType e chiamare i metodi per l'esecuzione dell'esportazione dal metodo dell'evento. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 393 1.5.2.7.5.1 Per creare il metodo di evento exportByType_Click 1. Aprire il Web Form o il Windows Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Fare doppio clic sul controllo Button exportByType. Il metodo di evento exportByType_Click() viene creato e visualizzato in visualizzazione Codice. 4. Nel metodo di evento exportByType_Click(), inserire le chiamate ai tre metodi di evento creati precedentemente per eseguire l'esportazione. ExportSetup() ExportSelection() ExportCompletion() ExportSetup(); ExportSelection(); ExportCompletion(); A questo punto è possibile creare ed eseguire il progetto e quindi esportare il report in più formati. 1.5.2.7.5.2 Per verificare il progetto 1. Dal menu Genera, scegliere Genera soluzione. 2. Se si verificano errori di generazione, correggerli. 3. Dal menu Debug, scegliere Avvia. L'applicazione Web o Windows compila e visualizza il report Hierarchical Grouping. Nel controllo DropDownList sono elencati i formati di esportazione disponibili e il pulsante Esporta come tipo selezionato consente di eseguire l'esportazione. 4. Selezionare uno dei formati di esportazione dal controllo DropDownList, quindi fare clic sul pulsante Esporta come tipo selezionato. Accanto al pulsante viene visualizzato un messaggio indicate che l'esportazione è stata completata. In caso contrario, viene visualizzato un messaggio di errore. 5. Provare ad eseguire l'esportazione in diversi formati. 6. Tornare a Visual Studio e fare clic su Interrompi per uscire dalla modalità di debug. 7. Controllare la directory dei file esportati sul server Web o sul computer Windows per verificare che siano presenti i file esportati. 1.5.2.7.6 Appendice: Miglioramenti al codice di esportazione Se è installato Visual Studio 2005 o versioni successive o SAP Crystal Reports, è possibile accedere all'API avanzata per l'esportazione del report Crystal in più formati. Nell'API SAP Crystal Reports avanzata, l'enumerazione ExportFormatTypes presenta due nuovi formati di esportazione: record Microsoft Excel (file xls contenenti solo dati) e file di testo. 394 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Inoltre, nella classe ReportDocument sono ora disponibili i seguenti metodi di esportazione avanzati: ● ExportToDisk(CrystalDecisions.Shared.ExportFormatType formatType, string fileName): esporta un report nell'unità locale del server Web o nel computer Windows. ● ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType formatType, System.Web.HttpResponse response, bool asAttachment, string attachmentName): esporta un report nel tipo di formato specificato in una finestra del browser o come allegato. ● ExportToHttpResponse(CrystalDecisions.Shared.ExportOptions options, System.Web.HttpResponse response, bool asAttachment, string attachmentName): esporta un report nel tipo di formato specificato in una finestra del browser o come allegato. ● ExportToStream(CrystalDecisions.Shared.ExportFormatType formatType): esporta i dati di un report nel tipo di formato specificato in un flusso di input/output. 1.5.2.7.6.1 Creazione di metodi per i nuovi formati di esportazione In questa sezione viene descritto come modificare il progetto (creato in precedenza in questa esercitazione) per includere i nuovi formati di esportazione. Prima di modificare il codice per includere i nuovi formati di esportazione, completare tutte le procedure riportate in Esercitazione: Esportazione in più formati [pagina 377]. 1.5.2.7.6.1.1 Per modificare il codice per includere i nuovi formati di esportazione 1. Aprire il progetto completato per questa esercitazione. 2. Aprire il Web Form o il Windows Form. 3. Dal menu Visualizza, scegliere Codice. 4. Nell'istruzione "Select Case" [Visual Basic] o "switch" [C#] del metodo ExportSelection(), aggiungere un'istruzione case per il formato ExcelRecord. Case ExportFormatType.ExcelRecord case ExportFormatType.ExcelRecord: break; Creare i metodi di supporto privati che configurano i diversi formati di esportazione. Creare innanzitutto il metodo ConfigureExportToXlsRec() per impostare le opzioni di esportazione ExcelRecord. 5. Alla fine della classe, creare un metodo di supporto privato denominato ConfigureExportToXlsRec() senza valore restituito. Public Sub ConfigureExportToXlsRec() End Sub private void ConfigureExportToXlsRec() Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 395 { } 6. All'interno del metodo, impostare la proprietà ExportFormatType dell'istanza ExportOptions sulla selezione ExcelRecord dell'enumerazione ExportFormatType. myExportOptions.ExportFormatType = ExportFormatType.ExcelRecord exportOptions.ExportFormatType = ExportFormatType.ExcelRecord; 7. Impostare la proprietà DiskFileName dell'istanza DiskFileDestinationOptions sulla stringa exportPath, seguita dal nome di un documento con estensione .xls. myDiskFileDestinationOptions.DiskFileName = exportPath & "ExcelRecord.xls" diskFileDestinationOptions.DiskFileName = exportPath + "ExcelRecord.xls"; 8. Impostare la proprietà ExportDestinationOptions dell'istanza di ExportOptions sull'istanza di DiskFileDestinationOptions configurata al passaggio precedente. myExportOptions.ExportDestinationOptions = myDiskFileDestinationOptions exportOptions.ExportDestinationOptions = diskFileDestinationOptions; Sono stati aggiunti due nuovi formati di esportazione al progetto. Per esaminare ulteriormente l'API avanzata, scegliere uno dei seguenti metodi di esportazione avanzati: ● Se si desidera ridurre al minimo il codice senza impostare ExportOptions, passare a Utilizzo del metodo ExportToDisk() [pagina 396]. ● In un sito Web, se si desidera esportare il report in una finestra del browser o come allegato in una finestra del browser, passare a Utilizzo del metodo ExportToHttpResponse() [pagina 405]. ● Se si desidera passare i dati del report in un flusso di input/output, passare a Utilizzo del metodo ExportToStream() [pagina 409]. 1.5.2.7.6.2 Utilizzo del metodo ExportToDisk() Il metodo ExportToDisk() accetta il parametro ExportFormatType e un nome id file. Il metodo riduce la necessità di utilizzare i metodi di configurazione di esportazione creati in Creazione di metodi per la configurazione di più formati di esportazione [pagina 385]. In questa sezione viene descritto come creare un nuovo progetto, come modificarne uno esistente e come aggiungere codice al progetto per utilizzare il metodo ExportToDisk(). Prerequisiti: ● È necessario creare un progetto in base alle istruzioni riportate in Impostazione di un progetto per il metodo ExportToDisk() [pagina 397]. ● Oppure è necessario creare un progetto in base alle istruzioni riportate in Creazione di metodi per i nuovi formati di esportazione [pagina 395]. È quindi necessario modificare il progetto come descritto in Preparazione del progetto per il metodo ExportToDisk() [pagina 398]. 396 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.2.7.6.2.1 Impostazione di un progetto per il metodo ExportToDisk() In questa sezione viene illustrato come creare un nuovo progetto per il metodo ExportToDisk(). 1.5.2.7.6.2.1.1 Per impostare un nuovo progetto per il metodo ExportToDisk() 1. Completare le istruzioni riportate in Aggiunta di controlli al Web Form o al Windows Form [pagina 378]. 2. Creare i metodi ExportSetup() e ExportSelection() in base alle istruzioni riportate in Creazione di metodi per l'esecuzione dell'esportazione [pagina 380]. 3. Nell'istruzione "Select Case" [Visual Basic] o "switch" [C#] del metodo ExportSelection() aggiungere un'istruzione case per il formato ExcelRecord. Case ExportFormatType.ExcelRecord case ExportFormatType.ExcelRecord: break; 4. Creare un blocco condizionale per verificare la variabile booleana selectedNoFormat. If selectedNoFormat Then Else End If if (selectedNoFormat) { } else { } 5. Nel blocco If, impostare la proprietà Text del controllo Label message sulla costante FORMAT_NOT_SUPPORTED della classe MessageConstants. message.Text = MessageConstants.FORMAT_NOT_SUPPORTED message.Text = MessageConstants.FORMAT_NOT_SUPPORTED; 6. Nel blocco Else, impostare la proprietà Text del controllo Label message sulla costante SUCCESS della classe MessageConstants. message.Text = MessageConstants.SUCCESS message.Text = MessageConstants.SUCCESS; 7. Creare un blocco Try/Catch con la classe Exception a cui viene fatto riferimento come variabile denominata "ex". Il blocco Try racchiude l'istruzione "Select Case" [Visual Basic] o "switch" [C#] e il blocco condizionale. Try Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 397 Catch ex As Exception End Try try { } catch (Exception ex) { } 8. Nel blocco Catch, impostare la proprietà Text del controllo Label message sulla costante FAILURE della classe MessagesConstants, quindi aggiungervi la proprietà Message del parametro Exception. message.Text = MessageConstants.FAILURE & ex.Message message.Text = MessageConstants.FAILURE + ex.Message; 9. Fuori dal blocco Try/Catch, impostare la proprietà Visible del controllo Label message su "True". message.Visible = True message.Visible = true; 10. Dal menu Visualizza, scegliere Finestra di progettazione. 11. Fare doppio clic sul controllo Button exportByType. Viene creato il metodo di evento exportByType_Click() e si passa alla visualizzazione Codice. 12. Nel metodo di evento exportByType_Click(), inserire le chiamate ai metodi ExportSetup() ed ExportSelection(). ExportSetup() ExportSelection() ExportSetup(); ExportSelection(); 1.5.2.7.6.2.2 Preparazione del progetto per il metodo ExportToDisk() In questa sezione viene descritto come modificare un progetto realizzato in base alla procedura riportata in Creazione di metodi per i nuovi formati di esportazione [pagina 395]. A tal fine, occorre eliminare alcune righe di codice non necessario per il metodo ExportToDisk(). 1.5.2.7.6.2.2.1 Per modificare il progetto per utilizzare il metodo ExportToDisk() 1. Aprire il progetto. 398 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 2. Aprire il Web Form o il Windows Form. 3. Dal menu Visualizza, scegliere Codice. 4. All'inizio della classe, eliminare le seguenti dichiarazioni di classe: Private myDiskFileDestinationOptions As DiskFileDestinationOptions Private myExportOptions As ExportOptions private DiskFileDestinationOptions diskFileDestinationOptions; private ExportOptions exportOptions; 5. Nel metodo ExportSetup(), eliminare tutte le righe di codice dopo il blocco condizionale. L'ultima riga di codice che chiama la proprietà ExportFormatOptions si verifica solo in un progetto Windows. myDiskFileDestinationOptions = New DiskFileDestinationOptions() myExportOptions = hierarchicalGroupingReport.ExportOptions myExportOptions.ExportDestinationType = ExportDestinationType.DiskFile myExportOptions.ExportFormatOptions = Nothing diskFileDestinationOptions = new DiskFileDestinationOptions(); exportOptions = hierarchicalGroupingReport.ExportOptions; exportOptions.ExportDestinationType = ExportDestinationType.DiskFile; exportOptions.ExportFormatOptions = null; 6. Eliminare i seguenti metodi di configurazione dell'esportazione: ○ ConfigureExportToRpt() ○ ConfigureExportToRtf() ○ ConfigureExportToDoc() ○ ConfigureExportToXls() ○ ConfigureExportToPdf() ○ ConfigureExportToHtml32() ○ ConfigureExportToHtml40() ○ ConfigureExportToXlsRec() ○ ConfigureExportToTxt() 7. Nelle istruzioni Select Case [Visual Basic] o switch [C#] di ExportSelection(), eliminare le chiamate ai metodi di configurazione dell'esportazione. 8. Nel metodo ExportCompletion(), eliminare la chiamata al metodo Export(). 9. Copiare e incollare tutto il codice dal metodo ExportCompletion() all'inizio del metodo ExportSelection(). 10. Eliminare il metodo ExportCompletion() e la chiamata a ExportCompletion() nell'evento clic del controllo Button exportByType. 11. Nel metodo ExportSelection(), tagliare e incollare le istruzioni Case di Select Case [Visual Basic] o switch [C#] sopra il blocco If all'interno del blocco Try. Il blocco Try/Catch assumerà il seguente aspetto: Try Select Case exportTypesList.SelectedIndex Case ExportFormatType.NoFormat selectedNoFormat = True Case ExportFormatType.CrystalReport Case ExportFormatType.RichText Case ExportFormatType.WordForWindows Case ExportFormatType.Excel Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 399 Case ExportFormatType.PortableDocFormat Case ExportFormatType.HTML32 Case ExportFormatType.HTML40 End Select If selectedNoFormat Then message.Text = MessageConstants.FORMAT_NOT_SUPPORTED Else message.Text = MessageConstants.SUCCESS End If Catch ex As Exception message.Text = MessageConstants.FAILURE & ex.Message End Try try { switch ((ExportFormatType)exportTypesList.SelectedIndex) { case ExportFormatType.NoFormat: selectedNoFormat = true; break; case ExportFormatType.CrystalReport: break; case ExportFormatType.RichText: break; case ExportFormatType.WordForWindows: break; case ExportFormatType.Excel: break; case ExportFormatType.PortableDocFormat: break; case ExportFormatType.HTML32: break; case ExportFormatType.HTML40: break; case ExportFormatType.ExcelRecord: break; } if (selectedNoFormat) { message.Text = MessageConstants.FORMAT_NOT_SUPPORTED; } else { message.Text = MessageConstants.SUCCESS; } } catch (Exception ex) { message.Text = MessageConstants.FAILURE + ex.Message; } 1.5.2.7.6.2.3 Modifica del metodo ExportSetup() In questa sezione viene illustrato come modificare il metodo ExportSetup() per creare cartelle per i formati di esportazione HTML32 e HTML40. 400 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.2.7.6.2.3.1 Per modificare il metodo ExportSetup() 1. All'inizio della classe, aggiungere le seguenti dichiarazioni di classe: Private exportPathHTML32 As String Private exportPathHTML40 As String private string exportPathHTML32; private string exportPathHTML40; 2. Nel metodo ExportSetup(), creare un'istanza delle variabili di stringa exportPathHTML32 e exportPathHTML40 nella directory principale dell'unità disco rigido. exportPathHTML32 = "C:\Exported\HTML32\" exportPathHTML40 = "C:\Exported\HTML40\" exportPathHTML32 = "C:\\Exported\\HTML32\\"; exportPathHTML40 = "C:\\Exported\\HTML40\\"; Nota Se si desidera inserire le cartelle nella directory Web del server Web, aggiungere al nome della cartella il prefisso Request.PhysicalApplicationPath. 3. Creare un blocco condizionale per verificare se la directory nella stringa exportPathHTML32 esiste già. If Not System.IO.Directory.Exists(exportPathHTML32) Then End If if (!System.IO.Directory.Exists(exportPathHTML32)) { } 4. Nel blocco condizionale, chiamare il metodo CreateDirectory() di System.IO.Directory per creare la directory nella stringa exportPathHTML32. System.IO.Directory.CreateDirectory(exportPathHTML32) System.IO.Directory.CreateDirectory(exportPathHTML32); 5. Creare un blocco condizionale per verificare se la directory nella stringa exportPathHTML40 esiste già. If Not System.IO.Directory.Exists(exportPathHTML40) Then End If if (!System.IO.Directory.Exists(exportPathHTML40)) { } 6. Nel blocco condizionale, chiamare il metodo CreateDirectory() di System.IO.Directory per creare la directory nella stringa exportPathHTML40. System.IO.Directory.CreateDirectory(exportPathHTML40) System.IO.Directory.CreateDirectory(exportPathHTML40); Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 401 1.5.2.7.6.2.4 Chiamata del metodo ExportToDisk() In questa sezione viene illustrato come chiamare il metodo ExportToDisk() in ciascuna istruzione Case del metodo ExportSelection(). 1.5.2.7.6.2.4.1 Per chiamare il metodo ExportToDisk() nel metodo ExportSelection() 1. Nel metodo ExportSelection(), dichiarare una variabile di stringa e creare l'istanza della variabile in una stringa vuota. Dim myFileName As String = "" string fileName = ""; 2. Nell'istruzione Case ExportFormatType.CrystalReport, effettuare le seguenti operazioni: a. Impostare la stringa del nome del file sulla stringa exportPath, quindi aggiungere il nome di un documento con estensione rpt. myFileName = exportPath & "Report.rpt" fileName = exportPath + "Report.rpt"; b. Chiamare il metodo ExportToDisk() dall'istanza di hierarchicalGroupingReport e passare ExportFormatType.CrystalReport e la stringa del nome del file. hierarchicalGroupingReport.ExportToDisk(ExportFormatType.CrystalReport, myFileName) hierarchicalGroupingReport.ExportToDisk(ExportFormatType.CrystalReport, fileName); 3. Nell'istruzione Case ExportFormatType.RichText, effettuare le seguenti operazioni: a. Impostare la stringa del nome del file sulla stringa exportPath, quindi aggiungervi il nome di un documento con estensione .rtf. myFileName = exportPath & "RichTextFormat.rtf" fileName = exportPath + "RichTextFormat.rtf"; b. Chiamare il metodo ExportToDisk() dall'istanza hierarchicalGroupingReport e passare ExportFormatType.RichText e la stringa del nome del file. hierarchicalGroupingReport.ExportToDisk(ExportFormatType.RichText, myFileName) 402 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net hierarchicalGroupingReport.ExportToDisk(ExportFormatType.RichText, fileName); 4. Nell'istruzione Case ExportFormatType.WordForWindows, effettuare le seguenti operazioni: a. Impostare la stringa del nome del file sulla stringa exportPath, quindi aggiungervi il nome di un documento con estensione .doc. myFileName = exportPath & "Word.doc" fileName = exportPath + "Word.doc"; b. Chiamare il metodo ExportToDisk() dall'istanza di hierarchicalGroupingReport e passare ExportFormatType.WordForWindows e la stringa del nome del file. hierarchicalGroupingReport.ExportToDisk(ExportFormatType.WordForWindows, myFileName) hierarchicalGroupingReport.ExportToDisk(ExportFormatType.WordForWindows, fileName); 5. Nell'istruzione Case ExportFormatType.Excel, effettuare le seguenti operazioni: a. Impostare la stringa del nome del file sulla stringa exportPath, quindi aggiungervi il nome di un documento con estensione .xls. myFileName = exportPath & "Excel.xls" fileName = exportPath + "Excel.xls"; b. Chiamare il metodo ExportToDisk() dall'istanza hierarchicalGroupingReport e passare ExportFormatType.Excel e la stringa del nome del file. hierarchicalGroupingReport.ExportToDisk(ExportFormatType.Excel, myFileName) hierarchicalGroupingReport.ExportToDisk(ExportFormatType.Excel, fileName); 6. Nell'istruzione Case ExportFormatType.PortableDocFormat, effettuare le seguenti operazioni: a. Impostare la stringa del nome del file sulla stringa exportPath, quindi aggiungervi il nome di un documento con estensione .pdf. myFileName = exportPath & "PortableDoc.pdf" fileName = exportPath + "PortableDoc.pdf"; b. Chiamare il metodo ExportToDisk() dall'istanza di hierarchicalGroupingReport e passare ExportFormatType.PortableDocFormat e la stringa del nome file. hierarchicalGroupingReport.ExportToDisk(ExportFormatType.PortableDocFormat, myFileName) hierarchicalGroupingReport.ExportToDisk(ExportFormatType.PortableDocFormat, fileName); 7. Nell'istruzione Case ExportFormatType.HTML32, effettuare le seguenti operazioni: Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 403 a. Impostare la stringa del nome del file sulla stringa exportPathHTML32, quindi aggiungere il nome di un documento con estensione html. myFileName = exportPathHTML32 & "HTML32.html" fileName = exportPathHTML32 + "HTML32.html"; b. Chiamare il metodo ExportToDisk() dall'istanza di hierarchicalGroupingReport e passare ExportFormatType.HTML32 e la stringa del nome del file. hierarchicalGroupingReport.ExportToDisk(ExportFormatType.HTML32, myFileName) hierarchicalGroupingReport.ExportToDisk(ExportFormatType.HTML32, fileName); 8. Nell'istruzione Case ExportFormatType.HTML40, effettuare le seguenti operazioni: a. Impostare la stringa del nome del file sulla stringa exportPathHTML40, quindi aggiungere il nome di un documento con estensione html. myFileName = exportPathHTML40 & "HTML40.html" fileName = exportPathHTML40 + "HTML40.html"; b. Chiamare il metodo ExportToDisk() dall'istanza di hierarchicalGroupingReport e passare ExportFormatType.HTML40 e la stringa del nome del file. hierarchicalGroupingReport.ExportToDisk(ExportFormatType.HTML40, myFileName) hierarchicalGroupingReport.ExportToDisk(ExportFormatType.HTML40, fileName); 9. Nell'istruzione Case ExportFormatType.ExcelRecord, effettuare le seguenti operazioni: a. Impostare la stringa del nome del file sulla stringa exportPath, quindi aggiungere il nome di un documento con estensione xls. myFileName = exportPath & "ExcelRecord.xls" fileName = exportPath + "ExcelRecord.xls"; b. Chiamare il metodo ExportToDisk() dall'istanza hierarchicalGroupingReport e passare ExportFormatType.ExcelRecord e la stringa del nome del file. hierarchicalGroupingReport.ExportToDisk(ExportFormatType.ExcelRecord, myFileName) hierarchicalGroupingReport.ExportToDisk(ExportFormatType.ExcelRecord, fileName); A questo punto è possibile creare ed eseguire il progetto per esportare il report Crystal in diversi formati. Se si desidera utilizzare gli altri metodi API avanzati, fare clic sul collegamento appropriato per accedere alla sezione desiderata: ● Utilizzo del metodo ExportToHttpResponse() [pagina 405] ● Utilizzo del metodo ExportToStream() [pagina 409] 404 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 1.5.2.7.6.3 Utilizzo del metodo ExportToHttpResponse() Il metodo ExportToHttpResponse() consente di esportare il report Crystal in una finestra del browser o di esportare il report come allegato. e viene utilizzato solo per i siti Web. I metodi di sovraccarico disponibili per ExportToHttpResponse() includono: ● ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType formatType, System.Web.HttpResponse response, bool asAttachment, string attachmentName) ● ExportToHttpResponse(CrystalDecisions.Shared.ExportOptions options, System.Web.HttpResponse response, bool asAttachment, string attachmentName) Il metodo ExportToHttpResponse() non supporta esportazioni nella risposta HTTP per i formati HTML32 e HTML40. Pertanto, quando si tenta di eseguire un'esportazione in formato HTML32 o HTML40, viene visualizzato un messaggio di errore. Se la variabile booleana asAttachment è impostata su True, viene visualizzata una finestra di dialogo Download file. Se la variabile booleana asAttachment è impostata su False, il report esportato viene visualizzato nella finestra del browser. Quando si sceglie di salvare il file, il nome del file viene impostato sulla variabile di stringa attachmentName. Se la variabile attachmentName non viene specificata, il nome predefinito del file sarà "Senza nome", con l'estensione specificata. Il nome del file può essere modificato dalla finestra Salva con nome. 1.5.2.7.6.3.1 Utilizzo del metodo ExportToHttpResponse() con l'enumerazione ExportFormatType Per utilizzare il metodo ExportToHttpResponse() con il parametro ExportFormatType, è necessario completare la procedura descritta in Aggiunta di controlli al Web Form o al Windows Form [pagina 378] per un sito Web. I metodi ExportSetup(), ExportSelection() e ExportCompletion() non sono necessari. Il codice richiesto viene inserito nel metodo di evento clic exportByType. 1.5.2.7.6.3.1.1 Per utilizzare il metodo ExportToHttpResponse() con il parametro ExportFormatType 1. Aprire il Web Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Fare doppio clic sul controllo Button exportByType. Viene creato il metodo di evento exportByType_Click() e si passa alla visualizzazione Codice. 4. All'inizio della classe, aggiungere una dichiarazione di classe ExportOptions. Private myExportOptions As ExportOptions private ExportOptions exportOptions; Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 405 5. Nel metodo di evento exportByType_Click(), creare un'istanza dell'istanza ExportOptions. myExportOptions = New ExportOptions() exportOptions = new ExportOptions(); 6. Creare un blocco Try/Catch con la classe Exception a cui viene fatto riferimento come variabile denominata "ex". Try Catch ex As Exception End Try try { } catch (Exception ex) { } 7. Nel blocco Try, creare un blocco condizionale per verificare se la voce selezionata da exportTypesList è ExportFormatType.NoFormat. If (exportTypesList.SelectedIndex = ExportFormatType.NoFormat) Then Else End If if ((ExportFormatType)exportTypesList.SelectedIndex == ExportFormatType.NoFormat) { } else { } 8. Nel blocco If, impostare la proprietà Text del controllo Label message sulla costante FORMAT_NOT_SUPPORTED della classe MessageConstants. message.Text = MessageConstants.FORMAT_NOT_SUPPORTED message.Text = MessageConstants.FORMAT_NOT_SUPPORTED; 9. Nel blocco Else, assegnare l'elemento ExportFormatType selezionato da exportTypesList alla proprietà ExportFormatType dell'istanza ExportOptions. myExportOptions.ExportFormatType = exportTypesList.SelectedIndex exportOptions.ExportFormatType = (ExportFormatType)exportTypesList.SelectedIndex; 10. Nel blocco Else, chiamare il metodo ExportToHttpResponse() dell'istanza hierarchicalGroupingReport. Passare l'istanza di ExportOptions, l'oggetto ASP.NET Response, un valore booleano True e una stringa del nome del file come parametri del metodo. 406 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Nota La stringa del nome del file per l'allegato non ha bisogno di alcuna estensione, poiché viene aggiunta automaticamente al file esportato. hierarchicalGroupingReport.ExportToHttpResponse(myExportOptions, Response, True, "ExportedReport") hierarchicalGroupingReport.ExportToHttpResponse(exportOptions, Response, True, "ExportedReport"); 11. Nel blocco Catch, impostare la proprietà Text del controllo Label message sulla costante FAILURE della classe MessagesConstants, quindi aggiungervi la proprietà Message del parametro Exception. message.Text = MessageConstants.FAILURE & ex.Message message.Text = MessageConstants.FAILURE + ex.Message; 12. Fuori dal blocco Try/Catch, impostare la proprietà Visible del controllo Label message su "True". message.Visible = True message.Visible = true; A questo punto è possibile creare ed eseguire il progetto per esportare il report Crystal in diversi formati. Per utilizzare il metodo ExportToHttpResponse() con la classe ExportOptions, vedere Utilizzo del metodo ExportToHttpResponse() con la classe ExportOptions [pagina 407]. Per utilizzare gli altri metodi API avanzati, fare clic sul collegamento appropriato per accedere alla sezione desiderata: ● Utilizzo del metodo ExportToDisk() [pagina 396] ● Utilizzo del metodo ExportToStream() [pagina 409] 1.5.2.7.6.3.2 Utilizzo del metodo ExportToHttpResponse() con la classe ExportOptions Per utilizzare il metodo ExportToHttpResponse() con il parametro ExportOptions, è necessario completare la procedura descritta in Aggiunta di controlli al Web Form o al Windows Form [pagina 378] per un sito Web. I metodi ExportSetup(), ExportSelection() e ExportCompletion() non sono necessari. Il codice richiesto viene inserito nel metodo di evento clic exportByType. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 407 1.5.2.7.6.3.2.1 Per utilizzare il metodo ExportToHttpResponse() con il parametro ExportOptions 1. Aprire il Web Form. 2. Dal menu Visualizza, scegliere Finestra di progettazione. 3. Fare doppio clic sul controllo Button exportByType. Viene creato il metodo di evento exportByType_Click() e si passa alla visualizzazione Codice. 4. Nel metodo di evento exportByType_Click(), creare un blocco Try/Catch con la classe Exception a cui viene fatto riferimento come variabile denominata "ex". Try Catch ex As Exception End Try try { } catch (Exception ex) { } 5. Nel blocco Try, creare un blocco condizionale per verificare se la voce selezionata da exportTypesList è ExportFormatType.NoFormat. If (exportTypesList.SelectedIndex = ExportFormatType.NoFormat) Then Else End If if ((ExportFormatType)exportTypesList.SelectedIndex == ExportFormatType.NoFormat) { } else { } 6. Nel blocco If, impostare la proprietà Text del controllo Label message sulla costante FORMAT_NOT_SUPPORTED della classe MessageConstants. Nota La condizione If è soddisfatta quando è selezionato il valore NoFormat dal controllo DropDownList. message.Text = MessageConstants.FORMAT_NOT_SUPPORTED message.Text = MessageConstants.FORMAT_NOT_SUPPORTED; 7. Nel blocco Else, chiamare il metodo ExportToHttpResponse() dell'istanza hierarchicalGroupingReport. Passare l'elemento ExportFormatType selezionato, l'oggetto Response ASP.NET, un valore booleano True e una stringa del nome del file come parametri del metodo. 408 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Nota La stringa del nome del file per l'allegato non ha bisogno di alcuna estensione, poiché viene aggiunta automaticamente al file esportato. hierarchicalGroupingReport.ExportToHttpResponse(exportTypesList.SelectedIndex, Response, True, "ExportedReport") hierarchicalGroupingReport.ExportToHttpResponse((ExportFormatType)exportTypesList .SelectedIndex, Response, True, "ExportedReport"); 8. Nel blocco Catch, impostare la proprietà Text del controllo Label message sulla costante FAILURE della classe MessagesConstants, quindi aggiungervi la proprietà Message del parametro Exception. message.Text = MessageConstants.FAILURE & ex.Message message.Text = MessageConstants.FAILURE + ex.Message; 9. Fuori dal blocco Try/Catch, impostare la proprietà Visible del controllo Label message su "True". message.Visible = True message.Visible = true; A questo punto è possibile creare ed eseguire il progetto per esportare il report Crystal in diversi formati. Per utilizzare gli altri metodi API avanzati, fare clic sul collegamento appropriato per accedere alla sezione desiderata: ● Utilizzo del metodo ExportToDisk() [pagina 396] ● Utilizzo del metodo ExportToStream() [pagina 409] 1.5.2.7.6.4 Utilizzo del metodo ExportToStream() In questa sezione viene descritto come utilizzare il metodo ExportToStream() per esportare il report nel flusso di input/output come una sequenza di byte e come scrivere la sequenza di byte in un file del formato specificato. Quando si esporta il report nei formati HTML, le immagini non vengono esportate. Si consiglia pertanto di utilizzare i metodi di ExportToHttpResponse(). Prerequisiti: ● È necessario creare un progetto in base alle istruzioni riportate in Impostazione di un progetto per il metodo ExportToStream() [pagina 410]. ● Oppure è necessario creare un progetto in base alle istruzioni riportate in Creazione di metodi per i nuovi formati di esportazione [pagina 395]. È quindi necessario modificare il progetto come descritto in Preparazione del progetto per il metodo ExportToStream() [pagina 411]. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 409 1.5.2.7.6.4.1 Impostazione di un progetto per il metodo ExportToStream() In questa sezione viene descritto come creare un nuovo progetto per il metodo ExportToStream(). 1.5.2.7.6.4.1.1 Per impostare un nuovo progetto per il metodo ExportToStream() 1. Completare le istruzioni riportate in Aggiunta di controlli al Web Form o al Windows Form [pagina 378]. 2. Creare i metodi ExportSetup() e ExportSelection() in base alle istruzioni riportate in Creazione di metodi per l'esecuzione dell'esportazione [pagina 380]. 3. Nell'istruzione "Select Case" [Visual Basic] o "switch" [C#] del metodo ExportSelection() aggiungere un'istruzione case per il formato ExcelRecord. Case ExportFormatType.ExcelRecord case ExportFormatType.ExcelRecord: break; 4. Creare un blocco condizionale per verificare la variabile booleana selectedNoFormat. If selectedNoFormat Then Else End If if (selectedNoFormat) { } else { } 5. Nel blocco If, impostare la proprietà Text del controllo Label message sulla costante FORMAT_NOT_SUPPORTED della classe MessageConstants. message.Text = MessageConstants.FORMAT_NOT_SUPPORTED message.Text = MessageConstants.FORMAT_NOT_SUPPORTED; 6. Nel blocco Else, impostare la proprietà Text del controllo Label message sulla costante SUCCESS della classe MessageConstants. message.Text = MessageConstants.SUCCESS message.Text = MessageConstants.SUCCESS; 7. Creare un blocco Try/Catch con la classe Exception a cui viene fatto riferimento come variabile denominata "ex". Il blocco Try racchiude l'istruzione "Select Case" [Visual Basic] o "switch" [C#] e il blocco condizionale. Try 410 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Catch ex As Exception End Try try { } catch (Exception ex) { } 8. Nel blocco Catch, impostare la proprietà Text del controllo Label message sulla costante FAILURE della classe MessagesConstants, quindi aggiungervi la proprietà Message del parametro Exception. message.Text = MessageConstants.FAILURE & ex.Message message.Text = MessageConstants.FAILURE + ex.Message; 9. Fuori dal blocco Try/Catch, impostare la proprietà Visible del controllo Label message su "True". message.Visible = True message.Visible = true; 10. Dal menu Visualizza, scegliere Finestra di progettazione. 11. Fare doppio clic sul controllo Button exportByType. Viene creato il metodo di evento exportByType_Click() e si passa alla visualizzazione Codice. 12. Nel metodo di evento exportByType_Click(), inserire le chiamate ai metodi ExportSetup() ed ExportSelection(). ExportSetup() ExportSelection() ExportSetup(); ExportSelection(); 1.5.2.7.6.4.2 Preparazione del progetto per il metodo ExportToStream() In questa sezione viene descritto come modificare un progetto realizzato in base alla procedura riportata in Creazione di metodi per i nuovi formati di esportazione [pagina 395]. Occorre eliminare alcune righe di codice non necessario per il metodo ExportToStream(). 1.5.2.7.6.4.2.1 Per modificare il progetto per utilizzare il metodo ExportToStream() 1. Aprire il progetto. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 411 2. Aprire il Web Form o il Windows Form. 3. Dal menu Visualizza, scegliere Codice. 4. All'inizio della classe, eliminare le seguenti dichiarazioni di classe: Private myDiskFileDestinationOptions As DiskFileDestinationOptions Private myExportOptions As ExportOptions private DiskFileDestinationOptions diskFileDestinationOptions; private ExportOptions exportOptions; 5. Nel metodo ExportSetup(), eliminare tutte le righe di codice dopo il blocco condizionale. L'ultima riga di codice che chiama la proprietà ExportFormatOptions si verifica solo in un progetto Windows. myDiskFileDestinationOptions = New DiskFileDestinationOptions() myExportOptions = hierarchicalGroupingReport.ExportOptions myExportOptions.ExportDestinationType = ExportDestinationType.DiskFile myExportOptions.ExportFormatOptions = Nothing diskFileDestinationOptions = new DiskFileDestinationOptions(); exportOptions = hierarchicalGroupingReport.ExportOptions; exportOptions.ExportDestinationType = ExportDestinationType.DiskFile; exportOptions.ExportFormatOptions = null; 6. Eliminare i seguenti metodi di configurazione dell'esportazione: ○ ConfigureExportToRpt() ○ ConfigureExportToRtf() ○ ConfigureExportToDoc() ○ ConfigureExportToXls() ○ ConfigureExportToPdf() ○ ConfigureExportToHtml32() ○ ConfigureExportToHtml40() ○ ConfigureExportToXlsRec() 7. Nelle istruzioni Select Case [Visual Basic] o switch [C#] di ExportSelection(), eliminare le chiamate ai metodi di configurazione dell'esportazione. 8. Nel metodo ExportCompletion(), eliminare la chiamata al metodo Export(). 9. Copiare e incollare tutto il codice dal metodo ExportCompletion() all'inizio del metodo ExportSelection(). 10. Eliminare il metodo ExportCompletion() e la chiamata a ExportCompletion() nell'evento clic del controllo Button exportByType. 11. Nel metodo ExportSelection(), tagliare e incollare le istruzioni Case di Select Case [Visual Basic] o switch [C#] sopra il blocco If all'interno del blocco Try. Il blocco Try/Catch assumerà il seguente aspetto: Try 412 Select Case exportTypesList.SelectedIndex Case ExportFormatType.NoFormat selectedNoFormat = True Case ExportFormatType.CrystalReport Case ExportFormatType.RichText Case ExportFormatType.WordForWindows Case ExportFormatType.Excel Case ExportFormatType.PortableDocFormat Case ExportFormatType.HTML32 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Case ExportFormatType.HTML40 End Select If selectedNoFormat Then message.Text = MessageConstants.FORMAT_NOT_SUPPORTED Else message.Text = MessageConstants.SUCCESS End If Catch ex As Exception message.Text = MessageConstants.FAILURE & ex.Message End Try try { switch ((ExportFormatType)exportTypesList.SelectedIndex) { case ExportFormatType.NoFormat: selectedNoFormat = true; break; case ExportFormatType.CrystalReport: break; case ExportFormatType.RichText: break; case ExportFormatType.WordForWindows: break; case ExportFormatType.Excel: break; case ExportFormatType.PortableDocFormat: break; case ExportFormatType.HTML32: break; case ExportFormatType.HTML40: break; case ExportFormatType.ExcelRecord: break; } if (selectedNoFormat) { message.Text = MessageConstants.FORMAT_NOT_SUPPORTED; } else { message.Text = MessageConstants.SUCCESS; } } catch (Exception ex) { message.Text = MessageConstants.FAILURE + ex.Message; } 1.5.2.7.6.4.3 Modifica delle istruzioni nel metodo ExportSelection() In questa sezione viene descritto come impostare una stringa del nome del file per ciascuna istruzione Case di ExportFormatType. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 413 1.5.2.7.6.4.3.1 Per modificare le istruzioni Case nel metodo ExportSelection() 1. Nel metodo ExportSelection(), dichiarare una variabile di stringa e creare l'istanza della variabile in una stringa vuota. Dim myFileName As String = "" string fileName = ""; 2. Nell'istruzione Case ExportFormatType.CrystalReport, impostare la stringa del nome del file sulla stringa exportPath, seguita da un nome di documento riconoscibile con estensione .rpt. myFileName = exportPath & "Report.rpt" myFileName = exportPath + "Report.rpt"; 3. Nell'istruzione Case ExportFormatType.RichText, impostare la stringa del nome del file sulla stringa exportPath, seguita da un nome di documento riconoscibile con estensione .rtf. myFileName = exportPath & "RichTextFormat.rtf" myFileName = exportPath + "RichTextFormat.rtf"; 4. Nell'istruzione Case ExportFormatType.WordForWindows, impostare la stringa del nome del file sulla stringa exportPath, seguita da un nome di documento riconoscibile con estensione .doc. myFileName = exportPath & "Word.doc" fileName = exportPath + "Word.doc"; 5. Nell'istruzione Case ExportFormatType.Excel, impostare la stringa del nome del file sulla stringa exportPath, seguita da un nome di documento riconoscibile con estensione .xls. myFileName = exportPath & "Excel.xls" fileName = exportPath + "Excel.xls"; 6. Nell'istruzione Case ExportFormatType.PortableDocFormat, impostare la stringa del nome del file sulla stringa exportPath, seguita da un nome di documento riconoscibile con estensione .pdf. myFileName = exportPath & "PortableDoc.pdf" fileName = exportPath + "PortableDoc.pdf"; 7. Nell'istruzione Case ExportFormatType.HTML32, impostare la stringa del nome del file sulla stringa exportPath, seguita da un nome di documento riconoscibile con estensione .html. myFileName = exportPath & "HTML32.html" fileName = exportPath + "HTML32.html"; 414 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net 8. Nell'istruzione Case ExportFormatType.HTML40, impostare la stringa del nome del file sulla stringa exportPath, seguita da un nome di documento riconoscibile con estensione .html. myFileName = exportPath & "HTML40.html" fileName = exportPath + "HTML40.html"; 9. Nell'istruzione Case ExportFormatType.ExcelRecord, impostare la stringa del nome del file sulla stringa exportPath, seguita da un nome di documento riconoscibile con estensione .xls. myFileName = exportPath & "ExcelRecord.xls" fileName = exportPath + "ExcelRecord.xls"; 1.5.2.7.6.4.4 Chiamata del metodo ExportToStream() In questa sezione viene illustrato come chiamare il metodo ExportToStream() e come scrivere i dati del report esportato in un file nel formato specificato. 1.5.2.7.6.4.4.1 Per chiamare il metodo ExportToStream() nel metodo ExportSelection() 1. Sopra la firma della classe, aggiungere una dichiarazione "Imports" [Visual Basic] o "using" [C#] all'inizio della classe per lo spazio dei nomi System.IO. Imports System.IO using System.IO; 2. Nel blocco Else del metodo ExportSelection(), chiamare il metodo ExportToStream() dell'istanza di hierarchicalGroupingReport, passare ExportFormatType dall'elenco a discesa exportTypesList e assegnare l'istanza alla classe Stream. Stream myStream = hierarchicalGroupingReport.ExportToStream(exportTypesList.SelectedIndex) Stream stream = hierarchicalGroupingReport.ExportToStream((ExportFormatType)exportTypesList.Selec tedIndex); 3. Creare una nuova matrice di byte della stessa lunghezza dell'istanza Stream. Dim myDataArray As byte() = New byte(myStream.Length) byte[] dataArray = new byte[stream.Length]; Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. 415 4. Leggere i dati dall'istanza Stream alla matrice di byte, da un offset pari a zero alla lunghezza dell'istanza Stream. myStream.Read(myDataArray, 0, Convert.ToInt32(myStream.Length)); stream.Read(dataArray, 0, Convert.ToInt32(stream.Length)); 5. Creare un'istanza FileStream che crei il file specificato dalla variabile di stringa del nome del file. Dim myFileStream As FileStream = New FileStream(myFileName, System.IO.FileMode.Create) FileStream fileStream = new FileStream(fileName, System.IO.FileMode.Create); 6. Scrivere nel file i dati memorizzati nella matrice di byte, da un offset pari a zero alla lunghezza della matrice di byte. myFileStream.Write(myDataArray, 0, myDataArray.Length) fileStream.Write(dataArray, 0, dataArray.Length); 7. Chiudere le istanze FileStream e Stream. myFileStream.Close() myStream.Close() fileStream.Close(); stream.Close(); 8. Impostare la proprietà Text del controllo Label message sulla costante SUCCESS della classe MessageConstants. message.Text = MessageConstants.SUCCESS message.Text = MessageConstants.SUCCESS; A questo punto è possibile creare ed eseguire il progetto per esportare il report Crystal in diversi formati. Se si desidera utilizzare gli altri metodi API avanzati, fare clic sul collegamento appropriato per accedere alla sezione desiderata: ● Utilizzo del metodo ExportToDisk() [pagina 396] ● Utilizzo del metodo ExportToHttpResponse() [pagina 405] 1.5.2.8 Esercitazione: Filtro di dati mediante formule di selezione In questa esercitazione viene descritto come filtrare i dati nel modello a oggetti ReportDocument mediante l'impostazione della proprietà RecordSelectionFormula della classe DataDefinition. 416 © 2015 SAP SE o una sua affiliata SAP. Tutti i diritti riservati. Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports per Visual Studio .NET Manuale per gli sviluppatori dell'SDK di SAP Crystal Reports .Net Introduzione Le formule di selezione consentono di filtrare i record da visualizzare in un report Crystal. Per scrivere formule di selezione, è possibile utilizzare la sintassi Basic o la sintassi Crystal. In questa esercitazione viene creata una formula di selezione per filtrare i record cliente in cui il valore del campo Vendite anno precedente è maggiore rispetto a un valore specifico e il campo Nom