Enlazar a un servidor RAS administrado mediante el método ReportAppFactory.OpenDocument()
Nota |
---|
Esta página describe una funcionalidad que no está disponible en Crystal Reports para Visual Studio, pero sí lo está en una de sus versiones actualizadas. Para obtener más información acerca de Crystal Reports para Visual Studio, consulte ¿Qué es Crystal Reports para Visual Studio? Para obtener más información acerca de las versiones actualizadas, consulte Opciones de actualización. |
Modelo de objetos
Este escenario de enlace de informes utiliza ReportClientDocument (vea Enlazar informes al modelo de objetos ReportClientDocument (RAS)).
Ubicación de los informes
Se encuentran almacenados en un servidor de Crystal Reports Server o BusinessObjects Enterprise.
Descripción
Este caso de enlace de informes tiene acceso al modelo de objetos ReportClientDocument directamente. Recupera EnterpriseSession, ReportAppFactory e InfoObject. A continuación, pasa la propiedad ID de InfoObject y el número entero 0 (parámetro opcional en Visual Basic) al método OpenDocument() de ReportAppFactory, que devuelve una instancia de ReportClientDocument desde Crystal Reports Server o BusinessObjects Enterprise. Para obtener un ejemplo de código, vea la sección Implementación más adelante.
Ventajas
- Método viable de interacción con informes en el modelo de objetos ReportClientDocument mediante RAS en CE 9 y posterior.
- Rendimiento mejorado debido a un rendimiento muy superior del motor de informes del servidor RAS administrado en Crystal Reports Server o BusinessObjects Enterprise. Para obtener más información, vea Comparación de arquitecturas en las soluciones de elaboración de informes de Business Objects.
- Mantiene todo el código original que interactuaba con los informes utilizando el modelo de objetos ReportDocument, a la vez que sigue proporcionando acceso total al modelo de objetos ReportClientDocument subyacente mediante la propiedad ReportDocument.ReportClientDocument.
Nota El modelo de objetos ReportClientDocument permite crear, modificar y guardar los cambios de los informes mediante programación. Para obtener más información, vea Modelo de objetos ReportClientDocument (RAS) en la sección Arquitectura.
- Acceso directo al modelo de objetos ReportClientDocument.
Desventajas
- Si el código se ha desarrollado previamente para Crystal Reports mediante el modelo de objetos ReportDocument, este caso requiere la codificación completa del enlace del informe. En su lugar, piense en utilizar uno de estos casos alternativos que funcionan con ReportDocument.
Para cargar un informe de Crystal Reports Server o BusinessObjects Enterprise en un servidor RAS mediante el método OpenDocument de ReportAppFactory
- Crystal Reports Server o BusinessObjects Enterprise debe estar instalado y funcionando.
- El SDK de Crystal Reports Server o BusinessObjects Enterprise (incluidos los ensamblados .NET) se debe instalar en el equipo de desarrollo.
Nota Si ha instalado Crystal Reports Server o BusinessObjects Enterprise en el equipo de desarrollo, el SDK se incluye en la instalación.
- Busque y escriba el nombre de un servidor de Crystal Reports Server o BusinessObjects Enterprise. Para este ejemplo, el nombre del servidor es "BOE01".
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos. La configuración de proyectos contiene referencias específicas a espacios de nombres y configuración de códigos necesarios para este procedimiento, que no se podrá completar sin dicha configuración. Por lo tanto, antes de empezar con este procedimiento, primero debe seguir los pasos de Configuración de proyectos.
- Utilice el Asistente de publicación para editar el archivo Chart.rpt en el servidor Crystal Reports Server o BusinessObjects Enterprise.
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\z15yzzew.alert_note(es-es,VS.90).gif" class="note" />Nota</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Para saber cómo utilizar el Asistente de publicación, vea la documentación del usuario de Crystal Reports Server o BusinessObjects Enterprise.</p></td>
</tr>
</tbody>
</table>
Para obtener información sobre informes de ejemplo, vea [Directorio de informes de muestra](ms225622\(v=vs.90\).md).
- Agregue las siguientes referencias de ensamblados al proyecto.
1. CrystalDecisions.Enterprise.Framework
2. CrystalDecisions.Enterprise.InfoStore
3. CrystalDecisions.ReportAppServer.ClientDoc
- En la parte superior de la página de código subyacente, agregue una instrucción "Imports" [Visual Basic] o "using" [C#] para los espacios de nombres CrystalDecisions.Enterprise y CrystalDecisions.ReportAppServer.ClientDoc.
``` vb
Imports CrystalDecisions.Enterprise
Imports CrystalDecisions.ReportAppServer.ClientDoc
```
``` csharp
using CrystalDecisions.Enterprise;
using CrystalDecisions.ReportAppServer.ClientDoc;
```
Ya puede añadir código para abrir el informe en el servidor RAS dentro de Crystal Reports Server o BusinessObjects Enterprise
- En el método ConfigureCrystalReports() (creado en Configuración de proyectos), declare una cadena serverName y establezca su valor en el nombre del servidor Crystal Reports Server o BusinessObjects Enterprise.
``` vb
Dim serverName As String = "BOE01"
```
``` csharp
string serverName = "BOE01";
```
- Declare y cree una instancia de la clase SessionMgr.
``` vb
Dim mySessionMgr As SessionMgr = New SessionMgr()
```
``` csharp
SessionMgr sessionMgr = new SessionMgr();
```
- Pase el nombre de usuario (Administrador), la contraseña (en blanco), la variable serverName y el tipo de inicio de sesión (secEnterprise) al método Logon de la instancia SessionMgr y recupérela como instancia de EnterpriseSession.
``` vb
Dim myEnterpriseSession As EnterpriseSession = mySessionMgr.Logon(
_
"Administrator", "", serverName, "secEnterprise")
```
``` csharp
EnterpriseSession enterpriseSession = sessionMgr.Logon(
"Administrator", "", serverName, "secEnterprise");
```
- Recupere el servicio InfoStore (como EnterpriseService), desde el método GetService de EnterpriseSession.
``` vb
Dim myEnterpriseService As EnterpriseService = _
myEnterpriseSession.GetService("InfoStore")
```
``` csharp
EnterpriseService enterpriseService =
enterpriseSession.GetService("InfoStore");
```
- Declare y cree una instancia de InfoStore con el servicio InfoStore recuperado.
``` vb
Dim myInfoStore As InfoStore = New InfoStore(myEnterpriseService)
```
``` csharp
InfoStore infoStore = new InfoStore(enterpriseService);
```
- Vuelva a asignar el valor de la instancia de EnterpriseService, pasando la cadena "RASReportFactory" al método de GetService() de EnterpriseSession.
``` vb
myEnterpriseService =
myEnterpriseSession.GetService("RASReportFactory")
```
``` csharp
enterpriseService =
enterpriseSession.GetService("RASReportFactory");
```
- Devuelva la propiedad Interface a EnterpriseService como variable de objeto.
``` vb
Dim rrfObject As Object = myEnterpriseService.Interface
```
``` csharp
Object rrfObject = enterpriseService.Interface;
```
- Proyecte la variable de objeto a una instancia de ReportAppFactory.
``` vb
Dim myReportAppFactory As ReportAppFactory = CType(rrfObject,
ReportAppFactory)
```
``` csharp
ReportAppFactory reportAppFactory = (ReportAppFactory)rrfObject;
```
- Introduzca la siguiente cadena de consulta para realizar una consulta sobre el informe en Crystal Reports Server o BusinessObjects Enterprise.
``` 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'";
```
- Recupere una clase indizada InfoObjects que contenga el resultado de la consulta, pasando la cadena de consulta al método Query de InfoStore.
``` vb
Dim myInfoObjects As InfoObjects = myInfoStore.Query(queryString)
```
``` csharp
InfoObjects infoObjects = infoStore.Query(queryString);
```
- Recupere InfoObject desde la primera columna de la clase indizada InfoObjects.
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\z15yzzew.alert_note(es-es,VS.90).gif" class="note" />Nota</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>La clase indizada InfoObjects está basada en 1, no en 0.</p></td>
</tr>
</tbody>
</table>
``` vb
Dim myInfoObject As InfoObject = myInfoObjects(1)
```
``` csharp
InfoObject infoObject = infoObjects[1];
```
- Declare y cree una instancia de ReportClientDocument.
``` vb
Dim myReportClientDocument As ReportClientDocument = New
ReportClientDocumentClass()
```
``` csharp
ReportClientDocument reportClientDocument = new
ReportClientDocumentClass();
```
- Pase la propiedad ID de InfoObject y el número entero 0 (es opcional en Visual Basic) al método OpenDocument de la instancia de ReportAppFactory.
<table>
<colgroup>
<col style="width: 100%" />
</colgroup>
<thead>
<tr class="header">
<th><img src="images\z15yzzew.alert_note(es-es,VS.90).gif" class="note" />Nota</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>De esta forma se abre el informe desde Report Application Server (RAS) en Crystal Reports Server o BusinessObjects Enterprise como una instancia de ReportClientDocument.</p></td>
</tr>
</tbody>
</table>
``` vb
myReportClientDocument =
myReportAppFactory.OpenDocument(myInfoObject.ID, 0)
```
``` csharp
reportClientDocument = reportAppFactory.OpenDocument(infoObject.ID,
0);
```
- Enlace la instancia ReportClientDocument al control CrystalReportViewer.
``` vb
myCrystalReportViewer.ReportSource = myReportClientDocument
```
``` csharp
crystalReportViewer.ReportSource = reportClientDocument;
```
- Para ver el informe, cree y ejecute el proyecto.