Condividi tramite


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

Data aggiornamento: 14 aprile 2006

È possibile aggiungere a un report funzioni personalizzate oppure aggiungere riferimenti a funzioni presenti in assembly esterni. Tramite il server di report, vengono aggiunti automaticamente i riferimenti per gli assembly Microsoft.VisualBasic, System.Convert e System.Math. È possibile fare riferimento a ulteriori assembly utilizzando la finestra di dialogo Proprietà report o l'elemento CodeModules nella definizione del report.

La finestra di dialogo Proprietà report consente inoltre di definire nuove funzioni personalizzate nella definizione di report utilizzando l'elemento di codice. Non è tuttavia possibile passare alle funzioni set di valori di dati. In particolare, non sono supportate le aggregazioni personalizzate.

È possibile scrivere codice personalizzato utilizzato nelle espressioni in tutto il report in due modi, ovvero incorporando il codice in un report o facendo riferimento ai metodi all'interno di un assembly personalizzato. Utilizzare codice incorporato per le funzioni complesse o le funzioni che ricorrono più volte in un unico report. Utilizzare gli assembly di codice per mantenere il codice in un'unica posizione e condividerlo in più report.

Codice incorporato

Per utilizzare codice in un report, è necessario aggiungere un blocco di codice al report. Il blocco di codice può includere più metodi. È necessario che i metodi del codice incorporato siano scritti in Microsoft Visual Basic e siano basati su istanze.

Per ulteriori informazioni sull'aggiunta di codice a un report, vedere Procedura: Aggiunta di codice a un report (Progettazione report).

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. Nell'esempio seguente viene chiamato il metodo ToUSD, che consente di convertire il valore del campo StandardCost in un valore in dollari:

=Code.ToUSD(Fields!StandardCost.Value)

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

=Report.Parameters!Param1

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 costanti personalizzate non siano presenti nella visualizzazione delle costanti dell'editor di espressioni, in cui sono presenti solo le costanti predefinite, è possibile aggiungere un riferimento a esse 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 consente di utilizzare Bicycle per sostituire tutte le occorrenze del testo Bike per il valore del campo SubCategory.

=Code.FixSpelling(Fields!SubCategory.Value)

Il codice seguente, quando è incorporato in una definizione del report, mostra un'implementazione del metodo FixSpelling. Alla prima esecuzione di questo codice personalizzato, viene visualizzata una finestra di messaggio in cui è riportato il testo sostituito. In questo esempio viene illustrato come fare riferimento alla classe Microsoft .NET Framework StringBuilder e alla classe System.Windows.Forms.MessageBox. È necessario aggiungere un riferimento alle proprietà del report per System.Windows.Forms. Per ulteriori informazioni, vedere Procedura: Aggiunta di codice a un report (Progettazione report) e Procedura: Aggiunta di un riferimento a un assembly in un report (Progettazione report).

Dim firstTime As Boolean = True 
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")
      If firstTime Then
        System.Windows.Forms.MessageBox.Show(strBuilder.ToString())
'       or MsgBox(strBuilder.ToString())
        firstTime = False
      End If
      Return strBuilder.ToString()
      Else : Return s
   End If
End Function

Per ulteriori informazioni sugli insiemi di oggetti globali e l'inizializzazione di tali oggetti, vedere Utilizzo di insiemi Global nelle espressioni e Initializing Custom Assembly Objects.

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 sulla creazione di un assembly personalizzato e renderlo disponibile per Reporting Services, vedere Using Custom Assemblies with Reports. Per informazioni sull'aggiunta di un riferimento a un report, vedere Procedura: Aggiunta di un riferimento a un assembly in un report (Progettazione 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 e quindi visualizzare l'anteprima del report.

Vedere anche

Altre risorse

Espressioni di Reporting Services

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

14 aprile 2006

Nuovo contenuto:
  • Aggiunta di esempi.

5 dicembre 2005

Nuovo contenuto:
  • Aggiunta di un riferimento all'oggetto Report per gli insiemi globali.