Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Anmerkung |
|---|
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
Eines der wenigen Szenarien, in denen der Bericht kopiert und an zwei Orten abgelegt werden kann: Aus einem eingebetteten Bericht innerhalb des Web-Projekts und im Repository von Crystal Reports Server oder BusinessObjects Enterprise, der durch den verwalteten RAS-Server verfügbar gemacht wird (siehe Report Application Server (RAS)).
Anmerkung |
|---|
Da der Bericht letztendlich vom Remoteserver aus angezeigt wird, funktioniert dieses Berichtbindungsszenario auch problemlos mit nicht eingebetteten Berichten (wie in Binden an einen nicht eingebetteten Bericht, der in die ReportDocument-Klasse geladen wurde implementiert). |
Beschreibung
Ursprünglich mit eingebetteten Berichten und dem ReportDocument-Objektmodell in Crystal Reports für Visual Studio erstellte Webprojekte können nun einfach auf verwaltete RAS-Server innerhalb von Crystal Reports Server oder BusinessObjects Enterprise portiert werden
In diesem Szenario binden Sie den eingebetteten Bericht zur Laufzeit an einen verwalteten RAS-Server, indem Sie mithilfe des Publishing-Assistenten eine Kopie des Berichts in Crystal Reports Server oder BusinessObjects Enterprise einfügen. Der vorhandene Code für den eingebetteten Bericht ist zwar weiterhin funktionsfähig, Sie leiten die Quelle dieses Berichts jedoch, wie im Folgenden beschrieben, zu einem verwalteten RAS-Server um:
- Statten Sie das Projekt mit Crystal Reports Server- oder BusinessObjects Enterprise-Anmeldefunktionalität aus, und rufen Sie die EnterpriseSession-Instanz ab.
- Rufen Sie den duplizierten Bericht als Instanz von InfoObject aus Crystal Reports Server oder BusinessObjects Enterprise ab.
- Übergeben Sie die EnterpriseSession-Instanz und die InfoObject-Instanz an die ReportDocument.Load()-Methode des eingebetteten Berichts.
Sie können auch einen nicht eingebetteten Bericht an einen verwalteten 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(Zeichenfolge Dateiname)-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 verwendet. 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".
Anmerkung |
|---|
Die InfoObject-Instanz 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.
Pro
- Einfache Portabilität: 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.
AnmerkungDas ReportClientDocument-Objektmodell ermöglicht es Ihnen, Änderungen einer Berichtdefinitionsdatei programmatisch vorzunehmen, zu bearbeiten und zu speichern. Weitere Informationen hierzu finden Sie unter ReportClientDocumentReportClientDocument-Objektmodell (RAS) in "Architektur".
- Optimierte Leistung: 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.
Contra
- Geringfügig erhöhter Codierungsaufwand: Für das Projekt muss eine Anmeldung durchgeführt sowie ein EnterpriseSession-Objekt abgerufen werden, das in der ASP.NET-Sitzung gespeichert wird. Jedes Mal, wenn ein Bericht mit ReportDocument an das CrystalReportViewer-Steuerelement gebunden wird, müssen Sie InfoObject abrufen und die Load()-Methode aufrufen.
- Erhöhter Verwaltungsaufwand: Das Erstellen einer Kopie des eingebetteten Berichts für Crystal Reports Server oder BusinessObjects Enterprise erhöht den Verwaltungsbedarf. Wenn ein Bericht geändert oder gelöscht werden muss, müssen diese Änderungen sowohl an den eingebetteten Bericht im Webprojekt als auch an die Berichtkopie in Crystal Reports Server oder BusinessObjects Enterprise übergeben werden.
So zeigen Sie die duplizierte Kopie des eingebetteten, in Crystal Reports Server oder BusinessObjects Enterprise gespeicherten Berichts mithilfe der zum Bericht gehörigen InfoObject-Instanz und der Load-Methode von ReportDocument an
- Crystal Reports Server oder BusinessObjects Enterprise ist installiert und funktionsbereit.
- Crystal Reports Server oder BusinessObjects Enterprise SDK (einschließlich .NET-Assemblys) ist installiert und funktionsbereit.
AnmerkungWenn Sie Crystal Reports Server oder BusinessObjects Enterprise auf Ihrem Entwicklungscomputer installiert haben, ist das SDK in dieser Installation enthalten.
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.
Anmerkung |
|---|
Ein RAS-Server wird nur von Webprojekten unterstützt. |
- Suchen und notieren Sie den Namen eines Crystal Reports Servers oder BusinessObjects Enterprise-Servers. In diesem Beispiel lautet der Servername "BOE01".
1. Um den Servernamen zu ermitteln, klicken Sie mit der rechten Maustaste auf das Symbol Arbeitsplatz, und wählen Sie Eigenschaften.
2. Klicken Sie im Dialogfenster Systemeigenschaften auf die Registerkarte Netzwerkidentifikation.
3. Der Computername befindet sich im Feld Vollständiger Computername.
- Verwenden Sie den Publishing-Assistenten, um den Bericht "Hierarchical Grouping.rpt" auf Crystal Reports Server oder dem BusinessObjects Enterprise-Server zu veröffentlichen.
<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>Wie Sie den Publishing-Assistenten verwenden, erfahren Sie in der Anwenderdokumentation zu Crystal Reports Server oder BusinessObjects Enterprise.</p></td>
</tr>
</tbody>
</table>
- Die (im Projekt-Setup erstellte) ConfigureCrystalReports()-Methode enthält folgenden Berichtbindungscode:
``` vb
Dim hierarchicalGroupingReport As Hierarchical_Grouping = New
Hierarchical_Grouping()
myCrystalReportViewer.ReportSource = hierarchicalGroupingReport
```
``` csharp
Hierarchical_Grouping hierarchicalGroupingReport = new
Hierarchical_Grouping();
crystalReportViewer.ReportSource = hierarchicalGroupingReport;
```
Zwischen diesen beiden Codezeilen fügen Sie mehrere neue Codezeilen ein (siehe Schritte 5 bis 16), durch die vor dem Binden des Berichts an das CrystalReportViewer-Steuerelement folgende Aktionen ausgeführt werden:
- Anmelden bei Crystal Reports Server oder einem BusinessObjects Enterprise-Server im Netzwerk.
- Abrufen des Berichts als InfoObject-Instanz.
- Fügen Sie Ihrem Projekt folgende Assembly-Verweise hinzu:
1. CrystalDecisions.Enterprise.Framework
2. CrystalDecisions.Enterprise.InfoStore
- Fügen Sie oben auf der CodeBehind-Seite eine der Anweisungen "Imports" [Visual Basic] oder "using" [C#] für den CrystalDecisions.Enterprise-Namespace hinzu.
Jetzt können Sie Code hinzufügen, durch den der eingebettete Bericht zu Crystal Reports Server oder BusinessObjects Enterprise umgeleitet wird.
``` vb
Imports CrystalDecisions.Enterprise
```
``` csharp
using CrystalDecisions.Enterprise;
```
- Deklarieren Sie nach der Codezeile, durch die hierarchicalGroupingReport instantiiert wird, eine serverName-Zeichenfolge, und legen Sie für diese den Namen des Crystal Reports Servers oder des BusinessObjects Enterprise-Servers fest.
``` vb
Dim serverName As String = "BOE01"
```
``` csharp
string serverName = "BOE01";
```
Deklarieren und instantiieren Sie die SessionMgr-Klasse.
Dim mySessionMgr As SessionMgr = New SessionMgr()SessionMgr sessionMgr = new SessionMgr();Übergeben Sie den Anwendernamen (Administrator), das Kennwort (leer), die serverName-Variable sowie den Anmeldetyp (secEnterprise) an die Logon-Methode der SessionMgr-Instanz, und rufen Sie sie als eine Instanz von EnterpriseSession ab.
``` vb
Dim myEnterpriseSession As EnterpriseSession = mySessionMgr.Logon(
_
"Administrator", "", serverName, "secEnterprise")
```
``` csharp
EnterpriseSession enterpriseSession = sessionMgr.Logon(
"Administrator", "", serverName, "secEnterprise");
```
- Rufen Sie den InfoStore-Dienst (als EnterpriseService) aus der GetService-Methode von EnterpriseSession ab.
``` vb
Dim myEnterpriseService As EnterpriseService = _
myEnterpriseSession.GetService("InfoStore")
```
``` csharp
EnterpriseService enterpriseService =
enterpriseSession.GetService("InfoStore");
```
- Deklarieren und instantiieren Sie InfoStore mit dem abgerufenen InfoStore-Dienst.
``` vb
Dim myInfoStore As InfoStore = New InfoStore(myEnterpriseService)
```
``` csharp
InfoStore infoStore = new InfoStore(enterpriseService);
```
Jetzt können Sie den Bericht "Hierarchical Grouping" von Crystal Reports Server oder BusinessObjects Enterprise abrufen.
- Geben Sie unten die Abfragezeichenfolge ein, um Crystal Reports Server oder BusinessObjects Enterprise nach dem Bericht abzufragen.
``` vb
Dim queryString As String = "Select SI_CUID From CI_INFOOBJECTS " _
& "Where SI_PROGID='CrystalEnterprise.Report' "
_
& "And SI_NAME Like 'Hierarchical Grouping'"
```
``` csharp
string queryString = "Select SI_CUID From CI_INFOOBJECTS "
+ "Where SI_PROGID='CrystalEnterprise.Report' "
+ "And SI_NAME Like 'Hierarchical Grouping'";
```
- Rufen Sie die InfoObjects-Indexklasse ab, die das Abfrageergebnis enthält, indem Sie die Abfragezeichenfolge an die Query-Methode von InfoStore übergeben.
``` vb
Dim myInfoObjects As InfoObjects = myInfoStore.Query(queryString)
```
``` csharp
InfoObjects infoObjects = infoStore.Query(queryString);
```
- Rufen Sie das InfoObject aus der ersten Spalte der InfoObjects-Indexklasse ab.
<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>Die InfoObjects-Indexklasse ist 1-basiert, nicht 0-basiert.</p></td>
</tr>
</tbody>
</table>
``` vb
Dim myInfoObject As InfoObject = myInfoObjects(1)
```
``` csharp
InfoObject infoObject = infoObjects[1];
```
Jetzt können Sie die duplizierte Kopie des eingebetteten Berichts aus Crystal Reports Server oder BusinessObjects Enterprise laden.
- Rufen Sie die Load()-Methode des eingebetteten Berichts auf, und übergeben Sie dann die aktuellen Instanzen von InfoObject und EnterpriseSession an die Load()-Methode.
``` vb
hierarchicalGroupingReport.Load(myInfoObject, myEnterpriseSession)
```
``` csharp
hierarchicalGroupingReport.Load(infoObject, enterpriseSession);
```
Um den Bericht anzeigen zu lassen, erstellen Sie Ihr Projekt und führen es aus.
Der Bericht wird aus Crystal Reports Server oder BusinessObjects Enterprise geladen und vom Report Application Server (RAS) innerhalb von Crystal Reports Server oder BusinessObjects Enterprise bedient.
Um innerhalb des ReportDocument-Objektmodells auf das ReportClientDocument-Objektmodell zuzugreifen, informieren Sie sich im Abschnitt "Implementierung" unter Binden an unverwalteten RAS mit der ReportDocument.Load()-Methode.