Codice personalizzato e riferimenti agli assembly nelle espressioni in Progettazione report (SSRS)

È possibile aggiungere riferimenti a codice personalizzato incorporato in un report o ad assembly personalizzati compilati e salvati nel computer locale e distribuiti nel server di report. Utilizzare codice incorporato per costanti personalizzate, funzioni complesse o funzioni utilizzate più volte in un singolo report. Utilizzare gli assembly di codice personalizzato per mantenere il codice in un'unica posizione e condividerlo per utilizzarlo in più report. Il codice personalizzato può includere nuove costanti, variabili, funzioni o subroutine personalizzate. È possibile includere riferimenti di sola lettura a raccolte predefinite come ad esempio Parameters. Non è tuttavia possibile passare alle funzioni personalizzate set di valori di dati del report. In particolare, non sono supportate le aggregazioni personalizzate.

Nota sulla sicurezzaNota sulla sicurezza

Per i calcoli che dipendono dal tempo, valutati una sola volta in fase di esecuzione e il cui valore si desidera rimanga inalterato durante tutta l'elaborazione del report, valutare se utilizzare una variabile di report o una variabile di gruppo. Per ulteriori informazioni, vedere Utilizzo di riferimenti a raccolte di variabili di report e di gruppo (Generatore report 3.0 e SSRS).

Progettazione report è l'ambiente di creazione preferito da utilizzare per aggiungere codice personalizzato a un report. Generatore report 3.0 supporta l'elaborazione di report con espressioni valide o che includono riferimenti ad assembly personalizzati in un server di report. In Generatore report non è possibile aggiungere un riferimento a un assembly personalizzato.

Nota

Tenere presente che durante un aggiornamento di un server di report è possibile che per completare l'aggiornamento di report dipendenti da assembly personalizzati siano necessari passaggi aggiuntivi. Per ulteriori informazioni, vedere Utilizzo di Preparazione aggiornamento per preparare gli aggiornamenti.

Nota

È possibile creare e modificare definizioni del report (con estensione rdl) in Generatore report 3.0 e in Progettazione report di Business Intelligence Development Studio. Ogni ambiente di creazione offre modalità differenti per creare, aprire e salvare report ed elementi correlati. Per ulteriori informazioni, vedere Progettazione di report tramite Progettazione report e Generatore report 3.0 (SSRS) nel Web all'indirizzo microsoft.com.

Contenuto dell'articolo

Utilizzo di codice personalizzato in Generatore report 3.0

Inclusione di riferimenti a funzioni utilizzate di frequente

Inclusione di riferimenti a funzioni utilizzate meno di frequente

Inclusione di riferimenti ad assembly esterni

Inclusione di codice incorporato

Inclusione di riferimenti a parametri da codice

Inclusione di riferimenti a codice da assembly personalizzati

Utilizzo di codice personalizzato in Generatore report 3.0

In Generatore report è possibile aprire un report da un server di report in cui sono inclusi riferimenti ad assembly personalizzati. È possibile, ad esempio, modificare report creati e distribuiti tramite Progettazione report in Business Intelligence Development Studio. Gli assembly personalizzati devono essere distribuiti al server di report.

Non è possibile effettuare le operazioni seguenti:

  1. Aggiungere riferimenti o istanze di membri di classe a un report.

  2. Visualizzare in anteprima un report con riferimenti ad assembly personalizzati in modalità locale.

Icona freccia utilizzata con il collegamento Torna all'inizioTorna all'inizio

Inclusione di riferimenti a funzioni utilizzate di frequente

Utilizzare la finestra di dialogo Espressione per visualizzare un elenco per categoria di funzioni comuni predefinite di Reporting Services. Quando si espande Funzioni comuni e fa clic su una categoria, nel riquadro Elemento viene visualizzato l'elenco di funzioni da includere in un'espressione. Le funzioni comuni includono classi degli spazi dei nomi .NET Framework System..::..Math e System..::..Convert e funzioni della libreria run-time di Visual Basic. Per praticità, è possibile visualizzare le funzioni utilizzate più di frequente nella finestra di dialogo Espressione, in cui sono elencate per categoria: Testo, Data e ora, Matematiche, Ispezione, Flusso programma, Aggregazione, Finanziarie, Conversione e Varie. Le funzioni utilizzate meno di frequente non sono riportate nell'elenco, ma possono comunque essere utilizzate in un'espressione.

Per utilizzare una funzione predefinita, fare doppio clic sul relativo nome nel riquadro Elemento. Nel riquadro Descrizione verrà visualizzata una descrizione della funzione e nel riquadro Esempio verrà visualizzato un esempio della chiamata di funzione. Nel riquadro del codice, quando si digita il nome della funzione seguito da una parentesi aperta (, tramite IntelliSense verranno visualizzate tutte le sintassi valide per la chiamata di funzione. Ad esempio, per calcolare il valore massimo per un campo denominato Quantity in una tabella, aggiungere l'espressione semplice =Max( nel riquadro del codice, quindi utilizzare gli smart tag per visualizzare tutte le possibili sintassi valide per la chiamata alla funzione. Per completare questo esempio, digitare =Max(Fields!Quantity.Value). 

Per ulteriori informazioni su ogni funzione, vedere System..::..Math, System..::..Convert e la pagina relativa ai membri della libreria run-time di Visual Basic su MSDN.

Icona freccia utilizzata con il collegamento Torna all'inizioTorna all'inizio

Inclusione di riferimenti a funzioni utilizzate meno di frequente

Per includere un riferimento ad altri spazi dei nomi CLR utilizzati meno di frequente, è necessario utilizzare un riferimento completo, ad esempio System.Text..::..StringBuilder. Per queste funzioni utilizzate meno di frequente, la funzionalità IntelliSense non è supportata nel riquadro del codice della finestra di dialogo Espressione.

Per ulteriori informazioni, vedere la pagina relativa ai membri della libreria run-time di Visual Basic su MSDN.

Inclusione di riferimenti ad assembly esterni

Per includere un riferimento a una classe in un assembly esterno, è necessario identificare l'assembly per l'elaboratore di report. Utilizzare la pagina Riferimenti della finestra di dialogo Proprietà report per specificare il nome completo dell'assembly da aggiungere al report. Nell'espressione è necessario utilizzare il nome completo per la classe nell'assembly. Le classi di un assembly esterno non vengono visualizzate nella finestra di dialogo Espressione. È necessario fornire il relativo nome corretto. Un nome completo include lo spazio dei nomi, il nome della classe e il nome del membro.

Icona freccia utilizzata con il collegamento Torna all'inizioTorna all'inizio

Inclusione di codice incorporato

Per aggiungere codice incorporato a un report, utilizzare la scheda Codice della finestra di dialogo Proprietà report. Il blocco di codice creato può contenere più metodi. È necessario che i metodi del codice incorporato siano scritti in Microsoft Visual Basic e basati su istanze. Tramite l'elaboratore di report vengono aggiunti automaticamente i riferimenti per gli spazi dei nomi System.Convert e System.Math. Utilizzare la pagina Riferimenti della finestra di dialogo Proprietà report per aggiungere altri riferimenti ad assembly. Per ulteriori informazioni, vedere Procedura: Aggiungere un riferimento a un assembly in un report (SSRS).

I metodi nel codice incorporato sono disponibili tramite un membro Code definito a livello globale. Per accedere ai metodi, fare riferimento al membro Code e al nome del metodo. L'esempio seguente consente di chiamare il metodo ToUSD per la conversione del valore del campo StandardCost in un valore in dollari:

=Code.ToUSD(Fields!StandardCost.Value)

Per fare riferimento a raccolte predefinite nel codice personalizzato, includere un riferimento all'oggetto Report predefinito:

=Report.Parameters!Param1.Value

Negli esempi seguenti viene illustrato come definire alcune variabili e costanti personalizzate.

Public Const MyNote = "Authored by Bob"
Public Const NCopies As Int32 = 2
Public Dim  MyVersion As String = "123.456"
Public Dim MyDoubleVersion As Double = 123.456

Sebbene le variabili e le costanti personalizzate non siano presenti nella categoria Costanti nella finestra di dialogo Espressioni, in cui vengono visualizzate solo costanti predefinite, è possibile farvi riferimento da qualsiasi espressione, come illustrato negli esempi seguenti. In un'espressione una costante personalizzata viene considerata come un elemento Variant.

=Code.MyNote
=Code.NCopies
=Code.MyVersion
=Code.MyDoubleVersion

Nell'esempio seguente sono inclusi sia il riferimento al codice che l'implementazione di codice della funzione FixSpelling, che sostituisce il testo "Bicycle" a tutte le occorrenze del testo "Bike" nel campo SubCategory.

=Code.FixSpelling(Fields!SubCategory.Value)

Il codice seguente, se incorporato nel blocco di codice di una definizione del report, indica un'implementazione del metodo FixSpelling. In questo esempio viene illustrato come utilizzare un riferimento completo alla classe StringBuilder di Microsoft .NET Framework.

Public Function FixSpelling(ByVal s As String) As String
   Dim strBuilder As New System.Text.StringBuilder(s)
   If s.Contains("Bike") Then
      strBuilder.Replace("Bike", "Bicycle")
      Return strBuilder.ToString()
      Else : Return s
   End If
End Function

Per ulteriori informazioni sulle raccolte di oggetti incorporati e sull'inizializzazione, vedere Utilizzo di riferimenti a elementi globali e utenti predefiniti (Generatore report 3.0 e SSRS) e Inizializzazione di oggetti assembly personalizzati.

Icona freccia utilizzata con il collegamento Torna all'inizioTorna all'inizio

Inclusione di riferimenti a parametri da codice

È possibile fare riferimento alla raccolta globale di parametri tramite codice personalizzato in un blocco di codice della definizione del report oppure in un assembly personalizzato specificato dall'utente. La raccolta di parametri è di sola lettura e non include iteratori pubblici. Non è possibile utilizzare un costrutto For Each di Visual Basic per esaminare la raccolta parametro per parametro. È necessario conoscere il nome del parametro definito nella definizione del report per potervi fare riferimento nel codice personalizzato. È tuttavia possibile scorrere tutti i valori di un parametro multivalore.

Nella tabella seguente sono inclusi esempi di riferimenti alla raccolta predefinita Parameters da codice personalizzato:

Descrizione

Riferimento nell'espressione

Definizione del codice personalizzato

Passaggio di un'intera raccolta globale di parametri al codice personalizzato.

Questa funzione restituisce il valore di un parametro di report MyParameter specifico.

=Code.DisplayAParameterValue(Parameters)

Public Function DisplayAParameterValue(

ByVal parameters as Parameters) as Object

Return parameters("MyParameter").Value

End Function

Passaggio di un singolo parametro al codice personalizzato.

In questo esempio viene restituito il valore del parametro passato. Se il parametro è multivalore, la stringa restituita sarà costituita da una concatenazione di tutti i valori.

=Code.ShowParametersValues(Parameters!DayOfTheWeek)

Public Function ShowParameterValues(ByVal parameter as Parameter)
 as String
   Dim s as String 
   If parameter.IsMultiValue then
      s = "Multivalue: " 
      For i as integer = 0 to parameter.Count-1
         s = s + CStr(parameter.Value(i)) + " " 
      Next
   Else
      s = "Single value: " + CStr(parameter.Value)
   End If
   Return s
End Function

Icona freccia utilizzata con il collegamento Torna all'inizioTorna all'inizio

Inclusione di riferimenti a codice da assembly personalizzati

Per utilizzare assembly personalizzati in un report, è innanzitutto necessario creare l'assembly, renderlo disponibile in Progettazione report, aggiungere un riferimento all'assembly nel report, quindi utilizzare un'espressione nel report per fare riferimento ai metodi contenuti in tale assembly. Quando il report viene distribuito al server di report, è necessario distribuire anche l'assembly personalizzato al server di report.

Per informazioni su come creare un assembly personalizzato e renderlo disponibile per Reporting Services, vedere Utilizzo di assembly personalizzati con i report.

Per fare riferimento a codice personalizzato in un'espressione, è necessario chiamare il membro di una classe nell'assembly. La modalità di esecuzione di tale operazione dipende dal tipo di metodo, ovvero statico o basato su istanze. I metodi statici all'interno di un assembly personalizzato sono disponibili globalmente all'interno del report. È possibile accedere ai metodi statici nelle espressioni specificando lo spazio dei nomi, la classe e il nome del metodo. Nell'esempio seguente viene chiamato il metodo ToGBP, che consente di convertire il valore del campo StandardCost da dollari a sterline:

=CurrencyConversion.DollarCurrencyConversion.ToGBP(Fields!StandardCost.Value)

I metodi basati su istanze sono disponibili tramite un membro Code definito a livello globale. Per accedere ai metodi, fare riferimento al membro Code, aggiungendo l'istanza e il nome del metodo. Nell'esempio seguente viene chiamato il metodo di istanza ToEUR, che consente di convertire il valore del campo StandardCost da dollari a euro:

=Code.m_myDollarCoversion.ToEUR(Fields!StandardCost.Value)

Nota

In Progettazione report un assembly personalizzato viene caricato una volta e non viene scaricato finché non si chiude Visual Studio. Se si visualizza in anteprima un report, si apportano modifiche a un assembly personalizzato utilizzato nel report e quindi si visualizza di nuovo il report in anteprima, le modifiche non compariranno nella seconda anteprima. Per ricaricare l'assembly, chiudere e riaprire Visual Studio, quindi visualizzare l'anteprima del report.

Per ulteriori informazioni sull'accesso al codice, vedere Accesso agli assembly personalizzati tramite espressioni.

Icona freccia utilizzata con il collegamento Torna all'inizioTorna all'inizio

Passaggio di raccolte predefinite negli assembly personalizzati

Per passare raccolte predefinite, ad esempio la raccolta Globals o Parameters, in un assembly personalizzato per l'elaborazione, è necessario aggiungere nel progetto di codice un riferimento all'assembly che definisce le raccolte predefinite e accedere allo spazio dei nomi corretto. A seconda che sia in corso lo sviluppo di un assembly personalizzato per un report eseguito in un server di report (report di server) o un report eseguito in modalità locale in un'applicazione .NET (report locale), cambia l'assembly a cui è necessario fare riferimento. Per informazioni dettagliate, vedere di seguito.

  • Spazio dei nomi: Microsoft.ReportingServices.ReportProcessing.ReportObjectModel

  • Assembly (report locale): Microsoft.ReportingServices.ProcessingObjectModel.dll

  • Assembly (report di server): Microsoft.ReportViewer.ProcessingObjectModel.dll

Poiché il contenuto delle raccolte Fields e ReportItems può cambiare in modo dinamico durante la fase di esecuzione, non trattenerle tra le chiamate nell'assembly personalizzato, ad esempio in una variabile membro. Lo stesso consiglio si applica in genere a tutte le raccolte predefinite.