Binden an unverwalteten RAS-Server mit der ReportDocument.FileName-Eigenschaft

NoteAnmerkung

Auf dieser Seite werden Funktionen beschrieben, die nicht in Crystal Reports für Visual Studio, jedoch in einer der aktualisierten Versionen verfügbar sind. Weitere Informationen zu Crystal Reports für Visual Studio finden Sie unter Was ist Crystal Reports für Visual Studio? Weitere Informationen zu aktualisierten Versionen finden Sie unter Aktualisierungsoptionen.

Objektmodell

In diesem Berichtbindungsszenario wird ReportClientDocument verwendet (siehe Berichtbindung mit ReportClientDocument-Objektmodell (RAS)).

Ort des Berichts

In diesem Szenario schöpfen Sie das Potenzial des vorhandenen eingebetteten Berichts aus. Obwohl im Code weiterhin über die Berichtwrapperklasse auf den eingebetteten Bericht verwiesen wird, wird der eingebettete Bericht über die FileName-Eigenschaft an eine externe (und leistungsfähigere) Kopie umgeleitet, die sich auf dem unverwalteten RAS-Server (siehe Report Application Server (RAS)) befindet .

NoteAnmerkung

Da der Bericht letztendlich vom Remoteserver aus angezeigt wird, funktioniert dieses Berichtbindungsszenario auch problemlos mit nicht eingebetteten Berichten (wie in Berichtbindungsszenario Binden an einen nicht eingebetteten Bericht, der in die ReportDocument-Klasse geladen wurde implementiert).

Beschreibung

Hierbei handelt es sich um eine optimierte Version des Berichtbindungsszenarios Binden an unverwalteten RAS mit der ReportDocument.Load()-Methode.

Projekte, die ursprünglich mit eingebetteten Berichten und dem ReportDocument-Objektmodell in früheren Crystal Reports für Visual Studio-Versionen erstellt wurden, können jetzt problemlos auf den unverwalteten RAS-Server portiert werden.

In diesem Szenario binden Sie einen eingebetteten Bericht (der Crystal Reports unterstützt) zur Laufzeit an den unverwalteten RAS-Server und optimieren ihn weiter, indem Sie eine Kopie des Berichts in einem Ordner ablegen, auf den direkt vom RAS-Server zugegriffen werden kann. Dabei fügen Sie zwei Codezeilen zu folgenden Zwecken ein:

  • Weisen Sie der ReportDocument.ReportAppServer-Eigenschaft den Namen des RAS-Servers zu.
  • Übergeben eines RAS-zugänglichen Verzeichnispfades an die ReportDocument.FileName-Eigenschaft.

Sie können auch einen nicht eingebetteten Bericht an einen unverwalteten RAS-Server binden. Dazu löschen Sie den unter Binden an einen nicht eingebetteten Bericht, der in die ReportDocument-Klasse geladen wurde beschriebenen Aufruf der ReportDocument.Load(String filename)-Methode und ersetzen ihn durch den in den vorangehenden Schritten beschriebenen Code.

Durch dieses Szenario wird veranschaulicht, dass in Crystal Reports Developer eingebettete oder nicht eingebettete Berichte, die das ReportDocument-Objektmodell verwenden, direkt an einen RAS-Server gebunden werden können. Dabei wird das ReportClientDocument-Objektmodell Wie ist das möglich? In Crystal Reports 10 wurde das ReportDocument-Objektmodell als Proxyschicht für das ReportClientDocument-Objektmodell umgeschrieben. Weitere Informationen finden Sie unter ReportClientDocument-Objektmodell (RAS) im Abschnitt "Architektur".

Das Standardszenario unter Binden an unverwalteten RAS mit der ReportDocument.Load()-Methode unterliegt jedoch einer Leistungseinschränkung: Es ist zeitintensiv, den eingebetteten Bericht jedes Mal auf den RAS-Server zu laden. Um die Leistung zu verbessern, kopieren Sie den Bericht in ein Dateiverzeichnis, das auf dem RAS-Server angezeigt werden kann und übergeben die Zeichenfolge mit dem Verzeichnispfad dann an die FileName-Eigenschaft der Berichtinstanz.

NoteAnmerkung

Die FileName-Eigenschaft verweist auf den Bericht auf dem verwalteten RAS-Server. Der Bericht auf dem verwalteten RAS-Server wird immer angezeigt, auch wenn dieser Bericht eine andere Version oder einen anderen Namen hat als der eingebettete Bericht.

Auf das zugrunde liegende ReportClientDocument-Objektmodell kann direkt über die ReportDocument.ReportClientDocument-Eigenschaft zugegriffen werden. Dies ermöglicht Ihnen das Ändern des Berichts mit Hilfe des ReportClientDocument-Objektmodells zur Laufzeit. Ein Codebeispiel finden Sie im nachfolgenden Abschnitt 'Implementierung'.

Pro

  • Sämtlicher ursprünglicher Code zur Interaktion mit Berichten, die das ReportDocument-Objektmodell verwenden, wird beibehalten. Gleichzeitig kann über die ReportDocument.ReportClientDocument-Eigenschaft uneingeschränkt auf das zugrunde liegende ReportClientDocument-Objektmodell zugegriffen werden.
    NoteAnmerkung

    Das ReportClientDocument-Objektmodell ermöglicht es Ihnen, die Berichtdefinitionsdatei programmgesteuert zu erstellen, zu bearbeiten und daran vorgenommene Änderungen zu speichern. Weitere Informationen hierzu finden Sie unter ReportClientDocumentReportClientDocument-Objektmodell (RAS) in "Architektur".

  • Signifikanter Leistungsgewinn aufgrund der überlegenen Leistung der Report Engine im Report Application Server (RAS). Weitere Informationen finden Sie unter Vergleichen von Architekturen zwischen Business Objects-Berichterstellungslösungen.
  • Leistungsgewinn durch Kopieren des Berichts in ein Dateiverzeichnis, das auf dem RAS-Server angezeigt werden kann.

Contra

  • Geringfügige Codeergänzungen. Jedes Mal, wenn ein Bericht mit Hilfe von ReportDocument an das CrystalReportViewer-Steuerelement gebunden wird, müssen zwei Codezeilen hinzugefügt werden. Ein Codebeispiel finden Sie im folgenden Abschnitt.
  • Das Kopieren des eingebetteten Berichts in ein Dateiverzeichnis, das auf dem RAS-Server angezeigt werden kann, erhöht den Verwaltungsaufwand. Wenn ein Bericht geändert oder gelöscht werden muss, müssen diese Änderungen sowohl an den eingebetteten Bericht im Visual Studio-Projekt als auch an die Berichtkopie im Verzeichnis, das auf dem RAS-Server angezeigt werden kann, weitergegeben werden.
  • Durch die Aktualisierung auf einen unverwalteten RAS wird die Berichtleistung deutlich gesteigert, wenn auch nicht im gleichen Umfang wie bei der Aktualisierung auf einen verwalteten RAS.

So laden sie eine Kopie eines eingebetteten Berichts aus einem Dateiverzeichnis, das auf einem bestimmten unverwalteten RAS-Server angezeigt werden kann

  • Der unverwaltete Report Application Server (RAS) 10 ist installiert und funktionsbereit.
  • Suchen und notieren Sie den Namen eines unverwalteten RAS-Servers im Netzwerk. In diesem Beispiel lautet der Servername "RAS01".

Diese Prozedur funktioniert nur bei Projekten, die in Projekt-Setup erstellt wurden. Projekt-Setup enthält spezifische Namespaceverweise und Codekonfigurationen, die für diese Prozedur erforderlich sind. Die Prozedur kann ohne diese Konfiguration nicht ausgeführt werden. Führen Sie deshalb vor Beginn dieser Arbeitsschritte die Schritte unter Projekt-Setup aus.

RAS wird nur von Webprojekten unterstützt.

  1. Die (im ConfigureCrystalReports() erstellte) Projekt-Setup-Methode enthält folgenden Berichtbindungscode.
Zwischen diesen beiden Codezeilen müssen zwei neue Codezeilen (siehe Schritte 2 und 4) hinzugefügt werden, durch die vor dem Binden des Berichts an das CrystalReportViewer-Steuerelement zwei Aktionen ausgeführt werden:

  - Identifizieren eines unverwalteten RAS-Servers im Netzwerk.
  - Bereitstellen des Dateipfads, der zu einer Kopie des Berichts führt.

``` vb
Dim hierarchicalGroupingReport As Hierarchical_Grouping = New
Hierarchical_Grouping()
myCrystalReportViewer.ReportSource = hierarchicalGroupingReport
```

``` csharp
Hierarchical_Grouping hierarchicalGroupingReport = new
Hierarchical_Grouping();
crystalReportViewer.ReportSource = hierarchicalGroupingReport;
```
  1. Nach der Instantiierung von hierarchicalGroupingReport geben Sie den Namen des RAS-Servers in die ReportApplicationServer-Eigenschaft der hierarchicalGroupingReport-Variablen ein.

    hierarchicalGroupingReport.ReportAppServer = "RAS01"
    
    hierarchicalGroupingReport.ReportAppServer = "RAS01";
    
  2. Kopieren Sie den Bericht in das Report Application Server 10-Verzeichnis auf Laufwerk C: des RAS-Servers: C:\Programme\Crystal Decisions\Report Application Server 10\Reports\

  3. Geben Sie als Nächstes den Dateipfad zum Bericht in den Code ein, und stellen Sie das Protokollpräfix "RAS" voran.

<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\xkh1wxd8.alert_note(de-de,VS.90).gif" alt="Note" class="note" />Anmerkung</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Dieser Pfad entspricht dem Standardverzeichnis zum Speichern der RAS-Berichte. Andere Berichtpfade können vom RAS-Server durch die Fehlermeldung &quot;Zugriff verweigert&quot; zurückgewiesen werden.</p></td>
</tr>
</tbody>
</table>

Der Berichtbindungscode im [Projekt-Setup](https://msdn.microsoft.com/de-de/library/vs%7ccrystlmn%7c%7e%5chtml%5ctopic168.htm\(v=VS.90\)) führt jetzt diese Codezeile aus.

``` vb
hierarchicalGroupingReport.FileName = "ras://C:\Programme\Crystal Decisions" _ & "\Report Application Server 10\Reports" _ & "\Hierarchical_Grouping.rpt"
```

``` csharp
hierarchicalGroupingReport.FileName = "ras://C:\\Programme\\Crystal Decisions" + "\\Report Application Server 10\\Reports" + "\\Hierarchical_Grouping.rpt";
```
  1. Um den Bericht anzeigen zu lassen, erstellen Sie Ihr Projekt und führen es aus.
Der Bericht wird jetzt aus dem Dateipfad geladen und vom unverwalteten Report Application Server (RAS) aus bedient.

Um innerhalb des ReportClientDocument-Objektmodells auf das ReportDocument-Objektmodell zuzugreifen, informieren Sie sich im Codeabschnitt unter Binden an unverwalteten RAS mit der ReportDocument.Load()-Methode.

Siehe auch