Freigeben über


Verwenden von benutzerdefinierten Codeverweisen in Ausdrücken (Reporting Services)

Aktualisiert: 14. April 2006

Sie können einem Bericht benutzerdefinierte Funktionen hinzufügen oder Verweise auf Funktionen in externen Assemblys hinzufügen. Vom Berichtsserver werden automatisch Verweise für die Assemblys Microsoft.VisualBasic, System.Convert und System.Math hinzugefügt. Auf zusätzliche Assemblys kann mithilfe des Dialogfeldes Berichtseigenschaften oder des CodeModules-Elements in der Berichtsdefinition verwiesen werden.

Das Dialogfeld Berichtseigenschaften kann auch zum Definieren von neuen benutzerdefinierten Funktionen verwendet werden. Verwenden Sie zum Definieren von benutzerdefinierten Funktionen in der Berichtsdefinition das Code-Element. An Funktionen können jedoch keine Sätze von Datenwerten übergeben werden (insbesondere werden keine benutzerdefinierten Aggregate unterstützt).

Sie können benutzerdefinierten Code schreiben, der in Ausdrücken in einem Bericht verwendet wird. Dazu stehen Ihnen zwei Möglichkeiten zur Verfügung: das Einbetten von Code in einem Bericht oder das Verweisen auf Methoden in einer benutzerdefinierten Assembly. Verwenden Sie eingebetteten Code für komplexe Funktionen oder für Funktionen, die mehrfach in demselben Bericht verwendet werden. Verwenden Sie Codeassemblys, um Code an einer einzelnen Stelle zu verwalten und in mehreren Berichten gemeinsam zu verwenden.

Eingebetteter Code

Wenn Sie in einem Bericht Code verwenden möchten, fügen Sie dem Bericht einen Codeblock hinzu. Der Codeblock kann mehrere Methoden enthalten. Methoden in eingebettetem Code müssen in Microsoft Visual Basic geschrieben sein und instanzbasiert sein.

Weitere Informationen zum Hinzufügen von Code zu einem Bericht finden Sie unter Vorgehensweise: Hinzufügen von Code zu einem Bericht (Berichts-Designer).

Die Methoden im eingebetteten Code stehen über ein global definiertes Code-Element zur Verfügung. Zum Zugriff auf die Methoden verweisen Sie auf das Code-Element und den Methodennamen. Im folgenden Beispiel wird die ToUSD-Methode aufgerufen, die den Wert im StandardCost-Feld in einen Dollarwert konvertiert:

=Code.ToUSD(Fields!StandardCost.Value)

Wenn Sie in Ihrem benutzerdefinierten Code auf globale Auflistungen verweisen möchten, nehmen Sie in das integrierte Report-Objekt einen Verweis auf.

=Report.Parameters!Param1

In den folgenden Beispielen wird veranschaulicht, wie einige benutzerdefinierte Konstanten und Variablen definiert werden können.

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

Obwohl benutzerdefinierte Konstanten nicht in der Ansicht der Ausdrucks-Editor-Konstanten angezeigt werden (in der nur integrierte Konstanten angezeigt werden), können Sie Verweise darauf über einen beliebigen Ausdruck hinzufügen (wie in den folgenden Beispielen veranschaulicht). In einem Ausdruck wird eine benutzerdefinierte Konstante als Variant behandelt.

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

In den folgenden Beispielen ist sowohl der Codeverweis als auch die Codeimplementierung der Funktion FixSpelling enthalten, mit der alle Vorkommen des Textes Bike für den Wert des SubCategory-Feldes durch Bicycle ersetzt werden.

=Code.FixSpelling(Fields!SubCategory.Value)

Mit dem folgenden Code wird eine Implementierung der FixSpelling-Methode veranschaulicht, wenn er in eine Berichtsdefinition eingebettet ist. Wenn dieser benutzerdefinierte Code zum ersten Mal ausgeführt wird, wird der ersetzte Text in einem Meldungsfeld angezeigt. In diesem Beispiel wird ein Verweis auf die StringBuilder-Klasse und die System.Windows.Forms.MessageBox-Klasse von Microsoft .NET Framework dargestellt. Sie müssen einen Verweis auf Ihre Berichtseigenschaften für System.Windows.Forms hinzufügen. Weitere Informationen finden Sie unter Vorgehensweise: Hinzufügen von Code zu einem Bericht (Berichts-Designer) und Vorgehensweise: Hinzufügen eines Assemblyverweises zu einem Bericht (Berichts-Designer).

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

Weitere Informationen zu globalen Objektauflistungen und zur Initialisierung finden Sie unter Verwenden globaler Auflistungen in Ausdrücken und Initializing Custom Assembly Objects.

Benutzerdefinierte Assemblys

Wenn Sie in einem Bericht benutzerdefinierte Assemblys verwenden möchten, müssen Sie zunächst die Assembly erstellen und für den Berichts-Designer zur Verfügung stellen. Anschließend fügen Sie im Bericht einen Verweis auf die Assembly hinzu und verwenden dann im Bericht einen Ausdruck, der auf die Methoden in dieser Assembly verweist. Beim Bereitstellen des Berichts auf dem Berichtsserver müssen Sie dort auch die benutzerdefinierte Assembly bereitstellen.

Informationen dazu, wie eine benutzerdefinierte Assembly erstellt und Reporting Services zur Verfügung gestellt wird, finden Sie unter Using Custom Assemblies with Reports. Anweisungen zum Hinzufügen eines Verweises zu einem Bericht finden Sie unter Vorgehensweise: Hinzufügen eines Assemblyverweises zu einem Bericht (Berichts-Designer).

Wenn Sie in einem Ausdruck auf benutzerdefinierten Code verweisen möchten, müssen Sie das Element einer Klasse in der Assembly aufrufen. Die Vorgehensweise hängt davon ab, ob es sich um eine statische oder um eine instanzbasierte Methode handelt. Statische Methoden in einer benutzerdefinierten Assembly stehen global im Bericht zur Verfügung. Auf statische Methoden können Sie in Ausdrücken durch Angeben des Namespace, der Klasse und des Methodennamens zugreifen. Im folgenden Beispiel wird die ToGBP-Methode aufgerufen, die den Wert des StandardCost-Feldes von Dollar in Pfund Sterling konvertiert:

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

Instanzbasierte Methoden sind über ein global definiertes Code-Element verfügbar. Zum Zugriff auf die Methoden verweisen Sie auf das Code-Element und anschließend auf die Instanz und den Methodennamen. Im folgenden Beispiel wird die ToEUR-Instanzmethode aufgerufen, die den Wert des StandardCost-Feldes von Dollar in Euro konvertiert:

=Code.m_myDollarCoversion.ToEUR(Fields!StandardCost.Value)
ms155798.note(de-de,SQL.90).gifHinweis:
Im Berichts-Designer wird eine benutzerdefinierte Assembly einmal geladen und erst beim Schließen von Visual Studio entladen. Wenn Sie einen Bericht in der Vorschau anzeigen, dann Änderungen an einer im Bericht verwendeten benutzerdefinierten Assembly vornehmen und anschließend die Vorschau des Berichts erneut anzeigen, werden diese Änderungen in der zweiten Vorschau nicht angezeigt. Zum erneuten Laden der Assembly müssen Sie Visual Studio schließen und neu öffnen und dann die Vorschau des Berichts anzeigen.

Siehe auch

Andere Ressourcen

Verwenden von Ausdrücken in Reporting Services

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

14. April 2006

Neuer Inhalt:
  • Beispiele wurden hinzugefügt.

05. Dezember 2005

Neuer Inhalt:
  • Verweis auf Report-Objekt für globale Auflistungen wurde hinzugefügt.