2008-09-16 3 views
2

Ich habe derzeit eine Reihe von Berichten mit einer Reihe von gemeinsamen Funktionen in Code-Blöcken innerhalb der .rdl-Dateien sitzen. Dies stellt offensichtlich ein Problem mit der Wartbarkeit dar, und ich frage mich, ob jemand einen Weg für diese verschiedenen Berichte kannte, eine Bibliothek mit gemeinsamem Code zu teilen.Aufrufen einer .NET-Assembly aus einem SQL Server 2005 Reporting Services-Bericht?

Idealerweise möchte ich eine .Net-Assembly an mein Reporting Services-Projekt angehängt haben, auf das alle meine Berichte zugreifen und Funktionen aufrufen können. Dies würde Ihnen Kopfschmerzen ersparen, wenn Sie versuchen, jedes Mal, wenn eine Änderung an einer allgemeinen Funktion vorgenommen werden muss, etwa 100 Berichte zu aktualisieren und neu zu implementieren.

Irgendwelche Vorschläge?

Antwort

5

Fügen Sie in Visual Studio in den Eigenschaften des Berichts auf der Registerkarte "Verweise" die Details für die Assembly hinzu, die den verwalteten Code enthält. Dieser Code kann aus Ausdrücken in Berichten mit dem angegebenen Instanznamen aufgerufen werden.

Diese Assembly kann entweder im GAC- oder im PrivateAssemblies-Verzeichnis von Visual Studio gespeichert und im Berichtsdienst 'bin' auf dem Reporting Services-Server bereitgestellt werden. Weitere Informationen finden Sie unter How to use custom assemblies or embedded code in Reporting Services

1

Der folgende Artikel listet nur über alle verschiedenen Möglichkeiten des Aufrufs von .Net-Code aus einem SSRS-Bericht auf. Extending Microsoft SQL Server 2000 Reporting Services with Custom Code

Wenn alle diese Berichte auf demselben Server ausgeführt werden, wäre eine andere zu berücksichtigende Option die Verwendung gespeicherter .Net-Prozeduren in der Datenbank, die den Code enthalten.

1

Vielen Dank Jungs, ich kann jetzt meine Versammlung aus meinen Berichten aufrufen.

Ergänzende Frage: Gibt es einen Namensraum I enthalten kann, wenn ich meine Montage bin zu schaffen, die es bewusst von Objekten in dem Report-Designer wie Felder und Parameter macht? Es wäre wirklich toll, wenn ich eine Sammlung von Feldern in einer stark typisierten Weise an meine Versammlung weitergeben könnte.

Und die Antwort: Ein paar Stunden des Suchens, dass \ Programme \ Microsoft Visual Studio 8 \ Common7 Hinzufügen enthüllt \ IDE \ Private \ Microsoft.ReportingServices.ProcessingObjectModel.dll als Referenz in meiner Montage mir erlaubt Auf die verschiedenen Reporting Services-Typen wie Felder und Parameter zugreifen. Beachten Sie, dass in Reporting Services 2008 die namespace changes.

2

Ich hatte eine Menge Schmerzen damit ich hoffe, dass dies jemand hilft. Sie können es aus dem MSDN-Artikel erhalten, aber es gibt ein paar Punkte darunter, von denen ich denke, dass sie dabei helfen können, jemanden schneller zu beschleunigen.

Vergessen Sie nicht, diese zu Ihrer rssrvpolicy.config Datei hinzuzufügen:

<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> 

ich, dies zu tun vergessen, und ich war es für eine Weile zu hassen.

plus vergessen Sie nicht, für das Jahr 2005 mit dem neuen DLL beiden folgenden Ordnern zu treffen:

Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies 
Program Files\Microsoft SQL Server\MSSQL.3\Reporting Services\ReportServer\bin 

plus verwenden Sie nicht mit Ihrer Assembly log4net. Ich konnte es nicht schaffen. Vielleicht kann jemand, aber nicht ich.

Plus, wenn Sie wie ich versauen, werden Sie nicht in der Lage sein, die Dateien zu löschen, bis Sie Visual Studio schließen.

Plus machen Sie Ihre Methoden geteilt oder statisch. Es ist einfacher.

Erstellen Sie eine Deployment-Batch-Datei. Etwas wie:

@ECHO OFF 
REM Name: SRSDeploy_Local.bat 
REM 
REM This batch files copies my custom assembly to my Reporting Services folders. 
REM 
REM This is the SQL Server 2005 version: 
copy "C:\Projects\Common\lib\SCI.Common.SSRSUtils.dll" "C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\PrivateAssemblies" 
copy "C:\Projects\Common\lib\SCI.Common.SSRSUtils.dll" "C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin" 

Schließlich, erstellen Sie Ihren Bericht vor der Vorschau.

Wenn es baut, sind Sie wahrscheinlich auf Ihrem Weg.

Außer ...

Sie nicht auf Ihre Produktionsberichtsserver bereitstellen können, weil Sie immer die folgende Fehlermeldung erhalten werden:

Fehler beim Laden der Code-Modul

Das ist, was ich arbeite gerade jetzt.

+0

Ich habe meine DLLs auf den falschen Produktionsserver kopiert. Stellen Sie sicher, dass Sie Ihre DLLs auf den Produktionsserver kopieren, indem Sie denselben Pfadtyp verwenden, den ich in der obigen Batchdatei verwendet habe. – Daver

Verwandte Themen