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
Auf einem Server in Crystal Reports Server oder BusinessObjects Enterprise gespeichert.
Beschreibung
Bei diesem Berichtbindungsszenario wird direkt auf das ReportClientDocument-Objektmodell zugegriffen. In diesem Szenario wird EnterpriseSession, ReportAppFactory und ein InfoObject abgerufen. Anschließend wird die ID-Eigenschaft von InfoObject und die Ganzzahl 0 (optionaler Parameter in Visual Basic) an die OpenDocument()-Methode von ReportAppFactory übergeben, wodurch wiederum eine Instanz von ReportClientDocument aus Crystal Reports Server oder BusinessObjects Enterprise zurückgegeben wird. Ein Codebeispiel finden Sie im nachfolgenden Abschnitt 'Implementierung'.
Pro
- Durchführbare Methode für die Interaktion mit Berichten im ReportClientDocument-Objektmodell unter Verwendung von RAS innerhalb von CE 9 und höher.
- Signifikanter Leistungsgewinn aufgrund der überlegenen Leistung der Report Engine im verwalteten RAS-Server innerhalb von Crystal Reports Server oder BusinessObjects Enterprise. Weitere Informationen finden Sie unter Vergleichen von Architekturen zwischen Business Objects-Berichterstellungslösungen.
- Der ursprüngliche Code zur Interaktion mit Berichten unter Verwendung des ReportDocument-Objektmodells wird vollständig beibehalten, während über die ReportDocument.ReportClientDocument-Eigenschaft weiterhin voller Zugriff auf das zugrunde liegende ReportClientDocument-Objektmodell gewährleistet ist.
AnmerkungDas 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".
- Direkter Zugriff auf das ReportClientDocument-Objektmodell.
Contra
- Wenn der Code zuvor für Crystal Reports unter Verwendung des ReportDocument-Objektmodells entwickelt wurde, erfordert dieses Szenario, dass der Code für die Berichtbindung komplett neu geschrieben wird. Sie sollten stattdessen die Verwendung der folgenden alternativen Szenarien in Erwägung ziehen, die mit ReportDocument verwendet werden können:
So laden Sie einen Bericht aus Crystal Reports Server oder BusinessObjects Enterprise mithilfe der OpenDocument-Methode von ReportAppFactory in den RAS-Server
- Crystal Reports Server oder BusinessObjects Enterprise muss installiert und funktionsbereit sein.
- Das SDK von Crystal Reports Server oder BusinessObjects Enterprise (einschließlich .NET-Assemblys) muss auf dem Entwicklungscomputer installiert sein.
AnmerkungWenn Sie Crystal Reports Server oder BusinessObjects Enterprise auf Ihrem Entwicklungscomputer installiert haben, ist das SDK in dieser Installation enthalten.
- Suchen und notieren Sie den Namen eines Crystal Reports Servers oder BusinessObjects Enterprise-Servers. In diesem Beispiel lautet der Servername "BOE01".
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.
- Verwenden Sie den Publishing-Assistenten, um den Bericht "Chart.rpt" auf dem Crystal Reports Server oder 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>
Informationen zu Musterberichten finden Sie unter [Verzeichnis "Samples"](https://msdn.microsoft.com/de-de/library/vs%7ccrystlmn%7c%7e%5chtml%5ctopic159.htm\(v=VS.90\)).
- Fügen Sie Ihrem Projekt folgende Assembly-Verweise hinzu:
1. CrystalDecisions.Enterprise.Framework
2. CrystalDecisions.Enterprise.InfoStore
3. CrystalDecisions.ReportAppServer.ClientDoc
- Fügen Sie oben auf der CodeBehind-Seite eine Anweisung "Imports" [Visual Basic] oder "using" [C#] für den CrystalDecisions.Enterprise-Namespace und den CrystalDecisions.ReportAppServer.ClientDoc-Namespace hinzu.
``` vb
Imports CrystalDecisions.Enterprise
Imports CrystalDecisions.ReportAppServer.ClientDoc
```
``` csharp
using CrystalDecisions.Enterprise;
using CrystalDecisions.ReportAppServer.ClientDoc;
```
Jetzt können Sie Code hinzufügen, mit dem der Bericht im RAS-Server innerhalb von Crystal Reports Server oder BusinessObjects Enterprise geöffnet wird.
- Deklarieren Sie innerhalb der (im Projekt-Setup erstellten) ConfigureCrystalReports()-Methode eine serverName-Zeichenfolge, und setzen Sie sie auf den Namen des Crystal Reports Servers oder des BusinessObjects Enterprise-Servers.
``` vb
Dim serverName As String = "BOE01"
```
``` csharp
string serverName = "BOE01";
```
- Deklarieren und instantiieren Sie die SessionMgr-Klasse.
``` vb
Dim mySessionMgr As SessionMgr = New SessionMgr()
```
``` csharp
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 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);
```
- Weisen Sie den Wert der EnterpriseService-Instanz erneut zu, indem Sie die RASReportFactory-Zeichenfolge an die GetService()-Methode von EnterpriseSession übergeben.
``` vb
myEnterpriseService =
myEnterpriseSession.GetService("RASReportFactory")
```
``` csharp
enterpriseService =
enterpriseSession.GetService("RASReportFactory");
```
- Lassen Sie die Interface-Eigenschaft von EnterpriseService als Objektvariable zurückgeben.
``` vb
Dim rrfObject As Object = myEnterpriseService.Interface
```
``` csharp
Object rrfObject = enterpriseService.Interface;
```
- Wandeln Sie die Objektvariable in eine ReportAppFactory-Instanz um.
``` vb
Dim myReportAppFactory As ReportAppFactory = CType(rrfObject,
ReportAppFactory)
```
``` csharp
ReportAppFactory reportAppFactory = (ReportAppFactory)rrfObject;
```
- Geben Sie unten die Abfragezeichenfolge ein, um Crystal Reports Server oder BusinessObjects Enterprise nach dem Bericht abzufragen.
``` vb
Dim queryString As String = "Select SI_ID, SI_NAME, SI_PARENTID
From CI_INFOOBJECTS " _
& "Where SI_PROGID='CrystalEnterprise.Report' "
_
& "And SI_NAME Like 'Chart'"
```
``` csharp
string queryString = "Select SI_ID, SI_NAME, SI_PARENTID From
CI_INFOOBJECTS "
+ "Where SI_PROGID='CrystalEnterprise.Report' "
+ "And SI_NAME Like 'Chart'";
```
- Rufen Sie eine 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];
```
- Deklarieren und instantiieren Sie ReportClientDocument.
``` vb
Dim myReportClientDocument As ReportClientDocument = New
ReportClientDocumentClass()
```
``` csharp
ReportClientDocument reportClientDocument = new
ReportClientDocumentClass();
```
- Übergeben Sie die ID-Eigenschaft von InfoObject und die Ganzzahl 0 (optional in Visual Basic) an die OpenDocument-Methode der ReportAppFactory-Instanz.
<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>Dadurch wird der Bericht im Report Application Server (RAS) in Crystal Reports Server oder BusinessObjects Enterprise als ReportClientDocument-Instanz geöffnet.</p></td>
</tr>
</tbody>
</table>
``` vb
myReportClientDocument =
myReportAppFactory.OpenDocument(myInfoObject.ID, 0)
```
``` csharp
reportClientDocument = reportAppFactory.OpenDocument(infoObject.ID,
0);
```
- Binden Sie die ReportClientDocument-Instanz an das CrystalReportViewer-Steuerelement.
``` vb
myCrystalReportViewer.ReportSource = myReportClientDocument
```
``` csharp
crystalReportViewer.ReportSource = reportClientDocument;
```
- Um den Bericht anzeigen zu lassen, erstellen Sie Ihr Projekt und führen es aus.