Share via


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

Sie können in einem Bericht eingebettetem, benutzerdefiniertem Code oder benutzerdefinierten Assemblys, die Sie erstellen und auf dem Computer speichern und auf dem Berichtsserver bereitstellen. 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 ihn zur Verwendung in mehreren Berichten 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 Gruppenvariablen an. Weitere Informationen finden Sie unter Verweise auf Berichts- und Gruppenvariablenauflistungen (Berichts-Generator und SSRS).

Berichts-Designer ist die bevorzugte Erstellungsumgebung für das Hinzufügen von benutzerdefiniertem Code zu einem Bericht. Berichts-Generator unterstützt das Verarbeiten von Berichten, die über gültige Ausdrücke verfügen, oder die Verweise auf benutzerdefinierte Assemblys auf einem Berichtsserver einschließen. Berichts-Generator bietet keine Möglichkeit, einen Verweis auf eine benutzerdefinierte Assembly hinzuzufügen.

HinweisHinweis

Während des Upgrades eines Berichtsservers erfordern Berichte, die von benutzerdefinierten Assemblys abhängig sind, unter Umständen weitere Schritte zum Abschließen des Upgrades. Weitere Informationen finden Sie unter Verwenden von Upgrade Advisor zur Vorbereitung auf Upgrades.

HinweisHinweis

Sie können Berichtsdefinitionen (RDL) in Berichts-Generator und im Berichts-Designer in SQL Server-Datentools 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 (SSRS) im Web auf microsoft.com.

In diesem Artikel

Arbeiten mit benutzerdefiniertem Code in Berichts-Generator

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

Einschließen von eingebettetem Code

Einschließen von Verweisen auf Parameter von Code

Einschließen von Verweisen auf Code von benutzerdefinierten Assemblys

Übergeben von integrierten Auflistungen in benutzerdefinierte Assemblys

Arbeiten mit benutzerdefiniertem Code in Berichts-Generator

In Berichts-Generator können Sie einen Bericht von einem Berichtsserver öffnen, der Verweise auf benutzerdefinierte Assemblys einschließt. Sie können z. B. Berichte bearbeiten, die mit Berichts-Designer in SQL Server-Datentools (SSDT) erstellt und bereitgestellt werden. Die benutzerdefinierten Assemblys müssen auf dem Berichtsserver bereitgestellt werden.

Sie können nicht die folgenden Schritte ausführen:

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

  2. Anzeigen eines Berichts in der Vorschau 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 aus der .NET Framework System.Math-Funktion und den System.Convert-Namespaces- und Visual Basic-Laufzeitbibliotheks-Funktionen. 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 Member 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. IntelliSense wird für die seltener verwendeten Funktionen im Codebereich des Dialogfelds Ausdruck nicht unterstützt.

Weitere Informationen finden Sie unter Member 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

Einschließen von eingebettetem Code

Auf der Registerkarte 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 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 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 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 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 Initialisierung finden Sie unter Integrierte globale Werte und Benutzerverweise (Berichts-Generator 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 Parameter von 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 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. Entspricht der Parameter einem mehrwertigen Parameter, ist die Rückgabezeichenfolge eine 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 den Member 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 von integrierten Auflistungen in benutzerdefinierte Assemblys

Um integrierte Auflistungen wie die Globals- oder Parameters-Auflistung in eine benutzerdefinierte Assembly zur Verarbeitung zu übergeben, fügen Sie einen Assemblyverweis im Codeprojekt der Assembly hinzu, die die integrierten Auflistungen definiert, und greifen Sie auf den korrekten Namespace zu. Abhängig davon, ob Sie die benutzerdefinierte Assembly für einen auf einem Berichtsserver ausgeführten Bericht (Serverbericht) oder einen in einer .NET-Anwendung lokal ausgeführten Bericht (lokaler Bericht) entwickeln, unterscheidet sich jeweils die zu referenzierende Assembly. Weitere Details siehe unten.

  • Namespace: Microsoft.ReportingServices.ReportProcessing.ReportObjectModel

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

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

Da sich der Inhalt der Fields- und ReportItems-Auflistung zur Laufzeit dynamisch ändern kann, sollten Sie über die Aufrufe in der benutzerdefinierten Assembly hinaus nicht daran festhalten (z. B. in einer Elementvariablen). Die gleiche Empfehlung gilt im Allgemeinen für alle integrierten Auflistungen.

Siehe auch

Aufgaben

Hinzufügen von Code zu einem Bericht (SSRS)

Hinzufügen eines Assemblyverweises zu einem Bericht (SSRS)

Verweis

Beispiele für Ausdrücke (Berichts-Generator und SSRS)

Andere Ressourcen

Verwenden benutzerdefinierter Assemblys mit Berichten

Reporting Services-Lernprogramme (SSRS)

Berichtsbeispiele (Berichts-Generator und SSRS)