Benutzerdefinierter Code und Assemblyverweise in Ausdrücken im Berichts-Designer (SSRS)

Sie können in einen Bericht eingebettetem, benutzerdefiniertem Code oder benutzerdefinierten Assemblys, die Sie erstellen, auf dem Computer speichern und für den 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 für mehrere Berichte freizugeben. 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.

SicherheitshinweisSicherheitshinweis

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 Gruppenvariable an. Weitere Informationen finden Sie unter Verwenden von Verweisen auf Berichts- und Gruppenvariablenauflistungen (Report Builder 3.0 und SSRS).

Der Berichts-Designer ist die bevorzugte Erstellungsumgebung zum Hinzufügen von benutzerdefiniertem Code zu einem Bericht. Report Builder 3.0 unterstützt das Verarbeiten von Berichten, die über gültige Ausdrücke verfügen oder Verweise auf benutzerdefinierte Assemblys auf einem Berichtsserver umfassen. Der Berichts-Generator bietet keine Möglichkeit, einer benutzerdefinierten Assembly einen Verweis hinzuzufügen.

HinweisHinweis

Beachten Sie, dass bei Berichten, die von benutzerdefinierten Assemblys abhängen, während des Upgrades eines Berichtsservers u. U. zusätzliche Schritte zum Abschließen des Upgrades erforderlich sind. Weitere Informationen finden Sie unter Verwenden des Updateratgebers zur Vorbereitung auf Aktualisierungen.

HinweisHinweis

Sie können Berichtsdefinitionen (RDL) in Berichts-Generator 3.0 und im Berichts-Designer in Business Intelligence Development Studio erstellen und ändern. Jede Erstellungsumgebung bietet verschiedene Methoden zum Erstellen, Öffnen und Speichern von Berichten und verwandten Elementen. Weitere Informationen finden Sie unter Entwerfen von Berichten in Berichts-Designer und Berichts-Generator 3.0 (SSRS) im Web auf microsoft.com.

In diesem Artikel

Arbeiten mit benutzerdefiniertem Code in Report Builder 3.0

Einschließen von Verweisen auf häufig verwendete Funktionen

Einschließen von Verweisen auf weniger häufig verwendete Funktionen

Einschließen von Verweisen auf externe Assemblys

Integrieren von eingebettetem Code

Einschließen von Verweisen auf Codeparameter

Einschließen von Verweisen auf Code von benutzerdefinierten Assemblys

Arbeiten mit benutzerdefiniertem Code in Report Builder 3.0

Mit dem Berichts-Generator können Sie einen Bericht über einen Berichtsserver öffnen, der Verweise auf benutzerdefinierte Assemblys umfasst. Sie können z. B. Berichte bearbeiten, die mithilfe des Berichts-Designers in Business Intelligence Development Studio erstellt und bereitgestellt werden. Die benutzerdefinierten Assemblys müssen auf dem Berichtsserver bereitgestellt werden.

Folgendes ist nicht möglich:

  1. Hinzufügen von Verweisen oder Klassenelementinstanzen zu einem Bericht

  2. Anzeigen der Vorschau eines Berichts mit Verweisen auf benutzerdefinierte Assemblys im lokalen Modus

Pfeilsymbol, dass mit dem Link 'Zurück zum Anfang' verwendet wirdZurück zum Anfang

Einschließen von Verweisen auf häufig verwendete Funktionen

Verwenden Sie das Dialogfeld Ausdruck, um eine kategorisierte Liste allgemeiner, in Reporting Services integrierter Funktionen anzuzeigen. Wenn Sie Allgemeine Funktionen erweitern und auf eine Kategorie klicken, wird im Bereich Element die Liste der Funktionen angezeigt, die Sie in einen Ausdruck einschließen. Die allgemeinen Funktionen umfassen Klassen von den .NET Framework System..::..Math- und System..::..Convert-Namespaces und Visual Basic-Laufzeitbibliotheksfuntionen. Die gängigsten Funktionen sind im Dialogfeld Ausdruck nach Kategorie sortiert aufgeführt: Text, Datum und Uhrzeit, mathematische Funktionen, Qualitätskontrolle, Programmfluss, Aggregat, Finanzen, Konvertierung und Sonstiges. Weniger häufig verwendete Funktionen werden nicht in der Liste angezeigt, können jedoch auch in einem Ausdruck verwendet werden.

Um eine integrierte Funktion zu verwenden, doppelklicken Sie auf den Funktionsnamen im Bereich Element. Im Beschreibungsbereich wird eine Beschreibung der Funktion angezeigt und im Beispielbereich ein Beispiel für den Funktionsaufruf. Wenn Sie im Codebereich den Funktionsnamen und anschließend eine linke Klammer (() eingeben, zeigt die IntelliSense-Hilfe jede gültige Syntax für den Funktionsaufruf an. Zur Berechnung des Höchstwerts für ein Feld mit dem Namen Quantity in einer Tabelle fügen Sie dem Codebereich beispielsweise den einfachen Ausdruck =Max( hinzu und zeigen mithilfe der Smarttags alle gültigen Syntaxmöglichkeiten für den Funktionsaufruf an. Um dieses Beispiel zu vervollständigen, geben Sie =Max(Fields!Quantity.Value) ein. 

Weitere Informationen zu den einzelnen Funktionen finden Sie unter System..::..Math, System..::..Convert und Elemente der Visual Basic-Laufzeitbibliothek bei MSDN.

Pfeilsymbol, dass mit dem Link 'Zurück zum Anfang' verwendet wirdZurück zum Anfang

Einschließen von Verweisen auf weniger häufig verwendete Funktionen

Um einen Verweis auf andere, weniger häufig verwendete CLR-Namespaces (Common Language Runtime) einzuschließen, verwenden Sie einen vollqualifizierten Verweis, z. B. System.Text..::..StringBuilder. Diese weniger häufig verwendeten Funktionen werden im Codebereich des Dialogfelds Ausdruck von IntelliSense nicht unterstützt.

Weitere Informationen finden Sie unter Elemente der Visual Basic-Laufzeitbibliothek bei MSDN.

Einschließen von Verweisen auf externe Assemblys

Sie müssen die Assembly identifizieren, damit der Berichtsprozessor einen Verweis auf eine Klasse in eine externe Assembly einschließt. Geben Sie den vollqualifizierten Namen der Assembly, die dem Bericht hinzugefügt werden soll, auf der Seite Verweise des Dialogfelds Berichtseigenschaften an. Im Ausdruck müssen Sie den vollqualifizierten Namen für die Klasse in der Assembly verwenden. Klassen in einer externen Assembly werden nicht im Dialogfeld Ausdruck angezeigt. Geben Sie für diese Klassen den entsprechenden Namen an. Ein vollqualifizierter Name umfasst den Namespace, den Klassennamen und den Elementnamen.

Pfeilsymbol, dass mit dem Link 'Zurück zum Anfang' verwendet wirdZurück zum Anfang

Integrieren von eingebettetem Code

Auf der Registerkarte für Codes 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 Microsoft Visual Basic geschrieben werden und instanzbasiert sein. Der Berichtsprozessor fügt Verweise für die System.Convert- und System.Math-Namespaces automatisch hinzu. Fügen Sie zusätzliche Assemblyverweise auf der Seite Verweise des Dialogfelds Berichtseigenschaften hinzu. Weitere Informationen finden Sie unter Vorgehensweise: Hinzufügen eines Assemblyverweises zu einem Bericht (SSRS).

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-Felds 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 Texts "Bike" im Feld SubCategory 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 Framework StringBuilder-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 von integrierten globalen Werten und Benutzerverweisen (Report Builder 3.0 und SSRS) und Initialisieren von Objekten benutzerdefinierter Assemblys.

Pfeilsymbol, dass mit dem Link 'Zurück zum Anfang' verwendet wirdZurück zum Anfang

Einschließen von Verweisen auf Codeparameter

Sie können auf die globale Parameterauflistung mittels benutzerdefiniertem 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 Basic For 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.

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

Pfeilsymbol, dass mit dem Link 'Zurück zum Anfang' verwendet wirdZurück zum Anfang

Einschließen von Verweisen auf Code von benutzerdefinierten 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.

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-Felds 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-Felds von Dollar in Euro konvertiert:

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

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.

Pfeilsymbol, dass mit dem Link 'Zurück zum Anfang' verwendet wirdZurück zum Anfang

Übergeben integrierter Auflistungen an benutzerdefinierte Assemblys

Wenn Sie integrierte Auflistungen wie die Globals- oder Parameters-Auflistung zur Verarbeitung an eine benutzerdefinierte Assembly übergeben möchten, müssen Sie dem Codeprojekt einen Assemblyverweis auf die Assembly hinzufügen, die die integrierten Auflistungen definiert, und auf den richtigen Namespace zugreifen. Je nachdem, ob Sie eine benutzerdefinierte Assembly für einen Bericht entwickeln, der auf einem Berichtsserver (Serverbericht) ausgeführt wird, oder für einen Bericht, der lokal in einer .NET-Anwendung (lokaler Bericht) ausgeführt wird, müssen Sie auf eine andere Assembly verweisen. Einzelheiten finden Sie weiter unten.

  • Namespace: Microsoft.ReportingServices.ReportProcessing.ReportObjectModel

  • Assembly (lokaler Bericht): Microsoft.ReportingServices.ProcessingObjectModel.dll

  • Assembly (Serverbericht): Microsoft.ReportViewer.ProcessingObjectModel.dll

Da sich der Inhalt der Auflistungen Fields und ReportItems zur Laufzeit dynamisch ändern kann, sollten Sie diese für Aufrufe der benutzerdefinierten Assembly nicht beibehalten (beispielsweise in einer Membervariablen). Diese Empfehlung gilt im Allgemeinen für alle integrierten Sammlungen.