Compartir a través de


Enlazar a un servidor RAS administrado mediante la propiedad ReportDocument.FileName

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

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

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 NET que se crearon originalmente con informes incrustados y el modelo de objetos ReportDocument en Crystal Reports para Visual Studio ahora se pueden portar fácilmente al servidor RAS administrado.

En este caso, enlace el informe incrustado en tiempo de ejecución a un servidor RAS administrado, en Crystal Reports Server o BusinessObjects Enterprise, 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 la propiedad CUID del informe duplicado desde Crystal Reports Server o BusinessObjects Enterprise.
  • Establezca el valor de la propiedad EnterpriseSession de ReportDocument en la instancia de EnterpriseSession.
  • Establezca el valor de la propiedad FileName de ReportDocument en la cadena CUID del informe incrustado.

Para obtener un ejemplo de código, vea la sección Implementación más adelante.

Este escenario muestra que en Crystal Reports Developer se pueden enlazar informes incrustados o no incrustados, que utilicen el modelo de objetos ReportDocument, directamente a un servidor RAS que utilice 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 propiedad FileName 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.

Se puede tener acceso al modelo de objetos ReportClientDocument subyacente directamente con 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 de los informes 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). Vea Comparación de arquitecturas en las soluciones de elaboración de informes de Business Objects.

Desventajas

  • Menor codificación agregada: el proyecto debe iniciar sesión, recuperar un objeto EnterpriseSession y almacenarlo en la sesión de ASP.NET. Por cada vez que un informe se enlace al control CrystalReportViewer mediante ReportDocument, se debe recuperar el CUID y establecer su valor en la propiedad FileName de ReportDocument.
  • 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 propagar tanto al informe incrustado del proyecto Visual Studio, como a 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 CUID del informe con la propiedad FileName 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.

  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 la 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>

Para obtener información sobre informes de ejemplo, vea [Directorio de informes de muestra](ms225622\(v=vs.90\).md).
  1. En el método ReportDocument.ReportClientDocument (que ha creado en Configuración de proyectos), tiene el código de enlace de informes siguiente.
``` 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, debe agregar varias líneas nuevas de código (vea los pasos 3 a 14) que realizan 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 CUID que identifica el informe almacenado en Crystal Reports Server o BusinessObjects Enterprise.
  - Llamar al informe mediante su CUID.
  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.
``` vb
Imports CrystalDecisions.Enterprise
```

``` csharp
using CrystalDecisions.Enterprise;
```

Ya puede empezar a agregar código para redirigir el informe incrustado a Crystal Reports Server o BusinessObjects 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.
``` vb
Dim mySessionMgr As SessionMgr = New SessionMgr()
```

``` csharp
SessionMgr sessionMgr = new SessionMgr();
```
  1. 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");
```
  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 CUID del informe Hierarchical Grouping desde Crystal Reports Server o BusinessObjects Enterprise.
  1. Introduzca la siguiente cadena de consulta para realizar una consulta sobre el CUID del 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. Recupere la cadena del CUID del informe desde la propiedad SI_CUID de InfoObject en una variable de cadena reportCUID.
``` vb
Dim reportCUID As String = myInfoObject.CUID
```

``` csharp
string reportCUID = infoObject.CUID;
```
  1. Establezca el valor de la propiedad EnterpriseSession del informe incrustado en la instancia de EnterpriseSession.
``` vb
hierarchicalGroupingReport.EnterpriseSession = myEnterpriseSession
```

``` csharp
hierarchicalGroupingReport.EnterpriseSession = enterpriseSession;
```
  1. Establezca el valor de la propiedad FileName del informe incrustado en la variable reportCUID, con el prefijo del protocolo cecuid:///.
<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" />Sugerencia</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td><p>Utilice tres barras diagonales en vez de dos. Esto implica que el nombre de host es nulo.</p></td>
</tr>
</tbody>
</table>

``` vb
hierarchicalGroupingReport.FileName = "cecuid:///" & reportCUID
```

``` csharp
hierarchicalGroupingReport.FileName = "cecuid:///" + reportCUID;
```
  1. Para ver el informe, cree y ejecute el proyecto.
El informe se carga desde Crystal Reports Server o BusinessObjects Enterprise y se atiende desde el servidor RAS administrado.

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