Binden an ReportSource (Crystal Reports Server oder BusinessObjects Enterprise 11)

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 CrystalReportViewer verwendet (siehe Berichtbindung mit CrystalReportViewer-Objektmodell).

Ort des Berichts

Auf die Berichte wird über den Page Server in BusinessObjects Enterprise zugegriffen.

Beschreibung

Crystal Reports Server oder BusinessObjects Enterprise ermöglicht die Berichtverteilung von Servern innerhalb eines Enterprise-Frameworks. Ein in Crystal Reports Server oder BusinessObjects Enterprise gespeicherter Bericht kann je nach Ihren Anforderungen zu unterschiedlichen Zeiten auf verschiedenen Servern angezeigt werden. Wenn Sie in Crystal Reports Server oder BusinessObjects Enterprise einen Bericht unter optimalen Leistungsbedingungen anzeigen lassen möchten und keine bedeutenden programmgesteuerten Änderungen am Bericht erforderlich sind, lassen Sie den Bericht mit der ReportSource-Klasse direkt vom Page Server aus anzeigen.

Die ReportSource-Klasse ist keinem Objektmodell zugeordnet. Wenn Sie Parameter oder Datenbankeinstellungen ändern möchten, können Sie das begrenzte, mit dem CrystalReportViewer-Steuerelement bereitgestellte Objektmodell verwenden. Für eine komplexere programmgesteuerte Interaktion mit dem Bericht sollten Sie jedoch eines der anderen Crystal Reports Server- oder BusinessObjects Enterprise-Berichtbindungsszenarien verwenden.

NoteAnmerkung

Einen Vergleich verschiedener Bindungsszenarien, die unterschiedliche Server in Crystal Reports Server oder BusinessObjects Enterprise verwenden, finden Sie in den empfohlenen Bindungsszenarien für Crystal Reports Server oder BusinessObjects Enterprise unter Zusammenfassung empfohlener Szenarien.

Pro

  • Schnellste Lösung: Bietet optimale Leistung bei der Anzeige eines Berichts aus Crystal Reports Server oder BusinessObjects Enterprise heraus.

Contra

  • Begrenztes Objektmodell: Programmgesteuerte Änderungen der Datenbankanmelde- oder Parametereinstellungen sind auf das CrystalReportViewer-Objektmodell beschränkt. Alternative Berichtbindungsszenarien, die Crystal Reports Server oder BusinessObjects Enterprise verwenden, finden Sie unter Zusammenfassung empfohlener Szenarien.
  • Begrenzte Verfügbarkeit: Dieses Szenario ist nur in Crystal Enterprise, Version 11, Crystal Reports Server oder BusinessObjects Enterprise 11 verfügbar.

Binden des CrystalReportViewer-Steuerelements an einen Bericht, der vom Page Server aus Crystal Reports Server oder BusinessObjects Enterprise bedient wird

  • 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.
    NoteAnmerkung

    Wenn Sie Crystal Reports Server oder BusinessObjects Enterprise auf Ihrem Entwicklungscomputer installiert haben, ist das SDK in dieser Installation enthalten.

  1. 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".
  1. Verwenden Sie den Publishing-Assistenten, um den Bericht "Chart.rpt" auf dem Crystal Reports Server oder BusinessObjects Enterprise-Server zu veröffentlichen. Die Berichtsdatei Befindet sich im Unterverzeichnis "Feature Examples", siehe Verzeichnis "Samples".
<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>
  1. Fügen Sie Ihrem Projekt folgende Assembly-Verweise hinzu:

    • CrystalDecisions.Enterprise.Framework
    • CrystalDecisions.Enterprise.InfoStore
    • CrystalDecisions.Enterprise.Viewing.ReportSource
    • CrystalDecisions.ReportAppServer.Controllers
  2. Klicken Sie im Menü Ansicht auf Code, um die CodeBehind-Klasse dieses Web Forms oder Windows Forms anzeigen zu lassen. Fügen Sie oberhalb der Klasse die Anweisung "Imports" [Visual Basic] oder "using" [C#] für den CrystalDecisions.Enterprise-Namespace hinzu.

``` vb
Imports CrystalDecisions.Enterprise
Imports CrystalDecisions.Enterprise.Viewing
Imports CrystalDecisions.ReportAppServer.Controllers
```

``` csharp
using CrystalDecisions.Enterprise;
using CrystalDecisions.Enterprise.Viewing;
using CrystalDecisions.ReportAppServer.Controllers;
```

Jetzt können Sie Code für die Anmeldung bei Crystal Reports Server oder BusinessObjects Enterprise schreiben.

So melden Sie sich bei Crystal Reports Server oder BusinessObjects Enterprise an

  1. Deklarieren Sie innerhalb der (im Projekt-Setup erstellten) ConfigureCrystalReports()-Methode eine serverName-Zeichenfolgenvariable, und setzen Sie sie auf den Namen von Crystal Reports Server oder BusinessObjects Enterprise-Server.
``` vb
Dim serverName As String = "BOE01"
```

``` csharp
string serverName = "BOE01";
```
  1. Deklarieren und instantiieren Sie die SessionMgr-Klasse.

    Dim mySessionMgr As SessionMgr = New SessionMgr()
    
    SessionMgr sessionMgr = new SessionMgr();
    
  2. Ü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");
```
  1. 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");
```
  1. Deklarieren und instantiieren Sie InfoStore, und übergeben Sie den abgerufenen EnterpriseService als Parameter an InfoStore.
``` 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.

So rufen Sie den Bericht "Hierarchical Grouping" von Crystal Reports Server oder BusinessObjects Enterprise ab

  1. Um den Wert der EnterpriseService-Instanz erneut dem Page Server-Bericht-Factory-Dienst zuzuweisen, übergeben Sie die Zeichenfolge PSReportFactory an die GetService()-Methode von EnterpriseService.
``` vb
myEnterpriseService = myEnterpriseSession.GetService("PSReportFactory")
```

``` csharp
enterpriseService = enterpriseSession.GetService("PSReportFactory");
```
  1. Lassen Sie die Interface-Eigenschaft von EnterpriseService als Objektvariable zurückgeben.
``` vb
Dim psrfObject As Object = myEnterpriseService.Interface
```

``` csharp
Object psrfObject = enterpriseService.Interface;
```
  1. Wandeln Sie die Objektvariable in eine PSReportFactory-Instanz um.
``` vb
Dim myPSReportFactory As PSReportFactory = CType(psrfObject, PSReportFactory)
```

``` csharp
PSReportFactory psReportFactory = (PSReportFactory)psrfObject;
```
  1. Geben Sie unten die Abfragezeichenfolge ein, um Crystal Reports Server oder BusinessObjects Enterprise nach dem Bericht abzufragen.

    Dim queryString As String = "Select SI_ID, SI_NAME, SI_PARENTID From CI_INFOOBJECTS " _
    & "Where SI_PROGID='CrystalEnterprise.Report' " _
    & "And SI_NAME Like 'Chart'"
    
    string queryString = "Select SI_ID, SI_NAME, SI_PARENTID From CI_INFOOBJECTS "
    + "Where SI_PROGID='CrystalEnterprise.Report' "
    + "And SI_NAME Like 'Chart'";
    
  2. Übergeben Sie die Query-Methode von InfoStore, um eine InfoObjects-Indexklasse abzurufen, die das Abfrageergebnis enthält.

``` vb
Dim myInfoObjects As InfoObjects = myInfoStore.Query(queryString)
```

``` csharp
InfoObjects infoObjects = infoStore.Query(queryString);
```
  1. Rufen Sie das InfoObject aus der ersten Spalte der InfoObjects-Indexklasse ab.
``` vb
Dim myInfoObject As InfoObject = myInfoObjects(1)
```

``` csharp
InfoObject infoObject = infoObjects[1];
```
  1. Deklarieren und füllen Sie eine ReportSource-Instanz aus der OpenReportSource()-Methode der PSReportFactory-Instanz mit Werten, indem Sie die ID-Eigenschaft von InfoObject übergeben.
``` vb
Dim myReportSource As ReportSource = myPSReportFactory.OpenReportSource(myInfoObject.ID)
```

``` csharp
ReportSource reportSource = psReportFactory.OpenReportSource(infoObject.ID);
```
  1. Binden Sie die ReportSource-Instanz an die ReportSource-Eigenschaft des CrystalReportViewer-Steuerelements.
``` vb
myCrystalReportViewer.ReportSource = myReportSource
```

``` csharp
crystalReportViewer.ReportSource = reportSource;
```
  1. Um den Bericht anzeigen zu lassen, erstellen Sie Ihr Projekt und führen es aus.
Der Bericht wird jetzt auf der Grundlage seiner ID vom Page Server innerhalb von Crystal Reports Server oder BusinessObjects Enterprise angezeigt. Wenn Sie eine andere Methode für den Zugriff auf die Bericht-ID verwenden (beispielsweise, indem Sie die ID aus einer Berichtliste in einem DropDownList-Steuerelement auswählen), ist es nicht nötig, InfoStore abzufragen und ein InfoObject zu generieren, um die Bericht-ID abzurufen.

Siehe auch