Condividi tramite


Utilizzo di riferimenti a codice personalizzato nelle espressioni (Reporting Services)

È possibile aggiungere riferimenti a codice personalizzato incorporato in un report o ad assembly personalizzati creati e distribuiti nel client di report e 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 personalizzati per mantenere il codice in un'unica posizione e condividerlo in più report.

Per i calcoli che dipendono dal tempo, valutati una volta sola 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 nelle espressioni (Reporting Services).

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. In particolare, non sono supportate le aggregazioni personalizzate.

Codice incorporato

Per aggiungere codice incorporato a un report, utilizzare la pagina 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 MicrosoftVisual Basic e siano basati su istanze. Tramite il componente Elaborazione 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: Aggiunta di codice a un report (Reporting Services) e Procedura: Aggiunta di un riferimento a un assembly in un report (Reporting Services).

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 sulla creazione di raccolte di oggetti incorporati e sulla relativa inizializzazione, vedere Utilizzo di raccolte globali nelle espressioni e Inizializzazione di oggetti assembly personalizzati.

Esempi di aggiunta di riferimenti a parametri da codice personalizzato

È 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. Per ulteriori informazioni, vedere Utilizzo di riferimenti a codice personalizzato nelle espressioni (Reporting Services).

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

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 e 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 informazioni sull'aggiunta di un riferimento a un report, vedere Procedura: Aggiunta di un riferimento a un assembly in un report (Reporting Services).

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.