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.
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;
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";
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");
```
- 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
Salga del modo de depuración del procedimiento anterior.
Agregue los siguientes ensamblados como referencias al proyecto.
- CrystalDecisions.ReportAppServer.ClientDoc
- CrystalDecisions.ReportAppServer.Controllers
- CrystalDecisions.ReportAppServer.DataDefModel
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;
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();
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.
Para ver el informe, cree y ejecute el proyecto.