Verwendung von benutzerdefinierten Assemblys oder eingebetteten Code in Reporting Services

SQL Server Support Voice-Kolumne

Verwendung von benutzerdefinierten Assemblys oder eingebetteten Code in Reporting Services

Diese Spalte an Ihre Bedürfnisse anpassen möchten Laden Sie Ihre Ideen zu Themen, die Sie interessieren und sollen Probleme in Zukunft Knowledge Base-Artikeln und Support Voice Spalten angesprochen. Sie können Ihre Ideen und ihr Feedback Bitten dafür Formular senden. Außerdem wird ein Link zu diesem Formular am Ende dieser Kolumne.
Willkommen zurück! Ich bin Sandy Yakob mit Microsoft SQL Server Content-Team. Ich bin gastgeberin für SQL Server Support Voice-Spalten. Eine kurze Notiz über mich: habe Microsoft 14 Jahren. Den letzten drei Jahren arbeite ich mit SQL Server Content-Team.


Dieses Monats erhalten John Sirmon wie eine benutzerdefinierten Assembly oder eingebetteten Code in SQL Server 2000 Reporting Services und SQL Server 2005 Reporting Services Sie. Dieser Artikel soll die grundlegenden Schritte für Sie und mit einer benutzerdefinierten Assembly in Reporting Services geben. John ist Support Escalation Engineer SQL Developer Support-Team bei Microsoft und arbeitet Microsoft seit März 2001. Er arbeitet seit zehn Jahren mit SQL Server und hat umfassende Erfahrungen mit Microsoft Visual Studio. John hat einen B. S. Abschluss in Betriebswirtschaft von der Citadel. Er hat auch eine Zertifizierung für Microsoft Certified Solution Developer (MCSD) und Microsoft Certified Datenbank Administrator (MCDBA)-Zertifizierung. Ich hoffe, genießen Sie die Spalte zu ermitteln.

Erstellen Sie eine benutzerdefinierte assembly

Um eine Assembly zu erstellen, gehen Sie folgendermaßen vor:
  1. Erstellen einer Visual Studio-Klassenbibliothek. Im Menü Datei auf neuzeigen Sie Projektzeigen Sie und klicken Sie Klassenbibliothek.
  2. Geben Sie den Namen und den Speicherort. Beispielsweise verwendet SimpleClassLibrary und C:\Documents und Settings\user1\My Dateien\Visual Studio 2005\projects.
  3. Öffnen Sie die Klassendatei (in meinem Fall Class1.vb), und erstellen Sie die Funktionen, die in Reporting Services verwenden möchten. In meinem Fall erstellt nur eine einfache freigegebene Funktion.

    Hinweis Dies ist eine freigegebene Funktion (static in C#) haben wir nicht anhand eines instanziierten Objekts zuzugreifen. Denken Sie daran, wie dies wirkt sich auf wie wir unsere Assembly später in diesem Artikel verweisen.
    Public Class Class1
    Public Shared Function DoSomething() As String
    Return "string data returned from custom assembly"
    End Function

    End Class

  4. Nach dem Hinzufügen des Codes klicken Sie im Menü Erstellen auf Build SimpleClassLibrary . Dadurch erstellt die Assembly oder verwalteten DLL im jeweiligen Bin-Ordner. In meinem Beispiel erstellt diesen Schritt die Assembly SimpleClassLibrary.dll im Ordner "Eigene Dateien\Visual Studio 2005\Projects\ SimpleClassLibrary\bin\Debug".

Kopieren der benutzerdefinierten Assembly SQL Reporting Services-Ordner

Machen Sie die Assembly-Berichts-Designer und Berichtsserver in Reporting Services verfügbar. Dazu müssen Sie die DLL-Datei im Berichts-Designer-Ordner und den Report Server-Ordner kopieren.

Hinweis Der Pfad möglicherweise anders, je nach dem Installationspfad.
  • Für Reporting Services 2005 kopiert die DLL auf die folgenden Ordner:
    • Programm c:\Programme\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies
    • Programmierung c:\Programme\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin bereit
  • Kopieren Sie für Reporting Services 2000 die DLL in die folgenden Ordner:
    • Programm c:\Programme\Microsoft SQL Server\80\Tools\Report Designer
    • Programmierung c:\Programme\Microsoft SQL Server\MSSQL\Reporting Services\ReportServer\bin bereit
Hinweis Haben Sie jedes Mal führen Sie den Code ändern, kann es etwas mühsam sein. Viele Entwickler erstellen Batchdateien für diese Aufgabe. Hier ist eine einfache Batchdatei, die Sie verwenden können.
@ECHO OFFREM   Name: SRSDeploy.bat
REM
REM This batch files copies my custom assembly to my Reporting Services folders.
REM Run this from the directory where the customer assembly was compiled.
REM Be sure to close any applications that have your custom assembly open.
REM
REM This is the SQL Server 2005 version:
copy SimpleClassLibrary.dll "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies"
copy SimpleClassLibrary.dll "C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin"

REM This is the SQL Server 2000 version:REM copy SimpleClassLibrary.dll "C:\Program Files\Microsoft SQL Server\80\Tools\Report Designer"
REM copy SimpleClassLibrary.dll "C:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\ReportServer\bin"

Ich behandeln diese Aufgabe normalerweise benutzerdefinierte Postbuildereignis in meinem Projekt erstellen. Dazu rufen Sie die Eigenschaften des Projekts. Anschließend klicken Sie auf die Registerkarte Kompilieren und dann auf Build Events. Daraufhin wird das Dialogfeld Buildereignisse . Befehlszeile für Postbuildereigniswählen und dann Folgendes ein:
Kopieren Sie "$(targetpath)"""C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies\"
Kopieren Sie "$(targetpath)"""C:\Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin\"
Dabei wird ein Postbuildereignis Makro an den Speicherort der Assembly verwendet. Weitere Informationen zum Erstellen von Postbuildereignisse finden Sie auf der folgenden Microsoft Developer Network (MSDN)-Website:

Hinzufügen eines Verweises auf die benutzerdefinierte Assembly in Reporting Services

Um eine benutzerdefinierte Assembly hinzuzufügen, öffnen Sie den Reporting Services-Bericht im Berichts-Designer. Gehen Sie hierzu folgendermaßen vor:
  1. Öffnen Sie den Bericht, der die benutzerdefinierte Assembly verweisen.
  2. Klicken Sie im Menü Bericht auf Eigenschaften.
  3. Klicken Sie im Dialogfeld Eigenschaften auf der Registerkarte Verweise .
  4. Klicken Sie unter Verweiseauf mit Auslassungspunkten, die neben der Spaltenüberschrift AssemblyName .



    Hinweis Der Klassen -Abschnitt ist nur für instanzbasierte Mitglieder. Es ist nicht für statische Member. Statisch (auch bezeichnet als "freigegeben" einige Reporting Services-Dokumentation) bedeutet, dass der Member für jede Instanz der Klasse und jede Instanz den gleichen Speicherort verwendet. Statische Member werden mit dem Schlüsselwort shared in Visual Basic und das static-Schlüsselwort in C# deklariert. Dies kann verwirrend sein. Das heißt, wenn die benutzerdefinierte Assembly Instanzmember enthält, die Sie zugreifen müssen, müssen Sie den Klassennamen und den Instanznamen im Abschnitt Klassen angeben. Da die Methode, die ich von Reporting Services Aufrufe mit dem shared-Schlüsselwort in Visual Basic als static definiert wurde, wird im Abschnitt Informationsquellen anstelle von der Klassenbereich verwendet.
  5. Klicken Sie im Dialogfeld Verweise hinzufügen auf Durchsuchen. (Klicken Sie auf die Registerkarte Durchsuchen , in SQL Server 2005.)
  6. Suchen Sie und klicken Sie dann auf die benutzerdefinierte Assembly. Klicken Sie auf Öffnen. (In SQL Server 2005 klicken Sie auf Add statt Öffnen.)
  7. Klicken Sie im Dialogfeld Verweise hinzufügen auf OK.
  8. Klicken Sie im Dialogfeld Eigenschaften auf OK.
Wir können nun die benutzerdefinierte Assembly in Reporting Services verwenden.
  1. Bericht (RDL-Datei) im Berichts-Designer zu öffnen.
  2. Fügen Sie ein Textfeld zum veranschaulichen die benutzerdefinierte Assembly in Reporting Services verwenden. Zu diesem Zweck ziehen Sie ein leeres Textfeld aus der Toolbox in den Bericht.
  3. Eigenschaften von Textfeldern klicken Sie auf die Value -Eigenschaft und rufen Sie eine Funktion mithilfe der folgenden Syntax auf.
    =ClassLibraryName.ClassName.MethodName or Namespace.ClassName.MethodName
    In meinem Beispiel angegeben ich Folgendes.
    =SimpleClassLibrary.Class1.DoSomething()
    Andere Formate werden auf Code in Reporting Services verwendet. Z. B. verwenden Sie folgendermaßen eingebetteten Code aufrufen.
    =Code.MethodName()
    Wenn Sie mithilfe einer Instanz eine nicht statische oder instanzbasierte,-Methode aus einer benutzerdefinierten Assembly aufrufen, verwenden Sie Folgendes Format.
    =Code.InstanceName.Method
    Hinweis Sie würden den Verweis anders eingerichtet haben eine instanzbasierte Methode verwenden möchten. Dazu müssen zu Eigenschaftenauf der Registerkarte Verweise , und geben Sie den Klassennamen und den Instanznamen im Abschnitt Klassen .

Code Access Security erfordert die benutzerdefinierte Assembly zusätzliche Berechtigungen

Wenn die benutzerdefinierte Assembly mehr Berechtigungen als die standardmäßige Ausführung Berechtigungen erfordert, müssen Sie einige Code Access Security ändert. Tritt ein Berechtigungsproblem mit CAS-sehen Sie wahrscheinlich "#Error" aus der benutzerdefinierten Assembly anstelle der erwarteten Ergebnisse. Einige Schritte, die Sie ausführen können, um festzustellen, ob dieses Problem vorliegt und Informationen der benutzerdefinierten Assembly zusätzliche Berechtigungen gewähren, klicken Sie auf die folgenden Artikelnummer der Microsoft Knowledge Base:
842419 wie in einem Bericht in Reporting Services verwiesen wird eine benutzerdefinierte Assembly Berechtigungen gewähren

Hinweis Der folgende Ansatz ist ein Test, um festzustellen, ob Code Access Security Probleme auftreten. Die folgenden Vorgehensweise verwenden, da die benutzerdefinierte Assembly volle Vertrauenswürdigkeit gewährt wird nicht empfohlen.



Erstellen Sie eine neue Codegruppe für die benutzerdefinierte Assembly gewähren Sie volle Vertrauenswürdigkeit Dazu öffnen Sie Programm c:\Programme\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\rssrvpolicy.config, und fügen Sie den folgenden Code hinzu.
<CodeGroup class="UnionCodeGroup"   version="1"
PermissionSetName="FullTrust"
Name="MyCodeGroup"
Description="Code group for my data processing extension">
<IMembershipCondition class="UrlMembershipCondition"
version="1"
Url="C:\pathtocustomassembly\customassembly.dll"
/>
</CodeGroup>

Wir empfehlen einen spezifischeren Berechtigungssatz anstatt dieser Berechtigungssatz der Codegruppe erstellen. Dieser Artikel ist soll man mit benutzerdefinierten Assemblys und weitere Details dazu.

Hinweis Benutzerdefinierte Assemblys funktionieren häufig im Berichts-Designer. Sie finden, wenn bereitstellen und führen Sie die benutzerdefinierte Assembly im Berichtsserver aus Berechtigungen auf Ausführung nicht ausreichen. Der Grund dafür ist, standardmäßig, Berichts-Designer benutzerdefinierte Assemblys "FullTrust" Berechtigungen. Wenn Sie Berichte auf dem Berichtsserver bereitgestellt, wird die Standardberechtigung Berichtsserver gewährt auf Ausführungsebene festgelegt. Wenn dieses Problem auftritt, sehen Sie wahrscheinlich "#Error" in das Berichtssteuerelement erwartete Ergebnisse aus der benutzerdefinierten Assembly.

Eingebetteter code

Eingebetteter Code ist Code, der in den Codeabschnitt des Dialogfelds Berichtseigenschaften geschrieben. Eingebetteter Code ist eine gute Wahl für Code, der im Bericht mehrmals aufgerufen wird. Wenn Sie Code in mehrere Berichte wiederverwenden möchten, ist eine benutzerdefinierte Assembly wahrscheinlich besser. Gehen folgendermaßen Sie vor, um eine eingebettete Funktion erstellen
  1. Klicken Sie im Menü Bericht auf Eigenschaften.
  2. Klicken Sie im Dialogfeld Eigenschaften auf der Registerkarte Code
  3. Fügen Sie die folgende Funktion, und klicken Sie dann auf OK.
    Public Function EmbeddedFunction() as String Return "this is from embedded code function"
    End Function

  4. Fügen Sie in dem Bericht ein neues Textfeld hinzu
  5. Fügen Sie folgenden Wert -Eigenschaft.
    =code.EmbeddedFunction
Ich möchte John für seine Arbeit zu diesem Artikel danken. Er verfügt über umfassende Erfahrung in SQL Server und Microsoft Development Sprachen und Arbeiten mit Kunden und Probleme lösen. Hoffen Sie, dass Sie diesen Monat Thema! Vielen Dank für Lesen! Wie immer gerne Ideen Spalten in zukünftigen Versionen behoben werden soll oder in der Knowledge Base die Fragen für Form.
Eigenschaften

Artikelnummer: 920769 – Letzte Überarbeitung: 14.01.2017 – Revision: 2

Feedback