Compartir a través de


Enlazar a un servidor RAS administrado mediante el método ReportDocument.Load()

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 caso de enlace de informes utiliza ReportClientDocument (vea Enlazar informes al modelo de objetos ReportClientDocument (RAS)).

Ubicación de los informes

Uno de los pocos casos donde el informe se copia y existe en dos ubicaciones: desde un informe incrustado en el proyecto Web y en el repositorio de Crystal Reports Server o BusinessObjects Enterprise que expone el servidor RAS administrado (vea Servidor de aplicaciones de informes (RAS)).

Nota

Puesto que el informe se muestra, finalmente, desde el servidor remoto, este escenario de enlace de informes también funciona correctamente con informes no incrustados (de la forma implementada en Enlazar a una clase de informe no incrustado cargado en ReportDocument).

Descripción

Los proyectos Web creados en un principio con informes incrustados y el modelo de objetos ReportDocument en Crystal Reports para Visual Studio ahora se pueden trasladar fácilmente al servidor RAS administrado en Crystal Reports Server o BusinessObjects Enterprise.

En este caso, enlace el informe incrustado en tiempo de ejecución a un servidor RAS administrado, colocando una copia del informe en Crystal Reports Server o BusinessObjects Enterprise con el Asistente de publicación. El código existente del informe incrustado sigue funcionando, pero debe redirigir el origen del informe a un servidor RAS administrado de la siguiente forma:

  • Agregue la funcionalidad de inicio de sesión de Crystal Reports Server o BusinessObjects Enterprise al proyecto y recupere la instancia de EnterpriseSession.
  • Recupere el informe duplicado de Crystal Reports Server o BusinessObjects Enterprise como instancia de InfoObject.
  • Pase las instancias de EnterpriseSession e InfoObject al método ReportDocument.Load() del informe incrustado.

También puede enlazar un informe no incrustado a un servidor RAS administrado. Hágalo eliminando la llamada al método ReportDocument.Load(String filename) descrito en Enlazar a una clase de informe no incrustado cargado en ReportDocument, y reemplácela por el código citado en los pasos descritos anteriormente.

Este caso muestra que en Crystal Reports Developer puede enlazar informes incrustados o no incrustados que utilicen el modelo de objetos ReportDocument directamente a un servidor RAS, que usa el modelo de objetos ReportClientDocument. ¿Cómo? En Crystal Reports 10, el modelo de objetos ReportDocument se volvió a escribir como capa proxy que dirige el modelo de objetos ReportClientDocument. Para obtener más información, vea Modelo de objetos ReportClientDocument (RAS) en la sección Arquitectura.

Nota

La instancia de InfoObect hace referencia al informe desde el servidor RAS administrado. El informe de un servidor RAS administrado siempre se muestra, aunque se trate de una versión distinta del informe incrustado o este tenga un nombre diferente.

Puede tener acceso al modelo de objetos ReportClientDocument subyacente mediante la propiedad ReportDocument.ReportClientDocument, y modificar el informe con el modelo de objetos ReportClientDocument en tiempo de ejecución.

Ventajas

  • Facilidad de portabilidad: 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 del archivo de definición de informe mediante programación. Para obtener más información, vea Modelo de objetos ReportClientDocument (RAS) en la sección Arquitectura.

  • Rendimiento optimizado: rendimiento mejorado debido a un rendimiento muy superior del motor de informes de Servidor de aplicaciones de informes (RAS). Para obtener más información, vea Comparación de arquitecturas en las soluciones de elaboración de informes de Business Objects.

Desventajas

  • Menos codificación agregada: el proyecto debe iniciar sesión y recuperar un objeto EnterpriseSession, y almacenarlo en Session de ASP.NET. Cada vez que enlace un informe al control CrystalReportViewer con ReportDocument, debe recuperar InfoObject y llamar al método Load().
  • Mayor mantenimiento: al hacer una copia del informe incrustado en Crystal Reports Server o BusinessObjects Enterprise, se incrementan los requisitos de mantenimiento. Si se debe modificar o eliminar un informe, estos cambios se deben realizar tanto en el informe incrustado del proyecto Web como en la copia del informe de Crystal Reports Server o BusinessObjects Enterprise.

Para mostrar el duplicado del informe incrustado almacenado en Crystal Reports Server o BusinessObjects Enterprise mediante el modelo de informes InfoObject del informe con el método Load de ReportDocument

  • Crystal Reports Server o BusinessObjects Enterprise está instalado y funcionando.
  • Crystal Reports Server o BusinessObjects Enterprise SDK (incluidos los ensamblados .NET) está instalado y funcionando.
    Nota

    Si ha instalado Crystal Reports Server o BusinessObjects Enterprise en el equipo de desarrollo, el SDK se incluye en la instalación.

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.

Nota

Un servidor RAS sólo funciona con proyectos Web.

  1. Busque y escriba el nombre de un servidor de Crystal Reports Server o BusinessObjects Enterprise. Para este ejemplo, el nombre del servidor es " BOE01".
1.   Para buscar el nombre del servidor, haga clic con el botón secundario en el icono Mi PC y, a continuación, seleccione Propiedades.
2.   En el cuadro de diálogo Propiedades del sistema, haga clic en la ficha Identificación de red.
3.   El nombre del equipo se encuentra en el campo Nombre completo de equipo.
  1. Utilice el Asistente de publicación para editar el archivo Hierarchical Grouping.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>
  1. En el método ConfigureCrystalReports() (creado en Configuración de proyectos), dispone del siguiente código de enlace de informes:
``` vb
Dim hierarchicalGroupingReport As Hierarchical_Grouping = New
Hierarchical_Grouping()
myCrystalReportViewer.ReportSource = hierarchicalGroupingReport
```

``` csharp
Hierarchical_Grouping hierarchicalGroupingReport = new
Hierarchical_Grouping();
crystalReportViewer.ReportSource = hierarchicalGroupingReport;
```

Entre estas dos líneas de código, agregue varias líneas nuevas de código (vea los pasos 5 a 16) que realicen las siguientes acciones antes de enlazar el informe al control CrystalReportViewer:

  - Inicie sesión en un servidor Crystal Reports Server o BusinessObjects Enterprise de la red.
  - Recupere el informe como instancia de InfoObject.
  1. Agregue las siguientes referencias de ensamblados al proyecto.
1.  CrystalDecisions.Enterprise.Framework
2.  CrystalDecisions.Enterprise.InfoStore
  1. En la parte superior de la página de código subyacente, agregue una instrucción "Imports" [Visual Basic] o "using" [C#] para el espacio de nombres CrystalDecisions.Enterprise.
Ya puede empezar a agregar código que redirija el informe incrustado a Crystal Reports Server o BusinessObjects Enterprise.

``` vb
Imports CrystalDecisions.Enterprise
```

``` csharp
using CrystalDecisions.Enterprise;
```
  1. A continuación de la línea de código que crea una instancia de hierarchicalGroupingReport, 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";
```
  1. Declare y cree una instancia de la clase SessionMgr.

    Dim mySessionMgr As SessionMgr = New SessionMgr()
    
    SessionMgr sessionMgr = new SessionMgr();
    
  2. 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 EnterpriseSess.

``` vb
Dim myEnterpriseSession As EnterpriseSession = mySessionMgr.Logon(
_
"Administrator", "", serverName, "secEnterprise")
```

``` csharp
EnterpriseSession enterpriseSession = sessionMgr.Logon(
"Administrator", "", serverName, "secEnterprise");
```
  1. 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");
```
  1. 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);
```

Ya está preparado para recuperar el informe Hierarchical Grouping desde Crystal Reports Server o BusinessObjects Enterprise.
  1. 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_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'";
```
  1. Recupere la clase indizada InfoObjects que contiene 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);
```
  1. 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];
```

Ya puede cargar el duplicado del informe incrustado desde Crystal Reports Server o BusinessObjects Enterprise.
  1. Llame al método Load() del informe incrustado y, a continuación, pase las instancias actuales de InfoObject y EnterpriseSession al método Load().
``` vb
hierarchicalGroupingReport.Load(myInfoObject, myEnterpriseSession)
```

``` csharp
hierarchicalGroupingReport.Load(infoObject, enterpriseSession);
```
  1. Para ver el informe, cree y ejecute el proyecto.

    El informe se carga desde Crystal Reports Server o BusinessObjects Enterprise y se atiende en el Servidor de aplicaciones de informes (RAS) dentro de Crystal Reports Server o BusinessObjects Enterprise.

Para tener acceso al modelo de objetos ReportClientDocument desde el modelo de objetos ReportDocument, vea la sección Implementación de Enlazar a un servidor RAS no administrado mediante el método ReportDocument.Load().

Vea también