Compartir a través de


Enlazar a un servidor RAS no 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

Los informes se incrustan en el proyecto. En tiempo de ejecución, el informe se carga en la red en un servidor Servidor de aplicaciones de informes (RAS) indicado.

Descripción

Ahora pueden trasladarse fácilmente los proyectos de Visual Studio que utilizan informes incrustados y el modelo de objetos ReportDocument en Crystal Reports para Visual Studio a un servidor RAS no administrado.

En este escenario, se carga un informe incrustado, a través de la red, en un servidor de aplicaciones de informes (RAS) no administrado indicado. Para obtener un ejemplo de código, vea la sección Implementación, más adelante, para agregar dos líneas de código que hagan lo siguiente:

  • Asignar el nombre del servidor RAS a la propiedad ReportDocument.ReportAppServer.
  • Llamar al método ReportDocument.Load().

Aunque los informes incrustados están escritos para el modelo de objetos ReportDocument, en Crystal Reports Developer puede enlazar informes incrustados directamente al servidor RAS, que utiliza el modelo de objetos ReportClientDocument. Esto es posible porque en Crystal Reports Developer, el modelo de objetos ReportDocument se ha vuelto a escribir como capa proxy que dirige el modelo de objetos ReportClientDocument. Para obtener más información, vea Modelo de objetos ReportClientDocument (RAS).

Se puede tener acceso al modelo de objetos ReportClientDocument subyacente directamente mediante la propiedad ReportDocument.ReportClientDocument. De esta forma, puede modificar el informe con el modelo de objetos ReportClientDocument en tiempo de ejecución.

Ventajas

  • Posibilidad de mantener todo el código original que interactuaba con los informes que utilizan el modelo de objetos ReportDocument, a la vez que se proporciona acceso total al modelo de objetos subyacente ReportClientDocument mediante la propiedad ReportDocument.ReportClientDocument.
    Nota

    El modelo de objetos ReportClientDocument permite crear, modificar y guardar los cambios de los informes mediante programación en el archivo de definición de informe. Para obtener más información, vea Modelo de objetos ReportClientDocument (RAS) en la sección Arquitectura.

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

Desventajas

  • Código con adiciones menores. Cada vez que un informe se enlaza al control CrystalReportViewer con ReportDocument, se deben agregar dos líneas de código; vea la sección Implementación más adelante.
  • La actualización a un servidor RAS aumenta considerablemente el rendimiento de los informes.

Para cargar un informe incrustado de la red en un servidor RAS no administrado

  • La versión 10 del Servidor de aplicaciones de informes (RAS) debe estar instalada y funcionar correctamente.
  • Busque y escriba el nombre de un servidor RAS no administrado en la red. Para este ejemplo, el nombre del servidor es "RAS01".

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. En el método ConfigureCrystalReports() (que ha creado en Configuración de proyectos), tiene el código de enlace de informes siguiente:

    Entre estas dos líneas de código, debe agregar dos nuevas líneas de código que identifican un servidor RAS no administrado de la red y, a continuación, cargar este informe incrustado en el servidor RAS, antes de enlazarlo al control CrystalReportViewer.

    hierarchicalGroupingReport = New Hierarchical_Grouping()
    myCrystalReportViewer.ReportSource = hierarchicalGroupingReport
    
    hierarchicalGroupingReport = new Hierarchical_Grouping();
    crystalReportViewer.ReportSource = hierarchicalGroupingReport;
    
  2. Después de crear la instancia de hierarchicalGroupingReport, escriba el nombre del servidor RAS en la propiedad ReportAppServer de la variable hierarchicalGroupingReport.

    hierarchicalGroupingReport.ReportAppServer = "RAS01"
    
    hierarchicalGroupingReport.ReportAppServer = "RAS01";
    
  3. Llame a ReportDocument.Load().

El código de enlace de informes de [Configuración de proyectos](ms227453\(v=vs.90\).md) ahora está a continuación de esta línea de código.

``` vb
hierarchicalGroupingReport.Load("rassdk://C:\report.rpt",
"RAS01")
```

``` csharp
hierarchicalGroupingReport.Load(@"rassdk://C:\report.rpt",
"RAS01");
```
  1. Compile y depure el proyecto.
Entonces, el informe se cargará desde el proyecto, a través de la red, en el servidor de aplicaciones de informes (RAS) no administrado.

Para tener acceso al modelo de objetos ReportClientDocument desde el modelo de objetos ReportDocument

  1. Salga del modo de depuración del procedimiento anterior.

  2. Agregue los siguientes ensamblados como referencias al proyecto.

    • CrystalDecisions.ReportAppServer.ClientDoc
    • CrystalDecisions.ReportAppServer.Controllers
    • CrystalDecisions.ReportAppServer.DataDefModel
  3. Introduzca tres enunciados "Imports" [Visual Basic] o "using" [C#] al principio de la clase.

    Imports CrystalDecisions.ReportAppServer.ClientDoc
    Imports CrystalDecisions.ReportAppServer.Controllers
    Imports CrystalDecisions.ReportAppServer.DataDefModel
    
    using CrystalDecisions.ReportAppServer.ClientDoc;
    using CrystalDecisions.ReportAppServer.DataDefModel;
    using CrystalDecisions.ReportAppServer.Controllers;
    
  4. En el método ConfigureCrystalReports(), entre la línea de código que llama al método Load() y la que enlaza el informe al control, escriba una llamada a un nuevo método auxiliar privado denominado ModifyReport.

    ModifyReport()
    
    ModifyReport();
    
  5. Cree el método auxiliar privado ModifyReport() según se indica en el siguiente ejemplo. La finalidad de este código es mostrar el acceso al modelo de objetos ReportClientDocument en el modelo de objetos ReportDocument. Este código quita el primer campo disponible de los campos mostrados en el informe.

    Nota

    Si el campo de la tabla de base de datos no se encuentra en la colección de campos de resultado del informe, la aplicación genera una excepción.

    Private Sub ModifyReport()
    Dim myReportClientDocument As ISCDReportClientDocument = _
    hierarchicalGroupingReport.ReportClientDocument
    Dim myTables As Tables = _
    myReportClientDocument.DatabaseController.Database.Tables
    Dim myTable As CrystalDecisions.ReportAppServer.DataDefModel.Table
    myTable = CType(myTables(0), CrystalDecisions.ReportAppServer.DataDefModel.Table)
    Dim myFields As Fields = myTable.DataFields
    
    Dim myField As ISCRField
    For Each myField In myFields
    Dim myResultFieldController As ResultFieldController = _
    myReportClientDocument.DataDefController.ResultFieldController
    Try
    myResultFieldController.Remove(myField)
    Exit For
    Catch
    End Try
    Next
    End Sub
    
    private void ModifyReport()
    {
    ISCDReportClientDocument reportClientDocument = hierarchicalGroupingReport.ReportClientDocument;
    Tables tables = reportClientDocument.DatabaseController.Database.Tables;
    CrystalDecisions.ReportAppServer.DataDefModel.Table table =
    (CrystalDecisions.ReportAppServer.DataDefModel.Table)tables[0];
    Fields fields = table.DataFields;
    
    for (int i = 0; i < fields.Count; i++)
    {
    ISCRField field = fields[i];
    ResultFieldController resultFieldController =
    reportClientDocument.DataDefController.ResultFieldController;
    try
    {
    resultFieldController.Remove(field);
    break;
    }
    catch
    {
    }
    }
    }
    
    Nota

    Todo lo que se ha programado en el modelo de objetos ReportClientDocument subyacente se produce lógicamente en la instancia de ReportDocument contenedora, que está enlazada al control CrystalReportViewer. En este ejemplo de código, la eliminación de campo mostrada aquí sólo se produce en tiempo de ejecución. No se guarda en el archivo de definición de informes.

  6. Para ver el informe, cree y ejecute el proyecto.

Vea también