SAP versione per sviluppatori per Microsoft Visual Studio SAP Crystal Reports Manuale utente

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.

SAP Crystal Reports Versione per sviluppatori per Microsoft Visual Studio - Manuale per gli sviluppatori | Manualzz
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