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

Sie können in einem Bericht eingebettetem, benutzerdefiniertem Code oder benutzerdefinierten Assemblys, die Sie erstellen und auf dem Berichtsclient und dem Berichtsserver bereitstellen, Verweise hinzufügen. Verwenden Sie eingebetteten Code für benutzerdefinierte Konstanten, komplexe Funktionen oder für Funktionen, die mehrfach in demselben Bericht verwendet werden. Verwenden Sie benutzerdefinierte Codeassemblys, um Code an einer einzelnen Stelle zu verwalten und in mehreren Berichten gemeinsam zu verwenden.

Für zeitempfindliche Berechnungen, die einmal zur Laufzeit ausgewertet werden und während der Berichtsverarbeitung denselben Wert behalten sollen, bietet sich eventuell die Verwendung einer Berichts- oder Gruppenvariablen an. Weitere Informationen finden Sie unter Verwenden von Verweisen auf Berichts- und Gruppenvariablenauflistungen in Ausdrücken (Reporting Services).

In benutzerdefiniertem Code können neue benutzerdefinierte Konstanten, Variablen, Funktionen oder Unterroutinen eingeschlossen werden. Sie können schreibgeschützte Verweise in integrierte Auflistungen, wie die Parameter-Auflistung, einbeziehen. An benutzerdefinierte Funktionen können jedoch keine Sätze von Berichtsdatenwerten übergeben werden, insbesondere werden keine benutzerdefinierten Aggregate unterstützt.

Eingebetteter Code

Auf der Seite Code des Dialogfelds Berichtseigenschaften können Sie einem Bericht eingebetteten Code hinzufügen. Der erstellte Codeblock kann mehrere Methoden enthalten. Methoden in eingebettetem Code müssen in MicrosoftVisual Basic geschrieben und instanzbasiert sein. Vom Berichtsprozessor werden automatisch Verweise für den System.Convert-Namespace und den System.Math-Namespace hinzugefügt. Fügen Sie zusätzliche Assemblyverweise auf der Seite Verweise des Dialogfelds Berichtseigenschaften hinzu. Weitere Informationen finden Sie unter Vorgehensweise: Hinzufügen von Code zu einem Bericht (Reporting Services) und Vorgehensweise: Hinzufügen eines Assemblyverweises zu einem Bericht (Reporting Services).

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 Methode ToUSD aufgerufen, die den Wert des StandardCost-Feldes in einen Dollarwert konvertiert:

=Code.ToUSD(Fields!StandardCost.Value)

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

=Report.Parameters!Param1.Value

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 Konstanten-Kategorie des Dialogfelds Ausdruck 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 sind sowohl der Codeverweis als auch die Codeimplementierung der Funktion FixSpelling enthalten, mit der der Text "Bicycle" für alle Vorkommen des Textes "Bike" im SubCategory-Feld ersetzt wird.

=Code.FixSpelling(Fields!SubCategory.Value)

Mit dem folgenden Code wird eine Implementierung der FixSpelling-Methode veranschaulicht, wenn er in den Codeblock einer Berichtsdefinition eingebettet ist. In diesem Beispiel wird gezeigt, wie ein vollqualifizierter Verweis auf die Microsoft.NET FrameworkStringBuilder-Klasse verwendet wird.

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

Weitere Informationen zu integrierten Objektauflistungen und zur Initialisierung finden Sie unter Verwenden globaler Auflistungen in Ausdrücken und Initialisieren von Objekten benutzerdefinierter Assemblys.

Beispiele für das Verweisen auf Parameter in benutzerdefiniertem Code

Sie können auf die globale Parameters-Auflistung per benutzerdefinierten Code über einen Codeblock der Berichtsdefinition oder über eine von Ihnen bereitgestellte benutzerdefinierte Assembly verweisen. Die Parameters-Auflistung ist schreibgeschützt und verfügt über keine öffentlichen Iteratoren. Es ist nicht möglich, die Auflistung mit einer Visual BasicFor Each-Konstruktion zu durchlaufen. Sie benötigen den in der Berichtsdefinition definierten Namen des Parameters, um in Ihrem Code auf ihn verweisen zu können. Allerdings ist es möglich, durch alle Werte eines mehrwertigen Parameters zu iterieren. Weitere Informationen finden Sie unter Verwenden von benutzerdefinierten Codeverweisen in Ausdrücken (Reporting Services).

Die folgende Tabelle enthält Beispiele für Verweise auf die integrierte Parameters-Auflistung von benutzerdefiniertem Code:

Beschreibung

Verweis in Ausdruck

Benutzerdefinierte Codedefinition

Übergeben einer gesamten globalen Parameters-Auflistung an benutzerdefinierten Code.

Diese Funktion gibt den Wert eines bestimmten Berichtsparameters MyParameter zurück.

=Code.DisplayAParameterValue(Parameters)

Public Function DisplayAParameterValue(

ByVal parameters as Parameters) as Object

Return parameters("MyParameter").Value

End Function

Übergeben eines einzelnen Parameters an benutzerdefinierten Code.

In diesem Beispiel wird der Wert des übergebenen Parameters zurückgegeben. Wenn es sich bei dem Parameter um einen mehrwertigen Parameter handelt, besteht die zurückgegebene Zeichenfolge aus einer Verkettung aller Werte.

=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

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 Verwenden benutzerdefinierter Assemblys mit Berichten. Anweisungen zum Hinzufügen eines Verweises zu einem Bericht finden Sie unter Vorgehensweise: Hinzufügen eines Assemblyverweises zu einem Bericht (Reporting Services).

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)

Hinweis

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.

Weitere Informationen zum Zugreifen auf Ihren Code finden Sie unter Zugriff auf benutzerdefinierte Assemblys über Ausdrücke.

Siehe auch

Verweis

Beispiele für Ausdrücke (Reporting Services)

Konzepte

Arbeiten mit Berichtsausdrücken