SAP Crystal Reports, versión para programadores de Microsoft Visual
Studio
Versión del documento: Support Package 10 - 2014-06-23
Manual del desarrollador del SDK .Net
de SAP Crystal Reports para Visual
Studio
Tabla de contenido
1
Manual del desarrollador del SDK de SAP Crystal Reports .Net . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1
Inicio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.1
¿Qué es SAP Crystal Reports, versión para programadores de Microsoft Visual Studio?
............................................................................ 3
1.1.2
1.2
1.3
1.4
1.5
1.6
1.7
1.8
2
Migrar la aplicación SAP Crystal Reports .Net. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Configurar el entorno de desarrollo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.1
Configuración del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.2
Configuración de proyectos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Aspectos fundamentales del SDK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.3.1
Arquitectura. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
1.3.2
Control CrystalReportViewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1.3.3
¿Cuál es el enfoque de persistencia que se debe usar con SAP Crystal Reports?. . . . . . . . . . . 52
1.3.4
Escalar la aplicación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63
1.3.5
Usar SAP Crystal Reports en una matriz de servidores o de procesos Web. . . . . . . . . . . . . . . 73
1.3.6
Trabajar con Crystal Reports como servicio web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
1.3.7
Consideraciones sobre la seguridad. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
Uso del SDK. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
1.4.1
Imprimir un informe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
1.4.2
Exportar un informe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
1.4.3
Filtrar datos con parámetros o fórmulas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .134
1.4.4
Establecer el origen de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .149
1.4.5
Visualizar un informe. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
1.4.6
Personalizar el control CrystalReportViewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222
1.4.7
Uso de los informes de sólo lectura de SAP Crystal Reports (RPTR). . . . . . . . . . . . . . . . . . . 240
Tutoriales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
1.5.1
Tutoriales del modelo de objeto CrystalReportViewer. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
1.5.2
Tutoriales del modelo de objetos ReportDocument. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .336
1.5.3
Tutoriales de código reducido en Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .503
1.5.4
Tutoriales de conectividad de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544
1.5.5
Otros tutoriales. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584
Implementación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
1.6.1
Componentes de implementación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
1.6.2
Implementación para Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
Crear informes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642
1.7.1
Usar SAP Crystal Reports Designer incrustado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .642
1.7.2
Referencia de fórmulas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .777
1.7.3
Referencia de interfaz de usuario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
Glosario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Tabla de contenido
1
Manual del desarrollador del SDK de SAP
Crystal Reports .Net
1.1
Inicio
Esta ayuda en pantalla está diseñada para ayudarle a desarrollar su propia aplicación Web o para Windows con el
SDK de SAP Crystal Reports .NET. Incluye tutoriales y referencias de programación que puede usar para
implementar el SDK de SAP Crystal Reports .NET.
1.1.1
¿Qué es SAP Crystal Reports, versión para
programadores de Microsoft Visual Studio?
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio permite crear informes complejos y
profesionales en un programa basado en GUI. Después puede conectar el informe a casi todos los orígenes de
base de datos, así como a datos proxy, como un conjunto de resultados (por ejemplo, un ADO.NET DataSet). Los
asistentes del diseñador de GUI le permiten establecer los criterios de formato, agrupamiento y gráficos, etc.
Puede almacenar el informe en una aplicación Web o para Windows, con uno de los controles de visores deSAP
Crystal Reports. La presentación de informes, tanto en clientes Windows como en HTML 4.0 es muy interactiva y
proporciona funciones como la profundización en gráficos, la exploración de informes y la búsqueda de texto.
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio incluye un SDK extenso. Puede
utilizarlo para interactuar con el informe mediante programación en tiempo de ejecución, usando uno de los
cuatro modelos de objetos posibles:
●
CrystalReportViewer, el modelo de objetos más sencillo.
●
ReportDocument, el modelo de objetos más completo.
●
ReportClientDocument, el modelo de objetos más completo. Este modelo de objetos está disponible con un
servidor RAS.
●
InfoObject, un modelo de objetos muy eficaz para la programación y configuración de informes en el marco
de SAP Crystal Reports Server o la plataforma SAP BusinessObjects Business Intelligence.
Nota
Los modelos de objetos CrystalReportViewer y ReportDocument están disponibles con todas las
versiones de SAP Crystal Reports, versión para programadores de Microsoft Visual Studio. Los modelos de
objetos ReportClientDocument e InfoObject requieren una licencia actualizada. Vea Soluciones de
elaboración de informes de SAP BusinessObjects Business Intelligence [página 63].
Los informes se pueden relacionar con el proyecto de Visual Studio de muchas formas:
●
Incruste los informes directamente en el proyecto.
●
Obtenga acceso a sus informes desde un directorio de archivos.
●
Obtenga acceso a sus informes como servicio Web de informes desde un servidor remoto.
●
Conecte sus informes como Crystal Services.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
3
●
Mediante la actualización a SAP Crystal Reports Server puede tener acceso a sus informes a través del
servidor RAS.
●
Mediante la actualización a la plataforma SAP BusinessObjects Business Intelligence, puede tener acceso a
sus informes a través de Page Server o del servidor RAS incluidos en el marco de la plataforma SAP
BusinessObjects Business Intelligence.
1.1.1.1
Funciones disponibles en SAP Crystal Reports
Designer
SAP Crystal Reports Designer proporciona varias funciones que no están disponibles con SAP Crystal Reports,
versión para programadores de Microsoft Visual Studio:
Función
Descripción
Miembros calculados en gráficos de tabla de referencias
cruzadas
Puede agregar filas o columnas a un gráfico de tabla de
referencias cruzadas insertando un miembro calculado.
Estas filas o columnas pueden contener cálculos
personalizados (por ejemplo, la diferencia en las ventas entre
dos regiones) o se pueden usar en conjunto para tareas de
formato (por ejemplo, insertar una fila en blanco cada tres
líneas para mejorar la legibilidad). Tiene total flexibilidad para
diseñar sus propias fórmulas de cálculo y puede elegir si
deben aparecer solamente una vez o repetirse regularmente
en la tabla de referencias cruzadas.
Objetos Flash incrustados
Puede incrustar un objeto Flash o crear un vínculo a un objeto
Flash en cualquier sección de un informe de SAP Crystal
Reports.
Resúmenes incrustados en tablas de referencias cruzadas
Puede agregar un cálculo adicional a un gráfico de tabla de
referencias cruzadas insertando un resumen incrustado. Los
resúmenes incrustados no agregan filas ni columnas a la
tabla de referencias cruzadas. En lugar de ello, hacen que
aparezcan cálculos adicionales en cada celda de la tabla de
referencias cruzadas. Por ejemplo, en un informe que
muestra las ventas regionales, podría insertar un cálculo para
cada región que mostrase el porcentaje de ventas totales del
país.
Vista previa editable
Con SAP Crystal Reports Designer puede visualizar un
informe en la ficha de diseño o la ficha de vista previa. En la
ficha Vista previa dispone de las mismas opciones de
formato que en la ficha Diseño. Sin embargo, en la ficha Vista
previa trabaja con los datos reales. En lugar de un marco de
campo que representa varios valores de campo, en el
informe se muestran los valores reales.
4
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Función
Descripción
Códigos de barras con formato
SAP Crystal Reports Designer incluye las fórmulas y fuentes
necesarias para admitir códigos de barras Code39. Puede
usar la opción Dar formato al campo para cambiar el aspecto
de un código de barras.
Existen varias razones para cambiar el aspecto de un código
de barras, como:
●
Para cambiar el tamaño de modo que el código de
barras no sea demasiado grande o pequeño como para
leerlo con un escáner.
●
Ordenación de campos interactiva
Para mostrar el código de barras en un color diferente.
Puede diseñar el informe de modo que los usuarios puedan
modificar un campo o una dirección de ordenación sin
necesidad de actualizar la información de la base de datos.
Puede hacerlo agregando un Control de ordenación al
informe.
Un Control de ordenación es especialmente útil por diversos
motivos:
●
Permite que los usuarios ordenen los datos de un
informe para analizarlos sin necesidad de abandonar el
lienzo del informe.
●
Elimina demanda de procesamiento en la base de datos.
●
Reduce el tiempo que los usuarios deben esperar a que
se ordenen los datos.
●
Permite que los usuarios ordenen los campos del
informe aunque no dispongan de conexión o derechos
para acceder a la base de datos en el momento de la
visualización.
Workbench
En Workbench puede crear proyectos que contengan uno o
varios informes. Con las opciones de la barra de
herramientas puede agregar, eliminar o cambiar el nombre
de carpetas, informes y paquetes de objetos. Puede
reorganizar los archivos en una o varias carpetas
arrastrándolos y colocándolos donde desee que se muestren.
También puede arrastrar archivos de informes desde
Windows Explorer y colocarlos en la carpeta que desee en
Workbench.
1.1.2
Migrar la aplicación SAP Crystal Reports .Net
En esta sección se ofrece información sobre la migración de la aplicación SAP Crystal Reports .Net a SAP Crystal
Reports, versión para programadores de Microsoft Visual Studio.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
5
Nota
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio contiene un completo conjunto
de funciones, y está disponible como una descarga gratuita que se integra con Visual Studio 2010 o posterior.
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio no se incluye en la aplicación SAP
Crystal Reports Designer.
6
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Opciones de migración en las diferentes versiones de SAP Crystal Reports
Este diagrama muestra las diferentes opciones de migración entre versiones de SAP Crystal Reports.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
7
Migrar a SAP Crystal Reports, versión para programadores de Microsoft Visual
Studio
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio actualiza automáticamente los
proyectos anteriores a la versión actual. Si un proyecto incluye referencias a componentes anteriores, se solicita
al usuario que realice una actualización.
Al hacer clic en el botón Sí, los proyectos y sus archivos se actualizan a la versión actual de SAP Crystal Reports.
Si se hace clic en el botón No, se ajusta el proyecto de modo que se utilicen las referencias originales. Algunas de
las funciones anteriores se deshabilitan debido a que los componentes anteriores no tendrán esa funcionalidad
determinada.
Nota
Si están bloqueados el archivo de proyecto, cualquier archivo ASPX que incluya componentes de SAP Crystal
Reports o el archivo web.config, no se podrá llevar a cabo la actualización o la aplicación de soluciones.
Información relacionada
Soluciones de elaboración de informes de SAP BusinessObjects Business Intelligence [página 63]
1.1.2.1
Problemas de migración
Un informe basado en una fuente de datos ADO.NET no funcionará si el
proyecto tiene como destino el .NET 4.x Framework
Los informes basados en una fuente de datos ADO.NET no funcionarán si el proyecto tiene como destino .NET 4.x
Framework. Se produce el siguiente error: "Información adicional: se ha creado un conjunto de modo combinado
frente a la versión 'v2.0.50727' del tiempo de ejecución y no puede cargarse en el tiempo de ejecución 4.x sin
información de configuración adicional."
Este problema puede solucionarse actualizando el archivo .config de los proyectos. Agregue las siguientes
líneas de código a la sección <configuration></configuration> del archivo:
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.x"/>
</startup>
1.1.2.2
Limitaciones de 64 bits
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio8 x64 (AMD64) admite la
arquitectura de 64 bits. Sin embargo, actualmente no se admite la arquitectura de IA64 (Itanium).
8
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Funciones que no se admiten actualmente en escenarios de 64 bits:
●
Exportar informes al formato HTML.
●
Componentes de correspondencia geográfica.
●
Componentes de fuente de código de barras Azalea.
1.2
Configurar el entorno de desarrollo
En esta sección se ofrecen instrucciones detalladas sobre cómo instalar y configurar el entorno de
implementación y cómo crear un sitio Web o proyecto Windows en SAP Crystal Reports, versión para
programadores de Microsoft Visual Studio.
1.2.1
Configuración del sistema
En esta sección se proporciona una vista general de cómo configurar el entorno de desarrollo para probar y
desarrollar aplicaciones para Windows o sitios Web que usen el SDK de SAP Crystal Reports .Net.
1.2.1.1
Instalaciones necesarias
Necesita instalar SAP Crystal Reports, versión para programadores de Microsoft Visual Studio para poder crear
aplicaciones Web o para Windows que usen SAP Crystal Reports.
1.2.1.1.1
Versiones compatibles de Visual Studio
Si desea utilizar SAP Crystal Reports, versión para programadores de Microsoft Visual Studio, deberá verificar
que la versión de Visual Studio instalada admite SAP Crystal Reports.
Las ediciones Ultimate, Premium y Professional de Visual Studio se admiten en Visual Studio 2010 y versiones
superiores. SAP Crystal Reports no admite las ediciones Express de Visual Studio.
Información relacionada
Soluciones de elaboración de informes de SAP BusinessObjects Business Intelligence [página 63]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
9
1.2.1.1.2
Versiones de SAP Crystal Reports
Hay disponibles numerosas versiones de SAP Crystal Reports. Muchos de los procedimientos incluidos en este
documento son específicos de versión. Para obtener el máximo partido de este documento, determine en primer
lugar qué versión de SAP Crystal Reports tiene instalada.
1.2.1.1.2.1
Para determinar qué versión de SAP Crystal
Reports está ejecutando:
Procedimiento
1.
Vaya a GAC (caché de ensamblados global) en C:\WINNT\Assembly o C:\Windows\Assembly.
2.
Busque el archivo CrystalDecisions.CrystalReports.Engine.
Nota
Si ha instalado más de una versión de SAP Crystal Reports, tendrá varias versiones de estos archivos en la
caché de ensamblados global. El archivo CrystalDecisions.CrystalReports.Engine se selecciona, ya que
dicho archivo se incluye en todas las versiones de SAP Crystal Reports.
3.
Observe la columna Versión que aparece en la ventana.
Ésta es la "versión de ensamblado".
4.
Busque el número más alto de un ensamblado determinado.
5.
Compare la versión del ensamblado con el número de versión en el gráfico de versiones de SAP Crystal
Reports.
1.2.1.1.2.2
Versiones de SAP Crystal Reports
Producto
Versión de ensamblado
SAP Crystal Reports, versión para programadores de
Microsoft Visual Studio (.NET 4.0 Framework)
13.0.2000.0
SAP Crystal Reports 2008 (.NET 2.0 Framework)
12.0.2000.0
SAP Crystal Reports 2008 (.NET 1.1 Framework)
12.0.1100.0
SAP Crystal Reports XI Release 2
11.5.3300.0
SAP Crystal Reports XI Release 1
11.0.3300.0
SAP Crystal Reports Basic para Visual Studio 2008
10.5.3600.0
SAP Crystal Reports para Visual Studio 2005
10.2.3600.0
SAP Crystal Reports 10
10.0.3300.0
10
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Producto
Versión de ensamblado
SAP Crystal Reports 9
9.2.3300
SAP Crystal Reports para Visual Studio 2003
9.1.5000
SAP Crystal Reports 2008 y SAP Crystal Reports 2008 SP1 usan el mismo número de versión de ensamblado.
Para comprobar si tiene instalado SAP Crystal Reports 2008 SP1, compruebe que la versión de archivo empieza
por 12.1, y no por 12.0.
1.2.1.1.3
Instalar el Servicio de actualizaciones de SAP
Crystal Reports
Contexto
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio dispone ahora de un servicio
opcional de actualizaciones de SAP Crystal Reports que busca actualizaciones, soluciones y revisiones de SAP
Crystal Reports.
El servicio de actualizaciones de SAP Crystal Reports, versión para programadores de Microsoft Visual Studio no
forma parte del instalador. Deberá descargar e instalar el Servicio de actualizaciones por separado.
Procedimiento
1.
Tras instalar SAP Crystal Reports, versión para programadores de Microsoft Visual Studio, abra Visual Studio
y cree un sitio Web o un proyecto para Windows.
2.
En Explorador de soluciones haga clic con el botón derecho en el nombre de proyecto en negrita y haga clic en
Agregar
Nuevo elemento .
3.
En el cuadro de diálogo Agregar nuevo elemento, seleccione Crystal Reports.
4.
En el campo Nombre, especifique Test.rpt y, a continuación, haga clic en Agregar.
Nota
Si es la primera vez que usa SAP Crystal Reports Designer incrustado, se le pedirá que acepte el Contrato
de licencia para el usuario final. Después de esto, se abrirá el cuadro de diálogo Servicio de actualizaciones.
Si ha abierto antes SAP Crystal Reports Designer incrustado, deberá abrir manualmente el cuadro de
diálogo Servicio de actualizaciones.
Se abrirá SAP Crystal Reports Designer incrustado y mostrará el nuevo informe.
5.
Si no aparece el cuadro de diálogo Servicio de actualizaciones, en el menú Crystal Reports, haga clic en
Comprobar actualizaciones.
Si no está instalado el Servicio de actualizaciones de SAP Crystal Reports, se le preguntará si desea instalarlo.
6.
En el cuadro de diálogo Servicio de actualizaciones, haga clic en Sí.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
11
Se cargará el sitio Web del Servicio de actualizaciones de SAP Crystal Reports, que dispone de un vínculo
para descargar el servicio de actualizaciones.
7.
Descargue e instale el Servicio de actualizaciones de SAP Crystal Reports.
8.
Inicie de nuevo Visual Studio.
9.
Abra Test.rpt.
Se iniciará SAP Crystal Reports Designer incrustado y mostrará el informe.
10. En el menú Crystal Reports, haga clic en Comprobar actualizaciones.
Se abrirá el Servicio de actualizaciones y buscará actualizaciones. Puede aceptar o rechazar las
actualizaciones disponibles.
1.2.1.1.4
Reports
Código de clave de producto de SAP Crystal
El código de clave de producto es una cadena alfanumérica con una longitud de 19 dígitos o caracteres. En SAP
Crystal Reports, versión para programadores de Microsoft Visual Studio, al crear proyectos de implementación
que usen Windows Installer, es posible que necesite un código de clave de producto para validar la licencia de las
aplicaciones Web o para Windows.
1.2.1.2
Comprobaciones necesarias
Para desarrollar un sitio Web o aplicación de Windows que use el SDK de SAP Crystal Reports .NET, tendrá que
comprobar que los componentes del desarrollador de Crystal Reports se han instalado correctamente y se han
integrado con Visual Studio. Para desarrollar un sitio Web, tendrá que llevar a cabo un paso adicional: comprobar
que el directorio virtual de los visores se ha instalado correctamente en los servidores de desarrollo,
implementación y Web.
En esta sección se explica la configuración que tendrá que comprobar antes de crear una aplicación de SAP
Crystal Reports .NET.
Información relacionada
Versiones compatibles de Visual Studio [página 9]
12
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.2.1.2.1
Comprobar que SAP Crystal Reports está instalado
Contexto
Para verificar que el componente SAP Crystal Reports de Visual Studio está instalado, asegúrese de que SAP
Crystal Reports aparece en el cuadro de diálogo Agregar nuevo elemento de Visual Studio.
Procedimiento
1.
Inicie Visual Studio.
2.
Cree un nuevo proyecto Web o de Windows (en cualquier lenguaje) o abra uno ya existente.
3.
En el menú Proyecto, haga clic en Agregar nuevo elemento.
Nota
Los nuevos archivos de informe se deben agregar directamente a un proyecto. No se puede crear un nuevo
informe de Crystal en Visual Studio mediante el menú Archivo.
4.
Cuando aparezca el cuadro de diálogo Agregar nuevo elemento, desplácese en éste y compruebe que Crystal
Reports es uno de los elementos disponibles.
1.2.1.2.2
Directorio de visores
SAP Crystal Reports se basa en un directorio virtual para obtener acceso a los visores a fin de mostrarlos. Dicho
directorio virtual y la ruta de archivos subyacente son exclusivos en cada una de las versiones de SAP Crystal
Reports; de esta forma, las versiones subsiguientes de SAP Crystal Reports instaladas en un mismo equipo
funcionarán sin conflictos.
1.2.1.2.2.1
visores
Ubicación predeterminada del directorio de
Si ha instalado SAP Crystal Reports usando la configuración y las rutas de archivos predeterminadas, el directorio
virtual de visores estará configurado de la siguiente forma:
Versión
Framework
SAP Crystal Reports, 4.x Framework
versión para progra­
madores de Micro­
soft Visual Studio
Ruta de archivos
Directorio de archivos al usar ASP.NET Development Server:
\Windows\Microsoft.NET\Framework
\v4.0.30319\ASP.NETClientFiles
\crystalreportviewers13
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
13
Versión
Framework
Ruta de archivos
Directorio de archivos al usar IIS:
\inetpub\wwwroot\aspnet_client\system_web
\4_0_30319\crystalreportviewers13
SAP Crystal Reports, 2,0 Framework
versión para progra­
madores de Micro­
soft Visual Studio
Directorio de archivos al usar ASP.NET Development Server:
\Windows\Microsoft.NET\Framework
\v2.0.50727\ASP.NETClientFiles
\crystalreportviewers13
Directorio de archivos al usar IIS:
\inetpub\wwwroot\aspnet_client\system_web
\2_0_50727\crystalreportviewers13
1.2.1.2.2.2
Para encontrar el directorio de visores
Procedimiento
1.
En el Panel de control, haga doble clic en Herramientas administrativas y, a continuación, haga doble clic en
Internet Information Services.
2.
En el cuadro de diálogo Internet Information Services, expanda el nodo Sitios Web y, a continuación, el nodo
Sitio Web predeterminado.
3.
Busque todas las carpetas que contengan una carpeta crystalreportsviewers13.
4.
Haga clic con el botón derecho en cada carpeta crystalreportsviewers13 y seleccione Propiedades.
5.
En el cuadro de diálogo Propiedades, confirme que la ruta local está configurada correctamente para su
versión de SAP Crystal Reports para Visual Studio.
1.2.1.2.3
Directorio de informes de muestra
Algunos de los ejemplos de las funciones, casos de enlace de informes y manuales se basan en informes de
muestra disponibles en SAP Crystal Reports.
Los informes de muestra pueden descargarse de http://www.sdn.sap.com/irj/boc/downloads
1.2.2
.
Configuración de proyectos
Esta sección constituye un punto de aprendizaje clave tanto para programadores de nivel avanzado como
intermedio. Aquí se muestran las mejores prácticas recomendadas para continuar con la creación y la
14
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
configuración de un nuevo proyecto para Windows o un proyecto/sitio Web con SAP Crystal Reports, versión
para programadores de Microsoft Visual Studio.
El proyecto nuevo que se crea sirve también como requisito previo para los tutoriales suministrados junto con
esta ayuda en línea.
1.2.2.1
Configuración de sitios Web en Visual Studio
En esta sección se describe la configuración de sitios Web en Visual Studio. Este sitio web que se crea sirve
también como requisito previo para los tutoriales de codificación suministrados junto con esta ayuda en línea.
1.2.2.1.1
Crear un nuevo sitio Web en Visual Studio
Procedimiento
1.
Inicie Visual Studio.
2.
En el menú Archivo, haga clic en Nuevo sitio Web.
3.
En el cuadro de diálogo Nuevo sitio Web, haga clic en Sitio Web ASP.NET.
4.
En la lista desplegable Ubicación, seleccione Sistema de archivos.
5.
En la lista desplegable Idioma, seleccione el idioma de codificación que desea usar.
6.
En el campo de texto Ubicación indique la ruta de directorio C:\WebSites\, seguida del nombre del
proyecto.
C:\WebSites\MiProyecto
7.
Haga clic en Aceptar.
1.2.2.1.2
1.2.2.1.2.1
Preparar el formulario Web Form
Para crear el formulario Web Form
Contexto
En esta sección puede configurar la clase de código subyacente del formulario Web Form.
Nota
Los términos "formulario Web", "página ASPX" y "Default.aspx" son intercambiables.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
15
Procedimiento
1.
En el Explorador de soluciones, haga doble clic en Default.aspx para abrir el formulario Web Form.
2.
En el menú Ver, haga clic en Código.
Se abrirá la clase de código subyacente. La clase se denomina _Default. El archivo de la clase se llama
Default.aspx.cs o Default.aspx.vb.
Nota
Si su página Default.aspx predeterminada se creó con código en línea, no coloque dicho código en un
archivo independiente. En tal caso, elimine la página ASPX y vuelva a crearla. Al crear la página ASPX,
active la casilla de verificación "Colocar código en archivo independiente".
3.
Si utiliza Visual Basic para escribir la clase, escriba "Option Strict On" en la parte superior de la clase.
Nota
Como práctica recomendada, se sugiere establecer Option Strict On al comienzo de cualquier clase de
Visual Basic del sitio Web. Cuando se escribe código, se impone el uso de las prácticas más
recomendables, con declaraciones de variables con tipos declarados y una proyección válida. Ambos se
comprueban durante la compilación. Las comprobaciones de cumplimiento estricto realizadas durante la
compilación pueden reducir las excepciones en tiempo de ejecución.
1.2.2.1.2.2
Para agregar instrucciones Imports/Using a los
espacios de nombres de referencia
Procedimiento
1.
Abra la página Default.aspx.
2.
En el menú Ver, haga clic en Código.
Aparece la clase de código subyacente del formulario Web Form.
3.
Sobre la firma de clase, agregue una declaración "Imports" [Visual Basic] o "using" [C#] a la parte superior
de la clase que contenga los siguientes espacios de nombres de SAP Crystal Reports.
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
Nota
Las clases de estos dos ensamblados se usan habitualmente en todos los tutoriales. Si hay ensamblados
adicionales que pueda necesitar ocasionalmente en tutoriales específicos, se le indicará que los agregue
durante dicho tutorial.
16
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.2.2.1.2.3
Para agregar un método de ayuda privado para el
código de configuración de SAP Crystal Reports
Procedimiento
En la clase, agregue un nuevo método de ayuda de ámbito privado sin valor de devolución, denominado
ConfigureCrystalReports().
Private Sub ConfigureCrystalReports()
End Sub
private void ConfigureCrystalReports()
{
}
El método ConfigureCrystalReports() permite a los usuarios interactuar con el informe en tiempo de
ejecución. Además, controla la interacción mediante programación con el informe.
Pasos siguientes
A continuación, agregue un controlador de eventos Page_Init desde el que se llamará al método
ConfigureCrystalReports(). Si se llama al métodoConfigureCrystalReports() desde este controlador
de eventos, se garantiza que el código de configuración de informes de Crystal se ejecute durante el evento de
inicialización de páginas.
1.2.2.1.2.4
Para agregar un controlador de eventos Page_Init
a la clase de código subyacente
Contexto
Normalmente el controlador de eventos Page_Load se usa para especificar código de configuración de Web
Forms en una aplicación Web de ASP.NET para que el código se llame durante el evento Page.Load. Sin
embargo, el código de configuración del informe de Crystal se debe llamar antes durante el evento Page.Init.
Procedimiento
1.
Agregue el evento Page_Init al código.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
17
○
Si está codificando en Visual Basic, seleccione Eventos de página en la lista desplegable de la parte
superior izquierda y, a continuación, el evento Init en lista desplegable de la parte superior derecha. El
controlador de eventos Page_Init se agregará a la clase subyacente.
Private Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Init
End Sub
○
Si está codificando en C#, escriba el control de eventos Page_Init con la siguiente sintaxis exacta.
private void Page_Init(object sender, EventArgs e)
{
}
Nota
En un formulario Web de C# en Visual Studio 2005 o posterior, los controladores de eventos
Page_Init, Page_Load o Page_PreRender de la clase de código subyacente se conectan
automáticamente al evento Init, Load o PreRender. La firma del control de eventos deberá coincidir
exactamente para que sea llamada.
Esta característica ocurre cuando la directiva Page, que se encuentra en la parte superior de la página
ASPX en la vista HTML, tiene el parámetro AutoEventWireup establecido como true.
Las versiones anteriores de Visual Studio .NET siempre establecían la directiva AutoEventWireup
Page en False, pero en los formularios Web de C# en Visual Studio 2005 y posterior la directiva
AutoEventWireup Page se establece en True de forma predeterminada.
2.
En el controlador de eventos Page_Init de Visual Basic o C#, indique una llamada al método de auxiliar
ConfigureCrystalReports().
ConfigureCrystalReports()
ConfigureCrystalReports();
3.
En el menú Archivo, haga clic en Guardar todo.
1.2.2.1.3
Para agregar un control de CrystalReportViewer a
un sitio Web
Procedimiento
1.
Abra la página Default.aspx.
2.
Haga clic en el botón Diseño situado en la parte inferior de la vista del formulario.
3.
En el Cuadro de herramientas, abra el nodo Informes para buscar el control CrystalReportViewer.
18
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Nota
En las versiones anteriores de SAP Crystal Reports, versión para programadores de Microsoft Visual
Studio, el control CrystalReportViewer aparecía en el nodo Crystal Reports.
4.
Arrastre y coloque el control CrystalReportViewer en el formulario Web Forms.
5.
En el menú Archivo, haga clic en Guardar todo.
Resultados
Cuando se agrega un control CrystalReportViewer a su aplicación, se agregarán de forma automática a su
proyecto referencias a los ensamblados de SAP Crystal Reports.
1.2.2.1.4
Configuración del archivo Web.Config
Un archivo Web.Config de una aplicación Web ASP.NET almacena configuración global, como información de
conexión de base de datos, referencias de ensamblados y tratamiento de errores. Este archivo se escribe en XML
y su elemento raíz siempre debe ser <configuration>. Se trata de una configuración avanzada y es opcional.
Los elementos siguientes son exclusivos de SAP Crystal Reports y se pueden agregar al archivo Web.Config.
Nota
Los números de versión pueden cambiar según el producto que tenga.
Nota
En .NET 2.0 y versiones superiores, la etiqueta section del archivo Web.Config debe utilizar la siguiente
sintaxis:
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="printControl"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
CrystalImageCleaner
El proceso CrystalImageCleaner elimina automáticamente las imágenes generadas que ha representado el
control CrystalReportViewer. Esta configuración permite establecer el intervalo de tiempo entre la exploración del
directorio de imágenes y la duración mínima de los archivos antes de que se eliminen. Este elemento se agrega
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
19
automáticamente al archivo Web.Config cuando se agrega el control CrystalReportViewer al sitio Web. Esto
corresponde a la clase CrystalImageCleaner.
●
CrystalImageCleaner-Sleep inicializa el período de tiempo en milisegundos que el sistema de limpieza de
imágenes permanece inactivo antes de buscar y limpiar los archivos de imagen del directorio de imágenes
dinámicas.
●
CrystalImageCleaner-Age inicializa la duración mínima en milisegundos de un archivo antes de que se
elimine.
●
CrystalImageCleaner-AutoStart controla el proceso CrystalImageCleaner. El sistema de limpieza de
imágenes limpia las imágenes temporales que se han creado al visualizar un informe.
Nota
Sólo se puede iniciar un sistema de limpieza en un único proceso de trabajo ASP.NET.
<appSettings>
<add key="CrystalImageCleaner-AutoStart" value="true" />
<add key="CrystalImageCleaner-Sleep" value="60000" />
<add key="CrystalImageCleaner-Age" value="120000" />
</appSettings>
CrystalImageHandler
El elemento CrystalImageHandler muestra todas las imágenes dinámicas en el control CrystalReportViewer.
Este ajuste configura el proceso de trabajo de ASP.NET para redirigir las solicitudes efectuadas a
CrystalImageHandler.aspx a una clase interna de controlador de imágenes solamente. Si no tiene la configuración
CrystalImageHandler en el archivo Web.Config, no se mostrarán las imágenes del sitio web. Este elemento se
agrega automáticamente al archivo Web.Config cuando se agrega el control CrystalReportViewer al sitio Web.
<system.web>
<httpHandlers>
<add verb="GET" path="CrystalImageHandler.aspx"
type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web,
Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
</httpHandlers>
</system.web>
documentView
El elemento documentView controla el aspecto del informe en el lienzo de informes. Hay dos configuraciones
disponibles:
●
Si se establece el valor a printlayout se muestra un borde gris alrededor del informe y una sombra en el
lienzo. Este es el valor predeterminado.
20
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
●
Si el valor se establece en weblayout, el lienzo se rellenará con el informe.
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="crystalReportViewer"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<crystalReportViewer>
<add key="documentView" value="weblayout"/>
</crystalReportViewer>
</crystalReports>
</businessObjects>
EnableTextClipping
El elemento EnableTextClipping controla si el texto del campo está cortado. Si está definido como
verdadero, el texto de un campo dado no superpondrá el texto del campo contiguo.
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="crystalReportViewer"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<crystalReportViewer>
<add key="EnableTextClipping" value="true"/>
</crystalReportViewer>
</crystalReports>
</businessObjects>
globalResourcePath
El elemento globalResourcePath es la referencia a la ruta del directorio de archivos para los recursos globales.
Este directorio de archivos contiene los recursos de idioma personalizados en una ubicación central y se puede
compartir entre varias aplicaciones Web. Este ajuste permite acceder a los recursos globales de un sitio Web
específico. En SAP CrystalReports.NET, los archivos de recursos predeterminados no se incluyen en la instalación
del producto, pero pueden descargarse desde el sitio Web de asistencia técnica de SAP BusinessObjects: http://
help.sap.com. Este elemento se tiene que agregar manualmente al archivo Web.Config del sitio Web.
<appSettings>
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
21
<add key="globalResourcePath" value="c:\CrystalReportViewer_resource_files\"/>
</appSettings>
maxNumberListOfValues
maxNumberListOfValues controla el número de elementos de LOV que se enviarán al cliente. Esto controla el
número de valores que se muestran en el panel de parámetros. Cuando se establece este valor, sólo aparecerán
los primeros n valores en una lista de valores. Podrá consultar los diferentes conjuntos de valores en el cuadro de
diálogo Avanzado en función del tamaño de su lista y del valor del elemento maxNumberListOfValues. Por
ejemplo, si dispone de 180 valores, y establece el elemento maxNumberListOfValues en 50, podrá ver los
primeros 50 valores enumerados en el panel de parámetros. Podrá consultar los 180 valores en el cuadro de
diálogo Avanzado, donde se mostrarán los tres grupos de 50 valores, y un grupo de 30.
Se recomienda que este valor siempre sea mayor que 0. El valor predeterminado es 200.
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="crystalReportViewer"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<crystalReportViewer>
<add key="maxNumberListOfValues" value="50"/>
</crystalReportViewer>
</crystalReports>
</businessObjects>
printControl
El elemento printControl permite imprimir el informe directamente en la impresora local. El directorio de
instalación predeterminado es C:\Program Files (x86)\SAP BusinessObjects\Crystal Reports
for .NET Framework 4.0\Common\Crystal Reports 2011\crystalreportviewers.
Esta configuración hace que el archivo .cab esté visible para el sitio Web de SAP Crystal Reports .NET. Este
elemento se tiene que agregar manualmente al archivo Web.Config del sitio Web.
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="printControl"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
22
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
<crystalReports>
<printControl>
<add key="url" value="http://localhost/PrintControl.cab" />
</printControl>
</crystalReports>
</businessObjects>
processingIndicatorDelay
El elemento processingIndicatorDelay controla el tiempo que transcurre antes de que aparezca el indicador
de procesamiento de informes. Este valor se indica en milisegundos. Si se establece este valor en 0, se
deshabilitará el indicador de procesamiento de informes. El valor predeterminado es 200 milisegundos.
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="crystalReportViewer"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<crystalReportViewer>
<add key="processingIndicatorDelay" value="20"/>
</crystalReportViewer>
</crystalReports>
</businessObjects>
processingIndicatorText
El elemento processingIndicatorText controla el texto que se muestra en el indicador de procesamiento de
informes. El texto predeterminado es: Espere mientras el documento se procesa.
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="crystalReportViewer"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<crystalReportViewer>
<add key="processingIndicatorText" value="Thank you for waiting."/>
</crystalReportViewer>
</crystalReports>
</businessObjects>
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
23
reportMappings
El elemento reportMappings actualiza los sitios Web creados en Visual Studio 2003 que utilizan informes
incrustados a sitios Web no incrustados cuando se abren en Visual Studio 2005 o posterior. Esta configuración
convierte el archivo .dll creado en Visual Studio 2003 en un archivo de disco. Visual Studio 2005 y 2008 no
admiten sitios Web incrustados y debe modificar el archivo Web.Config para garantizar que sigue siendo funcional
con la versión más reciente de Visual Studio. Este elemento se tiene que agregar manualmente al archivo
Web.Config del sitio Web. La configuración reportMappings requiere una ruta absoluta.
Nota
Este elemento sólo es válido para Visual Studio 2005 y Visual Studio 2008.
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="reportMappings"
type="CrystalDecisions.Shared.ReportMappingHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<reportMappings>
<add reportName="World Sales Report.rpt" path="C:\Report\World Sales
Report.rpt" />
</reportMappings>
</crystalReports>
</businessObjects>
resourceURI
El elemento resourceURI establece la ubicación del directorio crystalreportviewers en su aplicación Web.
El directorio crystalreportviewers contiene todos los archivos que necesita el visor.
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="crystalReportViewer"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<crystalReportViewer>
<add key="resourceURI" value="~/crystalreportviewers12" />
</crystalReportViewer>
</crystalReports>
</businessObjects>
24
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
serverFileReportManager
El elemento serverFileReportManager es un servicio Web que enumera los archivos del servidor en el equipo
del servidor. Este ajuste permite obtener una lista de objetos (carpetas e informes) desde un equipo remoto. Este
ajuste asigna la raíz del directorio de archivos para el servidor. En este ejemplo, la raíz se establece en c:
\inetpub\wwroot. Este elemento se tiene que agregar manualmente al archivo Web.Config del sitio Web.
Nota
Esto corresponde a la clase serverFileReportManager.
<configSections>
<sectionGroup name="crystalDecisions">
<section name="serverFileReportManager"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</configSections>
<crystalDecisions>
<serverFileReportManager>
<add key="rootDirectory" value="c:\inetpub\wwwroot" />
</serverFileReportManager>
</crystalDecisions>
UseAsynchronousRequests
De forma predeterminada, se permiten las solicitudes asíncronas dentro del visor de DHTML. Si desea habilitar el
botón Atrás en el navegador del usuario para que funcione con el visor DHTML, deberá deshabilitar las solicitudes
asíncronas estableciendo este parámetro a false.
Nota
No se recomienda establecer el elemento UseAsynchronousRequests en false. Si lo hace, se deshabilitará
el cuadro de diálogo Avanzado en el panel de parámetros, así como algunas mejoras de rendimiento del visor y
funciones de aspecto mejoradas.
<context-param>
<param-name>crystal_use_asynchronous_requests</param-name>
<param-value>false</param-value>
</context-param>
UseBrowserLocale
El elemento UseBrowserLocale recupera la configuración de idioma del explorador para el control
CrystalReportViewer. Cuando se establece en true, este ajuste configura el control CrystalReportViewer para
observar la configuración regional del explorador. Cuando se establece en false, este ajuste restringe la
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
25
configuración regional que se muestra página a página. Este elemento se tiene que agregar manualmente al
archivo Web.Config del sitio Web.
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="crystalReportViewer"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<crystalReportViewer>
<add key="UseBrowserLocale" value="true" />
</crystalReportViewer>
</crystalReports>
</businessObjects>
Ejemplo
Archivo Web.Config de ejemplo
<?xml version="1.0"?>
<configuration>
<appSettings>
<add key="CrystalImageCleaner-AutoStart" value="true"/>
<add key="CrystalImageCleaner-Sleep" value="60000"/>
<add key="CrystalImageCleaner-Age" value="120000"/>
</appSettings>
<connectionStrings/>
<system.web>
<compilation debug="true">
<assemblies>
<add assembly="CrystalDecisions.Web, Version=13.0.2000,
Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.Shared, Version=13.0.2000,
Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.ReportSource, Version=13.0.2000,
Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.CrystalReports.Engine,
Version=13.0.2000, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
</assemblies>
</compilation>
<authentication mode="Windows"/>
<httpHandlers>
<add verb="GET" path="CrystalImageHandler.aspx"
type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web,
Version=12.1.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
</httpHandlers>
</system.web>
</configuration>
Información relacionada
Imprimir
26
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Web: configurar la localización basada en el explorador
Web configurar recursos personalizados globales o locales
Cómo agregar o eliminar referencias en Visual Studio
Versiones de SAP Crystal Reports
1.2.2.2
Studio
Configuración de proyectos de Windows en Visual
Esta sección constituye un punto de aprendizaje clave tanto para programadores de nivel avanzado como
intermedio. Aquí se muestran las mejores prácticas recomendadas para continuar con la creación y la
configuración de un nuevo proyecto de Windows con SAP Crystal Reports, versión para programadores de
Microsoft Visual Studio.
En esta sección se muestra la configuración de un proyecto de Windows mediante un modelo de codificación.
Como parte de esta configuración, se tendrá acceso a la clase Form1 y se escribirá código. Este proyecto de
Windows basado en código que se crea sirve también como requisito previo para los tutoriales de codificación
suministrados junto con esta ayuda en línea.
1.2.2.2.1
Studio
Crear un nuevo proyecto de Windows en Visual
Procedimiento
1.
Inicie Visual Studio.
2.
En el menú Archivo, seleccione Nuevo y, a continuación, haga clic en Proyecto.
3.
En el cuadro de diálogo Nuevo proyecto, seleccione una carpeta de lenguaje para C# o Visual Basic en la lista
Tipos de proyecto.
4.
En la lista Plantillas, haga clic en Aplicación para Windows Forms.
5.
En el campo Nombre, sustituya el nombre de proyecto predeterminado por el nombre de su proyecto.
Utilice la convención de nomenclatura Pascal, donde se escribe la primera letra del nombre del proyecto en
mayúsculas, ya que el nombre del proyecto también se utilizará como nombre del espacio de nombres para el
ensamblado generado a partir del proyecto.
6.
Haga clic en Aceptar.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
27
1.2.2.2.2
Aplicar la configuración de proyecto Visual Basic
estándar (opcional)
Contexto
Si desea configurar el proyecto de forma que se pueda utilizar con los tutoriales incluidos en esta documentación,
es necesario realizar una pequeña modificación en la configuración del mismo.
Procedimiento
1.
En Explorador de soluciones, haga clic con el botón derecho en el nombre de proyecto en negrita bajo del
nombre de solución y, a continuación, seleccione Propiedades.
2.
En la vista Propiedades, haga clic en la ficha Compilar.
3.
En la lista OptionStrict, haga clic en Activada.
4.
Cierre la vista Propiedades.
5.
En el menú Archivo, haga clic en Guardar todo.
Nota
Como práctica recomendada, se sugiere habilitar OptionStrict al comienzo de cualquier proyecto de
Visual Basic. Cuando se escribe código, se impone el uso de las prácticas más recomendables, con
declaraciones de variables con tipos declarados y una proyección válida. Ambos se comprueban durante la
compilación. Las comprobaciones de cumplimiento estricto realizadas durante la compilación pueden
reducir las excepciones en tiempo de ejecución.
1.2.2.2.3
Preparar el formulario Windows Form en Visual
1.2.2.2.3.1
Para crear el formulario de Windows Form
Contexto
Por lo general, en las aplicaciones para Windows de Visual Basic 6, un formulario predeterminado se define con el
nombre Form1. Siguiendo este modelo, en un proyecto de Windows se utiliza el mismo nombre predeterminado
de formulario, Form1, con la extensión cs o vb, en función del lenguaje que se utilice.
Procedimiento
1.
28
Si Form1 no aparece en la ventana principal, haga doble clic en Form1 en el Explorador de soluciones para
abrirlo en la vista Diseño.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Form1 se abrirá en Designer.
2.
En el menú Ver, haga clic en Código.
Aparece la vista Código de la clase Form1. La presentación de esta clase depende de si la aplicación para
Windows se codifica en Visual Basic o C#.
En C#, la clase Form1 muestra lo siguiente:
○
La firma de clase.
○
Un constructor (Form1).
En Visual Basic, la clase Form1 muestra lo siguiente:
○
La firma de clase (una clase Form1).
Nota
Una clase "partial" independiente contiene métodos y variables adicionales de la clase Form1. (Esto es
cierto para C# y Visual Basic). Las clases parciales se explican posteriormente en Configuración de
proyectos de Windows.
1.2.2.2.3.2
Para agregar un método de ayuda privado para el
código de configuración de SAP Crystal Reports
Procedimiento
1.
Agregue a esta clase Form1 un nuevo método auxiliar de ámbito privado sin valor devuelto, denominado
ConfigureCrystalReports().
Private Sub ConfigureCrystalReports()
End Sub
private void ConfigureCrystalReports()
{
}
A continuación, agregue un controlador de eventos Form_Load y una llamada a
ConfigureCrystalReports() en el controlador de eventos Form_Load. De este modo, el método
ConfigureCrystalReports() se ejecutará automáticamente al cargar el formulario.
2.
3.
En el menú Ver, haga clic en Diseñador.
Haga doble clic en Form1.
Regresará a la vista Código. Como hizo doble clic en Form1, se generará automáticamente un controlador de
eventos Form1_Load en la clase Form1.
4.
En el control de eventos Form1_Load, escriba una llamada al método ConfigureCrystalReports().
ConfigureCrystalReports()
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
29
ConfigureCrystalReports();
5.
En el menú Archivo, haga clic en Guardar todo.
1.2.2.2.4
Agregar un control CrystalReportViewer
1.2.2.2.4.1
Para agregar un control de CrystalReportViewer a
una aplicación de Windows
Procedimiento
1.
Abra un formulario de Windows Form en la vista Diseño.
2.
En el Cuadro de herramientas, abra el nodo Informes para buscar el control CrystalReportViewer.
Nota
En las versiones anteriores de Visual Studio, el control CrystalReportViewer aparecía en el nodo
Crystal Reports.
3.
Arrastre y suelte el control CrystalReportViewer en el formulario.
4.
En el menú Archivo, haga clic en Guardar todo.
Resultados
Cuando se agrega un control CrystalReportViewer a su aplicación, se agregarán de forma automática a su
proyecto referencias a los ensamblados de SAP Crystal Reports.
1.2.2.2.4.2
Para agregar instrucciones Imports/Using a los
espacios de nombres de referencia
Procedimiento
1.
Si la carpeta Referencias no está visible en Explorador de soluciones, en la barra de herramientas Explorador
de soluciones, haga clic en Mostrar todos los archivos para mostrar todos los archivos de proyecto.
2.
En Explorador de soluciones, expanda la carpeta Referencias.
3.
Verifique que se han agregado los siguientes ensamblados de SAP Crystal Reports:
30
○
CrystalDecisions.CrystalReports.Engine
○
CrystalDecisions.Shared
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
4.
Seleccione Form1 y, a continuación, en el menú Ver, haga clic en Código.
5.
Sobre la firma de clase, agregue una declaración "Imports" [Visual Basic] o "using" [C#] a la parte superior
de la clase que contenga los siguientes espacios de nombres de SAP Crystal Reports.
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
using CrystalDecisions.CrystalReports.Engine;
using CrystalDecisions.Shared;
1.3
Aspectos fundamentales del SDK
1.3.1
1.3.1.1
Arquitectura
Elegir el modelo de objetos correcto para el proyecto
Para elegir el modelo de objetos correcto para el proyecto, debe comprender los métodos prácticos para trabajar
con el control CrystalReportViewer y saber cómo interactúa este control con el resto de los modelos de objetos.
Nota
En esta documentación, un modelo de objetos hace referencia a una clase básica y las clases que la rodean,
que forman un modelo de programación. En SAP Crystal Reports estos modelos de objetos se basan en una
clase básica que encapsula un archivo de definición de informes. Esa clase básica y el modelo de objetos que la
rodea permiten la interacción mediante programación con el informe.
Método práctico para trabajar con el control CrystalReportViewer
Una aplicación Web eficaz diferencia claramente su nivel de presentación de la lógica de negocios subyacente.
El diseño del control ASP.NET promueve de forma natural este modelo. Encapsula la información de presentación
en el control y, a continuación, lo enlaza a un objeto subyacente o a un modelo de objetos que lleva a cabo la
lógica de negocios.
CrystalReportViewer es un control .NET que sigue esta arquitectura. Funciona como objeto de presentación de
Web Form o Windows Form (el nivel de presentación), y se puede enlazar a cualquiera de los siguientes modelos
de objetos:
●
Modelo de objetos ReportDocument
●
Modelo de objetos ReportClientDocument (Report Application Server)
●
Modelo de objeto InfoObject (SAP Crystal Reports Server o plataforma SAP BusinessObjects Business
Intelligence)
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
31
En un caso de método práctico, el control CrystalReportViewer enlaza a uno de los modelos de objetos que lleva a
cabo la lógica de negocios, normalmente para la manipulación del informe.
En este caso, el control CrystalReportViewer limita su interacción mediante programación para modificar sólo la
configuración de presentación; por ejemplo, ocultar o mostrar la barra de herramientas del visor o un botón de
esa barra de herramientas.
Modelo de objetos CrystalReportViewer
El control CrystalReportViewer contiene propiedades y métodos que permiten la interacción con la presentación
de los informes. Asimismo tiene unas pocas propiedades y métodos para interactuar con los informes enlazados
al control. Estas propiedades y métodos constituyen un modelo de objetos limitado.
Algunos casos de enlaces de informes se basan en el modelo de objetos CrystalReportViewer. En estos casos, el
control CrystalReportViewer se enlaza directamente a un informe (por ejemplo, se pasa una cadena de ruta al
informe de un directorio de archivos), sin encapsular primero el informe en ningún modelo de objetos. En dichos
casos, puesto que el control CrystalReportViewer encapsula el informe directamente, se debe basar en el modelo
de objetos limitado del control para interactuar con el informe mediante programación.
Pero en la mayoría de los casos de enlace, es desalentador utilizar CrystalReportViewer como modelo de objetos.
En su lugar, utilice el modelo de objetos ReportDocument, por las siguientes razones:
●
El modelo de objetos CrystalReportViewer genera el riesgo de crear conflictos entre los modelos de objetos.
No mezcle el modelo de objetos CrystalReportViewer con otros modelos.
●
El modelo de objetos CrystalReportViewer proporciona una interacción limitada con los informes; contiene un
pequeño subconjunto de las funciones disponibles en el modelo de objetos ReportDocument.
●
El modelo de objetos CrystalReportViewer difumina la separación del nivel de presentación y de la lógica de
negocios subyacente del código.
El modelo de objetos ReportDocument
ReportDocument es un modelo de objetos más eficaz y completo que CrystalReportViewer. Se incluye con el SDK
de SAP Crystal Reports .NET y proporciona mayores posibilidades de manipular los informes en el código.
¿Cuál es el modelo de objetos que se debe utilizar?
Si no va a actualizar a SAP Crystal Reports Server ni a la plataforma SAP BusinessObjects Business Intelligence,
el modelo de objeto ReportDocument es el modelo de objeto recomendado para el trabajo de desarrollo con el
SDK de SAP Crystal Reports.
Nota
En SAP Crystal Reports 10 o superior y SAP Crystal Reports para Visual Studio 2005, el modelo de objetos
ReportDocument se ha adaptado al modelo de objetos ReportClientDocument para facilitar la actualización a
un servidor.
32
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.3.1.2
Evitar mezclar los modelos de objetos
No mezcle el modelo de objetos CrystalReportViewer con otros modelos.
El uso del control CrystalReportViewer en su función de modelo de objetos limitado funciona correctamente,
siempre y cuando lo enlace directamente al informe con una cadena de ruta sencilla.
Pero si lo encapsula en uno de los demás modelos de objetos (como ReportDocument o ReportClientDocument)
y, a continuación, enlaza el control a ese modelo de objetos, deje de utilizar inmediatamente el modelo de objetos
CrystalReportViewer. El modelo limitado que se proporciona con el control CrystalReportViewer se convierte en
redundante respecto al modelo de objetos más eficaz al que está enlazado. Además, la configuración que se
aplica al modelo de objetos CrystalReportViewer es visible para el otro modelo de objetos, lo que podría dar lugar
a un comportamiento y excepciones inesperados.
Por ejemplo, quizá prefiera utilizar el modelo de objetos ReportDocument para exportar o imprimir un informe
mensual desde el servidor. Si ha establecido un parámetro mensual en este informe con el modelo de objetos
CrystalReportViewer, puede que experimente problemas. El modelo de objetos ReportDocument no puede ver la
configuración de parámetros aplicada en el modelo de objetos CrystalReportViewer. Intentará exportar o imprimir
el informe sin darse cuenta de la existencia de esa configuración de parámetro mensual y, a continuación,
mostrará el mes equivocado o incluso provocará una excepción.
La mejor respuesta es limitar el uso del control CrystalReportViewer para informar de la configuración de
presentación sólo cuando el control se haya enlazado a uno de los modelos de objetos subyacentes.
1.3.1.3
SAP Crystal Reports Designer incrustado
SAP Crystal Reports Designer incrustado crea o modifica informes. Está formado por una interfaz gráfica para el
usuario para el diseño de informes WYSIWYG, y una serie de asistentes que simplifican la conectividad, la
ordenación, el agrupamiento de los datos y los problemas de diseño de informes complejos adicionales. SAP
Crystal Reports Developer incluye una versión mejorada del diseñador incrustado que permite crea potentes
informes y aplicaciones de elaboración de informes. El diseñador incrustado que se incluye con SAP Crystal
Reports, versión para programadores de Microsoft Visual Studio contiene muchas de las funciones de SAP
Crystal Reports Designer.
Función de SAP Crystal Reports Designer incrustado en la arquitectura
SAP Crystal Reports Designer incrustado se incluye en la descripción de la arquitectura porque su función es
fundamental para SAP Crystal Reports, versión para programadores de Microsoft Visual Studio: crea los archivos
de informe que se mostrarán. Sin embargo, la función de SAP Crystal Reports Designer incrustado es una función
en tiempo de diseño. La función que implica la presentación e interacción con los informes, que se produce en
tiempo de ejecución, pertenece al SDK de SAP Crystal Reports. Por lo tanto, aunque el diseñador incrustado crea
los informes que se utilizan en la arquitectura, no forma parte de la propia arquitectura.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
33
Información relacionada
Usar SAP Crystal Reports Designer incrustado [página 642]
1.3.1.4
Controles de visores de informes
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio incluye controles de forma estándar
para visualizar informes. Cada control encapsula compleja información de diseño de informe en un objeto GUI
dentro del cuadro de herramientas.
Se incluyen dos controles:
El control CrystalReportViewer.
Este control muestra el informe con un diseño basado en páginas, con la
posibilidad de moverse entre ellas.
Control
CrystalReportPartsViewer.
El control muestra información de resumen de informe en una pequeña
ventana al estilo de un portal, con la posibilidad de profundizar en el informe
a través de una serie de partes vinculadas.
Cada control se usa para mostrar un informe arrastrando y soltando el control desde el Cuadro de herramientas
en el formulario Web o para Windows y, a continuación, asignando la propiedad ReportSource de dicho control a
un informe.
Información relacionada
¿Cómo utilizo los controles de visores de informes? [página 42]
1.3.1.5
Modelos de objetos
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio proporciona un SDK que contiene
dos modelos de objetos. Con licencia adicional, el SDK se expande para contener cuatro modelos de objetos.
Los controles del visor de informes proporcionan el punto de entrada al SDK. La razón es que el visor de informes
muestra los informes mediante el enlace a un objeto de informe; todos los modelos de objetos del SDK exponen y
manipulan objetos de informe.
Cada modelo de objetos proporciona niveles de mayor eficacia y complejidad:
●
El modelo de objetos más sencillo es CrystalReportViewer.
El control CrystalReportViewer de un formulario Web Forms o Windows Forms tiene, por definición, una
clase subyacente del mismo nombre. Esta clase CrystalReportViewer expone propiedades y métodos
para modificar la funcionalidad de presentación del control, así como para interactuar con las clases que
administran inicios de sesión, parámetros y fórmulas de selección de base de datos. Este conjunto de clases
es el modelo de objetos más sencillo. La clase CrystalReportViewer existe de dos formas distintas: una en un
espacio de nombres de Windows y otra en un espacio de nombres Web. Por tanto, muchos elementos de este
34
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
modelo de objetos se duplican en ambos espacios de nombres, con algunas variaciones para admitir las
diferencias de las plataformas Windows y Web.
Las clases de este modelo de objetos se incluyen en el espacio de nombres CrystalDecisions.Web para la
versión de formularios Web Forms de este control o en el espacio de nombres
CrystalDecisions.Windows.Forms para la versión de formularios Windows Forms del control.
●
Un modelo de objetos más amplio es ReportDocument.
La clase ReportDocument es una puerta de enlace al conjunto de clases del espacio de nombres Engine,
que incluye Database, DataDefinition, ExportOptions, PrintOptions, ReportDefinition,
ReportOptions y SummaryInfo. Se trata de un conjunto más completo de clases que proporcionan
posibilidades más eficaces de personalización e interacción con el informe.
Las clases de este modelo de objetos se incluyen en el espacio de nombres
CrystalDecisions.CrystalReports.Engine.
●
Los siguientes modelos de objetos están disponibles mediante actualización:
○
Un modelo de objetos con mayor posibilidad de modificación de informes denominado
ReportClientDocument.
Esta clase funciona como puerta de enlace a un modelo de objetos mucho más amplio formado por
muchas clases de varios espacios de nombres. Expone la estructura completa del informe mediante el
SDK, de tal forma que se pueden crear o modificar todos los aspectos del informe mediante
programación en tiempo de ejecución.
Las clases de este modelo de objetos se incluyen en el grupo de espacios de nombres
CrystalDecisions.ReportAppServer.
El modelo de objetos ReportClientDocument se suministra con un Report Application Server (RAS),
para el que se requiere una licencia adicional. Hay disponible un servidor de aplicaciones de informes con
SAP Crystal Reports Server y la plataforma SAP BusinessObjects Business Intelligence.
○
Un modelo de objetos más completo para interactuar con las funciones en el nivel de plataforma SAP
Crystal Reports Server o la plataforma SAP BusinessObjects Business Intelligence, denominado
InfoObject. Se suministra con la licencia de SAP Crystal Reports Server o de la plataforma SAP
BusinessObjects Business Intelligence.
Esta clase funciona como puerta de enlace al modelo completo de objetos de plataforma SAP Crystal
Reports Server o de la plataforma SAP BusinessObjects Business Intelligence.
Las clases de este modelo de objetos se incluyen en el grupo de espacios de nombres
CrystalDecisions.Enterprise.
Nota
El modelo de objetos InfoObject se proporciona sólo con SAP Crystal Reports Server y la plataforma
SAP BusinessObjects Business Intelligence, para la que se requiere una licencia adicional.
Información relacionada
Elegir el modelo de objetos correcto para el proyecto [página 31]
Comparar soluciones de elaboración de informes de SAP BusinessObjects Business Intelligence [página 64]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
35
1.3.1.5.1
Modelo de objetos CrystalReportViewer
La clase CrystalReportViewer tiene dos funciones:
●
En el formulario Web Forms o Windows Forms, CrystalReportViewer se expone como control .NET que se
puede agregar al formulario para mostrar el informe. Para obtener información específica sobre su función
como control .NET, vea Controles de visores de informes [página 34].
●
En el código subyacente del formulario Web Forms o Windows Forms, la clase CrystalReportViewer
proporciona el modelo de objetos más sencillo del SDK. Exploraremos ese modelo de objeto más adelante en
esta sección.
La forma más sencilla de colocar un informe en un formulario Web Forms o Windows Forms es agregar el control
CrystalReportViewer al formulario y, a continuación, en la clase de código subyacente, asignar la ruta del informe
como cadena a la propiedad ReportSource de la clase CrystalReportViewer.
Si asigna la ruta del informe directamente al control (en vez de colocar el informe dentro de un modelo de objetos
más complejo, como ReportDocument o ReportClientDocument), restringe la interfaz a sólo el modelo de objetos
más sencillo: CrystalReportView
Comparación del modelo de objetos CrystalReportViewer
CrystalReportViewer tiene dos diagramas de modelo de objetos, ya que se vuelve a utilizar el mismo nombre de
control y de clase (y, por tanto, su modelo de objetos subyacente) en aplicaciones para Windows y Web. Por
consiguiente, el modelo de objetos CrystalReportViewer se repite (con variaciones mínimas) en dos espacios de
nombres distintos.
La versión de Windows de CrystalReportViewer incluye las clases y los eventos principales compartidos por
las versiones de Windows y Web del modelo de objetos.
La versión Web del modelo de objetos CrystalReportViewer incluye las mismas clases y eventos que la versión de
Windows, pero, además, tiene los siguientes eventos relacionados con la forma en que se carga la página ASPX.
Información relacionada
Controles de visores de informes [página 34]
Enlazar informes al modelo de objetos CrystalReportViewer [página 169]
1.3.1.5.2
Modelo de objetos ReportDocument
La clase ReportDocument proporciona un modelo de objetos más completo para el SDK que el modelo de
objetos CrystalReportViewer.
La clase ReportDocument forma parte del espacio de nombres
CrystalDecisions.CrystalReports.Engine. Funciona como puerta de enlace a un conjunto de clases del
36
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
espacio de nombres Engine, que proporciona más herramientas para la manipulación de un informe mediante
programación.
El modelo de objetos ReportDocument
En la sección anterior, aprendió a trabajar con el modelo de objetos CrystalReportViewer básico asignando la
cadena de la ruta de un informe directamente al control CrystalReportViewer.
En el siguiente nivel del modelo de objetos, utilice el modelo de objetos ReportDocument para encapsular el
informe dentro de una instancia de ReportDocument, antes de que se asigne al control. De esta forma, se
proporciona acceso al modelo de objetos más complejo y eficaz de ReportDocument.
Nota
Puesto que ambos modelos de objetos están implicados en este proceso (CrystalReportViewer para cargar
y mostrar el informe, ReportDocument para encapsularlo y manipularlo), es fácil confundir las funciones de
ambos modelos de objetos. Una vez que el modelo de objetos ReportDocument se ha utilizado para
encapsular el informe, se debe restringir cualquier manipulación del informe a ese modelo. Si trata de utilizar
las propiedades y los métodos de CrystalReportViewer para manipular el informe, los dos modelos de
objetos entran en conflicto y genera un comportamiento inesperado.
Una vez que ha introducido un modelo de objetos adicional, restrinja el uso del código de
CrystalReportViewer sólo para establecer propiedades de presentación.
ReportDocument y ReportClientDocument (RAS)
En SAP Crystal Reports 9, ambos modelos de objetos eran totalmente independientes. En SAP Crystal Reports 10
y versiones posteriores, se ha eliminado la separación básica entre los modelos de objetos. El modelo de objetos
ReportDocument ahora funciona como proxy para (un subconjunto de) funcionalidad desde el modelo de
objetos ReportClientDocument.
SAP Crystal Reports 2008 permite acceder a una versión limitada del modelo de objetos
ReportClientDocument mediante la propiedad ReportDocument.ReportClientDocument.
Información relacionada
Tutoriales del modelo de objetos ReportDocument [página 336]
En esta sección se presentan varios tutoriales del modelo de objetos ReportDocument.
Enlazar informes al modelo de objetos ReportDocument [página 198]
Modelo de objetos CrystalReportViewer [página 36]
Elegir el modelo de objetos correcto para el proyecto [página 31]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
37
1.3.1.5.3
Modelo de objetos ReportClientDocument (RAS)
El modelo de objetos ReportClientDocument proporciona el modelo de objetos más eficaz y completo para
manipular informes. Este modelo de objetos sólo está disponible como parte de un servidor de aplicaciones de
informes (RAS), que puede ser un servidor de aplicaciones de informes no administrado (RAS) o un servidor de
aplicaciones de informes administrado (BOE).
El modelo de objetos ReportClientDocument está formado por muchas clases de diversos espacios de
nombres. El espacio de nombres lleva el prefijo CrystalDecisions.ReportAppServer. Este modelo de
objetos expone toda la estructura del informe en el SDK, para permitir crear, modificar y guardar cambios
mediante programación en todos los aspectos del informe en tiempo de ejecución.
Una instancia de ReportClientDocument consta de un informe que se puede modificar con programación
mediante sus propiedades de clase. Estas propiedades están vinculadas con una serie de bibliotecas del SDK que
contienen controladores, modelos de definición de datos y modelos de definición de informes:
●
ReportDefinition corresponde a la apariencia del informe, como se muestra en SAP Crystal Reports
Designer.
●
DataDefinition corresponde al explorador de campos de SAP Crystal Reports Designer.
●
RowsetController corresponde a los valores de datos procesados de cada fila de detalles, cuando se
consulta el informe en tiempo de ejecución.
Las instancias de ReportClientDocument pueden ser instancias de uno de estos objetos:
●
Un archivo .rpt existente cargado desde un directorio y modificado con las clases de definición de informe y
de definición de datos del SDK de ReportClientDocument.
●
Un informe completamente nuevo y vacío que se genera con las clases de definición de informe y definición
de datos del SDK de ReportClientDocument.
Esta instancia de la clase ReportClientDocument puede cargarse tan sólo el tiempo suficiente para enviar la
instancia al visor para su visualización, antes de que pase a estar fuera del ámbito. Sin embargo, también se
puede modificar y, a continuación, guardar como un informe (.rpt) en un directorio con una de las clases de
controlador.
Para obtener información detallada sobre el modelo de objetos ReportClientDocument, consulte la
documentación del SDK de SAP BusinessObjects RAS .NET.
ReportClientDocument en SAP Crystal Reports 9
SAP Crystal Reports 9 (versión Advanced) se entregaba con RAS no administrado y los ensamblados .NET de
RAS necesarios para programar en el modelo de objetos ReportClientDocument. De esta forma, los
programadores podían crear proyectos .NET que aprovechaban el modelo de objetos ReportClientDocument.
Sin embargo, también significaba que los proyectos que se crearon anteriormente con el modelo de objetos
ReportDocument proporcionado con SAP Crystal Reports se debía volver a codificar totalmente para el modelo
de objetos ReportClientDocument proporcionado con RAS. La razón era que ambos modelos de objetos eran
totalmente independientes.
38
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
ReportClientDocument en SAP Crystal Reports 10 y superior
En SAP Crystal Reports 10, se eliminó la separación básica entre los modelos de objetos. Esto se ha realizado
reescribiendo el modelo de objetos ReportDocument para que sirva como proxy para funcionalidad (o para un
subconjunto de funcionalidad) desde el modelo de objetos ReportClientDocument. Las clases del modelo de
objetos ReportDocument exponen las mismas firmas de propiedades y métodos que antes, pero la funcionalidad
subyacente se modifica para redirigir cada propiedad y método a las propiedades y métodos del modelo de
objetos ReportClientDocument más eficaz.
Esto no significa que una versión básica de SAP Crystal Reports Developer obtenga acceso total a un servidor
RAS no administrado ni al modelo de objetos ReportClientDocument. La versión básica de SAP Crystal
Reports sigue teniendo acceso sólo al modelo de objetos ReportDocument (aunque el modelo de objetos
ReportDocument funcione como proxy para un subconjunto del modelo de objetos ReportClientDocument). El
motor de creación de informes original de las versiones anteriores de SAP Crystal Reports se ha reemplazado por
una versión limitada e incrustada del motor de creación de informes de RAS.
Instale y obtenga acceso al modelo ReportClientDocument sólo con una licencia actualizada para el servidor
RAS no administrado. En ese punto, todo el código existente escrito para el modelo de objetos ReportDocument
se puede redirigir fácilmente al servidor de RAS independiente, estableciendo dos propiedades en cualquier
instancia de informe dado y se puede obtener acceso directamente al modelo de objetos
ReportClientDocument subyacente, al recuperarlo desde la propiedad ReportClientDocument de la clase
ReportDocument.
1.3.1.5.4
Modelo de objetos InfoObject (BOE)
El modelo de objetos InfoObject incluye los productos de actualización SAP Crystal Reports Server y la de
plataforma SAP BusinessObjects Business Intelligence.
Nota
Para obtener más información, vea Soluciones de elaboración de informes de SAP BusinessObjects Business
Intelligence [página 63].
El modelo de objetos InfoObject proporciona un modelo de objetos de nivel de plataforma para el SDK.
InfoObject funciona como clase base, en la que se encapsulan muchos objetos Enterprise en clases
derivadas. La clase derivada que representa informes es la clase
CrystalDecisions.Enterprise.Desktop.Report.
El SDK de la plataforma SAP BusinessObjects Business Intelligence se ha diseñado a partir de la clase de objetos
InfoObject y sus clases de soporte.
La clase InfoObject
La clase InfoObject se utiliza en el SDK para representar una amplia variedad de entidades de información.
Incluye tanto entidades físicas (archivos de informe o archivos PDF) como entidades de red (usuarios, servidores
o conexiones FTP).
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
39
La clase InfoObject es una clase base de distintas clases ampliadas que corresponden a estas entidades de
información con más detalle. Las clases extendidas que heredan de InfoObject incluyen las siguientes: Report,
User, Server, Folder, Program, Ftp, Smtp, Word, Excel y Pdf.
Mediante la manipulación de estas instancias de InfoObject y de las clases ampliadas, puede crear una aplicación
de escritorio cliente o administrativa.
Clases de soporte
Dos clases adicionales admiten la clase InfoObject.
Clase InfoStore
Esta clase actúa como controlador, o puerta de enlace, para el repositorio del Servidor de
administración central (CMS), que es una base de datos donde se guardan todas las
instancias de InfoObject. La clase InfoStore se utiliza para crear instancias, recuperar y
validar todas las instancias de la clase InfoObject guardadas en el repositorio del CMS.
Clase indizada
InfoObjects
Esta clase incluye varias instancias de InfoObject. InfoStore la utiliza para mover instancias
de InfoObject desde y hacia el repositorio de CMS.
Las instancias de InfoObject no se pueden administrar directamente mediante la clase InfoStore. Antes, deben
incluirse en la clase indizada InfoObjects. Mediante esta clase indizada, las instancias individuales de InfoObject
se pueden agregar, recuperar, actualizar o programar.
Nota
Para obtener información detallada del SDK de SAP Crystal Reports Server o de la plataforma SAP
BusinessObjects Business Intelligence, consulte la documentación del SDK de SAP Crystal Reports Server o de
la plataforma SAP BusinessObjects Business Intelligence.
Información relacionada
Elegir el modelo de objetos correcto para el proyecto [página 31]
1.3.1.6
Comparación de arquitecturas en las soluciones de
elaboración de informes SAP Business Intelligence
Existen cuatro soluciones de elaboración de informes de SAP Business Intelligence:
●
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio
●
SAP Crystal Reports Developer
●
Servidor de aplicaciones de informes (RAS) no administrado
●
SAP Crystal Reports Server o plataforma SAP BusinessObjects Business Intelligence
La diferencia principal de la arquitectura entre cada solución de elaboración de informes es la forma en la que
cada uno coloca e implementa el motor de informes.
40
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
¿Qué es el motor de informes?
El motor de informes se encuentra en el núcleo de cada solución de elaboración de informes. Procesa todas las
solicitudes de usuario y extrae la información del informe.
El rendimiento máximo del procesamiento de solicitudes de usuario simultáneas varía entre las soluciones. En
algunas soluciones se establece mediante diseños de arquitectura o restricciones de licencia.
Los componentes principales restantes de cada solución de elaboración de informes son los siguientes:
●
El archivo de definición de informes (.rpt).
●
El origen de datos.
●
El visor de informes.
●
El SDK.
●
Marco de plataforma (encontrado en SAP Crystal Reports Server o la plataforma SAP BusinessObjects
Business Intelligence).
¿Cómo interactúa el motor de informes con el resto de los componentes
principales?
El motor de informes utiliza el archivo de definición de informes (.rpt) como plantilla. A continuación, recupera los
datos del origen de datos y utiliza la definición de informes para presentar el informe solicitado actualmente, que
se pasa al visor de informes. La información recibida del visor, o codificada con el SDK de la interfaz, activa un
procesamiento posterior desde el motor de informes que realiza más acciones en el informe.
¿En qué se diferencia la configuración del motor de informes en las distintas
soluciones de elaboración de informes de SAP Business Intelligence?
●
El motor de informes se incrusta.
En SAP Crystal Reports, versión para programadores de Microsoft Visual Studio, el motor de informes está
incrustado en la aplicación.
Este motor de informes incrustado tiene un límite de un máximo de tres solicitudes de usuario simultáneas.
No se trata de un límite de licencia arbitrario, sino de una limitación de la arquitectura del motor de informes
incrustado.
●
El motor de informes se extrae en un proceso de servidor de informes independiente.
En la solución que utiliza el servidor de aplicaciones de informes (RAS), el motor de informes se extrae en un
proceso de servidor independiente. Dicho proceso de servidor se puede ejecutar en el mismo equipo o
colocar en un hardware físico distinto para incrementar el rendimiento mediante la descarga de parte del
procesamiento del servidor de aplicaciones. Un servidor RAS no administrado ya no está disponible como
opción de actualización. Se recomienda realizar una actualización a SAP Crystal Reports Server en su lugar.
Para obtener más información, vea Soluciones de elaboración de informes de SAP BusinessObjects Business
Intelligence [página 63].
●
El proceso de servidor de informes independiente se encapsula en una arquitectura de plataforma completa.
En la solución SAP Crystal Reports Server o plataforma SAP BusinessObjects Business Intelligence, se agrega
una arquitectura de plataforma completa que encapsula el proceso de servidor de aplicaciones de informes
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
41
independiente (RAS). El servidor de aplicaciones de informes (RAS) administrado se convierte en un solo
servidor, entre muchos otros servidores de la arquitectura de plataforma. Esta arquitectura proporciona un
conjunto muy amplio de funciones adicionales, como programación, equilibrio de carga, conmutación por
error y escalabilidad tanto horizontal como vertical.
1.3.2
Control CrystalReportViewer
Para ver un informe de Crystal, debe agregar un control CrystalReportViewer a la aplicación. El control
CrystalReportViewer se usa en .NET Framework para enlazar y mostrar informes. El control CrystalReportViewer
predeterminado incluye elementos de interfaz de usuario para facilitar la visualización, guardado y navegación en
un informe.
Los dos controles CrystalReportViewer usados con mayor frecuencia son el control CrystalReportViewer para las
aplicaciones de Windows, al que se accede a través de la clase
CrystalDecisions.Windows.Forms.CrystalReportViewer y el control CrystalReportViewer para sitios
web, al que se accede a través de la clase CrystalDecisions.Web.CrystalReportViewer. Para obtener más
información, consulte SAP Crystal Reports .NET API Reference.
Nota
Sólo es necesario un control CrystalReportViewer si desea visualizar informes de Crystal.
Personalizar el control CrystalReportViewer
Según su aplicación, puede interesarle modificar ciertos elementos del control predeterminado. SAP
Crystal Reports permite personalizar de diferentes formas el aspecto del visor que se muestra en la aplicación.
Entre otras opciones:
●
Se puede eliminar del visor la barra de herramientas de CrystalReportViewer.
●
Se pueden agregar o eliminar los botones de la barra de herramientas mediante programación.
●
El control CrystalReportViewer admite la personalización mediante CSS o temas.
Información relacionada
Personalizar el control CrystalReportViewer [página 222]
Visualizar un informe [página 162]
1.3.2.1
¿Cómo utilizo los controles de visores de informes?
Los controles de visores de informes son controles .NET que se pueden agregar a un formulario en una aplicación
para Windows o Web, con el fin de mostrar los informes en dicho formulario.
42
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Al planear la creación de una aplicación con el SDK de SAP Crystal Reports, una de las consideraciones más
importantes es si se van a usar controles de visores de informes. Conocer los aspectos fundamentales del SDK
que afectan a estos controles le ayudará a elegir la estructura más adecuada para el proyecto de SAP Crystal
Reports, versión para programadores de Microsoft Visual Studio.
¿Qué son los controles .NET?
Los controles de Microsoft .NET son un tipo especial de clases que se muestran en el Cuadro de herramientas de
Visual Studio. Se agregan a Web Forms o Windows Forms como objetos GUI, y heredan de una clase base Control
común. Los controles .NET típicos son: Button, DropDownList, CheckBox, TextBox o DataGrid.
Los controles de Microsoft .NET cumplen la siguiente práctica recomendada: separar la capa de presentación de
la capa de lógica empresarial. Encapsulan la información de presentación dentro del propio control en Web Forms
o Windows Forms. En la clase de código subyacente, el control .NET se genera como una instancia de nivel de
clase. Esta variable de instancia proporciona acceso a las propiedades, métodos y eventos del control
Los controles de Microsoft .NET son funcionalmente idénticos tanto para Windows Forms como para Web
Forms. .NET Framework ve cada página Web como un formulario que contiene controles, como ocurre en las
aplicaciones para Windows.
Conocer los aspectos fundamentales del SDK que afectan a estos controles le
ayudará a elegir la estructura más adecuada para el proyecto de SAP Crystal
Reports para Visual Studio.
Uno de los puntos fuertes de las herramientas de creación de informes es que encapsulan los problemas
complejos de estructura, diseño y presentación de informes en una herramienta GUI sencilla. De igual forma, los
controles .NET encapsulan los problemas complejos de presentación y llenado de datos de un objeto GUI sencillo
en un Web Form o Windows Form.
Mediante el uso de controles .NET, se unifican la creación y la presentación complejas de informes. Toda esta
información compleja de informes, que se solía encapsular sólo en la versión independiente de SAP Crystal
Reports, ahora se encapsula en un control .NET como visor de informes.
¿Cuántos controles de visores de informes hay?
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio incluye dos versiones del control
CrystalReportViewer: una para aplicaciones Web y otra para aplicaciones para Windows. Los proyectos Web
ASP.NET utilizan el control CrystalReportViewer, situado en el espacio de nombres CrystalDecisions.Web. Los
proyectos de Windows utilizan el control CrystalReportViewer, situado en el espacio de nombres
CrystalDecisions.Windows.Forms.
El control CrystalReportPartsViewer sólo se usa para mostrar elementos de informes en una página Web.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
43
Presentación de un informe mediante el control CrystalReportViewer
El control CrystalReportViewer muestra sólo un informe a la vez. El informe que muestra el control lo determina el
informe enlazado al código. Para indicar al control el informe que se va a mostrar, enlace la propiedad
ReportSource del control a un informe en concreto. En tiempo de ejecución, el control carga el informe enlazado a
la propiedad ReportSource y lo muestra.
En su forma más sencilla, la asignación tiene el siguiente aspecto:
crystalReportViewer1.ReportSource = "C:\WorldSalesReport.rpt"
crystalReportViewer1.ReportSource = "C:\\WorldSalesReport.rpt";
En este caso, el informe está enlazado al control directamente desde su ruta en el directorio de archivos.
De esta forma se muestra la forma más básica de enlazar un informe al control CrystalReportViewer.
¿El control CrystalReportViewer se enlaza a objetos de datos?
No. El control CrystalReportViewer se enlaza a un objeto de informe, no a un objeto de datos.
La razón es que el objetivo del control CrystalReportViewer es distinto al del resto de los controles .NET. Los
demás controles .NET se enlazan a los datos y dan formato a los datos sin formato de la página. Puesto que SAP
Crystal Reports Designer incrustado lo hace automáticamente cada vez que crea un informe (un informe por
definición encapsula la recuperación y presentación de datos), el control CrystalReportViewer sólo se ocupa de
mostrar un objeto de informe.
En la siguiente tabla se comparan los enlaces a un control de datos .NET y a un control CrystalReportViewer.
Tipo de control
Se enlaza a
Conectividad del siguiente nivel
Control de datos .NET (como con­
trol DataGrid)
Un objeto de datos (DataSet, Data­
Reader, DataView, IDictionary, ICo­
llection, DataTable).
Ninguna
Control de visores de informes .NET Un objeto de informe (que encap­
(como control CrystalReportVie­
sula un archivo de informe Crystal).
wer)
EL archivo de informe de Crystal
dispone de conectividad de datos
integrada, que se conecta a diver­
sos orígenes de datos como ODBC y
OleDb, así como a objetos DataRea­
der y DataSet.
Para ayudarle a recordar que un control CrystalReportViewer enlaza a un objeto de informe, en vez de a un objeto
de datos, la propiedad de origen del control de visor de informes se denomina ReportSource (no DataSource).
44
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Enlace automático de informes
Otra diferencia del enlace de un control CrystalReportViewer es que no tiene que llamar manualmente a ningún
método Bind, como haría para la mayoría de los controles .NET. En su lugar, el control enlaza automáticamente el
visor de informes al objeto de informe.
Información relacionada
Visualizar un informe [página 162]
1.3.2.1.1
Para agregar un control de CrystalReportViewer a
una aplicación de Windows
Procedimiento
1.
Abra un formulario de Windows Form en la vista Diseño.
2.
En el Cuadro de herramientas, abra el nodo Informes para buscar el control CrystalReportViewer.
Nota
En las versiones anteriores de Visual Studio, el control CrystalReportViewer aparecía en el nodo
Crystal Reports.
3.
Arrastre y suelte el control CrystalReportViewer en el formulario.
4.
En el menú Archivo, haga clic en Guardar todo.
Resultados
Cuando se agrega un control CrystalReportViewer a su aplicación, se agregarán de forma automática a su
proyecto referencias a los ensamblados de SAP Crystal Reports.
1.3.2.1.2
Para agregar un control de CrystalReportViewer a
un sitio Web
Procedimiento
1.
Abra la página Default.aspx.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
45
2.
Haga clic en el botón Diseño situado en la parte inferior de la vista del formulario.
3.
En el Cuadro de herramientas, abra el nodo Informes para buscar el control CrystalReportViewer.
Nota
En las versiones anteriores de SAP Crystal Reports, versión para programadores de Microsoft Visual
Studio, el control CrystalReportViewer aparecía en el nodo Crystal Reports.
4.
Arrastre y coloque el control CrystalReportViewer en el formulario Web Forms.
5.
En el menú Archivo, haga clic en Guardar todo.
Resultados
Cuando se agrega un control CrystalReportViewer a su aplicación, se agregarán de forma automática a su
proyecto referencias a los ensamblados de SAP Crystal Reports.
1.3.2.1.3
Para enlazar el control CrystalReportViewer a un
archivo en disco
Contexto
La forma más sencilla de enlazar un control CrystalReportViewer a un informe de Crystal es establecer la
propiedad ReportSource en una ubicación del disco. Este informe no incrustado se muestra cuando se ejecuta
la aplicación.
De esta forma se enlaza el informe directamente al control. Toda interacción mediante programación con el
informe se debe realizar en el modelo de objetos CrystalReportViewer limitado.
Procedimiento
1.
Agregue un control CrystalReportViewer a la aplicación de Windows o al sitio web.
2.
Abra el formulario Web Forms o Windows Forms.
3.
En el menú Ver, haga clic en Código.
4.
Establezca la propiedad ReportSource en la ubicación del informe en el sistema local de archivos.
○
Si trabaja con aplicaciones de Windows Forms o un sitio Web:
myCrystalReportViewer.ReportSource = "C:\MyReport.rpt"
crystalReportViewer.ReportSource = "C:\\MyReport.rpt";
46
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
○
Si trabaja con una aplicación WPF:
myCrystalReportViewer.ViewerCore.ReportSource = "C:\MyReport.rpt"
crystalReportViewer.ViewerCore.ReportSource = "C:\\MyReport.rpt";
1.3.2.2
El panel de tareas inteligentes
En Visual Studio 2005 o posterior, al agregar un control .NET a un formulario Web Forms o Windows Forms,
aparece el panel Tarea inteligente. La Tarea inteligente es un pequeño panel adjuntado a la esquina superior
derecha del control .NET. Cuando se abre el panel, contiene casillas de verificación y cuadros combinados que
permiten a los programadores seleccionar opciones de conectividad y de otro tipo para el control. Esta función
puede reducir de forma significativa la cantidad que el programador necesita escribir.
En un sitio Web, las selecciones efectuadas en el panel Tarea inteligente producen código XML generado
automáticamente en la página ASPX.
En un proyecto para Windows, las selecciones efectuadas en el panel Tarea inteligente producen código generado
automáticamente en un archivo de clases oculto. Dicho archivo es una clase "parcial", que actúa como anexo a la
clase de Windows Forms existente. Las clases parciales son una nueva función de la versión 2.0 de .NET
Framework.
Puede usar el panel de tareas inteligentes para enlazar rápida y fácilmente el control CrystalReportViewer con el
control CrystalReportSource. Cuando se agrega el control CrystalReportViewer a la página, la tarea inteligente
aparece automáticamente y proporciona una serie de pasos para crear y configurar un control
CrystalReportSource.
El control CrystalReportViewer hace un uso completo del panel Tarea inteligente. Las selecciones disponibles en
el panel son distintas para los proyectos Web y Windows.
Limitaciones de las tareas inteligentes y el modelo de código reducido
Las tareas inteligentes facilitan un modelo de código reducido que genera código automáticamente para ahorrar
tiempo en vez de escribir el código manualmente.
Sin embargo, aunque el código generado automáticamente ahorra tiempo al principio, resulta difícil cambiar de
un modelo de código reducido a otro de codificación si se desea agregar eficacia y flexibilidad a un proyecto.
1.3.2.2.1
Tarea inteligente CrystalReportViewer para
proyectos para Windows
El panel Tarea inteligente CrystalReportViewer para Windows permite crear, elegir o editar un informe de
Crystal. También dispone de opciones para personalizar el control CrystalReportViewer.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
47
Las siguientes funcionalidades están disponibles para el panel de tarea inteligente de los proyectos para
Windows.
Crear un nuevo informe de Crystal...
Este comando de menú permite crear un informe mediante el diseñador de informes de SAP Crystal incrustado.
Al finalizar, el código del informe se genera automáticamente para enlazar el informe al control
CrystalReportViewer para su presentación inmediata.
Editar el informe de Crystal actual
Este comando de menú permite editar el informe que ya se ha seleccionado o creado para el origen de informe.
Elegir un informe de Crystal
Este comando de menú permite seleccionar un informe de Crystal o un objeto de ReportDocument para que
funcione como origen del informe para el control CrystalReportViewer.
Al finalizar, el código del informe se genera automáticamente para enlazar el informe al control
CrystalReportViewer para su presentación inmediata.
Borrar origen del informe
Este comando de menú borrará la propiedad ReportSource del control CrystalReportViewer.
Elegir una vista del panel de herramientas:
Este comando de menú permite seleccionar el panel de herramientas que se debe mostrar de forma
predeterminada cuando se carga el informe. Puede seleccionar el árbol de grupos o el panel de parámetros, o
bien optar por dejar el panel de herramientas en blanco.
Mostar la barra de herramientas
Esta casilla de verificación permite mostrar u ocultar la barra de herramientas del control
CrystalReportViewer.
48
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Mostrar barra de estado
Esta casilla de verificación permite mostrar u ocultar la barra de estado en el control CrystalReportViewer.
Desacoplar en contenedor principal
Este comando de menú permite establecer la propiedad Dock en "Ninguno" o "Relleno". De forma
predeterminada, cuando un control CrystalReportViewer se coloca en un formulario Windows Forms, la
propiedad Dock se establece en "Relleno". Si se selecciona este comando de menú, la propiedad Dock "Ninguno"
permite que el control CrystalReportViewer se mueva y se cambie su tamaño en el formulario Windows Forms
u otros contenedores (por ejemplo, un control Panel en un formulario Windows Forms).
1.3.2.2.2
Web
Tarea inteligente CrystalReportViewer para sitios
El panel Tarea inteligente CrystalReportViewer para sitios Web permite crear, elegir o editar un informe de
Crystal. También dispone de opciones para personalizar el control CrystalReportViewer y para habilitar los
informes de errores para conexiones a base de datos y valores de parámetro.
Las siguientes funcionalidades están disponibles para el panel Tarea inteligente de sitios Web:
Elegir origen del informe
Este cuadro combinado permite seleccionar cualquier origen del informe existente o crear uno nuevo.
Al finalizar, el código del informe se genera automáticamente para enlazar el informe al control
CrystalReportViewer para su presentación inmediata.
Configurar el origen de informe...
Este comando de menú permite configurar el origen de informe que ya se ha seleccionado o creado.
Editar informe...
Este comando de menú permite editar el informe que ya se ha seleccionado o creado para el origen de informe.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
49
Elegir una vista del panel de herramientas:
Este comando de menú permite seleccionar el panel de herramientas que se debe mostrar de forma
predeterminada cuando se carga el informe. Puede seleccionar el árbol de grupos o el panel de parámetros, o
bien optar por dejar el panel de herramientas en blanco.
Habilitar barra de herramientas
Esta casilla de verificación permite mostrar u ocultar la barra de herramientas del control CrystalReportViewer.
Habilitar vista de informes
Esta casilla de verificación permite mostrar u ocultar la vista de informe en el control CrystalReportViewer.
Nota
Puede deshabilitar la vista de informe si desea utilizar el árbol de grupos en un formulario Web Forms.
Habilitar petición de conexión a la base de datos:
Esta casilla de verificación permite habilitar o deshabilitar los informes de errores para las conexiones a base de
datos. Cuando un informe carece de información para conectarse a una base de datos de SQL Server, se produce
la excepción de error "La conexión no es posible". Sin embargo, si la casilla de verificación está activada, aparece
una ventana de solicitud y pide la información de conexión necesaria.
Habilitar petición de parámetros de informe
Esta casilla de verificación permite habilitar o deshabilitar los informes de errores para los valores de parámetro.
Cuando un informe carece de información para hacer referencia a un parámetro que se utiliza en los criterios de
selección, se produce la excepción de error "Faltan valores de parámetro". Sin embargo, si la casilla de
verificación está activada, aparece una ventana de solicitud y pide la información de parámetro necesaria.
Volver a utilizar el valor de parámetro al actualizar el informe
Esta casilla de verificación permite habilitar o deshabilitar la persistencia de parámetros en la actualización del
informe. Si la casilla de verificación está activada, se conservan los valores de parámetro pasados a un informe en
50
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
la primera carga. Sin embargo si la casilla de verificación está desactivada, se debe escribir código para pasar
valores de parámetro al informe en cada actualización posterior.
Información relacionada
Tarea inteligente CrystalReportViewer para proyectos para Windows [página 47]
1.3.2.3
Control CrystalReportPartsViewer
El control CrystalReportPartsViewer se usa en .NET Framework para enlazar y mostrar un informe de
Crystal Reports como una serie de partes vinculadas. Esto reduce bastante el área necesaria para mostrar la
información del informe, lo que resulta ideal para mostrar pequeñas cantidades de información del informe en
una página Web de un portal.
Nota
Los elementos del informe sólo se usan en sitios Web; no están disponibles para proyectos para Windows.
El control CrystalReportPartsViewer se ha mejorado para admitir el entorno de elementos web, un entorno
de portal introducido en la versión 2.0 de ASP.NET.
El marco Web Parts permite a los programadores encapsular controles en la página dentro de los elementos Web
configurables.
Información relacionada
Tutorial: Presentar secciones de informes con el control CrystalReportPartsViewer [página 494]
En este tutorial, aprenderá a dividir un informe en distintos elementos y mostrar cada elemento haciendo clic en
una serie de hipervínculos sucesivos.
1.3.2.4
Control CrystalReportSource
El control CrystalReportSource forma parte del nuevo modelo de desarrollo de aplicaciones basado en etiquetas
que se proporciona con la versión 2.0 de ASP.NET.
Nota
El control CrystalReportSource sólo está disponible para sitios web.
En el marco del control DataSource, los controles .NET visuales se conectan a controles DataSource no visuales
(controles que no muestran información). Este nuevo marco de DataSource encapsula la información de
conectividad de datos escrita como líneas de código en los controles .NET en el formulario Web Forms.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
51
En la ventana Diseño, Visual Studio muestra los nombres de los controles conectados entre sí.
Los proveedores de datos .NET incluyen su propia implementación del control DataSource. Por ejemplo,
SqlDataSource tiene acceso a Microsoft SQL Server, mientras que OracleDataSource obtiene acceso a Oracle.
En el caso de SAP Crystal Reports, el control está implementado como control CrystalReportSource. Este diseño
es paralelo al de la versión 1.0 de ASP.NET, donde el control CrystalReportViewer contiene una propiedad
ReportSource en vez de la más habitual DataSource.
La diferencia entre el control CrystalReportSource y los controles DataSource reside en el hecho de que el control
CrystalReportSource contiene un informe que encapsula los datos, mientras que un control DataSource (como
SqlDataSource) contiene los propios datos.
1.3.3
¿Cuál es el enfoque de persistencia que se debe usar
con SAP Crystal Reports?
Al planear la creación de una aplicación Web con el SDK de SAP Crystal Reports, una de las consideraciones más
importantes es el enfoque de persistencia con el que trabajar.
¿Qué es la persistencia?
Las páginas Web no conservan el estado (el estado y la información de un usuario que se conecta a un sitio Web).
Las páginas Web se solicitan desde un servidor, se envían al usuario y el proceso finaliza. Este proceso es correcto
al leer información, el problema surge cuando se diseña una aplicación Web que debe conservar información
sobre un usuario durante recargas y redireccionamientos de páginas.
La persistencia hace referencia al uso de un mecanismo que preserva el estado de todos los usuarios (como la
página del informe actual que ve cada uno de ellos) sin las trabas de las recargas y los redireccionamientos de
páginas.
Métodos prácticos de persistencia
En esta sección, va a explorar métodos prácticos para conservar los cambios realizados en un informe de Crystal
de una página Web mientras se actualiza el informe durante la recarga de una página Web. El cambio que se debe
conservar puede ser tan sencillo como pasar a la segunda página después de haber hecho clic en el botón Página
siguiente del visor del informe, o tan complejo como presentar datos totalmente distintos después de haber
modificado los parámetros del informe.
La persistencia debe aplicarse a los elementos siguientes:
●
El control CrystalReportViewer.
●
El informe que está enlazado al control CrystalReportViewer.
52
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Formas de conservar el estado en ASP y ASP.NET
En ASP y ASP.NET tradicionales, el estado se mantiene mediante el explorador Web o el servidor Web, de las
siguientes formas.
Entorno
Cliente o servidor
Nombre
Método
ASP*
Explorador del cliente
Campos del formulario
Pasar los pares de nombre
y valor por las páginas
Web mediante los campos
de entrega de formularios.
ASP*
Explorador del cliente
Argumentos de dirección
URL
Pasar los pares de nombre
y valor por las páginas
Web mediante argumen­
tos de dirección URL.
ASP*
Explorador del cliente
Cookie
Asignar pares de nombre y
valor a una cookie en el ex­
plorador del cliente y, a
continuación, recuperar la
cookie en una nueva pá­
gina.
ASP*
Servidor Web
Objeto Session
Asignar objetos de los que
se han creado instancias
al objeto Session en el ser­
vidor y después recuperar
desde Session en una
nueva página.
ASP*
Servidor Web
Objeto Application
Asignar objetos de los que
se han creado instancias
al objeto Application en el
servidor y después recu­
perar desde Application en
una nueva página.
ASP.NET
Explorador del cliente
Objeto ViewState
Asignar valores de cadena
al objeto ViewState del
formulario Web Form de
ASP.NET.
ASP.NET
Servidor Web
Objeto Cache
Igual que el objeto Appli­
cation, pero con funciones
mejoradas.
* Todos los enfoques de persistencia de ASP también funcionan en ASP.NET.
Enfoque de persistencia que funciona mejor con SAP Crystal Reports
Los enfoques de persistencia más adecuados para usar con SAP Crystal Reports son ViewState, Session o Cache.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
53
Información relacionada
ViewState y persistencia del modelo de objetos CrystalReportViewer [página 54]
1.3.3.1
ViewState y persistencia del modelo de objetos
CrystalReportViewer
¿Qué es ViewState?
ViewState es un enfoque basado en explorador de ASP.NET para conservar el estado de la vista, es decir, el
formulario Web Forms. Su función principal es apoyar la persistencia de los controles Web.
Los controles Web (también denominados controles de servidor Web) se crean basándose en los controles de
Windows, que se presentan en Visual Basic. Los controles de Windows son objetos del formulario que encapsulan
una parte de la funcionalidad de presentación, como un campo de texto, un botón o una tabla de datos.
Los controles Web son parecidos a los controles de Windows. Al igual que los controles de Windows, funcionan en
dos niveles: dentro de la página Web y en la clase de código subyacente que respalda la página Web. Del mismo
modo que los controles tradicionales en Windows Forms, los controles Web encapsulan elementos concretos de
funcionalidad de presentación en objetos de GUI: Button, TextField, DropDownList, DataGrid, etc. En la clase de
código subyacente, estos mismos controles se comparan con las clases que exponen propiedades y métodos.
La diferencia entre una página Web y un formulario Windows Form es que la primera es un entorno independiente.
Por lo tanto, se necesita algún tipo de mecanismo de persistencia para conservar el estado de la página Web
durante sus recargas.
ViewState mantiene el estado de los controles de la página Web, tanto como Session mantiene el estado de los
objetos de los que se ha creado una instancia en el servidor.
Nota
ViewState mantiene el estado de todos los controles Web automáticamente. Esto se consigue haciendo que
ViewState almacene todos los controles basados en la propiedad EnableViewState del control (cuyo valor
predeterminado es true).
Puesto que ViewState almacena el estado de los datos de los controles Web en la página, todo el objeto ViewState
debe estar contenido en la página cuando ésta se transfiere una y otra vez entre el explorador y el servidor Web.
Este proceso se lleva a cabo cifrando todo el objeto ViewState como cadena y, a continuación, colocando esta
cadena dentro del valor de una etiqueta de formulario oculta en la página. Por ejemplo, ViewState para la página
Web de ASP.NET que contiene sólo un único control de botón tiene el siguiente código HTML:
<input type="hidden" name="__VIEWSTATE"
value="dDwtNTMwNzcxMzI0Ozs+I7GfLyg3p44eTLFCiVEiRKUBzFw=" />
ViewState almacena sólo información que se puede convertir a formato de cadena.
54
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Persistencia de la presentación del informe del control CrystalReportViewer
El control CrystalReportViewer desempeña la función de presentación del informe para un informe de Crystal.
Presenta el informe en html en la página junto con una barra de herramientas y una vista de árbol para manipular
la presentación del informe. La barra de herramientas contiene botones para acercar y alejar, pasar a la siguiente
página, imprimir, exportar, etc. La vista de árbol se expande para mostrar agrupamientos de datos anidados.
ViewState conserva la información del control; por tanto, conserva el estado de toda la información de
presentación del informe (incluidos los eventos de la barra de herramientas y la vista de árbol) del control
CrystalReportViewer durante las recargas de página.
Por ejemplo, si un usuario estuviese viendo la página 3 del informe e hiciese clic en el botón de página siguiente de
la barra de herramientas del control CrystalReportViewer, ViewState conservaría el estado de ambas partes de la
información:
●
El número de página actual.
●
El estado del botón Página siguiente (en el que se ha hecho clic).
Durante la recarga de la página, ViewState restauraría el control CrystalReportViewer en la página 3 y, a
continuación, haría lo mismo con el clic del evento de la siguiente página para que el control se mueva a la página
4 del informe.
Persistencia del modelo de objetos del control CrystalReportViewer
El control CrystalReportViewer lleva a cabo una función adicional: no sólo la visualización de informes, sino
también un modelo de objetos limitado (incluido en la clase de control CrystalReportViewer). Este modelo de
objetos limitado se puede utilizar para la interacción mediante programación con el informe.
ViewState conserva el estado de ambas funciones:
●
La presentación del informe.
●
El modelo de objetos CrystalReportViewer
Sin embargo, se suele desaconsejar el uso del modelo de objetos CrystalReportViewer, en favor del modelo de
objetos ReportDocument más completo. Este modelo de objetos alternativo no está contenido en el control sino
que forma parte de las bibliotecas de clases del SDK.
Compartir los mecanismos de persistencia
Si utiliza el control CrystalReportViewer para desempeñar ambas funciones (presentación del informe y modelo
de objetos), ViewState las conserva, y no necesita mecanismos de persistencia adicionales.
Nota
Un ejemplo sería enlazar el control CrystalReportViewer a una ruta de directorio de archivos. Vea Enlazar a una
ruta de directorio de archivos en el código [página 170].
Sin embargo, si prefiere utilizar el control CrystalReportViewer sólo para la función de presentación de informes y,
a continuación, enlazar el control a un modelo de objetos externo (como ReportDocument), es necesario un
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
55
mecanismo de persistencia independiente para conservar dicho modelo de objetos externo. Normalmente, este
segundo mecanismo de persistencia es Session (u ocasionalmente, Cache).
Información relacionada
¿Cuál es el enfoque de persistencia que se debe usar con SAP Crystal Reports? [página 52]
Session y persistencia del modelo de objetos ReportDocument [página 56]
Elegir el modelo de objetos correcto para el proyecto [página 31]
1.3.3.2
Session y persistencia del modelo de objetos
ReportDocument
¿Qué es Session?
Session es un enfoque basado en servidor Web utilizado tanto en ASP como en ASP.NET para conservar el
estado. Session permite conservar cualquier objeto durante toda una sesión de usuario mediante el
almacenamiento de dicho objeto en la memoria del servidor Web.
Session se suele utilizar para cualquiera de estas acciones:
●
Almacenar información que debe conservar su estado durante toda la sesión de un usuario, como la
información de conexión o de cualquier otro tipo que sea necesaria cuando los usuarios se desplazan por la
aplicación Web.
●
Almacenar un objeto que debe conservar su estado sólo en una recarga de páginas o en un conjunto de
páginas agrupadas funcionalmente.
El punto fuerte de Session es que conserva la información de estado del usuario en el servidor Web para tener
acceso en cualquier momento y desde cualquier página. Puesto que el explorador no debe almacenar esta
información, se puede utilizar cualquier explorador, incluso dispositivos exploradores como PDAs o teléfonos
móviles.
Limitaciones del enfoque de persistencia
●
La cantidad de memoria de servidor requerida por Session se incrementa a medida que aumenta el número
de usuarios conectados.
●
Cada usuario que tenga acceso a la aplicación Web genera un objeto Session independiente. Cada objeto
Session se mantiene durante el período de tiempo que dure la visita del usuario más un período de
inactividad.
●
Si se conservan muchos objetos en cada Session, y hay muchos usuarios utilizando la aplicación Web
simultáneamente (creando muchos Sessions), la cantidad de memoria de servidor dedicada a la persistencia
de Session puede ser importante, limitándose la escalabilidad.
Para obtener detalles sobre enfoques de persistencia alternativos, vea la siguiente información:
56
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
●
ViewState y persistencia del modelo de objetos CrystalReportViewer [página 54]
●
Cache y persistencia del modelo de objetos ReportDocument [página 58]
Conservar el modelo de objetos ReportDocument con Session
Si se ha encapsulado el informe en el modelo de objetos ReportDocument, este modelo de objetos se debe
conservar mediante un enfoque basado en servidor como Session o Cache.
Para conservar un modelo de objetos ReportDocument con Session, cree una instancia de ReportDocument y, a
continuación, asígnela a Session.
Session es el enfoque más sencillo y el preferido cuando se aprende a crear aplicaciones Web ASP.NET usando
SAP Crystal Reports. También es el enfoque recomendado para almacenar instancias de ReportDocument en las
que el informe tiene una compartibilidad baja.
Limitaciones de persistencia del modelo de objetos ReportDocument con
Session
Siempre que una instancia de ReportDocument tenga un alto grado de compartibilidad, piense en utilizar Cache
en vez de Session.
Diferencias entre Session y ViewState
Session se ocupa principalmente de la persistencia del estado de los objetos de la clase de código subyacente.
ViewState lo hace del estado de los controles de la página Web. Cuando un control de la página Web está
enlazado a un objeto de la clase de código subyacente y ambos necesitan conservarse en las recargas de páginas,
Session y ViewState comparten las funciones de persistencia.
En este caso, ViewState conserva un control CrystalReportViewer y Session, un objeto ReportDocument que está
enlazado al control.
Información relacionada
Tutorial: Conservar el modelo de objetos ReportDocument con Session [página 337]
En este tutorial, usará el modelo de objetos ReportDocument y realizará cambios mediante programación en un
informe en tiempo de ejecución.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
57
1.3.3.3
Cache y persistencia del modelo de objetos
ReportDocument
Cache es un enfoque basado en servidor de ASP.NET para conservar el estado. Cache es funcionalmente
parecido al objeto Application que se encuentra tanto en ASP como en ASP.NET:
●
Application permite conservar cualquier objeto en el ámbito de la aplicación.
●
Application no está diseñado para conservar la información específica del usuario.
Cache comparte todas estas funciones con Application, pero agrega nuevos niveles de inteligencia para la
administración de datos transitorios:
●
Un objeto agregado a la caché se puede configurar con dependencias basadas en archivo, clave u hora. Si
cambia el archivo o la clave asociados, o si transcurre un período de tiempo determinado, el objeto se quita
automáticamente de la caché y se coloca una versión actualizada, la siguiente vez que se requiera el objeto.
●
Un objeto agregado a la caché sin dependencias y no usado caduca automáticamente.
●
Cuando se quita un objeto de la caché, se activa un evento. Puede escribir código que se ejecute en ese
evento y que cargue una versión actualizada del objeto en Cache.
Si se agrega una versión alternativa de un objeto mediante la cadena de clave original, se sobrescribe la versión
anterior. Para evitarlo, concatene la definición alternativa a la cadena de clave para que cada versión alternativa
del objeto sea única.
La ventaja de Cache respecto a Application es que, como Application, almacena información a la que tienen
acceso todos los usuarios, pero Cache también se puede actualizar a sí mismo basándose en los cambios de sus
dependencias.
Comportamiento de Cache en .Net 2.0 Framework
Cache en .Net 2.0 Framework es más eficiente y seguro, pues se procesa por usuario y por sesión.
Es decir, cuando un usuario visualiza un informe, se guarda una copia del informe en la caché, que se muestra al
usuario. Si el usuario vuelve a abrir el informe mientras la sesión en curso sigue activa, la aplicación mostrará el
informe guardado en la caché. De este modo se evita tener que ejecutar el informe cada vez que el mismo usuario
lo visualiza. Si otro usuario inicia sesión y abre el mismo informe, la aplicación ejecuta el informe por segunda vez,
guarda una copia del informe en la caché y se la muestra al usuario. Cada usuario tiene su propia copia del
informe guardada en caché para su sesión. Así se evita que varios usuarios compartan el mismo informe.
Limitaciones del enfoque de persistencia
Los programadores que no conocen Cache pueden sentirse tentados y utilizarlo en todas partes por su
persistencia, reemplazando Session por Cache. Sin embargo, Cache no está diseñado para reemplazar la
funcionalidad del objeto Session. Los intentos por emular la exclusividad de Session concatenando datos
específicos del usuario a la clave de Cache cargan Cache con objetos de usuario que, a diferencia de lo que ocurre
con Session, no caducan tras agotarse el tiempo de espera del usuario. Como resultado, Cache termina por
solicitar más memoria del servidor Web de lo que lo hizo el objeto Session.
Si debe conservar datos específicos del usuario, siga utilizando el objeto Session.
58
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Para obtener enfoques alternativos de persistencia, vea:
●
ViewState y persistencia del modelo de objetos CrystalReportViewer [página 54]
●
Session y persistencia del modelo de objetos ReportDocument [página 56]
Conservar el modelo de objetos ReportDocument con Cache
Si se ha encapsulado el informe en el modelo de objetos ReportDocument, este modelo de objetos se debe
conservar mediante un enfoque basado en servidor como Session o Cache.
Puede conservar un informe en el modelo de objetos ReportDocument utilizando Cache de una estas dos formas:
●
Cree una instancia del informe y, a continuación, asígnela al objeto Cache, mediante la misma sintaxis
utilizada para asignar un informe al objeto Session.
Este método sólo funciona en informes con un nivel de compartibilidad alto, en los que la instancia de
ReportDocument se produce exactamente una vez, mediante un solo conjunto de credenciales de conexión y
de parámetros. En el caso de una instancia de ReportDocument que se puede producir varias veces debido a
las variaciones de la información de parámetros y conexión, si se vuelve a asignar al objeto Cache con la
misma cadena de clave, se sobrescribe la versión anterior de la instancia de ReportDocument.
●
Crear una instancia de la versión de la clase del informe que implementa la interfaz ICachedReport.
El SDK de SAP Crystal Reports incluye un marco de trabajo de almacenamiento en caché integrado para
informes. Todos los informes que implementen la interfaz ICachedReport se agregan automáticamente a la
caché con una clave única basada en los parámetros y las credenciales de conexión del usuario. Este método
funciona con los informes que tienen una compartibilidad alta, pero que pueden tener pocas versiones debido
a variaciones mínimas en los parámetros y las credenciales de conexión. Si tiene informes con una
compartibilidad baja (que son específicos del usuario), asígnelos al objeto Session.
Limitaciones de persistencia del modelo de objetos ReportDocument con
Session
Cache es el mejor enfoque de uso cuando los usuarios conservan instancias de ReportDocument con un alto
grado de compartibilidad. Si el informe es específico del usuario, Cache desperdiciará la memoria del servidor al
crear instancias basadas en usuario en el nivel de aplicación que estarán en el servidor después de que caduque el
tiempo del usuario. Los informes específicos del usuario se deben asignar a Session.
Nota
En la mayoría de los casos, utilice Session para conservar instancias de ReportDocument. Utilice Cache (o más
específicamente, la interfaz ICachedReport) sólo cuando un informe tenga una compartibilidad alta y sea largo,
o tan complejo que tarde varios minutos en recuperar sus datos.
Diferencias entre Cache y ViewState
Cache se ocupa principalmente de la persistencia del estado de los objetos de la clase de código subyacente.
ViewState lo hace del estado de los controles de la página Web. Cuando un control de la página Web está
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
59
enlazado a un objeto de la clase de código subyacente y ambos necesitan conservarse en las recargas de páginas,
Cache y ViewState comparten las funciones de persistencia.
En este caso, ViewState conserva un control CrystalReportViewer y Cache, objeto ReportDocument que está
enlazado al control.
Información relacionada
¿Cuál es el enfoque de persistencia que se debe usar con SAP Crystal Reports? [página 52]
Limitaciones de la persistencia al enlazar informes en el método de evento Page_Load [página 61]
1.3.3.3.1
Para conservar un informe incrustado que
implemente ICachedReport
Procedimiento
1.
Agregue el informe al proyecto.
Se crea una clase de informe incrustado. También se crea una clase de informe almacenado en caché que
carga y devuelve una instancia almacenada en caché de la clase de informe incrustado.
2.
Cree una instancia de la clase de informe almacenado en caché.
3.
Asigne la instancia de la clase almacenada en caché al control CrystalReportViewer.
Información relacionada
Enlazar a una clase de informe incrustado almacenado en caché [página 202]
1.3.3.3.2
Para conservar un informe no incrustado mediante
una clase de utilidad que implemente ICachedReport
Procedimiento
1.
Cree su propia clase de utilidad de almacenamiento de caché y establezca su valor en implementar
ICachedReport.
2.
En esta clase de utilidad, cargue el informe no incrustado desde una cadena de ruta mediante el método
ReportDocument.Load().
3.
Codifique el método de implementación CreateReport() para que devuelva la instancia de ReportDocument
del informe no incrustado.
60
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
4.
Cree una instancia de la clase de utilidad de administración de almacenamiento de caché del informe.
5.
Asigne esa instancia de la clase al control CrystalReportViewer.
Información relacionada
Enlazar a un informe no incrustado cargado en una clase de utilidad de administración de caché [página 205]
1.3.3.4 Limitaciones de la persistencia al enlazar informes en
el método de evento Page_Load
En las aplicaciones Web ASP.NET es práctica común colocar todo el código de inicio de la página en el controlador
de eventos Page_Load, que se llama desde el evento Page.Load.
En particular, el código de enlace de datos de control se suele guardar en el controlador de eventos Page_Load.
Sin embargo, la inclusión del código de enlace en este controlador de eventos provoca un problema con
ViewState. A continuación se indica el problema y la solución habitual:
●
ViewState se utiliza para conservar el estado del objeto de informe siempre que se vuelve a cargar la página:
los datos que están enlazados al control y los eventos de clics del mouse realizados en el control.
●
ViewState es una cadena. Por tanto, los datos y los eventos de clic deben serializarse.
●
Durante la recarga de una página, los datos y los eventos de clic se restauran a partir de ViewState.
●
El evento Page.Load se produce después de la restauración de ViewState. Si el controlador de eventos
Page_Load contiene código de enlace de controles, en el momento de la recarga de la página este código de
enlace sobrescribirá ViewState, lo que provoca la pérdida de los datos y los eventos de clic originales.
●
Este problema se suele presentar como controles que olvidan las acciones de clic del ratón (por ejemplo, una
selección DropDownList) cuando se recarga la página.
●
Para evitar que se sobrescriban los datos y los eventos de clic del mouse, el código de enlace del controlador
de eventos Page_Load se incluye en un bloque condicional Not IsPostBack, que impide la llamada al código de
enlace durante los eventos PostBack.
Esta resolución parte de un supuesto fundamental: que tanto los datos como los eventos de clics de mouse se
pueden serializar para ViewState. Sin embargo, el control CrystalReportViewer se enlaza con objetos que no se
pueden serializar (de forma específica, la clase ReportDocument, la clase ReportClientDocument o la clase
InfoObject).
Nota
Hay una excepción: cuando el control CrystalReportViewer se enlaza con un informe mediante un ruta de
directorio de archivo, la cadena de ruta se puede conservar en ViewState. Sólo en este caso, el control
CrystalReportViewer podría incluirse en un bloque condicional Not IsPostBack. Sin embargo, este caso de
enlace de informes es menos potente y se utiliza con menos frecuencia que el enlace con las clases de informe
indicadas anteriormente.
Puesto que los eventos de clic del ratón del control CrystalReportViewer sólo se pueden serializar en ViewState, el
enlace con una clase de informe que no se puede serializar crea un problema irresoluble cuando se vuelven a
cargar las páginas:
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
61
●
Si el código de enlace de informes está incluido en un bloque condicional Not IsPostBack, los eventos de clic
del ratón de ViewState se conservan. Sin embargo, no se produce el enlace de informes. Por tanto, se genera
una excepción.
●
Si el código de enlace de informes se incluye fuera del bloque condicional, el informe se enlaza
correctamente. Sin embargo, en el proceso se sobrescribe ViewState. Por tanto, se pierden los eventos de
clic del ratón.
Nota
Este enfoque suele producirse cuando se hace clic en un informe de varias páginas en el control
CrystalReportViewer. El informe vuelve misteriosamente a la página 1.
Solución recomendada: mover el código de enlace del control
CrystalReportViewer al evento Init
La solución para el control CrystalReportViewer es mover el código de enlace del informe al evento Init, que se
produce antes de la restauración de ViewState.
Esta solución presenta una complicación. Puesto que el evento Init se codifica con menor frecuencia que el
evento Load, es más difícil acceder a él. En proyectos web o para Windows de Visual Studio .NET 2003, el código
de gestión de eventos Init se incluye en la región de código generado por el Diseñador de Web Form, un área
generalmente oculta y reservada para código generado.
Para resolver esta situación, se recomienda el siguiente enfoque:
●
Extraiga todo el código de enlace y configuración de CrystalReportViewer a un método auxiliar privado
denominado ConfigureCrystalReports().
●
En la región de código generado por el Diseñador de Web Forms, incluya una sola línea de código en el
controlador de eventos Page_Init() o OnInit() en el método de generación de eventos: una llamada al
método auxiliar ConfigureCrystalReports().
Las instrucciones para crear y llenar el método auxiliar ConfigureCrystalReports() se puede encontrar en
Configuración de proyectos [página 14].
Información relacionada
Tutorial: Conservar el modelo de objetos ReportDocument con Session [página 337]
En este tutorial, usará el modelo de objetos ReportDocument y realizará cambios mediante programación en un
informe en tiempo de ejecución.
62
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.3.4
Escalar la aplicación
Al planear el modo en que se va a crear una aplicación con el SDK de SAP Crystal Reports, una de las
consideraciones más importantes es cómo optimizar la escalabilidad. Puede escalar la aplicación de una de estas
dos maneras:
●
Optimizar el rendimiento de la aplicación.
●
Optimizar el rendimiento del informe.
La implementación de estos métodos prácticos se describe en las siguientes secciones.
Escalar el código de la aplicación
Al usar el SDK de SAP Crystal Reports .Net, se puede incrementar la escalabilidad siguiendo las prácticas óptimas
para mejorar el rendimiento:
●
Reducir el uso de DataSets.
●
Aprovechar el almacenamiento de informes en caché.
●
Borrar de la memoria el informe después de usarlo.
●
Compartir el procesamiento entre servidores.
Escalar la aplicación reduciendo la complejidad del informe
Cuando diseñe informes, y especialmente cuando diseñe informes para Web, debe hacerlo teniendo en cuenta la
escalabilidad. Preste atención a las siguientes prácticas recomendadas para optimizar la escalabilidad de un
informe.
●
Reducir el tamaño y la complejidad de los informes siempre que sea posible.
●
Descargar la selección de registros al servidor de la base de datos.
●
Usar subinformes a la orden
1.3.4.1
Opciones de actualización
1.3.4.1.1
Soluciones de elaboración de informes de SAP
BusinessObjects Business Intelligence
Hay distintas soluciones de elaboración de informes de la línea de productos de SAP BusinessObjects Business
Intelligence. La gama de productos y las distintas licencias de implementación de dichos productos están
diseñadas para atender la gama completa de necesidades de escalabilidad de una solución de elaboración de
informes.
En esta página se ofrece un breve resumen de cada una de las soluciones de elaboración de informes. Puede
encontrar más información en el sitio Web de SAP BusinessObjects.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
63
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio proporciona a los desarrolladores
una forma rápida y productiva de crear e integrar informes con calidad de presentación en las aplicaciones, sin
salir del entorno de desarrollo de Visual Studio conocido.
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio incluye muchas de las funciones de
SAP Crystal Reports. Estas incluyen la posibilidad de crear informes, conectarlos a un control
CrystalReportViewer e interactuar mediante programación con estos informes usando el SDK de SAP Crystal
Reports.
SAP Crystal Server o plataforma SAP BusinessObjects Business Intelligence
Se incluye un servidor RAS con SAP Crystal Reports Server y la plataforma SAP BusinessObjects Business
Intelligence, que proporciona un aumento considerable en rendimiento y escalabilidad para crear, manipular y
administrar informes.
SAP Crystal Reports Server proporciona todo lo necesario para crear, administrar e implementar de forma segura
informes en la Web en un paquete económico. Abarca todos los pasos del proceso de generación de informes:
acceso a los datos y diseño, administración y entrega, e integración de informes con portales y aplicaciones, lo
que permite una mayor facilidad a la hora de compartir informes Crystal ya existentes o nuevos en la Web.
La plataforma SAP BusinessObjects Business Intelligence es una plataforma de inteligencia empresarial (BI)
multiservidor diseñada para satisfacer los requisitos BI y la generación de informes a gran escala. El entorno
multiservidor proporciona la tolerancia a errores, el equilibrio de carga, la escalabilidad y la fiabilidad que se
necesita para realizar con éxito el trabajo más exigente. Además, la plataforma SAP BusinessObjects Business
Intelligence se recomienda por sus avanzadas funciones de elaboración de informes, como son auditoría, SAP
Crystal Reports Explorer, y Encyclopedia y Process Tracker.
Para crear, administrar e implementar de forma segura informes para la mediana y pequeña empresa, use SAP
Crystal Reports Server. Para aplicaciones de misiones importantes, máxima escalabilidad y herramientas de
inteligencia empresarial adicionales, utilice la plataforma SAP BusinessObjects Business Intelligence.
1.3.4.1.2
Comparar soluciones de elaboración de informes de
SAP BusinessObjects Business Intelligence
En esta tabla se ofrece información para ayudarle a evaluar qué solución de elaboración de informes de SAP
BusinessObjects Business Intelligence resulta apropiada para el nivel de escalabilidad que busca.
Función
SAP Crystal Reports, ver­ SAP Crystal Reports
sión para programadores
de Microsoft Visual Stu­
dio
SAP Crystal Reports Ser­
ver o plataforma SAP Bu­
sinessObjects Business
Intelligence
Compatibilidad ASP.NET
X
X
64
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
X
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Función
SAP Crystal Reports, ver­ SAP Crystal Reports
sión para programadores
de Microsoft Visual Stu­
dio
SAP Crystal Reports Ser­
ver o plataforma SAP Bu­
sinessObjects Business
Intelligence
Vista interactiva de infor­
mes
X
X
X
Inicio de sesión único
X
X
X
Compatibilidad con aplica­ X
ciones Windows
X
X
Diseñador de informes
mejorado
X
X
Compatibilidad con dispo­
sitivos móviles
X
X
Controladores nativos de
bases de datos
X
X
Orígenes de datos OLAP
X
X
Comprobador de depen­
dencias de informes
X
X
Plantillas
X
X
Parámetros dinámicos en
cascada
X
X
Despliegue multiplata­
forma
X
Sistema de administración
de entrega de la informa­
ción
X
Seguridad integrada
X
Equilibrio de carga
X
Repositorio de objetos de
informes
X
Programación de informes
X
Creación y modificación
de informes mediante pro­
gramación
X
X
Modelo de objetos Crystal­ X
ReportViewer
X
X
Modelo de objetos Report­ X
Document
X
X
Modelo de objetos Report­
ClientDocument
X
X
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
65
Función
SAP Crystal Reports, ver­ SAP Crystal Reports
sión para programadores
de Microsoft Visual Stu­
dio
SAP Crystal Reports Ser­
ver o plataforma SAP Bu­
sinessObjects Business
Intelligence
Servidor RAS
X
Modelo de objetos InfoOb­
ject
X
Escalabilidad
Baja
Compatibilidad con varias
versiones de .Net Frame­
work
Baja
Media-alta
X
X
Información relacionada
Comparación de arquitecturas en las soluciones de elaboración de informes SAP Business Intelligence [página 40]
1.3.4.1.3
Servidor de aplicaciones de informes (RAS)
Puede utilizar el servidor RAS para crear y modificar informes Crystal, así como para procesar solicitudes de
páginas.
Una de las tecnologías de SAP BusinessObjects es el servidor de aplicaciones de informes ( RAS). RAS es un SDK
cliente y un servidor. Puede utilizar el servidor RAS para crear y modificar informes Crystal, así como para
procesar solicitudes de páginas. Cuando un proceso de servidor recupera un informe solicitado, RAS lo pasa al
visor de informes.
El servidor RAS solo está disponible como parte de SAP Crystal Reports Server o de la plataforma SAP
BusinessObjects Business Intelligence.
Servidor RAS administrado
Al servidor RAS que es administrado por otros componentes del marco empresarial se le llama servidor RAS
administrado. SAP Crystal Reports Server y SAP BusinessObjects Enterprise ofrecen un marco de servidores que
facilita la administración y distribución de informes a través de la Web en toda la empresa. El servidor RAS
administrado es uno de los diversos servidores de este marco. Puede procesar informes ubicados en el mismo
equipo que el servidor Web y el SDK RAS (informes no administrados) o informes ubicados en un servidor de
repositorio de informes independiente (informes administrados).
El servidor RAS administrado puede utilizar los modelos de objetos ReportClientDocument e InfoObject.
66
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Uso de la API RAS sin un servidor RAS
En SAP Crystal Reports, puede acceder a la funcionalidad avanzada para la creación y modificación de informes
del modelo de objeto de ReportClientDocument desde el SDK de CR .NET. El paquete de implementación de este
escenario sólo requiere los ensamblados .NET, lo que significa que utiliza la API RAS en proceso.
No obstante, si utiliza la API RAS en proceso, perderá las ventajas de rendimiento y estabilidad de un sistema
fuera de proceso orientado al servidor. Para obtener estas ventajas, use la API RAS en combinación con un
servidor RAS en un entorno SAP Crystal Reports Server o plataforma SAP BusinessObjects Business Intelligence.
Para obtener información adicional y código de ejemplo, consulte la propiedad ReportClientDocument de la
clase CrystalDecisions.CrystalReports.Engine.ReportDocument en la referencia de la API.
Información relacionada
Comparación de arquitecturas en las soluciones de elaboración de informes SAP Business Intelligence [página 40]
Modelo de objetos ReportClientDocument (RAS) [página 38]
1.3.4.2
1.3.4.2.1
Optimizar el código
Evitar DataSets para consultas simples
La elaboración de informes a partir de DataSets ofrece ventajas, pero no se deben utilizar DataSets forzosamente
como mecanismo de acceso a datos cuando la escalabilidad es un factor a tener en cuenta. Si su aplicación crea
un DataSet sólo para su uso por parte de un informe y, sobre todo, si la consulta es de tipo simple, como SELECT
field 1, field 2 FROM table, los DataSets sirven de poco.
En estos casos, resulta más rápido y requiere menor cantidad de memoria conectar SAP Crystal Reports
directamente a la base de datos y realizar la consulta (el comportamiento predeterminado de cualquier informe
creado en el diseñador SAP Crystal Reports Designer).
Los DataSets son útiles cuando:
●
Es necesario combinar datos de diversos orígenes.
●
Es necesario modificar datos incluidos en el DataSet tras ejecutar la consulta.
Información relacionada
Tutorial: Conectar a conjuntos de datos de ADO.NET [página 544]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
67
1.3.4.2.2
Almacenar DataSets en memoria caché en caso de
utilizarlos
Los DataSets se convierten en una herramienta de escalabilidad más útil aún si se almacenan en la memoria
caché.
Al cargar un informe en tiempo de ejecución, el motor de informes de SAP Crystal Reports intenta agrupar las
conexiones de base de datos. Por ejemplo, si tres usuarios visitan la misma página ASPX con el mismo informe,
una única conexión de base de datos agrupa las tres consultas. Sin embargo, la consulta en sí no se agrupa.
Aunque la consulta sea idéntica en los tres casos, ésta se debe realizar cada vez que se solicita un informe al
motor de informes. En el caso de una consulta lenta o de un gran conjunto de datos, este tipo de consulta por
usuario puede convertirse en el cuello de botella de una aplicación.
Realizar esta misma consulta por usuario varias veces para llenar de forma redundante un DataSet sería aún peor
debido al trabajo adicional de la memoria.
Para reducir el número de consultas a la base de datos, coloque el DataSet en el objeto ASP.NET Cache después
de la primera consulta, de forma que todas las tareas de informe compartan el DataSet único en la caché.
Información relacionada
Conectar a conjuntos de datos de ADO.NET [página 156]
Elaboración de informes a partir de conjuntos de datos ADO.NET [página 662]
Explica cómo conectar el informe a un conjunto de datos ADO.NET.
1.3.4.2.3
Usar el método Close() para liberar el informe
Use uno de los métodos Close() disponibles para liberar la memoria que usa el informe.
Otra forma de optimizar la escalabilidad en un proyecto de SAP Crystal Reports, versión para programadores de
Microsoft Visual Studio consiste en usar uno de los métodos Close() para liberar la memoria que usa el informe.
Existen dos métodos Close():
●
ReportDocument.Close(), que se usa con SAP Crystal Reports.
●
ReportClientDocument.Close(), que se usa con el SDK de RAS.
El método ReportDocument.Close()
Puede usar el método ReportDocument.Close() para liberar la memoria que consume el informe Crystal en el
servidor Web.
La forma en que se accede al método ReportDocument.Close() depende de si el informe está incrustado o no:
68
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
●
Si el informe está incrustado, se genera automáticamente una clase contenedora de informe para
representar el informe en código. Esta clase contenedora de informe se hereda de ReportDocument, y al
método Close() se accede por herencia.
●
Si el informe no está incrustado, se carga desde el directorio de archivos a una instancia de ReportDocument,
y al método Close() se accede directamente desde la clase ReportDocument.
Tanto el informe de Crystal como la instancia de ReportDocument consumen memoria. Si ReportDocument se
borra de la memoria, el informe continúa usándola.
Por ejemplo, la instancia de ReportDocument queda fuera de alcance cuando la página Web termina de cargarse.
Cuando la recopilación de desecho de .NET se deshace de la instancia de ReportDocument, la memoria usada por
la instancia de ReportDocument se libera del servidor Web.
Sin embargo, el propio informe permanece en memoria en el servidor Web. No se puede eliminar, porque ya no
existe ninguna instancia de ReportDocument para acceder al informe. Si se repiten dichas circunstancias a gran
escala, la memoria del servidor Web se llenará de informes a los que ya no se accede.
Para resolver el problema, llame al método ReportDocument.Close(). El propio informe se cerrará en el servidor
Web y la memoria quedará libre para más informes.
Cuándo se debe llamar al método ReportDocument.Close()
No se debe llamar al método ReportDocument.Close() en la página antes de que se haya mostrado el informe,
porque, incluso si se ha cerrado el informe, ReportDocument volverá a abrir el informe si se hace referencia a él
otra vez. Sólo se debe llamar al método Close() una vez finalizado el proceso de presentación.
El momento adecuado para llamar al método Close() es durante el evento Page_Unload.
El método ReportClientDocument.Close()
Al utilizar un servidor RAS no administrado o RAS administrado, los informes se almacenan en el servidor de
aplicaciones de informes, pero se representan en el servidor Web mediante una instancia de
ReportClientDocument. Si la instancia de ReportClientDocument queda fuera de alcance sin llamar al método
ReportClientDocument.Close(), Report Application Server dejará el informe abierto en la memoria, aunque ya no
se pueda acceder a él. Si se repiten dichas circunstancias a gran escala, la memoria de Report Application Server
se llenará de informes a los que ya no se accede en el servidor Web.
Para resolver el problema, llame al método ReportClientDocument.Close(). El informe se cerrará en Report
Application Server y la memoria quedará libre para más informes.
Cuándo se debe llamar al método ReportClientDocument.Close()
No se debe llamar al método Close() en la página antes de que se haya mostrado el informe, porque el informe
debe permanecer abierto en el servidor hasta que haya finalizado el proceso de presentación.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
69
Para una instancia de ReportClientDocument, el método Close() cierra inmediatamente el informe y no se puede
volver a abrir. Por lo tanto, si se llama al método Close() antes de que se muestre el informe, no se podrá acceder
a él y se generará una excepción.
El momento adecuado para llamar al método Close() es durante el evento Page_Unload.
Información relacionada
Comparar informes incrustados y no incrustados [página 163]
1.3.4.2.4
Web
Configurar una matriz de servidores o de procesos
Una matriz de servidores permite extender un sitio Web por varios servidores. Una matriz de procesos Web
permite extender un sitio Web por varias CPU dentro de un único servidor. Distribuir la carga de trabajo del
proceso de informes entre varias CPU o varios servidores puede mejorar el rendimiento de la aplicación de
elaboración de informes basada en Web.
Información relacionada
Usar SAP Crystal Reports en una matriz de servidores o de procesos Web [página 73]
1.3.4.3
1.3.4.3.1
Optimizar los informes
Utilizar informes más pequeños
Otra forma de optimizar la escalabilidad en un proyecto de SAP Crystal Reports, versión para programadores de
Microsoft Visual Studio consiste en reducir el tamaño de los informes.
Siempre que sea posible, haga que sus informes tengan menos de 15 páginas. A menudo, en las aplicaciones Web
los usuarios sólo desean ver algunos datos clave y no páginas enteras de datos.
Puede que los informes utilizados en las aplicaciones de escritorio ya no resulten adecuados para las aplicaciones
basadas en Web.
Para reducir el tamaño de los informes, utilice la fórmula de selección de registros a fin de limitar el número de
registros devueltos al informe. Esta operación se puede implementar de tres formas posibles:
●
La fórmula de selección de registros puede codificarse en el informe con el diseñador incrustado SAP Crystal
Reports Designer.
●
Puede filtrar adicionalmente los registros recuperados en el informe mediante programación.
70
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
○
Si usa el modelo de objetos CrystalReportViewer, use la propiedad SelectionFormula o
ViewTimeSelectionFormula de CrystalReportViewer.
○
Si usa el modelo de objetos ReportDocument, use la propiedad RecordSelectionFormula de
ReportDocument.
Información relacionada
Tutorial: Filtrar datos con fórmulas de selección [página 287]
En este tutorial, aprenderá a usar las fórmulas de selección para filtrar los registros que desee mostrar en un
informe de Crystal.
1.3.4.3.2
Utilizar gráficos más pequeños
Otra forma de optimizar la escalabilidad en un proyecto de SAP Crystal Reports, versión para programadores de
Microsoft Visual Studio consiste en usar gráficos más pequeños en el informe.
No es necesario eliminar gráficos de los informes si la escalabilidad es un factor a tener en cuenta, pero se
deberían utilizar con moderación debido al uso de recursos del sistema por parte de éstos.
Cuando se muestra un informe en un control CrystalReportViewer y dicho informe contiene un gráfico (un
diagrama o una imagen), el motor de informes debe crear un archivo JPG temporal (en la carpeta
dynamic_images) y el explorador debe realizar una solicitud independiente al servidor Web para recuperarlo.
Además, el control CrystalReportViewer busca periódicamente imágenes antiguas en la carpeta dynamic_images
y las elimina. Este acceso al disco puede reducir el rendimiento de los informes. El uso moderado de diagramas e
imágenes mantiene un acceso mínimo al disco.
Información relacionada
Configuración del archivo Web.Config [página 19]
Directorio de visores [página 13]
1.3.4.3.3
Rediseñar subinformes para reducir la demanda
Si se cambia el modo en el que se usan los subinformes en la aplicación, se puede influir en gran medida en el
rendimiento de la misma.
Otra forma de optimizar la escalabilidad en un proyecto de SAP Crystal Reports, versión para programadores de
Microsoft Visual Studio consiste en refactorizar las llamadas a subinformes para reducir la demanda.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
71
Acerca del uso de subinformes
Si bien a menudo los subinformes se pueden utilizar para crear informes complejos, éstos suponen un trabajo
adicional considerable. Esto no significa que no se deban utilizar, pero su uso debería ser moderado.
Además, considere que al ubicar subinformes en secciones que se repiten, como encabezados de grupo o la
sección de detalles, cada instancia de subinforme requiere su propia tarea de informe. Esto significa que un
informe con 100 registros que tenga un subinforme en la sección de detalles ejecuta en realidad 101 tareas de
informe.
Refactorizar subinformes como control DataGrid de .NET vinculado a informes
A menudo los subinformes se utilizan en un modelo de resumen/detalle:
●
El informe principal muestra filas de resumen.
●
Cada fila se vincula a un subinforme que contiene un informe de detalles.
Para los datos de resumen que no es necesario imprimir, se puede considerar la presentación de dichos datos en
una lista de filas en lugar de en un informe. Es decir, en lugar de utilizar un informe como resumen que se vincule a
varios subinformes para obtener detalles, utilice como resumen un control DataGrid de .NET que se vincule a
varios informes normales para obtener detalles. El uso de un control DataGrid de .NET como resumen ofrece una
solución más sencilla y escalable.
Para crearla, enlace un conjunto de datos de resultados a un control DataGrid, con un vínculo al informe en cada
ID de fila. Así, sólo se utiliza un informe (con un parámetro que acepta que se pase a éste un ID único desde la
dirección URL del ID de fila de DataGrid) para cada fila.
En este caso, no se realiza el procesamiento de informes cuando aparece DataGrid. El procesamiento de informes
solamente tiene lugar cuando se selecciona uno de los vínculos incluido en DataGrid.
1.3.4.3.4 No utilizar campos que bloquean el procesamiento
a petición
Otra forma de optimizar la escalabilidad en un proyecto de SAP Crystal Reports, versión para programadores de
Microsoft Visual Studio consiste en no usar campos que bloqueen el procesamiento a petición.
SAP Crystal Reports procesa los informes a petición. Por ejemplo, si se va a mostrar la primera página de un
informe, sólo procesa esa primera página, no el informe completo. Sin embargo, la inserción en la primera página
de un informe de campos o fórmulas que dependan de la finalización del procesamiento del informe impide el
procesamiento a petición.
Por ejemplo, si se ubica en la primera página el campo especial "Página N de M", se deberá procesar el informe
completo a fin de determinar el recuento de páginas para poder presentar este campo. Esto hace que, para poder
mostrarse la primera página, sea necesario esperar hasta que haya terminado de procesarse todo el informe. El
mismo comportamiento se produce cuando se utiliza un porcentaje de cálculos de resumen.
Procure evitar el uso de este tipo de campos.
72
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.3.4.3.5
Activar la opción Ninguna impresora de Configurar
impresión
Otra forma de optimizar la escalabilidad en un proyecto de SAP Crystal Reports, versión para programadores de
Microsoft Visual Studio consiste en seleccionar la opción Ninguna impresora en Configurar impresión.
La opción Ninguna impresora
Normalmente, cuando se crea un informe Crystal, se ha designado una impresora predeterminada en el equipo de
desarrollo. Esta impresora predeterminada determina el diseño de las imágenes, fuentes y campos de base de
datos del informe.
La ventaja de designar una impresora predeterminada es que ofrece coherencia en la presentación de informes:
los informes se muestran en el diseño de la impresora predeterminada. La desventaja de utilizar una impresora
predeterminada es que puede dar problemas de escalabilidad.
Por ejemplo, algunos controladores de impresora provocan pérdidas de memoria o de control de archivos. Si un
informe se configura para un controlador de impresora que sufre alguno de estos problemas, podría afectar al
rendimiento.
Por lo tanto, como práctica recomendada para la escalabilidad, modifique el informe para que no use ningún
controlador de impresora.
Nota
Una consecuencia de configurar el informe para que no use ningún controlador de impresora es que el diseño
del informe puede que ya no sea idéntico a la salida de la impresora de destino. Es recomendable que después
de que modifique el informe para que no use ningún controlador de impresora, pruebe el informe en la
impresora seleccionada. Si es necesario, ajuste el diseño del informe.
Información relacionada
Para eliminar el controlador de impresora predeterminado de un informe [página 121]
1.3.5
Usar SAP Crystal Reports en una matriz de servidores o
de procesos Web
En esta sección se proporciona información general sobre el uso de un sitio Web de SAP Crystal Reports, versión
para programadores de Microsoft Visual Studio en una matriz de servidores o de procesos Web.
Una matriz de servidores permite extender un sitio Web por varios servidores. Una matriz de procesos web
permite expandir un sitio web en varias CPU con un único servidor. Si se expande el informe procesando la carga
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
73
de trabajo en varias CPU o varios servidores, se puede mejorar el rendimiento de su aplicación de generación de
informes basada en web.
1.3.5.1
Arquitectura de una matriz de servidores web o de
una matriz web garden
Arquitectura de una matriz de servidores Web
Una matriz de servidores Web dispone de varios servidores que están expuestos a clientes de explorador como
un único servidor virtual, con una Tarjeta de acceso a medios y una dirección TCP/IP virtuales.
Tras este nivel virtual, cada servidor de la matriz de servidores Web recibe cada paquete de red, pero sólo procesa
un subconjunto de estos paquetes. La habilidad de compartir equitativamente la carga de trabajo es lo que
proporciona a las matrices de servidores Web su capacidad de procesamiento superior.
Esta distribución de paquetes se administra mediante el Equilibrio de carga de red. El Equilibrio de carga de red
realiza lo siguiente:
●
Equilibra las solicitudes de cliente entre los servidores.
●
Determina qué servidor procesa cada solicitud.
●
Asegura que se optimiza el uso de los recursos del servidor y los tiempos de espera del cliente.
●
Proporciona una alternativa superior a la afinidad de clientes.
Nota
En un caso de afinidad de clientes, los clientes que se conectan tienen la restricción de tener que regresar
al mismo servidor cada vez.
La afinidad de clientes suele estar desactivada, porque puede crear una aglomeración de solicitudes para
un servidor particular.
Cada servidor de una matriz de servidores Web dispone de un controlador de dispositivo de red Equilibrio de
carga de red, que comunica con los otros servidores, y cada servidor suele tener dos tarjetas de red. La segunda
tarjeta permite la comunicación interna para que el Equilibrio de carga de red se realice en una red interna
independiente.
La familia de Windows Server de los sistemas operativos disponen del controlador de dispositivo de red Equilibrio
de carga de red.
Arquitectura de una matriz de procesos Web
Una matriz de procesos Web es como una matriz de servidores Web, excepto en que en lugar de usar varios
equipos de servidor vinculados, usa un único equipo con varias CPU.
Este único servidor SMP (multiprocesamiento simétrico) usa ASP.NET para ejecutar un proceso de trabajo
ASP.NET en cada CPU. El servidor administra varias solicitudes de cliente relativas a las distintas CPU del
servidor.
74
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.3.5.2
El proceso de trabajo ASP.NET
ASP.NET se ejecuta dentro de un proceso denominado proceso de trabajo ASP.NET. Toda la funcionalidad
ASP.NET se ejecuta dentro del ámbito de este proceso.
Un servidor Web normal sólo contiene un único proceso de trabajo ASP.NET. Se diferencia de las matrices de
servidores o de procesos Web:
●
Una matriz de servidores Web contiene varios procesos de trabajo ASP.NET.
Cada servidor del grupo de servidores administra un proceso de trabajo ASP.NET independiente.
●
Una matriz de procesos Web contiene varios procesos de trabajo ASP.NET.
Cada CPU del servidor SMP administra un proceso de trabajo ASP.NET independiente.
Elegir un proceso de trabajo ASP.NET
Cuando un cliente Web se conecta a una matriz de servidores o de procesos Web, se selecciona uno de los
múltiples procesos de trabajo ASP.NET para ejecutar la solicitud.
●
En una matriz de servidores Web, el Equilibrio de carga de red determina el proceso de trabajo ASP.NET
seleccionado.
●
En una matriz de procesos Web, el proceso de trabajo ASP.NET seleccionado lo determina ASP.NET.
Administración de estado con varios procesos de trabajo ASP.NET
Si se cambia de un caso con un único proceso de trabajo ASP.NET (un servidor Web normal) a un caso con varios
procesos de trabajo ASP.NET (una matriz de servidores o de procesos Web), se presentan complicaciones con la
administración de estado.
Las páginas Web no tienen estado, de modo que un servidor Web debe conservar el estado mediante otros
medios. La forma usual de administrar el estado en el servidor Web incluye Session State y ASP.NET Cache.
Tanto Session como Cache están contenidos dentro del espacio de memoria de un único proceso de trabajo
ASP.NET. Pero en una matriz de servidores o de procesos Web, varios procesos de trabajo ASP.NET trabajan
simultáneamente. Session o Cache dentro de cualquier proceso de trabajo ASP.NET individual no pueden
administrar el estado en varios procesos.
Por lo tanto, se requiere una nivel adicional para la administración de estados: un servidor Session State fuera del
proceso que almacene y recupere información de estado para cada proceso de trabajo ASP.NET en una matriz de
servidores o de procesos Web.
Información relacionada
Session State fuera del proceso [página 76]
¿Cuál es el enfoque de persistencia que se debe usar con SAP Crystal Reports? [página 52]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
75
1.3.5.3
Session State fuera del proceso
En las matrices de servidores o de procesos Web, Session State se debe compartir entre los servidores mediante
algún modo de Session State fuera del proceso.
Normalmente se usan dos soluciones:
●
Implementar el servidor Session State fuera del proceso incluido con ASP.NET.
●
Configurar manualmente cada servidor Web para almacenar los datos de Session State en un servidor SQL.
Requisito de serialización
En ambas soluciones, todos los objetos que se desea almacenar deben ser serializables. Si un objeto no se puede
serializar, no se podrá conservar en un servidor de estado fuera del proceso.
Nota
No todos los modelos de objetos del SDK de SAP Crystal Reports se pueden serializar. Sin embargo, SAP
proporciona una solución de actualización para administrar el estado de los informes con un servidor fuera del
proceso.
Información relacionada
Modelos de objetos serializables en SAP Crystal Reports [página 76]
1.3.5.4
Modelos de objetos serializables en SAP Crystal
Reports
Hay disponibles cuatro modelos de objeto para SAP Crystal Reports: dos que se incluyen con SAP Crystal Reports
y dos que están disponibles por actualización.
Esta sección explica qué modelos de objetos se pueden serializar para utilizarlos con un servidor Session State
fuera del proceso.
Nota
Para obtener una presentación de Session State fuera del proceso, vea Session State fuera del proceso [página
76].
76
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Serialización y el modelo de objetos CrystalReportViewer
El modelo de objetos CrystalReportViewer es un modelo de objetos limitado incluido en la API del control
CrystalReportViewer. Debido al ámbito limitado de este modelo de objetos, normalmente no se recomienda
su uso en favor del modelo de objetos ReportDocument más eficaz.
Si embargo, el modelo de objetos CrystalReportViewer se puede utilizar en una matriz de servidores o de
procesos Web. Esto se debe a que CrystalReportViewer está incluido dentro de un control Web y la
persistencia de éste se administra en el lado del cliente, con View State. La persistencia de View State coloca el
estado de los controles del servidor Web ASP.NET en una cadena cifrada y, a continuación, incluye dicha cadena
cifrada como un campo de formulario oculto dentro de la página ASPX cuando la página se vuelve a cargar. La
información de estado se puede enviar a cualquier proceso de trabajo ASP .NET.
Nota
Este modo de persistencia de cliente sólo funciona en la recarga de la página. View State no puede conservar la
información en varias páginas.
Serialización y el modelo de objetos ReportDocument
El modelo de objetos ReportDocument es más eficaz que CrystalReportViewer, y por ello normalmente se
recomienda su uso en SAP Crystal Reports.
Sin embargo, en la versión 9 y anteriores de SAP Crystal Reports, la clase ReportDocument no se podía serializar
y, por ello, por sí sola, no se podía usar con un servidor Session State fuera del proceso en el caso de una matriz
de servidores o de procesos Web.
Esta limitación se ha solucionado en SAP Crystal Reports 10 y versiones posteriores adaptando el modelo de
objetos ReportDocument a un modelo de objetos serializable como ReportClientDocument.
Al modelo de objetos ReportClientDocument se puede acceder de varias formas distintas.
Para usar el modelo de objetos ReportDocument en una matriz de servidores o de procesos Web, necesitará el
servidor Session State fuera del proceso ASP.NET para almacenar el estado de la instancia de ReportDocument
serializada y un servidor RAS no administrado para almacenar
Nota
Sólo puede serializar el modelo de objetos ReportDocument si ha instalado el servidor RAS y, a continuación,
ha establecido las propiedades ReportDocument.ReportAppServer y
ReportDocument.EnterpriseSession para que se dirijan a ese servidor.
Serialización y el modelo de objetos ReportClientDocument
El modelo de objetos ReportClientDocument se puede serializar. Al modelo de objetos
ReportClientDocument se puede acceder de varias formas distintas.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
77
El modelo de objetos InfoObject
El modelo de objeto InfoObject forma parte de la solución de actualización de Crystal: SAP Crystal Reports
Server o la plataforma SAPBusinessObjects Business Intelligence. SAP Crystal Reports Server y la plataforma
SAP BusinessObjects Business Intelligence son soluciones empresariales multiservidor que habitualmente sirven
como alternativa a una matriz de servidores o de procesos Web existente.
Información relacionada
Usar SAP Crystal Reports en una matriz de servidores o de procesos Web [página 73]
Elegir el modelo de objetos correcto para el proyecto [página 31]
ViewState y persistencia del modelo de objetos CrystalReportViewer [página 54]
1.3.5.5
Configurar SAP Crystal Reports para una matriz de
servidores o de procesos Web
Servidores adicionales
Además de los servidores de una matriz de servidores o de procesos Web, necesitará dos servidores adicionales:
●
El servidor Session State fuera del proceso ASP.NET para almacenar el estado de la instancia de
ReportDocument serializada.
●
Un servidor RAS no administrado para almacenar el archivo de informe .rpt de Crystal.
Nota
Para obtener más información, vea Soluciones de elaboración de informes de SAP BusinessObjects
Business Intelligence [página 63].
Uso especial de ReportDocument
La matriz de servidores o de procesos Web usa el servidor Session State fuera del proceso ASP.NET para
almacenar el objeto ReportDocument serializado. En este caso, el objeto ReportDocument se usa de forma
diferente en una instalación básica de SAP Crystal Reports.
En su lugar, el método ReportDocument.Load() o la propiedad ReportDocument.FileName vincula la instancia de
ReportDocument a un informe fuera del proceso que se almacena en el servidor RAS no administrado. Para
obtener ejemplos de cómo usar cada enfoque, vea la siguiente información de configuración.
78
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Nota
El almacenamiento del archivo de informe .rpt file en el servidor RAS no administrado fuera del proceso
significa que cada proceso de trabajo ASP.NET de la matriz de servidores o de procesos Web puede acceder al
mismo archivo de informe .rpt desde una ubicación central.
Configuración de ReportDocument para el servidor RAS no administrado
La relación entre la instancia de ReportDocument y el servidor RAS no administrado se puede configurar de los
modos siguientes:
●
Cargue el informe de Crystal incrustado local incluido en la instancia de ReportDocument en el servidor RAS
no administrado en tiempo de ejecución. Éste almacena temporalmente el archivo de informe .rpt en el
servidor RAS no administrado fuera del proceso.
●
Asocie un informe externo que está almacenado permanentemente en el servidor RAS no administrado fuera
del proceso a la instancia de ReportDocument, asignando la ruta del directorio de archivos del informe en el
servidor RAS no administrado a la propiedad FileName de la instancia ReportDocument.
Instancia de ReportDocument en el servidor Session State, el archivo .rpt en el
servidor RAS no administrado
La instancia de ReportDocument, que se puede serializar si se usa en cooperación con la solución de
actualización de Crystal RAS no administrado, se almacena en el servidor Session State fuera del proceso
ASP.NET.
Debido a que la instancia ReportDocument permanece activa en el servidor Session State, el archivo de
informe .rpt de Crystal asociado a la instancia ReportDocument se mantiene abierto en el servidor RAS no
administrado.
Si un proceso de trabajo ASP.NET diferente de la matriz de servidores o de procesos Web obtiene la instancia de
ReportDocument del servidor Session State fuera del proceso, la instancia de ReportDocument accede al archivo
de informe .rpt asociado desde el servidor RAS no administrado.
Escribir imágenes en el recurso compartido de red
Un aspecto adicional se debe configurar al usar una matriz de servidores Web.
Las imágenes que se escriben durante el proceso de elaboración de informes (por ejemplo gráficos dinámicos) se
deben colocar en un recurso compartido de red para que pueda acceder a ellas cualquier proceso de trabajo
ASP.NET. Cada equipo se debe configurar para escribir imágenes en el mismo recurso compartido de red y
conceder permiso a la cuenta de trabajo ASP.NET en cada equipo para escribir en dicho recurso compartido.
Para configurar un equipo para que pueda acceder a este directorio, agregue la siguiente información al registro.
[HKEY_LOCAL_MACHINE\SOFTWARE\Business Objects\Suite 12.0\Report Application Server
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
79
\Viewer]
"CrystalImageDir"="\\fileserver\images"
Instrucciones de configuración detalladas
Para obtener instrucciones de configuración detalladas sobre los problemas que puedan surgir al ejecutar SAP
Crystal Reports en una matriz de servidores o de procesos Web, consulte el sitio Web del soporte técnico.
1.3.6
Trabajar con Crystal Reports como servicio web
En esta sección se explica cómo trabajar con informes de Crystal que se han publicado como servicios Web de
informes.
Los servicios Web permiten que distintas aplicaciones compartan datos y funciones. Por ejemplo, un sistema
contable puede conectarse a un sistema de pedidos de cliente. Las compañías también pueden utilizar los
servicios Web para compartir datos y funciones de aplicación con otras compañías.
Los servicios Web son independientes de cualquier tecnología de componentes o convención de llamada a
objetos concreta por los siguientes motivos:
●
Utilizan HTTP como protocolo Web.
●
Se basan en XML.
●
Son compatibles con el nivel de socket seguro (SSL).
Los programas escritos en cualquier lenguaje de programación para cualquier modelo de componente y sistema
operativo pueden tener acceso al servicio Web.
SAP Crystal Reports permite que los informes se publiquen fácilmente y se usen como servicios Web de informes.
Las aplicaciones Web y para Windows pueden conectarse a un servicio Web de informes y mostrar el informe de
Crystal que expone dicho servicio.
1.3.6.1
Publicar y utilizar un informe como un servicio Web
En SAP Crystal Reports, versión para programadores de Microsoft Visual Studio, se pueden publicar informes de
Crystal como servicios Web.
Cómo se publica un informe como servicio Web de informes
En SAP Crystal Reports, versión para programadores de Microsoft Visual Studio, al seleccionar la opción de
publicar un informe de Crystal para un servicio Web de informes, dicho servicio se compila en un archivo .DLL,
que genera un archivo XML con la extensión de archivo de servicio Web de .NET, ".asmx" El archivo ASMX
describe las funciones públicas, los parámetros de entrada, los tipos de datos y los tipos de datos de devolución
que expone el servicio Web de informes. Los archivos DLL y ASMX se publican en el servidor Web como servicio
80
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Web de informes. Un cliente de un explorador Web ahora puede invocar el servicio Web de informes mediante una
llamada a la dirección URL del servicio Web. Los datos se pasan desde y al servicio Web mediante HTTP en
formato XML.
Cómo se utiliza el informe como un archivo de servicios Web de informes en el
cliente
Para tener acceso al servicio Web de informes publicado desde una aplicación cliente, debe pasar la cadena de
dirección URL a la propiedad ReportSource del control CrystalReportViewer, tanto desde un sitio Web como
desde un proyecto Windows.
Información relacionada
Utilizar Crystal Services [página 83]
Trabajar con Crystal Reports como servicio web [página 80]
1.3.6.1.1
Para crear un servicio Web de informes
Requisitos previos
Antes de empezar, necesitará un informe de Crystal existente. El informe se publicará como servicio web, que
podrá usar la propiedad CrystalReportViewer.ReportSource.
Procedimiento
1.
Inicie Visual Studio.
2.
En el menú Archivo, seleccione Nuevo y haga clic en Sitio Web.
3.
En la lista Plantillas instaladas de Visual Studio, haga clic en Servicio Web de ASP.NET.
4.
En el campo Ubicación, escriba una ruta de directorio de archivo y un nombre para el directorio de servicios
Web.
C:\WebServices\MyCrystalReportsWebServices
5.
Haga clic en Aceptar.
6.
En el Explorador de soluciones, haga clic con el botón secundario en el nombre de proyecto en negrita y
seleccione Agregar elemento existente...
7.
En el cuadro de diálogo Agregar elemento existente, establezca Tipo de archivo como Todos los archivos (*.*).
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
81
8.
Agregue un informe de Crystal existente al proyecto.
9.
Haga clic con el botón derecho en el objeto y seleccione Publicar como servicio Web.
Se crea un nuevo servicio.
10. Haga clic con el botón derecho en el servicio web y seleccione Establecer como página de inicio.
Al ejecutar la aplicación, el nuevo servicio web aparecerá en el explorador web. Puede usar la URL del servicio
web como origen de informe para un control CrystalReportViewer.
Nota
En Visual Studio 2005 y versiones posteriores, no se utiliza IIS de forma predeterminada para obtener una
vista previa de los sitios y servicios Web. En su lugar, el Visual Web Developer Web Server es el servidor
Web predeterminado. Cuando se utiliza este servidor Web, la dirección URL sólo contiene un número de
puerto temporal y aleatorio que sólo es válido durante la compilación. Para tener acceso a esta dirección
URL de servicio Web desde una aplicación cliente, primero debe configurar el directorio de archivos para el
proyecto de servicio Web como un directorio virtual en IIS. El directorio virtual ofrece una dirección URL
coherente para llamarla desde la aplicación cliente.
1.3.6.1.2
Para utilizar el servicio Web de informes desde un
proyecto de cliente
Requisitos previos
Antes de empezar, debe tener acceso a un informe que ya se haya publicado como servicio web.
Procedimiento
1.
Agregue el control CrystalReportViewer al sitio web o a la aplicación de Windows.
2.
En el menú Ver, haga clic en Código.
3.
Asigne la cadena de la dirección URL del servicio web de informes a la propiedad ReportSource de la clase
CrystalReportViewer.
myCrystalReportViewer.ReportSource =
"http://localhost/MyCrystalReportsWebService/Hierarchical_GroupingService.asmx"
crystalReportViewer.ReportSource =
"http://localhost/MyCrystalReportsWebService/Hierarchical_GroupingService.asmx";
Resultados
Al ejecutar la aplicación, el control CrystalReportViewer muestra el informe publicado por el servicio web.
82
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.3.6.2
Utilizar Crystal Services
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio permite la conexión mediante
programación a los informes mediante el servicio Web de Crystal Services. Crystal Services facilita la conexión a
informes expuestos por varios servidores en la red.
Los orígenes de informe subyacentes a estos subnodos y las clases que generan (cuando se arrastran al
formulario Web Forms o Windows Forms) varían según las versiones sucesivas de SAP Crystal Reports.
Usar Crystal Services con SAP Crystal Reports 2005 o posterior
En Visual Studio 2005, a Crystal Services se accede mediante programación. Crystal Services permite generar
una lista de informes disponibles en un equipo local o remoto, y acceder a estos informes mediante un servicio
Web.
El código de conexión se debe introducir manualmente en SAP Crystal Reports, versión para programadores de
Microsoft Visual Studio.
Crystal Services utiliza el protocolo de los servicios Web de informes para acceder a un directorio virtual del
servidor, conocido como el directorio virtual de visores.
Usar Crystal Services con SAP Crystal Reports para Visual Studio .NET 2003
En SAP Crystal Reports para Visual Studio 2003, el acceso a Crystal Services se realizaba en el Explorador de
servidores.
El subnodo de Crystal Services de cada servidor se expandirá para mostrar más subnodos. Los nombres de estos
subnodos varían según las versiones de SAP Crystal Reports, pero su funcionamiento es común y consiste en que
cada subnodo de los servicios de Crystal Services se expande para mostrar una lista de informes, desde el
directorio de archivos del equipo local o desde los servidores de la red.
En algunos casos, un subnodo de Crystal Services usa el protocolo de los servicios Web de informes. En tal caso,
usa dicho protocolo para acceder a un directorio virtual del servidor, conocido como el directorio virtual de
visores.
En otros casos, se realiza una conexión directa con un servidor RAS no administrado, SAP Crystal Reports Server
o la plataforma SAP BusinessObjects Business Intelligence. En tal caso, no se usa el protocolo del servicio Web de
informes.
Es posible que deba ajustar la configuración del servidor de seguridad para poder acceder al CMS de la
plataforma SAP BusinessObjects Business Intelligence. El puerto predeterminado del CMS es 6400. Póngase en
contacto con el administrador del sistema para obtener más información sobre la configuración de la dirección de
red y el puerto del sistema de plataforma SAP BusinessObjects Business Intelligence. Puede encontrar más
información sobre la personalización de puertos en el Manual del administrador de la plataforma SAP
BusinessObjects Business Intelligence.
Nota
Los nodos disponibles dependen de la configuración y del contrato de licencia.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
83
Un informe que se muestra mediante el nodo Crystal Services se puede arrastrar a la bandeja de componentes de
formularios Web Forms o Windows Forms en Visual Studio .NET 2003.
Información relacionada
Directorio de visores [página 13]
1.3.6.3
Configurar Archivos de servidor en Crystal Services
Uno de los grupos de servicios de Crystal Services que se incluye con SAP Crystal Reports, versión para
programadores de Microsoft Visual Studio es Archivos de servidor Archivos de servidor es una colección de
servicios Web de informes que se exponen mediante un directorio virtual, desde una ruta de directorio de
archivos en la unidad de disco duro.
Por cada versión de Visual Studio se necesitan distintos requisitos de implementación.
1.3.6.3.1
Configurar archivos de servidor en
Visual Studio .NET 2003
Archivos de servidor hace referencia a una colección de servicios Web de informes que se exponen desde el
directorio virtual de visores en IIS. Server Files se proporcionó originalmente como un nodo de Crystal Services en
SAP Crystal Reports para Visual Studio .NET 2002, pero el nodo se ha eliminado desde entonces. Todas las
versiones posteriores de SAP Crystal Reports siguen admitiendo Archivos de servidor en el SDK, aunque es
necesario realizar algunos ajustes de configuración para cada versión.
Los Archivos de servidor se generan a partir de los archivos de informe subyacentes, que se almacenan en la
carpeta de informes de muestra (o cualquier otra carpeta que pueda designar) en la ruta del directorio de
archivos del servidor Web.
Se puede acceder de dos formas a Archivos de servidor:
●
Como un nodo visible bajo Crystal Services.
Este modo de acceso sólo está disponible en SAP Crystal Reports para Visual Studio 2003.
●
A través de la configuración mediante programación de la clase ServerFileReport en el SDK.
El acceso a Archivos de servidor a través del SDK está disponible en todas las versiones de SAP Crystal
Reports .NET.
Los Archivos de servidor se muestran a través de un directorio virtual en IIS. La conexión con los archivos de
informe subyacentes requiere la configuración de permisos de acceso a la carpeta.
Los permisos de acceso se configuran mediante una entrada del archivo web.config.
84
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Cómo se configuran los archivos de servidor en Visual Studio .NET 2003
En Visual Studio .NET 2003, se ha dejado de usar la carpeta de configuración de archivos de servidor y se ha
pasado a usar una entrada de configuración al archivo web.config.
Puede agregar la entrada de configuración en el archivo web.config de cada proyecto, de uno en uno. Sin
embargo, se recomienda que se agregue esta entrada de configuración en el archivo web.config situado en el
directorio virtual de visores de SAP Crystal Reports, con el fin de que dicha información esté disponible para
todos los proyectos de Visual Studio .NET. Antes de hacerlo, vea la siguiente sección para obtener más
información sobre el "directorio virtual de visores".
Archivos de servidor y el directorio virtual de visores
Archivos de servidor se atiende fuera de Servicios de Internet Information Server (IIS) desde un servicio Web
centralizado en un directorio virtual de visores especial. Cada versión posterior de SAP Crystal Reports crea un
directorio virtual de visores en IIS, lo que permite mantener varias versiones de SAP Crystal Reports.
Por lo tanto, si dispone de Server Files codificado en un proyecto con una versión anterior de SAP Crystal Reports,
y ahora actualiza a una versión posterior, el "directorio virtual de visores" adicional se convierte en un problema
de mantenimiento. En el código, el nombre del "directorio virtual de visores" de la propiedad WebServiceURL de
cada instancia de ServerFileReport se debe cambiar al "directorio virtual de visores" para permitir que funcionen
las instancias de ServerFileReport.
Información relacionada
Configurar archivos de servidor en Visual Studio 2005 y posterior [página 87]
Trabajar con Crystal Reports como servicio web [página 80]
Directorio de visores [página 13]
1.3.6.3.1.1
Para cambiar el "directorio virtual de visores" en
la propiedad WebServiceURL de las instancias de
ServerFileReport
Procedimiento
1.
Busque cada repetición en el proyecto en el que esté asignada la propiedad WebServiceURL de una instancia
de ServerFilesReport.
2.
Compare el nombre del directorio virtual de visores actualmente asignado en el código con el que se utiliza en
versiones anteriores.
3.
Cambie el nombre del directorio virtual de visores al nombre que se usa en la versión más reciente instalada
de SAP Crystal Reports.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
85
4.
Vuelva a compilar y compruebe que los informes se cargan correctamente.
Pasos siguientes
Modifique el archivo web.config en el directorio virtual de visores para configurar correctamente los archivos del
servidor de todas las versiones posteriores a Visual Studio .NET 2002.
1.3.6.3.1.2
Para agregar la entrada de configuración de
Archivos de servidor al archivo web.config del directorio virtual
de visores (todas las versiones posteriores a Visual
Studio .NET 2002)
Procedimiento
1.
Localice el directorio virtual de visores de la versión más reciente que se haya instalado de SAP
Crystal Reports.
2.
Para comprobar que funciona el directorio virtual de los visores, abra un explorador y escriba la dirección URL
del servicio Web de informes publicado en el directorio virtual de los visores.
Opción
Descripción
Visual Studio 2003
http://localhost/CrystalReportWebFormViewer2/
ServerFileReportService.asmx?wsdl
SAP Crystal Reports 2008 http://localhost/crystalreportviewers12/
ServerFileReportService.asmx?wsdl
3.
En un editor de textos, abra el archivo web.config situado en el directorio virtual de visores.
Nota
De forma alternativa, puede realizar estos cambios únicamente en el archivo web.config de la aplicación
Web cliente que accederá a estos informes de Archivos de servidor.
4.
En la parte superior del archivo web.config, en la etiqueta de configuración, agregue una entrada
configSections que declare un nuevo tipo sectionGroup (crystalDecisions) y su sección
(serverFileReportManager).
<configSections>
<sectionGroup name="crystalDecisions">
<section name="serverFileReportManager"
type="System.Configuration.NameValueSectionHandler, System,
Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089, Custom=null" />
</sectionGroup>
</configSections>
86
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
5.
Detrás de la etiqueta de cierre de configSections, agregue el nuevo tipo sectionGroup y la sección que ha
declarado en el paso anterior.
En el ejemplo siguiente, cambie el valor del directorio raíz por el directorio en el que ha instalado los informes.
En lo que respecta a este ejemplo, la ruta de archivo se ha establecido en C:\Archivos de programa
\Microsoft Visual Studio .NET 2003\Crystal Reports\Samples\Reports\Feature Examples.
<crystalDecisions>
<serverFileReportManager>
<add key="rootDirectory"
value="C:\program files\Microsoft Visual Studio .NET 2003\Crystal Reports\Samples
\En\Reports\Feature Examples" />
</serverFileReportManager>
</crystalDecisions>
Nota
Debe escribir la ruta de directorio de archivos a la carpeta de informes en el campo de valor.
6.
Guarde los cambios en web.config.
1.3.6.3.2
Configurar archivos de servidor en
Visual Studio 2005 y posterior
Los Archivos de servidor son una colección de servicios Web de informes que exponen informes en un servidor
IIS. Server Files se proporcionó originalmente como un nodo de Crystal Services en SAP Crystal Reports para
Visual Studio .NET 2002, pero el nodo se ha eliminado desde entonces. Todas las versiones posteriores de SAP
Crystal Reports siguen admitiendo Archivos de servidor en el SDK, aunque es necesario realizar algunos ajustes
de configuración para cada versión.
Los Archivos de servidor se generan a partir de los archivos de informes subyacentes, que se almacenan en la
carpeta de informes de muestra (o cualquier otra carpeta que se pueda designar) en la ruta del directorio de
archivos del servidor Web.
Configurar Archivos de servidor
Para configurar archivos de servidor para Visual Studio 2005 o posterior, debe seguir dos pasos. En primer lugar,
debe crear el servicio Web de informes que expone los informes. El segundo paso es modificar el archivo
web.config que corresponde al nuevo servicio Web. En Visual Studio 2005, se ha eliminado la carpeta de
configuración de Archivos de servidor que existía en Visual Studio .NET 2002 y en su lugar se ha agregado una
entrada de configuración en el archivo web.config.
Puede agregar la entrada de configuración al archivo web.config de cada proyecto, de uno en uno. No obstante, se
recomienda que en lugar de esto, añada esta entrada de configuración al archivo web.config ubicado en el
directorio virtual que contiene los servicios Web de informes.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
87
Información relacionada
Conectarse a servicios Web de informes desde un sitio Web seguro [página 91]
Trabajar con Crystal Reports como servicio web [página 80]
1.3.6.3.2.1
Para crear los servicios Web de informes
necesarios para Archivos de servidor
Procedimiento
1.
Inicie Visual Studio.
2.
En el menú Archivo, seleccione Nuevo y haga clic en Sitio Web.
3.
En el cuadro de diálogo Nuevo sitio Web, seleccione Visual C# en la lista Lenguaje.
4.
En la lista Plantillas, haga clic en Servicio Web ASP.NET
5.
En el campo Ubicación, sustituya el nombre de proyecto predeterminado por el nombre de su proyecto.
Para este ejemplo, guardamos el proyecto en C:\InetPub\wwwroot\ con el nombre
CrystalReportsWebServices.
C:\InetPub\wwwroot\CrystalReportsWebServices\
6.
Haga clic en Aceptar.
7.
En el menú Depurar, haga clic en Iniciar depuración.
Aparece un cuadro de diálogo para indicar que el archivo Web.config se debe modificar. Haga clic en el botón
Aceptar para habilitar la depuración.
8.
Una vez realizada la depuración, vuelva a la aplicación.
9.
En el Explorador de soluciones, haga clic con el botón secundario en Service.asmx y, a continuación, haga clic
en Eliminar.
10. En el Explorador de soluciones, expanda la carpeta App_Code, haga clic con el botón secundario en Service.cs
y, a continuación, haga clic en Eliminar.
11. En el Explorador de soluciones, haga clic con el botón secundario en el nombre del proyecto que está en
negrita y, a continuación, haga clic en Agregar nuevo elemento.
12. En el cuadro de diálogo Agregar nuevo elemento, realice lo siguiente:
a) En el campo Plantillas instaladas, seleccione Servicio Web.
b) En el campo Nombre, escriba ServerFileReportService.asmx.
c) Desactive Colocar código en archivo independiente.
d) Haga clic en Agregar.
13. Sustituya el contenido del archivo ServerFileReportService.asmx por la línea siguiente:
<%@ WebService language="C#"
class="CrystalDecisions.Web.Services.ServerFileReportService" %>
88
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
14. En el menú Archivo, haga clic en Guardar todo.
15. En el Explorador de soluciones, haga clic con el botón secundario en el nombre del proyecto que está en
negrita y, a continuación, haga clic en Agregar nuevo elemento.
16. En el cuadro de diálogo Agregar nuevo elemento:
a) En el campo Plantillas instaladas, seleccione Servicio Web.
b) En el campo Nombre, escriba ServerFileReportManager.asmx
c) Desactive Colocar código en archivo independiente.
d) Haga clic en Agregar.
17. Sustituya el contenido del archivo ServerFileReportManager.asmx por la línea siguiente:
<%@ WebService language="C#"
class="CrystalDecisions.Web.Services.ServerFileReportManager" %>
18. En el menú Archivo, haga clic en Guardar todo.
1.3.6.3.2.2
Para cambiar el "directorio virtual de visores" en
la propiedad WebServiceURL de las instancias de
ServerFileReport
Procedimiento
1.
Busque cada repetición en el proyecto en el que esté asignada la propiedad WebServiceURL de una instancia
de ServerFilesReport.
2.
Compare el nombre del directorio virtual de visores actualmente asignado en el código con el nombre que se
utiliza en versiones anteriores.
3.
Cambie el nombre del directorio virtual de visores que se usa en la versión más reciente instalada de SAP
Crystal Reports.
Si la última versión instalada de SAP Crystal Reports es SAP Crystal Reports para Visual Studio 2005,
introduzca la ruta del servicio Web de informes creada anteriormente en este tutorial.
4.
Vuelva a compilar y compruebe que los informes se cargan correctamente.
Información relacionada
Directorio de visores [página 13]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
89
1.3.6.3.2.3
Para agregar la entrada de configuración de
Archivos de servidor en el archivo web.config
Procedimiento
1.
En el Explorador de soluciones, abra el archivo Web.Config.
2.
Sustituya todo el contenido del archivo Web.Config por el siguiente XML.
En el ejemplo siguiente, cambie el valor del directorio raíz por el directorio en el que ha instalado los informes.
Para este ejemplo, la ruta de archivo se ha establecido en C:\Archivos de programa\Microsoft
Visual Studio 8\Crystal Reports\Samples\en\Reports\Feature Examples.
<?xml version="1.0"?>
<configuration
xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<configSections>
<sectionGroup name="crystalDecisions">
<section name="serverFileReportManager"
type="System.Configuration.NameValueSectionHandler, System,
Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089, Custom=null"/>
</sectionGroup>
</configSections>
<crystalDecisions>
<serverFileReportManager>
<add key="rootDirectory" value="C:\Archivos de programa\Microsoft
Visual Studio 8\Crystal Reports\Samples\en\Reports\Feature Examples"/>
</serverFileReportManager>
</crystalDecisions>
<appSettings/>
<connectionStrings/>
<system.web>
<compilation debug="true">
<assemblies>
<add assembly="CrystalDecisions.Web, Version=12.1.2000.0,
Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
</assemblies>
</compilation>
</system.web>
</configuration>
Nota
Debe escribir la ruta de acceso de directorio de archivos a la carpeta de informes, donde aparece
PUT_FILE_DIRECTORY_PATH_TO_REPORTS_FOLDER_HERE.
3.
Guarde los cambios en el archivo web.config.
4.
Para comprobar que el directorio virtual de visores funciona, abra un explorador y escriba la dirección URL del
servicio Web de informes publicado.
http://localhost/CrystalReportsWebServices/ServerFileReportService.asmx?wsdl
90
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.3.6.3.2.4
Archivos de servidor heredado y el directorio
virtual de visores
En versiones anteriores de SAP Crystal Reports, Server Files se servía de IIS desde un servicio Web centralizado,
que está en el directorio virtual de visores. Cada versión posterior de SAP Crystal Reports crea un directorio
adicional llamado "directorio virtual de visores" en IIS, lo que permite mantener varias versiones de SAP Crystal
Reports.
Por lo tanto, si dispone de Server Files codificado en un proyecto con una versión anterior de SAP Crystal Reports,
y ahora actualiza a una versión posterior, el "directorio virtual de visores" adicional se convierte en un problema
de mantenimiento. En el código, el nombre del "directorio virtual de visores" de la propiedad WebServiceURL de
cada instancia de ServerFileReport se debe cambiar a la ubicación actual del servicio Web de informes para
permitir que funcionen las instancias de ServerFileReport.
Información relacionada
Directorio de visores [página 13]
1.3.6.4 Conectarse a servicios Web de informes desde un
sitio Web seguro
En SAP Crystal Reports, versión para programadores de Microsoft Visual Studio, se pueden publicar informes de
Crystal como servicios Web.
Debido se tiene acceso a que los servicios Web a través del Web, es recomendable proteger los servicios Web de
informes frente al acceso anónimo.
En esta sección se explica cómo eliminar el acceso anónimo desde un directorio virtual que contenga un servicio
Web de informes y, a continuación, escribir código que coloque el servicio Web de informes en una clase
RemoteReportProxy, que se puede configurar para atender la autenticación NT en el servidor de Servicios de
Internet Information Server (IIS).
Dos tipos de Servicios Web de informes requieren código de autenticación: Servicios Web de informes normales y
Archivos de servidor.
Información relacionada
Publicar y utilizar un informe como un servicio Web [página 80]
Configurar Archivos de servidor en Crystal Services [página 84]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
91
1.3.6.4.1
Servicios Web de informes y autenticación NT
1.3.6.4.1.1
informes
Agregar autenticación NT al servicio Web de
Antes de agregar modificaciones para autenticación NT, debe crear un proyecto que publique y utilice un servicio
Web de informes tal como se muestra en Publicar y utilizar un informe como un servicio Web [página 80].
En esta sección aprenderá a eliminar el acceso anónimo del directorio que contiene el servicio Web de informes
que ha creado anteriormente.
Información relacionada
Conectarse a servicios Web de informes desde un sitio Web seguro [página 91]
1.3.6.4.1.1.1
Para eliminar el acceso anónimo del directorio
que contiene el servicio Web de informes
Procedimiento
1.
En el Panel de control, haga doble clic en Herramientas administrativas y, a continuación, haga doble clic en
Administrador de servicios de Internet.
2.
En la ventana Internet Information Services, expanda los nodos superiores y, a continuación, expanda el nodo
Default Web Site.
3.
Busque la carpeta del directorio virtual del Report Web Service que ha creado anteriormente.
4.
Haga clic con el botón derecho en el directorio virtual y seleccione Propiedades.
5.
En el cuadro de diálogo Propiedades, en la ficha Seguridad de directorio, haga clic en Editar.
6.
Desactive la casilla de verificación Acceso anónimo y, a contiuación, haga clic en Aceptar.
7.
Haga clic en Aceptar para cerrar Propiedades.
8.
Cierre la ventana Servicios de Internet Information Server.
Resultados
En este punto, si desea que la autenticación en este directorio se establezca para un usuario de red específico,
necesitará permisos de usuario de red individual para la carpeta desde el Explorador de Windows.
92
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.3.6.4.1.1.2
Para agregar permisos de usuario de red
específico a la carpeta
Procedimiento
1.
En Explorador de Windows, busque la carpeta que contiene el servicio Web.
2.
Haga clic con el botón derecho en la carpeta y seleccione Propiedades.
3.
En el cuadro de diálogo Propiedades , en la ficha Seguridad, haga clic en Agregar.
4.
En el cuadro de diálogo Seleccionar usuarios, equipos o grupos, en el panel <<Escriba los nombres separados
por puntos y coma>> o elíjalos en la lista, escriba el nombre de usuario de red.
5.
Haga clic en Comprobar nombres.
6.
Verifique que el nombre de usuario se ha agregado correctamente y, a continuación, haga clic en Aceptar.
7.
En el panel Permisos, seleccione Permitir para el permiso Leer.
1.3.6.4.1.2
seguro
Editar la aplicación cliente para agregar acceso
En esta sección editará la aplicación cliente para acceder de forma segura al servicio Web de informes mediante
autenticación NT. Debe agregar ensamblados, espacios de nombres y nuevo código.
1.3.6.4.1.2.1
Para verificar que la aplicación cliente ya no
puede acceder al servicio web seguro
Procedimiento
1.
Vuelva a abrir la aplicación cliente que ha creado para utilizar el servicio Web de informes (en la sección
Publicar y utilizar un informe como un servicio Web [página 80]).
2.
Ejecute la aplicación para verificar que ya no puede acceder de forma anónima al servicio Web de informes de
este directorio.
Aparece un mensaje de error: "La solicitud de error con HTTP estado 401: Acceso denegado."
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
93
1.3.6.4.1.2.2
Para agregar nuevos ensamblados y referencias
a dichos ensamblados
Procedimiento
1.
Haga clic con el botón secundario en la carpeta References y seleccione Agregar referencia...
2.
En el cuadro de diálogo Add Reference, en la ficha .NET, mantenga presionada la tecla CTRL y haga clic en
los siguientes ensamblados:
○
CrystalDecisions.ReportSource
○
System.Web.Services
3.
Haga clic en Select en la parte derecha del cuadro de diálogo.
4.
Verifique que ambos ensamblados se han agregado al panel Selected Components y, a continuación, haga
clic en OK.
5.
Abra el formulario Web Forms o Windows Forms que ha creado en Configuración de proyectos [página 14].
6.
En el menú View, haga clic en Code.
7.
Sobre la firma de clase, agregue tres declaraciones "Imports" [Visual Basic] o "using" [C#] a la parte
superior de la clase para los siguientes espacios de nombres.
Imports CrystalDecisions.ReportSource
Imports System.Net
Imports System.Web.Services
using CrystalDecisions.ReportSource;
using System.Net;
using System.Web.Services;
Pasos siguientes
A continuación, aprenderá a agregar código para configurar una clase RemoteReportProxy que pasa credenciales
de usuario al directorio seguro del servicio Web de informes.
1.3.6.4.1.2.3
Codificar el método
GetReportWebServiceWithAuthentication()
Contexto
El método GetReportWebServiceWithAuthentication() se utiliza para configurar el proxy del informe
remoto y para controlar la autenticación NT.
En esta sección, aprenderá a codificar el método GetReportWebServiceWithAuthentication() para
establecer los valores de las propiedades URL y Credentials. Debe agregar el método
94
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
GetReportWebServiceWithAuthentication() a ReportSource del control CrystalReportViewer para la
declaración y creación de instancia de la clase RemoteReportProxy.
Este método agrega opcionalmente configuración de proxy de servidor de seguridad a la instancia
RemoteReportProxy.
Procedimiento
1.
En la parte inferior de la clase, cree el método auxiliar privado
GetReportWebServiceWithAuthentication() que devuelve una clase RemoteReportProxy.
Private Function GetReportWebServiceWithAuthentication() As
RemoteReportProxy
End Function
private RemoteReportProxy GetReportWebServiceWithAuthentication()
{
}
2.
En el método ConfigureCrystalReports(), seleccione la cadena de dirección URL del servicio Web que
está asignada actualmente a la propiedad ReportSource del control CrystalReportViewer. Corte la
cadena en el portapapeles.
Nota
Más adelante en este procedimiento, asignará un nuevo valor a la propiedad ReportSource del control
CrystalReportViewer.
3.
Declare una variable de cadena reportWebServiceURL y pegue la cadena de dirección URL.
Dim reportWebServiceURL As String =
"http://mywebserviceserver.com/MyWebServiceDirectory/Hierarchical
%20GroupingService.asmx"
string reportWebServiceURL =
"http://mywebserviceserver.com/MyWebServiceDirectory/Hierarchical
%20GroupingService.asmx";
4.
Declare y cree una instancia de la clase RemoteReportProxy.
Dim myRemoteReportProxy As RemoteReportProxy = New RemoteReportProxy()
RemoteReportProxy remoteReportProxy = new RemoteReportProxy();
5.
Asigne la variable reportWebServiceURL a la propiedad URL de la instancia RemoteReportProxy.
myRemoteReportProxy.Url = reportWebServiceURL
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
95
remoteReportProxy.Url = reportWebServiceURL;
6.
Llame al método ConfigureAuthentication() (que creará en los siguientes procedimientos) y pase un
valor True Boolean y la variable reportWebServiceURL. Asigne este método a la propiedad Credentials
de la instancia RemoteReportProxy.
myRemoteReportProxy.Credentials = ConfigureAuthentication(True,
reportWebServiceURL)
remoteReportProxy.Credentials = ConfigureAuthentication(true,
reportWebServiceURL);
7.
Llame al método AddFirewallProxySettings() (que creará en los siguientes procedimientos) y pase un
valor booleano False, la cadena de URI para un servidor proxy de seguridad y la instancia
RemoteReportProxy.
Nota
Reemplace la cadena de URI por su servidor de proxy de seguridad.
myRemoteReportProxy = AddFirewallProxySettings(False, "<<
http://firewallproxyserver:8080>>",
myRemoteReportProxy)
remoteReportProxy = AddFirewallProxySettings(false, "<<
http://firewallproxyserver:8080>>",
remoteReportProxy);
8.
Devuelva la instancia RemoteReportProxy desde el método.
Return myRemoteReportProxy
return remoteReportProxy;
1.3.6.4.1.2.4
Codificar el método ConfigureAuthentication()
Contexto
En esta sección, aprenderá a codificar el método ConfigureAuthentication() para permitir dos enfoques
para configurar la autenticación.
En el primer enfoque, se utiliza un nombre de usuario específico, una contraseña y un nombre de dominio para
cumplir los requisitos de los permisos de seguridad de usuario que ha agregado en Agregar autenticación NT al
servicio Web de informes [página 92]. En el segundo enfoque, se basará en la autorización NTLM.
96
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Cuando se pasa un valor True Boolean a este método, se proporcionan las credenciales específicas de usuario
para tener acceso a los servicios Web. Un valor False Boolean llama al código para credenciales NTLM para
tener acceso a los servicios Web.
El método ConfigureAuthentication() se llama desde el método
GetReportWebServiceWithAuthentication().
Procedimiento
1.
En la parte inferior de la clase, cree el método auxiliar privado ConfigureAuthentication() que devuelve
la interfaz ICredentials. Este método acepta dos parámetros, un valor booleano denominado isUserSpecific y
la cadena reportWebServiceURL.
Private Function ConfigureAuthentication(ByVal isUserSpecific As
Boolean, ByVal reportWebServiceURL As String) As ICredentials
End Function
private ICredentials ConfigureAuthentication(bool isUserSpecific,
string reportWebServiceURL)
{
}
2.
Dentro del método, cree un bloque condicional que compruebe el parámetro de método isUserSpecific
Boolean.
If isUserSpecific Then
Else
End If
if(isUserSpecific)
{
}
else
{
}
3.
Recopile la siguiente información: el nombre de usuario, la contraseña y el nombre de dominio de red que ha
autorizado con permisos de acceso de usuario para el directorio que contiene el servicio Web de informes.
4.
En el bloque If, declare y asigne los valores adecuados a las variables de cadena username, password y
domain.
Dim userName As String = "fchen"
<NonSerialized()> Dim password As String = "1234"
Dim domain As String = "Enterprise"
string userName = "fchen";
[NonSerialized()] string password = "1234";
string domain = "Enterprise";
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
97
5.
Declare y cree una instancia de la clase NetworkCredential y pase las variables de cadena username,
password y domain.
Dim myNetworkCredential As NetworkCredential = New
NetworkCredential(userName, password, domain)
NetworkCredential networkCredential = new
NetworkCredential(userName, password, domain);
6.
Devuelva la instancia de NetworkCredential desde el bloque If.
En el bloque Else, se crean tres valores alternativos: un URI para el servicio Web de informes, una cadena que
indica que el tipo de autenticación es NTLM y una instancia de NetworkCredential. Cada uno de estos
valores se pasa a la caché de credenciales.
Return myNetworkCredential
return networkCredential;
7.
En el bloque Else, declare y cree una instancia de la clase CredentialCache.
Dim myCredentialCache As CredentialCache = New CredentialCache()
CredentialCache credentialCache = new CredentialCache();
8.
Declare y cree una instancia de la clase Uri y pase el parámetro reportWebServiceURL desde el método
ConfigureAuthentication().
Dim myUri As Uri = New Uri(reportWebServiceURL)
Uri uri = new Uri(reportWebServiceURL);
9.
Asigne el valor de cadena "NTLM" a una variable de cadena denominada "ntlmAuthorization".
Dim ntlmAuthorization As String = "NTLM"
string ntlmAuthorization = "NTLM";
10. Declare y cree una instancia de la clase NetworkCredential.
Dim myNetworkCredential As NetworkCredential = New
NetworkCredential()
NetworkCredential networkCredential = new NetworkCredential();
98
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
11. Pase la instancia de Uri, la cadena ntlmAuthorization y la instancia de NetworkCredential al método Add() de
la instancia de CredentialCache.
myCredentialCache.Add(myUri, ntlmAuthorization,
myNetworkCredential)
credentialCache.Add(uri, ntlmAuthorization, networkCredential);
12. Devuelva la instancia de ICredentials desde la propiedad DefaultCredentials de la clase
CredentialCache, desde el bloque Else.
Return CredentialCache.DefaultCredentials
return CredentialCache.DefaultCredentials;
1.3.6.4.1.2.5
Codificar el método AddFirewallProxySettings()
Contexto
En esta sección, aprenderá a codificar el método AddFirewallProxySettings() con la instancia
RemoteReportProxy como parámetro. También aprenderá a agregar la configuración de proxy Web a la
instancia de RemoteReportProxy.
El método AddFirewallProxySettings() se llama desde el método
GetReportWebServiceWithAuthentication().
Este método sólo se ejecuta cuando se necesita tener acceso al servicio Web de informes mediante un proxy de
servidor de seguridad.
Procedimiento
1.
En la parte inferior de la clase, cree el método auxiliar privado AddFirewallProxySettings() que devuelve
la clase RemoteReportProxy y pasa una variable booleana, una variable de cadena y la instancia
RemoteReportProxy.
Private Function AddFirewallProxySettings(ByVal isFirewallProxy As
Boolean, ByVal webProxyURI As String, ByVal remoteReportProxy As
RemoteReportProxy) As RemoteReportProxy
End Function
private RemoteReportProxy AddFirewallProxySettings(bool
isFirewallProxy, string webProxyURI, RemoteReportProxy
remoteReportProxy)
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
99
{
}
2.
En el método, cree un bloque condicional que pruebe la variable isFirewallProxy Boolean.
If isFirewallProxy Then
End If
if(isFirewallProxy)
{
}
3.
En el bloque condicional, declare y cree una instancia de la clase WebProxy y pase la cadena webProxyURI y
un valor True Boolean.
Dim myWebProxy As WebProxy = New WebProxy(webProxyURI, True)
WebProxy webProxy = new WebProxy(webProxyURI, true);
4.
Asigne la instancia de WebProxy a la propiedad Proxy de la instancia de RemoteReportProxy que se ha
pasado al método como parámetro.
myRemoteReportProxy.Proxy = myWebProxy
remoteReportProxy.Proxy = webProxy;
5.
Fuera del bloque condicional, devuelva la instancia RemoteReportProxy.
Return myRemoteReportProxy
return remoteReportProxy;
Resultados
Cuando se pasa un valor booleano False al parámetro isFireWallProxy, no se agrega la configuración de proxy
de servidor de seguridad. Puede probar esta versión del proyecto con la configuración de autenticación NT más
simple y sin servidor de seguridad entre el cliente de prueba y el servicio Web.
Al probar este proyecto con un servidor de seguridad, mueva la aplicación cliente fuera de dicho servidor y, a
continuación, cambie el valor del parámetro booleano isFireWallProxy a True. Debe asignar un valor de URI de
proxy Web preciso al parámetro de cadena webProxyURI y continuar la prueba de este código a través de un
servidor de seguridad.
100
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Información relacionada
Conectarse a servicios Web de informes desde un sitio Web seguro [página 91]
1.3.6.4.1.3
Probar el código de autenticación NT y las
credenciales NTLM
1.3.6.4.1.3.1
Para probar la autenticación NT
Requisitos previos
Para poder probar el código, debe cambiar el código de enlace de informes en el método
ConfigureCrystalReports().
●
En el método ConfigureCrystalReports(), asigne una llamada al método
GetReportWebServiceWithAuthentication() para la propiedad ReportSource del control
CrystalReportViewer.
myCrystalReportViewer.ReportSource =
GetReportWebServiceWithAuthentication()
crystalReportViewer.ReportSource =
GetReportWebServiceWithAuthentication();
Ahora estará listo para probar el código de autenticación NT que ha agregado al proyecto cliente del servicio Web.
Contexto
Para probar el código de autenticación NT en el proyecto cliente del servicio Web:
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
La aplicación cliente se conecta al servicio Web y, si el nombre de usuario, la contraseña y el dominio son
correctos, el informe se muestra correctamente.
4.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
101
Resultados
Acaba de conectarse al directorio seguro con credenciales de red específicas de usuario. Ahora aprenderá a
probar la conexión mediante el uso de credenciales NTLM.
Nota
Para configurar los valores del servidor de seguridad proxy, puede cambiar el valor Boolean que se pasa al
método AddFirewallProxySettings() como parámetro.
Información relacionada
Archivos de servidor y autenticación NT [página 102]
1.3.6.4.1.3.2
Para probar las credenciales NTLM en el
proyecto cliente del servicio Web
Procedimiento
1.
Busque la llamada al método ConfigureAuthentication() en el método
GetReportWebServiceWithAuthentication().
2.
En la llamada a ConfigureAuthentication(), cambie el valor booleano del primer parámetro de método
de True a False.
3.
En el menú Generar, seleccione Generar solución.
4.
En el menú Depurar, haga clic en Iniciar.
5.
La aplicación cliente se conecta al servicio Web mediante autenticación NTLM.
6.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
Resultados
Ahora ya puede conectarse correctamente desde el cliente de servicio Web a un servicio Web de informes en un
directorio seguro. Lo ha realizado mediante la configuración de valores en la instancia de RemoteReportProxy y
pasando dicha instancia a la propiedad ReportSource del control CrystalReportViewer.
1.3.6.4.2
Archivos de servidor y autenticación NT
Puede utilizar Archivos de servidor para conectar fácilmente con informes ubicados en un equipo remoto.
102
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Sin embargo, si el directorio virtual que proporciona los informes que están almacenados en Archivos de servidor
está protegido con autenticación NT, se necesita código adicional en la aplicación cliente para direccionar estos
informes y proporcionar las credenciales de red necesarias.
Información relacionada
Configurar Archivos de servidor en Crystal Services [página 84]
1.3.6.4.2.1
Crear un proyecto para direccionar un directorio
no seguro para Archivos de servidor
Requisitos previos
Para crear un proyecto que direccione un directorio no seguro, debe tener configurado Archivos de servidor para
su versión concreta de Visual Studio.
Siga las instrucciones de la sección correspondiente y anote la ruta de directorio de archivos al directorio de los
informes (necesitará la ruta para los procedimientos posteriores):
●
Configurar archivos de servidor en Visual Studio .NET 2003 [página 84]
●
Configurar archivos de servidor en Visual Studio 2005 y posterior [página 87]
Vaya al directorio de informes del proyecto y busque el nombre de un informe que desee ver mediante Archivos
de servidor.
En los siguientes pasos, se usa el informe de muestra denominado Hierarchical Grouping.rpt.
Nota
Las instrucciones siguientes sólo funcionan para un nuevo proyecto que cree en Configuración de proyectos
[página 14].
Contexto
En esta sección, aprenderá a configurar las credenciales de red necesarias.
Para empezar, creará una aplicación cliente que tenga acceso a los informes que están almacenados en Archivos
de servidor y permita un acceso no seguro al directorio de servicios Web. Una vez verificado que la aplicación
cliente funciona, podrá continuar para agregar acceso seguro al directorio virtual y, a continuación, escribirá
código adicional en la aplicación cliente con el fin de proporcionar credenciales para la autenticación NT.
Para crear una aplicación cliente para acceder a los informes de Archivos de servidor
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
103
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
Busque el método ConfigureCrystalReports() que ha creado en Configuración de proyectos [página 14].
4.
En el método, declare y cree una instancia de la clase ServerFileReport.
Dim myServerFileReport As ServerFileReport = New ServerFileReport()
ServerFileReport serverFileReport = new ServerFileReport();
5.
Asigne el nombre del informe que desea mostrar del directorio de informes a la propiedad ReportPath de la
instancia de ServerFileReport.
Nota
El directorio es el que ha configurado para los informes de Archivos de servidor en el archivo Web.config.
Al configurar el directorio virtual de visores anteriormente, ha probado el archivo wsdl introduciendo una
dirección URL en el servicio Web ServerFileReportServer.asmx en el directorio virtual de visores. En el
siguiente paso, indicará dicha dirección URL como valor en el código.
El siguiente ejemplo de código usa el informe Hierarchical Grouping, incluido en el subdirectorio Feature
Examples de la carpeta Sample Reports. No olvide incluir el nombre del subdirectorio, seguido de una barra
invertida.
myServerFileReport.ReportPath = "Feature Examples\Hierarchical
Grouping.rpt"
serverFileReport.ReportPath = "Feature Examples\\Hierarchical
Grouping.rpt";
6.
Busque la versión correcta de la dirección URL al servicio Web ServerFileReportService.asmx
correspondiente a su versión de SAP Crystal Reports.
Si tiene instalado SAP Crystal Reports, versión para programadores de Microsoft Visual Studio, éste será el
directorio virtual del visor para la versión instalada de SAP Crystal Reports.
Si tiene instalado SAP Crystal Reports y SAP Crystal Reports, versión para programadores de Microsoft
Visual Studio no está instalado, ésta será la dirección URL del servicio Web de informes creado en Configurar
archivos de servidor en Visual Studio 2005 y posterior [página 87].
7.
Asigne esta dirección URL de servicio Web a la propiedad WebService de la instancia de ServerFileReport.
myServerFileReport.WebServiceUrl =
"http://localhost/CrystalReportsWebServices/ServerFileReportService.asmx"
serverFileReport.WebServiceUrl =
"http://localhost/CrystalReportsWebServices/ServerFileReport.asmx";
104
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
La instancia de ServerFileReport ahora está configurada y lista para pasarla al control
CrystalReportViewer.
8.
Asigne la instancia de ServerFileReport a la propiedad ReportSource del control
CrystalReportViewer.
myCrystalReportViewer.ReportSource = myServerFileReport
crystalReportViewer.ReportSource = serverFileReport;
Información relacionada
Directorio de visores [página 13]
1.3.6.4.2.2
Volver a configurar Archivos de servidor para
direccionar un directorio seguro
En esta sección, aprenderá a volver a configurar el directorio y la aplicación cliente para direccionar un directorio
seguro.
Para empezar, deshabilite el acceso anónimo al directorio virtual de visores en Servicios de Internet Information
Server (IIS).
1.3.6.4.2.2.1
Para deshabilitar el acceso anónimo al
directorio virtual de visores en IIS
Procedimiento
1.
En el Panel de control, haga doble clic en Herramientas administrativas y, a continuación, haga doble clic en
Administrador de servicios de Internet.
2.
En la ventana Internet Information Services, expanda los nodos superiores y, a continuación, expanda el nodo
Default Web Site.
3.
Busque la carpeta del directorio virtual esperado y, a continuación, haga clic con el botón derecho en dicha
carpeta para seleccionar Propiedades.
4.
En el cuadro de diálogo Propiedades, en la ficha Seguridad de directorio, haga clic en Editar...
5.
Desactive la casilla de verificación Acceso anónimo y, a contiuación, haga clic en Aceptar.
6.
Haga clic en Aceptar para cerrar Propiedades.
7.
Cierre la ventana Servicios de Internet Information Server.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
105
Resultados
A continuación, agregue una etiqueta <identity> al archivo Web.config.
Nota
Este archivo Web.config es el que ha modificado anteriormente al seguir las instrucciones de configuración de
Archivos de servidor.
Información relacionada
Directorio de visores [página 13]
1.3.6.4.2.2.2
Web.config
Para agregar una etiqueta identity al archivo
Procedimiento
1.
Vuelva a abrir el archivo Web.config en el directorio virtual de visores.
Nota
Existen dos archivos Web.config, uno en el directorio virtual de visores y el otro en la aplicación web local.
La etiqueta de identidad que está a punto de agregar debe añadirse al archivo Web.config del directorio
virtual de visores. Esto es debido a que la etiqueta identity es necesaria si se ha desactivado el acceso
anónimo a un directorio virtual.
2.
En la etiqueta <system.web>, en la parte superior, escriba la etiqueta de identidad tal como se muestra.
<identity impersonate='true' />
3.
Guarde el archivo Web.config.
4.
Si también ha desactivado el acceso anónimo en el directorio virtual de su proyecto Web cliente, agregue
también la etiqueta identity al archivo Web.config en su proyecto Web cliente.
Pasos siguientes
A continuación, modifique su proyecto Web o para Windows cliente para acceder al servicio Web de informes
seguro a través de la Autenticación NT.
106
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Información relacionada
Directorio de visores [página 13]
1.3.6.4.2.2.3
Para modificar el proyecto cliente para
direccionar el directorio virtual de visores seguro
Procedimiento
1.
Abra el proyecto Web o Windows cliente en Visual Studio.
2.
Haga clic con el botón secundario en la carpeta Referencias y seleccione Agregar referencia…
3.
En el cuadro de diálogo Agregar referencia, en la ficha .NET, mantenga presionada la tecla CTRL y haga clic
para seleccionar dos ensamblados:
○
CrystalDecisions.ReportSource
○
System.Web.Services
4.
Haga clic en Seleccionar en la parte derecha del cuadro de diálogo.
5.
Verifique que ambos ensamblados se han agregado al panel Componentes seleccionados y, a continuación,
haga clic en Aceptar.
6.
En Explorador de soluciones, haga clic con el botón secundario en el nombre de proyecto en negrita,
seleccione Agregar y, a continuación, Agregar clase.
7.
En el campo Nombre, escriba el nombre de clase "NTServerFileRemoteReportSource" y, a continuación,
haga clic en Agregar.
8.
Sobre la firma de clase, agregue una declaración "Imports" [Visual Basic] o "using" [C#] a la parte superior
de la clase para tres espacios de nombres.
Imports CrystalDecisions.Shared
Imports CrystalDecisions.ReportSource
Imports System.Net
using CrystalDecisions.Shared;
using CrystalDecisions.ReportSource;
using System.Net;
9.
Modifique la firma de clase NTServerFileRemoteReportSource para ampliar la clase
RemoteReportSource.
Public Class NTServerFileRemoteReportSource : Inherits RemoteReportSource
End Class
public class NTServerFileRemoteReportSource : RemoteReportSource
{
}
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
107
Debido a que la clase base, RemoteReportSource, no puede contener un constructor sin argumentos, debe
crear un constructor con argumentos que anule uno de la clase base RemoteReportSource.
10. Si va a codificar el proyecto en C#, elimine el constructor predeterminado creado en esta clase.
11. Cree un constructor que incluya un parámetro de método de ServerFileReport y llame al constructor de la
clase base pasando este parámetro de informe y el valor booleano False.
Public Sub New(ByVal report As ServerFileReport)
MyBase.New(report, False)
End Sub
public NTServerFileRemoteReportSource(ServerFileReport report) : base(report,
false)
{
}
12. En el constructor, asigne la propiedad DefaultCredentials estática de la clase CredentialCache a la propiedad
Credentials de la propiedad m_proxy de la clase base.
MyBase.m_proxy.Credentials = CredentialCache.DefaultCredentials
base.m_proxy.Credentials = CredentialCache.DefaultCredentials;
13. En el menú Archivo, haga clic en Guardar todo.
Resultados
Ahora ya podrá editar la clase de código subyacente del formulario Web o para Windows.
1.3.6.4.2.2.4
Para editar la clase de código subyacente para
direccionar el origen de informe remoto
Procedimiento
1.
Vuelva al formulario Web Forms o Windows Forms original.
2.
En el menú Ver, haga clic en Código.
3.
En el método ConfigureCrystalReports(), agregue una nueva línea entre la configuración de la
propiedad serverFileReport.WebServiceUrl y la configuración de ReportSource del control
CrystalReportViewer. En esta nueva línea, declare y cree una instancia de la nueva clase ampliada que ha
creado y pásele la instancia de ServerFileReport como parámetro de método.
Dim myNTServerFileRemoteReportSource As NTServerFileRemoteReportSource = New
NTServerFileRemoteReportSource(myServerFileReport)
108
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
NTServerFileRemoteReportSource ntServerFileRRS = new
NTServerFileRemoteReportSource(serverFileReport);
4.
Modifique la línea final de código en este método: reemplace la instancia de ServerFileReport que se asignó a
ReportSource del control CrystalReportViewer con la nueva instancia de NTServerFileRemoteReportSource.
myCrystalReportViewer.ReportSource = myNTServerFileRemoteReportSource
crystalReportViewer.ReportSource = ntServerFileRRS;
Resultados
Ahora está listo para probar la aplicación cliente que se ha modificado para pasar la información de credenciales
desde un origen de informe remoto. Esta aplicación modificada direcciona el servicio de informes de Archivos de
servidor mediante el directorio virtual de visores, que ahora requiere autenticación NT.
1.3.6.4.2.2.5
Para probar el origen de informe remoto con
credenciales que direccionan el directorio virtual de visores
seguro
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
En el menú Depurar, haga clic en Iniciar.
La aplicación cliente se conecta al directorio virtual de visores seguros y, si la nueva instancia de
NTServerFileRemoteReportSource se configura con las credenciales correctas, el informe se muestra
correctamente.
3.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.3.7
Consideraciones sobre la seguridad
Las situaciones siguientes deben tenerse en cuenta al diseñar una aplicación segura.
Almacenamiento de datos en caché front-end
Los informes visualizados en un explorador Web pueden contener datos importantes que éste puede guardar en
caché. Consulte la documentación de Microsoft para obtener información sobre cómo desactivar el
almacenamiento en caché en los distintos exploradores.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
109
Seguridad del archivo de informe
Es posible que los archivos .rpt de SAP Crystal Reports contengan datos empresariales confidenciales. Se
recomienda proteger el acceso a los informes a través de la gestión con el servidor de la plataforma SAP
BusinessObjects Business Intelligence, usando la seguridad de archivo, o con el cifrado a nivel de SO.
Validación de la entrada de usuario con campos de parámetros
Los campos de parámetros solicitan al usuario que proporcione información para procesar un informe. El diálogo
de solicitud valida los datos, pero existen pasos adicionales para garantizar que se proporcionen los valores
previstos:
1.
Usar el texto de la solicitud para describir el tipo de datos que se prevé.
2.
Especificar unos valores máximos y mínimos para limitar el rango de números que se pueden introducir
cuando se trabaja con datos numéricos.
3.
Usar una máscara de edición para solicitar los datos en un formato determinado.
4.
Crear diálogos de solicitud propios. El SDK de SAP Crystal Reports .NET proporciona muchas API que pueden
usarse para crear diálogos de solicitud. Al crear diálogos de solicitud, se tiene un control completo sobre los
valores de los campos de parámetros que proporciona el usuario.
Uso de ActiveX Print Control para imprimir informes desde un visor de
formularios web .NET
El visor de informes Web de SAP Crystal Reports .NET permite imprimir informes como PDF o con ActiveX Print
Control. PDF es la opción predeterminada y aconsejable para imprimir un informe. ActiveX Print Control se
proporcionó como solución alternativa que permite la impresión con un sólo clic. Esta opción no es aconsejable,
ya que requiere la instalación de privilegios administrativos. Además, como el control ActiveX se usa en un
explorador Web, el killbit no se define y se considera menos seguro.
Creación de una aplicación para ver informes desde la plataforma SAP
BusinessObjects Business Intelligence
Puede usar SAP Crystal Reports, versión para programadores de Microsoft Visual Studio para crear aplicaciones
a fin de ver informes almacenados en un sistema de la plataforma SAP BusinessObjects Business Intelligence.
Cuando se crean aplicaciones para ver informes almacenados en un sistema de la plataforma SAP
BusinessObjects Business Intelligence, deben tenerse en cuenta las posibles consecuencias que afecten a la
seguridad. Para obtener más información, consulte el manual del administrador de la plataforma SAP
BusinessObjects Business Intelligence.
110
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Información relacionada
Filtrar datos con parámetros o fórmulas [página 134]
1.4
Uso del SDK
Esta sección proporciona instrucciones detalladas sobre cómo usar las funciones específicas del SDK de SAP
Crystal Reports .Net.
1.4.1
Imprimir un informe
El SDK de SAP Crystal Reports .NET permite crear aplicaciones de Windows o sitios Web que pueden imprimir en
la impresora local de un usuario final o en una impresora configurada en el servidor Web.
La forma más sencilla de agregar funciones de impresión a la aplicación SAP Crystal Reports .NET es usar el
botón de impresión del control CrystalReportViewer. Cuando el usuario hace clic en el botón de impresión en la
barra de herramientas, aparece el cuadro de diálogo de impresión del sistema estándar. A través de este diálogo
se puede especificar la configuración de impresión personalizada.
El SDK de SAP Crystal Reports .NET permite configurar opciones de impresión y llamar a una impresora mediante
el código, en lugar de usar la interfaz de usuario de SAP Crystal Reports. Use la clase PrintOptions y el método
PrintToPrinter del modelo de objetos ReportDocument.
Clases usadas para imprimir informes
●
CrystalDecisions.CrystalReports.Engine.ReportDocument
Representa un informe y contiene las propiedades y los métodos para definir, dar formato, cargar, exportar e
imprimir el informe.
●
CrystalDecisions.CrystalReports.Engine.PrintOptions
Proporciona las propiedades y los métodos para la configuración de las opciones de impresión de un informe.
●
CrystalDecisions.Windows.Forms.CrystalReportViewer
Representa el control CrystalReportViewer en un formulario de Windows Forms. El control
CrystalReportViewer se usa para imprimir informes mediante la interfaz de usuario.
●
CrystalDecisions.Web.CrystalReportViewer
Proporciona propiedades, métodos y eventos que modifican o recuperan información sobre como aparece y
funciona el control CrystalReportViewer. El control CrystalReportViewer se usa para imprimir informes
mediante la interfaz de usuario.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
111
Información relacionada
Exportar un informe [página 121]
1.4.1.1
Imprimir un informe desde el control
CrystalReportViewer
La forma más sencilla de agregar funciones de impresión a la aplicación SAP Crystal Reports .NET es usar el
botón de impresión del control CrystalReportViewer. El botón de impresión está habilitado de forma
predeterminada en la barra de herramientas del control CrystalReportViewer.
Existen dos controles CrystalReportViewer en el SDK de SAP Crystal Reports .NET. Para un sitio web, usará la
clase CrystalDecisions.Web.CrystalReportViewer y para una aplicación de Windows, la clase
CrystalDecisions.Windows.Forms.CrystalReportViewer.
Imprimir con la clase CrystalDecisions.Windows.Forms.CrystalReportViewer
Al hacer clic en el botón de impresión en la barra de herramientas de CrystalReportViewer en una aplicación de
Windows, se mostrará el diálogo de impresión habitual de Windows. Puede invocar el diálogo de impresión
mediante programación a través del método CrystalReportViewer.PrintReport.
El botón de impresión se puede deshabilitar en una aplicación de Windows estableciendo la propiedad
CrystalReportViewer.ShowPrintButton en falsa.
Imprimir con la clase CrystalDecisions.Web.CrystalReportViewer
El control CrystalReportViewer para sitios web admite dos métodos de impresión: PDF y ActiveX.
La impresión a PDF es la opción predeterminada para los sitios web. Al hacer clic en el botón de impresión en la
barra de herramientas de CrystalReportViewer en un sitio web, se mostrará el diálogo Opciones de impresión.
Introduzca las opciones de impresión personalizadas y haga clic en Aceptar. SAP Crystal Reports abrirá una
nueva ventana con un PDF del informe. Imprima el PDF en su impresora local.
Si se ha activado la impresión con ActiveX, el diálogo de impresión habitual de Windows se mostrará al hacer clic
en el botón de impresión. La impresión con ActiveX requiere una configuración adicional y puede requerir también
que el complemento de ActiveX PrintControl.cab esté instalado en el equipo cliente.
El botón de impresión se puede deshabilitar en un sitio web estableciendo la propiedad
CrystalReportViewer.HasPrintButton en falsa.
112
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Información relacionada
Imprimir un informe mediante programación [página 116]
1.4.1.1.1
Para quitar el botón de impresión del control
CrystalReportViewer
Contexto
Todavía podrá usar el SDK para imprimir un informe aunque el botón de impresión no esté visible.
Procedimiento
1.
Agregue un control CrystalReportViewer a la aplicación.
2.
Establezca la propiedad que controla la visibilidad del botón de impresión en falsa.
○
Para una aplicación de Windows, establezca la propiedad CrystalReportViewer.ShowPrintButton
en falsa.
○
Para un sitio web, establezca la propiedad CrystalReportViewer.HasPrintButton en falsa.
Resultados
Al ejecutar la aplicación, el botón de impresión ya no aparecerá en el control CrystalReportViewer.
Ejemplo
Deshabilitar el botón Imprimir en una aplicación de Windows
Private Sub ConfigureCrystalReports()
CrystalReportViewer1.ShowPrintButton = False
End Sub
private void ConfigureCrystalReports()
{
InitializeComponent();
crystalReportViewer1.ShowPrintButton = false;
}
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
113
Información relacionada
Imprimir un informe [página 111]
1.4.1.1.2
Para imprimir un informe con el método
CrystalReportViewer.PrintReport
Requisitos previos
Asegúrese de que se ha configurado una impresora en el equipo cliente antes de intentar imprimir.
Contexto
Puede invocar el diálogo de impresión mediante programación a través del método
CrystalReportViewer.PrintReport en una aplicación de Windows. Use este método para imprimir cuando la
barra de herramientas de CrystalReportViewer esté oculta o en una aplicación que use botones personalizados en
la barra de herramientas.
Procedimiento
1.
Agregue un control CrystalReportViewer al formulario de Windows Forms.
2.
Configure un origen de informe válido y enlace el origen del informe al control CrystalReportViewer.
3.
Llame al método PrintReport para invocar el diálogo de impresión predeterminado.
Ejemplo
Private Sub PrintReport()
CrystalReportViewer.PrintReport()
End Sub
private void PrintReport()
{
crystalReportViewer.PrintReport();
}
114
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.1.1.3
web
Para habilitar la impresión con ActiveX en un sitio
Contexto
Si se ha activado la impresión con ActiveX, el diálogo de impresión del sistema estándar se mostrará cuando el
usuario haga clic en el botón de impresión. La impresión con ActiveX requiere una configuración adicional y puede
requerir también que el complemento de ActiveX PrintControl.cab esté instalado en el equipo cliente.
Procedimiento
1.
Agregue un control CrystalReportViewer a la aplicación.
2.
Establezca la propiedad del modo de impresión del control CrystalReportViewer en ActiveX.
CrystalReportViewer1.PrintMode = PrintMode.ActiveX
CrystalReportViewer1.PrintMode = PrintMode.ActiveX;
3.
En el archivo Web.Config, agregue una referencia al control de ActiveX PrintControl.cab.
<configSections>
<section group name="businessObjects">
<sectionGroup name="crystalReports">
<section name="printControl"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<printControl>
<add key="url" value="http://localhost/PrintControl.cab" />
</printControl>
</crystalReports>
</businessObjects>
Reemplace localhost por la dirección de su servidor web.
El elemento printControl permite imprimir el informe directamente en la impresora local. De forma
predeterminada, este control no se instala en el equipo local y se debe descargar por separado. Esta
configuración hace que el archivo .cab esté visible para el sitio Web de SAP Crystal Reports .NET.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
115
Resultados
El control CrystalReportViewer usará ahora el diálogo de impresión de Windows en lugar de la impresión en PDF.
La primera vez que un usuario intente imprimir desde el sitio Web de SAP Crystal Reports, se le solicitará que
instale el complemento de ActiveX PrintControl.cab.
Información relacionada
Configuración del archivo Web.Config [página 19]
1.4.1.2
Imprimir un informe mediante programación
Se pueden configurar las opciones de impresión y llamar a una impresora mediante programación. Para ello se
usa la clase PrintOptions y el método PrintToPrinter del modelo de objetos ReportDocument.
Si el botón Imprimir de la barra de herramientas del control CrystalReportViewer satisface sus necesidades de
impresión, no es necesario escribir código para configurar opciones de impresión adicionales.
Sin embargo, un método basado en el código para imprimir informes resulta útil en casos especializados:
●
Puede controlar cuándo, dónde y cómo se realiza la impresión. Desactive el botón Imprimir de la barra de
herramientas del control CrystalReportViewer y administre toda la impresión mediante código.
●
Puede imprimir un informe en segundo plano, sin mostrarlo. Puede acceder a todas las opciones de
configuración de impresión a través de la clase ReportDocument, la cual se puede configurar y usar para
crear una instancia sin mostrar nunca el informe con un control CrystalReportViewer.
●
Puede centralizar toda la impresión en el servidor Web de un cliente Web. Use el método PrintToPrinter()
para enviar tareas de impresión a una impresora conectada al servidor web, en lugar de a una impresora local
conectada al cliente web.
Nota
La impresión mediante programación a través del modelo de objetos ReportDocument es una opción menos
amplia que el entorno de programación de informes suministrado con SAP Crystal Reports Server o la
plataforma SAP BusinessObjects Business Intelligence.
Imprimir mediante programación desde una aplicación web
Si usa el método ReportDocument.PrintToPrinter en una aplicación web, el informe se imprimirá desde el
servidor web, no desde el equipo cliente. Todas las impresiones del cliente usan el control CrystalReportViewer.
116
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Información relacionada
Imprimir un informe desde el control CrystalReportViewer [página 112]
1.4.1.2.1
Establecer opciones de impresión personalizadas
con el modelo de objetos ReportDocument
La clase PrintOptions permite especificar opciones de configuración adicionales antes de imprimir un informe
mediante programación. A través de la clase PrintOptions, puede hacer lo siguiente:
●
Cambiar el origen de papel actual.
●
Determinar la altura o anchura del resultado de impresión.
●
Ajustar los márgenes de página.
●
Forzar la impresión doble o sencilla.
●
Cambiar la impresora predeterminada.
Para modificar las opciones de impresión de un informe, debe recuperar un objeto PrintOptions a través de la
propiedad PrintOptions de la clase ReportDocument.
Copiar opciones de impresión
Es posible copiar las opciones de impresión predeterminadas del sistema local o pegar otras en su lugar con los
métodos PrintOptions.CopyFrom o PrintOptions.CopyTo.
Para obtener más información sobre la clase PrintOptions, consulte el SAP Crystal Reports .NET API Reference.
Ejemplo
Forzar la impresión a doble cara
En este ejemplo se establece el modo de impresión predeterminado como A doble cara.
Private Sub enableDuplex(ByVal rd As ReportDocument)
rd.PrintOptions.PrinterDuplex = PrinterDuplex.Vertical
End Sub
private void enableDuplex(ReportDocument rd)
{
rd.PrintOptions.PrinterDuplex = PrinterDuplex.Vertical;
}
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
117
1.4.1.2.2
Para imprimir un informe en la impresora
predeterminada
Contexto
El método ReportDocument.PrintToPrinter enviará un informe a la impresora predeterminada que esté
especificada en el archivo del informe. Para enviar el informe a la impresora predeterminada especificada en el
equipo cliente, debe establecer la propiedad PrintOptions.PrinterName antes de imprimir el informe.
Procedimiento
1.
Cree una nueva instancia de la clase PrintDocument.
La impresora predeterminada del equipo cliente se especifica en la propiedad
PrinterSettings.PrinterName de cualquier nueva clase PrintDocument.
Dim localPrinter As System.Drawing.Printing.PrintDocument = New PrintDocument()
System.Drawing.Printing.PrintDocument localPrinter = new PrintDocument();
2.
Establezca la propiedad PrinterName del objeto ReportDocument en el valor especificado en
PrinterSettings.PrinterName.
rd.PrintOptions.PrinterName = localPrinter.PrinterSettings.PrinterName
rd.PrintOptions.PrinterName = localPrinter.PrinterSettings.PrinterName;
3.
Llame al método ReportDocument.PrintToPrinter para imprimir el informe.
rd.PrintToPrinter(1, False, 0, 0)
rd.PrintToPrinter(1, false, 0, 0);
Este método PrintToPrinter contiene cuatro parámetros: el número de copias que se imprimirán, si se
deben o no intercalar las páginas, la página inicial y la página final.
Sugerencias
Para imprimir todas las páginas, establezca el valor de los parámetros correspondientes a la página inicial
y la página final en cero.
Ejemplo
Private Sub printReport(ByVal rd As ReportDocument)
118
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Dim localPrinter As System.Drawing.Printing.PrintDocument = New
PrintDocument()
rd.PrintOptions.PrinterName = localPrinter.PrinterSettings.PrinterName
rd.PrintToPrinter(1, False, 0, 0)
End Sub
private void printReport(ReportDocument rd) {
System.Drawing.Printing.PrintDocument localPrinter = new PrintDocument();
rd.PrintOptions.PrinterName = localPrinter.PrinterSettings.PrinterName;
rd.PrintToPrinter(1, false, 0, 0);
}
1.4.1.2.3
Para imprimir un informe en un archivo
Contexto
Puede imprimir un informe en un archivo en el sistema local cambiando las propiedades predeterminadas
PrinterSettings y llamando al método ReportDocument.PrintToPrinter. Para guardar un informe a disco
para visualizarlo posteriormente o para guardar un informe en otro formato, exporte el informe en lugar de
imprimirlo en un archivo.
Procedimiento
1.
Cree una nueva instancia de las clases PrinterSettings y PageSettings.
Dim printerSettings As New PrinterSettings()
Dim pageSettings As New PageSettings()
PrinterSettings printerSettings = new PrinterSettings();
PageSettings pageSettings = new PageSettings();
2.
Copie la configuración del objeto ReportDocument en PrinterSettings y los objetos PageSettings.
rd.PrintOptions.CopyTo(printerSettings, pageSettings)
rd.PrintOptions.CopyTo(printerSettings, pageSettings);
3.
Establezca la propiedad PrintToFile del objeto PrinterSettings en verdadera.
printerSettings.PrintToFile = True
printerSettings.PrintToFile = true;
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
119
4.
Establezca la ubicación del archivo de salida.
printerSettings.PrintFileName = "c:\outputFile.prn"
printerSettings.PrintFileName = "c:\\outputFile.prn";
Nota
Cuando se imprime en un archivo, la impresora determina el formato del archivo de salida. La impresora
puede crear archivos de formato XPS, PS u otros. Para obtener más información, consulte el manual del
fabricante.
5.
Llame al método ReportDocument.PrintToPrinter para imprimir el informe.
Este método PrintToPrinter contiene tres parámetros: las opciones de impresión, la configuración de
página y un valor booleano que indica si es necesario cambiar el formato del informe para adaptarlo a la
configuración de página.
rd.PrintToPrinter(printerSettings, pageSettings, False)
rd.PrintToPrinter(printerSettings, pageSettings, false);
Ejemplo
Private Sub printToFile(ByVal rd As ReportDocument)
Dim printerSettings As New PrinterSettings()
Dim pageSettings As New PageSettings()
rd.PrintOptions.CopyTo(printerSettings, pageSettings)
printerSettings.PrintToFile = True
printerSettings.PrintFileName = "c:\outputFile.prn"
rd.PrintToPrinter(printerSettings, pageSettings, False)
End Sub
private void printToFile(ReportDocument rd)
{
PrinterSettings printerSettings = new PrinterSettings();
PageSettings pageSettings = new PageSettings();
rd.PrintOptions.CopyTo(printerSettings, pageSettings);
printerSettings.PrintToFile = true;
printerSettings.PrintFileName = "c:\\outputFile.prn";
rd.PrintToPrinter(printerSettings, pageSettings, false);
}
Información relacionada
Exportar un informe [página 121]
120
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.1.3
Para eliminar el controlador de impresora
predeterminado de un informe
Procedimiento
1.
En el Explorador de soluciones, haga doble clic en el informe.
2.
Haga clic con el botón derecho en cualquier área abierta del informe y seleccione
Diseñador
Preparar
impresora .
3.
En el cuadro de diálogo Configurar impresión, active No hay impresora y, a continuación, haga clic en Aceptar.
4.
Haga clic en
Archivo
Guardar todo .
Información relacionada
Activar la opción Ninguna impresora de Configurar impresión [página 73]
1.4.2
Exportar un informe
SAP Crystal Reports permite exportar un informe a diferentes formatos. Los formatos disponibles dependen de la
versión de SAP Crystal Reports que ha instalado y el método usado para exportar el informe.
Un informe se puede exportar a disco, a una ventana del explorador o a la secuencia de entrada o salida como una
secuencia de bytes.
Clases usadas para exportar informes
●
CrystalDecisions.CrystalReports.Engine.ReportDocument
Representa un informe y contiene las propiedades y los métodos para definir, dar formato, cargar, exportar e
imprimir el informe.
●
CrystalDecisions.Shared
Contiene varias clases usadas para especificar las opciones de exportación para diferentes formatos de
salida.
●
CrystalDecisions.Shared.ExportOptions
Proporciona propiedades para la recuperación y configuración de opciones de exportación del informe.
Información relacionada
Imprimir un informe [página 111]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
121
Cuadro de diálogo Exportar [página 898]
1.4.2.1
Formatos de exportación disponibles
Los formatos de exportación que admite SAP Crystal Reports se pueden categorizar a grandes rasgos en dos
grupos: formatos basados en páginas y basados en registros. Los formatos basados en páginas dan más
importancia al aspecto, por lo que intentan producir un resultado que coincida rigurosamente con el diseño y el
formato del original. Los formatos basados en registros se centran en la precisión de la representación de datos
más que en el diseño y en el formato.
Formato
Descripción
SAP Crystal Reports (RPT)
La exportación a formato de SAP Crystal Reports es muy
parecido a usar la función Guardar como con la opción
Guardar datos con el informe seleccionada. Este formato
exporta (guarda) su informe con los datos actuales sin
modificar el informe original. Si un origen de informe es un
archivo de solo lectura de SAP Crystal Reports (RPTR), no
podrá exportar a SAP Crystal Reports (RPT).
Sólo lectura de SAP Crystal Reports (RPTR)
Exporta (guarda) su informe con los datos actuales sin
modificar el informe original. Los informes RPTR son
informes de Crystal que se pueden visualizar con
aplicaciones de visualización de informes, pero que no se
pueden modificar con el SDK, ni podrán abrirlos aplicaciones
del diseñador de informes. La definición de un informe RPTR
no se puede modificar, por lo que no se puede usar este SDK
para definir la ubicación del origen de datos de un RPTR
mediante el controlador de base de datos. No obstante,
podrá actualizar los datos de un informe RPTR en tiempo de
ejecución actualizando el informe en un visor.
HTML 4.0
Exporta el informe en HTML 4.0. Este formato conserva el
diseño y el aspecto del informe utilizando DHTML.
Microsoft Excel (97-2003)
Este formato convierte el contenido del informe a celdas de
Excel página por página. El contenido de varias páginas se
exporta a la misma hoja de cálculo de Excel. Si una hoja de
cálculo se llena, pero hay más datos que exportar, el
programa de exportación crea varias hojas de cálculo para
alojar los datos. Si un objeto de informe ocupa más de una
celda, el programa de exportación fusionará celdas para
representar un objeto de informe. Microsoft Excel tiene un
límite de 256 columnas por hoja de cálculo, por lo que no se
exportará ningún objeto de informe (o parte de éste) que se
agregue a las celdas por encima de las 256 columnas. Este
formato de exportación conserva la mayoría de las
características de aspecto, pero no exporta objetos de línea y
cuadro desde su informe.
Microsoft Excel (97-2003), sólo datos
Microsoft Excel (sólo datos), tal y como el nombre indica, es
un formato basado en registros que se centra en la precisión
de la representación de datos. Pero incluso así, este formato
también exporta la mayoría de características de aspecto. A
diferencia del formato de Microsoft Excel, el formato
122
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Formato
Descripción
Microsoft Excel (sólo datos) no fusiona celdas: cada objeto se
agrega solamente a una celda. Este formato también puede
exportar ciertos tipos de resúmenes en informes de Crystal
como funciones de Excel. Los resúmenes admitidos son
SUM, AVERAGE, COUNT, MIN y MAX.
Microsoft Excel 2007 (XLSX), sólo datos
El formato XLSX tiene las mismas propiedades que el
formato de sólo datos de Microsoft Excel (97-2003); sin
embargo, el formato XLSX permite hasta 16.385 columnas y
1.048.576 filas en un solo libro.
Microsoft Word (97-2003)
Produce un archivo con formato de texto enriquecido (RTF)
que contiene objetos de texto y dibujo para representar
objetos de informe. Con este formato de exportación se
conservan casi todas las características de aspecto. No
obstante los objetos de texto no se pueden colocar fuera del
margen izquierdo de la página. Por tanto, si dispone de
objetos de texto en su informe que estén antes del margen
izquierdo del área de impresión, se moverán a la derecha.
(Esto es más perceptible en informes con páginas anchas).
Microsoft Word (97-2003) - Editable
El formato Microsoft Word - Editable es distinto del formato
Microsoft Word: se trata de un formato basado en páginas,
donde no todo el diseño y las características de aspecto se
conservarán en la salida. Este formato convierte todo el
contenido del objeto de informe en líneas de texto. A
diferencia del formato Microsoft Word, este formato no
utiliza marcos de texto. Se conservan las características de
aspecto del texto, pero no se conservan atributos como el
color de fondo, la trama de relleno, etcétera. Todas las
imágenes del informe están entre líneas con el contenido
textual, por lo que las imágenes cambian de forma
automática para alojar texto cuando el documento se edita
en Microsoft Word. Este formato no exporta objetos de línea
y cuadro desde su informe. Asimismo, los campos especiales
Número de página y Página N de M dejarán de funcionar si se
exporta a este formato.
ODBC
ODBC es un formato de intercambio de datos basado en
registros. Al utilizar este formato, podrá exportar sus datos
de informe a cualquier base de datos que cumpla con ODBC.
PDF
Los documentos exportados tienen como objetivo la
impresión y la redistribución. El formato PDF exportará tanto
el diseño como las características físicas de acuerdo con el
aspecto del informe en la ficha Vista previa. El formato PDF
incrustará las fuentes TrueType que aparezcan en el
documento. (No se admiten fuentes que no sean TrueType).
Este formato de exportación no admite tecnología de
vinculación de fuentes de Microsoft, que se utiliza para
admitir algunos conjuntos extendidos de caracteres, como el
chino HKCS. Por tanto, las fuentes utilizadas en el informe
deberán contener todos los pictogramas necesarios. Se
admiten los siguientes tipos de URI para los hipervínculos:
http, https y mailto.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
123
Formato
Descripción
Estilo de registro: columnas con espacios
Exporta datos de informe como texto. Este formato inserta
espacios entre las columnas.
Estilo de registro: columnas sin espacios
Exporta datos de informe como texto. No inserta espacios
entre las columnas.
Definición de informe
El formato Definición de informe exporta el informe a un
archivo de texto que contiene una breve descripción de la
vista de diseño del informe. Este formato sólo se mantiene
para la compatibilidad con SAP Crystal Reports 5.0.
Formato de texto enriquecido (RTF)
Produce un archivo RTF que contiene objetos de texto y
dibujo.
Valores separados (CSV)
El formato Valores separados es un formato de intercambio
de datos basado en registros. Exporta el contenido del objeto
de informe como un conjunto de valores separados por
caracteres de separador y delimitador especificados.
[Cuando se utiliza una coma (,) para separar campos, el
formato se denomina Valores separados por coma (CSV);
este formato de exportación es utilizado frecuentemente por
los usuarios de Microsoft Excel].
Texto separado por tabuladores (TTX)
Conserva el diseño del informe, pero con algunas diferencias:
los objetos de texto de varias líneas se exportan en una sola
línea, todos los valores de cadena se encierran entre comillas
dobles (" "), y los propios valores aparecerán separados por
caracteres de tabulación. Los archivos TTX se pueden abrir
en Microsoft Excel.
Texto
Da como resultado un texto sin formato (no conserva las
características de aspecto).
XML
Se utiliza sobre todo para el intercambio de datos. Este
formato produce un XML usando para ello el esquema XML
de SAP Crystal Reports.
Seleccionar un formato de exportación
Los formatos disponibles dependen de la versión de SAP Crystal Reports que ha instalado y el método usado para
exportar el informe. El control CrystalReportViewer ofrece la mayoría de formatos de exportación de forma
predeterminada. Algunos formatos sólo están disponibles cuando se usa el SDK de SAP Crystal Reports .NET o
SAP Crystal Reports Designer de forma independiente.
Formato
Control
CrystalReportViewer
SDK de SAP Crystal
Reports .NET
SAP Crystal Reports
Designer
SAP Crystal Reports (RPT)
x
x
x
Sólo lectura de SAP Crystal
Reports (RPTR)
x
x
x
x
x
x
x
HTML 4.0
Microsoft Excel (97-2003)
124
x
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Formato
Control
CrystalReportViewer
SDK de SAP Crystal
Reports .NET
SAP Crystal Reports
Designer
Microsoft Excel (97-2003),
sólo datos
x
x
x
Microsoft Excel 2007(XLSX),
sólo datos
x
x
x
Microsoft Word (97-2003)
x
x
x
Microsoft Word (97-2003) Editable
x
x
x
ODBC
PDF
x
x
x
x
Estilo de registro: columnas
con espacios
x
Estilo de registro: columnas
sin espacios
x
Definición de informe
x
Formato de texto enriquecido x
(RTF)
x
x
Valores separados (CSV)
x
x
Texto separado por
tabuladores (TTX)
x
x
Texto
x
x
x
x
XML
x
1.4.2.2
Exportar un informe desde el control
CrystalReportViewer
La forma más sencilla de agregar funciones de exportación a la aplicación SAP Crystal Reports .NET es usar el
botón de exportación en el control CrystalReportViewer. El botón Exportar está habilitado de forma
predeterminada en la barra de herramientas del control CrystalReportViewer.
El usuario puede hacer clic en el botón Exportar para acceder al cuadro de diálogo de exportación
predeterminado. Las opciones de exportación disponibles para el usuario están determinadas por los
controladores que se han incluido en el despliegue.
Deshabilitar la capacidad de exportar un informe desde el visor
La exportación está habilitada en todas las aplicaciones de SAP Crystal Reports de forma predeterminada. Puede
restringir la exportación de una de estas dos maneras:
●
Quitando el botón Exportar del visor.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
125
Aún así podrá seguir usando el SDK para exportar un informe, aunque el botón de exportación no esté visible.
●
Deshabilitando controladores de exportación específicos en los módulos de combinación de SAP
Crystal Reports.
Al desplegar una aplicación de SAP Crystal Reports en un equipo de destino, debe incluir el tiempo de
ejecución de SAP Crystal Reports en forma de MSI o módulo de combinación. Si decide usar módulos de
combinación para el despliegue, puede especificar qué controladores de exportación desea incluir o excluir.
Información relacionada
Cuadro de diálogo Exportar [página 898]
1.4.2.2.1
Para quitar el botón de exportación del control
CrystalReportViewer
Contexto
Aún así podrá seguir usando el SDK para exportar un informe, aunque el botón de exportación no esté visible.
Procedimiento
1.
Agregue un control CrystalReportViewer a la aplicación.
2.
Establezca la propiedad que controla la visibilidad del botón de exportación en falsa.
○
Para una aplicación de Windows, establezca la propiedad CrystalReportViewer.ShowExportButton
en falsa.
○
Para un sitio web, establezca la propiedad CrystalReportViewer.HasExportButton en falsa.
Resultados
Al ejecutar la aplicación, el botón de exportación ya no aparecerá en el control CrystalReportViewer.
Ejemplo
Deshabilitar el botón Exportar en una aplicación web
Private Sub ConfigureCrystalReports()
CrystalReportViewer1.HasExportButton = False
End Sub
private void ConfigureCrystalReports()
126
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
{
}
InitializeComponent();
crystalReportViewer1.HasExportButton = false;
1.4.2.3
Exportar un informe mediante programación
El SDK de SAP Crystal Reports .NET permite exportar un informe mediante programación a un número de
formatos y destinos mayor que el control CrystalReportViewer.
Si el botón Exportar de la barra de herramientas del control CrystalReportViewer satisface sus necesidades de
exportación, no tendrá que escribir código para configurar opciones de exportación adicionales.
Sin embargo, un método basado en el código para imprimir informes resulta útil en casos especializados:
●
Puede controlar cuándo, dónde y cómo se realiza la exportación. Para hacerlo, deberá desactivar el botón
Exportar de la barra de herramientas del control CrystalReportViewer y administrar toda la exportación
mediante código.
●
Puede exportar un informe en segundo plano, sin mostrarlo.
●
Puede exportar un informe a respuesta HTTP o a secuencia. El control CrystalReportViewer sólo admite la
exportación de un informe a disco.
Hay cuatro métodos para exportar un informe. A todos ellos se accede a través de la clase ReportDocument.
●
ReportDocument.Export
●
ReportDocument.ExportToHTTPResponse
●
ReportDocument.ExportToDisk
●
ReportDocument.ExportToStream
El método más general, ReportDocument.Export, permite exportar el informe a cualquier formato y ubicación
que admita el SDK de SAP Crystal Reports .NET. Para poder usar el método ReportDocument.Export, deberá
establecer en primer lugar una serie de parámetros a través de la clase ExportOptions.
Cada uno de los otros tres métodos ofrece una cómoda forma de exportar un informe de un modo concreto.
Normalmente, al usar alguno de los otros métodos se genera menor cantidad de código, pero se tiene menos
control sobre el archivo resultante.
1.4.2.3.1
Establecer opciones de exportación personalizadas
Para poder usar el método ReportDocument.Export, deberá establecer en primer lugar una serie de
parámetros a través de la clase ExportOptions. Estos parámetros controlan la ubicación de exportación, el
formato de exportación y varias opciones de estilo específicas del resultado.
Hay cuatro opciones que deben establecerse para poder exportar un informe con el método
ReportDocument.Export.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
127
Opción de exportación
Descripción
ExportDestinationType
Determina cómo se exportará el informe.
ExportDestinationOptions
Establece la ubicación y el nombre del archivo resultante.
ExportFormatOptions
Determina opciones de formato específicas del resultado.
ExportFormatType
Establece el tipo de archivo de destino.
Establecer la propiedad ExportDestinationType
La propiedad ExportOptions.ExportDestinationType determina cómo se exportará el informe. Los valores
disponibles se almacenan en la enumeración ExportDestinationType. El valor más común es
ExportDestinationType.DiskFile. Entre otros valores admitidos se encuentran ExchangeFolder,
MicrosoftMail y NoDestination.
Establecer la propiedad ExportDestinationOptions
La propiedad ExportOptions.ExportDestinationOptions establece opciones concretas de la ubicación de
destino del archivo de salida. El valor de la propiedad ExportDestinationOptions dependerá del valor de la
propiedad ExportOptions.ExportDestinationType.
ExportDestinationType
ExportDestinationOptions
Establece los siguientes valores
DiskFile
Un objeto
●
Establece el nombre y la ubicación
del archivo de salida.
●
El perfil del usuario y la contraseña
del servidor de Exchange.
●
La ruta a la carpeta de Exchange.
●
El nombre de usuario y la
contraseña de la cuenta de correo
electrónico.
●
El asunto y el cuerpo del mensaje
de correo electrónico.
●
Los destinatarios del mensaje de
correo electrónico.
DiskFileDestinationOptions
ExchangeFolder
Un objeto
ExchangeFolderDestinationOp
tions
MicrosoftMail
Un objeto
MicrosoftMailDestinationOpt
ions
Establecer la propiedad ExportFormatType
Esta propiedad determina el formato de archivo del archivo de salida. Los valores disponibles se almacenan en la
enumeración ExportFormatType. Las opciones disponibles están determinadas por la versión de SAP Crystal
Reports que esté usando.
128
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio admite las siguientes opciones de
exportación:
●
SAP Crystal Reports (RPT)
●
Sólo lectura de SAP Crystal Reports (RPTR)
●
PDF
●
Formato de texto enriquecido (RTF)
●
Microsoft Word (97-2003)
●
Microsoft Excel (97-2003)
●
Microsoft Excel (97-2003), sólo datos
●
Microsoft Excel (2007), sólo datos
●
HTML 4.0
●
Valores separados (CSV)
●
Microsoft Word - Editable (RTF)
●
Texto separado por tabuladores (TTX)
●
Texto
Establecer la propiedad ExportFormatOptions
La propiedad ExportOptions.ExportFormatOptions establece opciones concretas del formato del archivo
de salida. El valor de la propiedad ExportFormatOptions dependerá del valor de la propiedad
ExportOptions.ExportFormatType.
ExportFormatOptions
Formato de exportación
Establece los siguientes valores
Un objeto ExcelFormatOptions
●
Microsoft Excel (97-2003)
●
●
Microsoft Excel (97-2003), sólo
datos
Las páginas primera y última del
informe que se va a exportar.
●
El ancho de columna
predeterminado.
●
Si se incluirán o no encabezados de
columna.
●
Las páginas primera y última del
informe que se va a exportar.
●
El nombre de la página HTML
predeterminada.
●
El nombre de la carpeta que
contiene los archivos de
compatibilidad necesarios para la
salida HTML como, por ejemplo, las
imágenes que se utilizan en el
informe.
●
Las páginas primera y última del
informe que se va a exportar.
Un objeto HTMLFormatOptions
Un objeto
PdfRtfWordFormatOptions
●
HTML 4.0
●
PDF
●
Formato de texto enriquecido
(RTF)
●
Microsoft Word (97-2003)
●
Microsoft Word - Editable (RTF)
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
129
Ejemplo
Establecer las opciones de exportación para Microsoft Excel - Sólo datos
Este ejemplo establece las opciones de exportación necesarias para exportar un informe en el formato
“Microsoft Excel - Sólo datos”.
El método instancia una nueva clase DiskFileDestinationOptions, y asigna una ruta de archivo a la
propiedad DiskFileDestinationOptions.DiskFileName. Para exportar el archivo a disco, la propiedad
ExportOptions.ExportDestinationType deberá establecerse en ExportDestinationType.DiskFile,
y ExportOptions.DestinationOptions estará establecida en un objeto DiskFileDestinationOptions
válido.
Si no se necesita un formato especial, puede establecer ExportOptions.ExportFormatOptions en nulo.
Private Function ConfigureExportToExcelRecord(ByVal filepath As String) As
ExportOptions
Dim exOptions As New ExportOptions()
Dim dfDestinationOptions As New DiskFileDestinationOptions()
dfDestinationOptions.DiskFileName = filepath
exOptions.ExportDestinationType = ExportDestinationType.DiskFile
exOptions.DestinationOptions = dfDestinationOptions
exOptions.ExportFormatType = ExportFormatType.ExcelRecord
exOptions.ExportFormatOptions = Nothing
Return exOptions
End Function
private ExportOptions ConfigureExportToExcelRecord(String filepath)
{
ExportOptions exOptions = new ExportOptions();
DiskFileDestinationOptions dfDestinationOptions = new
DiskFileDestinationOptions();
dfDestinationOptions.DiskFileName = filepath;
}
exOptions.ExportDestinationType = ExportDestinationType.DiskFile;
exOptions.DestinationOptions = dfDestinationOptions;
exOptions.ExportFormatType = ExportFormatType.ExcelRecord;
exOptions.ExportFormatOptions = null;
return exOptions;
Ejemplo
Establecer las opciones de exportación para la salida HTML 4.0
Este ejemplo establece las opciones de exportación necesarias para exportar un informe en el formato “HTML
4.0”.
Al exportar como HTML, no tiene que instanciar una clase DiskFileDestinationOptions. En su lugar, estas
opciones se establecen mediante la clase HTMLFormatOptions.
Este método instancia una nueva clase HTMLFormatOptions, y asigna el nombre de archivo predeterminado a
la propiedad HTMLFormatOptions.HTMLFileName, y la ruta de exportación predeterminada a la propiedad
HTMLFormatOptions.HTMLBaseFolderName. La carpeta de base contiene cada una de las páginas HTML
exportadas por el informe, así como todas las imágenes necesarias.
130
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Establezca la propiedad ExportOptions.ExportFormatOptions a un objeto HTMLFormatOptions válido.
Private Function ConfigureExportToHtml40(ByVal exportpath As String) As
ExportOptions
Dim exOptions As New ExportOptions()
Dim html40FormatOptions As New HTMLFormatOptions()
html40FormatOptions.HTMLBaseFolderName = exportpath
html40FormatOptions.HTMLFileName = "default.html"
html40FormatOptions.HTMLEnableSeparatedPages = True
html40FormatOptions.HTMLHasPageNavigator = True
exOptions.ExportFormatType = ExportFormatType.HTML40
exOptions.ExportFormatOptions = html40FormatOptions
Return exOptions
End Function
private ExportOptions ConfigureExportToHtml40(String exportpath)
{
ExportOptions exOptions = new ExportOptions();
HTMLFormatOptions html40FormatOptions = new HTMLFormatOptions();
html40FormatOptions.HTMLBaseFolderName = exportpath;
html40FormatOptions.HTMLFileName = "default.html";
html40FormatOptions.HTMLEnableSeparatedPages = true;
html40FormatOptions.HTMLHasPageNavigator = true;
exOptions.ExportFormatType = ExportFormatType.HTML40;
exOptions.ExportFormatOptions = html40FormatOptions;
}
return exOptions;
Información relacionada
Formatos de exportación disponibles [página 122]
1.4.2.3.2
Para exportar a disco con opciones de exportación
personalizadas
Contexto
Este ejemplo muestra cómo exportar un informe de Crystal al formato de Microsoft Word. El SDK de SAP
Crystal Reports 2008 permite exportar informes a un formato concreto, como Excel, PDF o RTF. Puede exportar
informes a varios formatos mediante el objeto de modelos ReportDocument.
En este ejemplo se establece la propiedad ReportDocument.ExportOptions y se usa el método
ReportDocument.Export para exportar el informe.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
131
Procedimiento
1.
Cree un método que tome un objeto ReportDocument y una ruta de archivo como parámetros.
2.
Cree una nueva instancia de la clase DiskFileDestinationOptions y establezca el valor de la propiedad
DiskFileDestinationOptions.DiskFileName en la ruta del archivo de salida.
Dim dfDestinationOptions As New DiskFileDestinationOptions()
dfDestinationOptions.DiskFileName = filepath
DiskFileDestinationOptions dfDestinationOptions = new
DiskFileDestinationOptions();
dfDestinationOptions.DiskFileName = filepath;
3.
Cree una nueva instancia de la clase ExportOptions y establezca las propiedades necesarias.
a) Establezca la propiedad ExportDestinationType en ExportDestinationType.DiskFile.
b) Establezca la propiedad ExportDestinationOptions en el objeto DiskFileDestinationOptions.
c) Establezca la propiedad ExportFormatType en ExportFormatType.WordForWindows.
d) Si no se necesita un formato especial, puede establecer ExportOptions.ExportFormatOptions en
nulo.
Dim wordExportOptions As New ExportOptions()
wordExportOptions.ExportDestinationType = ExportDestinationType.DiskFile
wordExportOptions.ExportDestinationOptions = dfDestinationOptions
wordExportOptions.ExportFormatType = ExportFormatType.WordForWindows
wordExportOptions.ExportFormatOptions = Nothing
ExportOptions wordExportOptions = new ExportOptions();
wordExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
wordExportOptions.ExportDestinationOptions = dfDestinationOptions;
wordExportOptions.ExportFormatType = ExportFormatType.WordForWindows;
wordExportOptions.ExportFormatOptions = null;
4.
Llame al método Exportar y pase el objeto ExportOptions como parámetro.
Ejemplo
Private Sub ExportToWord_RD(ByVal rd As ReportDocument, ByVal filepath As String)
Dim dfDestinationOptions As New DiskFileDestinationOptions()
dfDestinationOptions.DiskFileName = filepath
Dim wordExportOptions As New ExportOptions()
wordExportOptions.ExportDestinationType = ExportDestinationType.DiskFile
wordExportOptions.ExportDestinationOptions = dfDestinationOptions
wordExportOptions.ExportFormatType = ExportFormatType.WordForWindows
wordExportOptions.ExportFormatOptions = Nothing
rd.Export(wordExportOptions)
End Sub
private void ExportToWord_RD(ReportDocument rd, String filepath)
{
DiskFileDestinationOptions dfDestinationOptions = new
DiskFileDestinationOptions();
132
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
dfDestinationOptions.DiskFileName = filepath;
ExportOptions wordExportOptions = new ExportOptions();
wordExportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
wordExportOptions.ExportDestinationOptions = dfDestinationOptions;
wordExportOptions.ExportFormatType = ExportFormatType.WordForWindows;
wordExportOptions.ExportFormatOptions = null;
}
rd.Export(wordExportOptions);
1.4.2.3.3
Para exportar a disco como PDF usando el método
ReportDocument.ExportToDisk
Contexto
Este ejemplo muestra cómo exportar un informe de Crystal al formato PDF. El SDK de SAP Crystal Reports 2008
permite exportar informes a un formato concreto, como Excel, PDF o RTF. Puede exportar informes a varios
formatos mediante el objeto de modelos ReportDocument.
Procedimiento
1.
Cree un método que tome como parámetro un objeto ReportDocument.
2.
Especifique un directorio de salida y compruebe que existe. Si no existe el directorio de salida, créelo.
3.
Llame al método ExportToDisk y especifique el formato de salida y el nombre del archivo de salida.
Ejemplo
Private Shared Sub ExportToPDF_RD(ByVal rd As ReportDocument)
Dim exportPath As String = "C:\\Exported\\"
If Not System.IO.Directory.Exists(exportPath) Then
System.IO.Directory.CreateDirectory(exportPath)
End If
rd.ExportToDisk(ExportFormatType.PortableDocFormat, exportPath +
"PortableDoc.pdf")
End Sub
private static void ExportToPDF_RD(ReportDocument rd) {
String exportPath = "C:\\Exported\\";
if (!System.IO.Directory.Exists(exportPath))
{
System.IO.Directory.CreateDirectory(exportPath);
}
rd.ExportToDisk(ExportFormatType.PortableDocFormat, exportPath +
"PortableDoc.pdf");
}
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
133
Información relacionada
Modelo de objetos ReportDocument [página 36]
1.4.3
Filtrar datos con parámetros o fórmulas
SAP Crystal Reports le permite personalizar los datos de los informes mediante parámetros de informe o
cambiando la fórmula de selección.
Un parámetro es una variable de informe que establece el usuario y de la cual se crea una instancia cuando se
actualiza el informe. El uso de un parámetro en una fórmula de selección permite cambiar los datos que se
incluyen en el informe en tiempo de ejecución. Los parámetros también se pueden usar para personalizar el
aspecto de un informe.
Las fórmulas de selección especifican y filtran los registros y los grupos que aparecen en un informe. Al cambiar la
fórmula de selección se modifica la consulta que se usa al recuperar datos del origen de datos.
Clases usadas para configurar parámetros o fórmulas
●
CrystalDecisions.CrystalReports.Engine.DataDefinition
Contiene toda la información relacionada con la manipulación de datos basada en el origen de datos de un
informe.
●
CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition
Representa un campo de parámetros del informe. Este objeto proporciona las propiedades y los métodos
para recuperar la información y las opciones de configuración de un campo de parámetro del informe.
●
CrystalDecisions.Web.Parameter
Proporciona propiedades que modifican o recuperan información sobre un parámetro en un sitio web.
1.4.3.1
Parámetros
Un parámetro es una variable de informe que establece el usuario y de la cual se crea una instancia cuando se
actualiza el informe. Existe gran cantidad de tipos de parámetros y la configuración mediante programación de
los diferentes tipos puede provocar diversos comportamientos y experiencias para los usuarios de la aplicación.
Prácticas idóneas para trabajar con parámetros
Para evitar los errores de tiempo de ejecución al configurar los parámetros mediante programación, tenga en
cuenta lo siguiente:
●
134
Los valores del parámetro deben ser del mismo tipo que el parámetro.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
●
Si el parámetro tiene una máscara de edición, los valores del parámetro deberán respetar la máscara.
●
Al leer valores de parámetros, asegúrese de que conoce el tipo de valores que está leyendo, es decir, de si son
discretos o de rango.
●
Establezca el tipo de límite de un valor de rango antes de agregarlo al parámetro.
●
Asegúrese de que el límite superior de un valor de rango es mayor que el límite inferior.
Información relacionada
Configurar parámetros [página 694]
Parámetros de datos y parámetros sin datos [página 696]
Diseñar campos de parámetros [página 695]
1.4.3.1.1
Propiedades de valores de parámetro
Los parámetros admiten muchas más opciones que las mencionadas aquí. Si desea obtener una lista completa,
consulte la clase ParameterField.
Parámetros de valor único o múltiple
Si un parámetro admite valores múltiples, el usuario puede seleccionar más de uno para un parámetro cuando se
actualiza el informe. Si un parámetro admite valores únicos, el usuario sólo puede seleccionar uno para un
parámetro cuando se actualiza el informe. Si un parámetro admite valores múltiples, cambia de una variable única
a una matriz que contiene varios valores.
Valores de parámetro discretos o de rango
Los valores de parámetro discretos representan un valor único, como 1, "Jill", 3.141 o True. Los valores de rango
representan un intervalo concreto de valores desde un punto a otro, como [1..45], (4..6], ["Lunes","Martes"]. El
valor del límite inferior del rango debe ser menor que el límite superior.
Además, los parámetros pueden ser tanto discretos como de rango si el parámetro admite valores múltiples.
Valores predeterminados
Puede especificar valores predeterminados para un parámetro y obligar al usuario a seleccionar uno o varios de
ellos. También puede facilitar valores de parámetro predeterminados pero permitir que el usuario introduzca
valores personalizados. Los valores predeterminados se almacenan en la propiedad DefaultValues del objeto
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
135
ParameterField. Después de que el usuario haya seleccionado un conjunto de valores para los parámetros del
informe, se almacenan en la propiedad CurrentValues.
Nota
Los valores predeterminados sólo pueden ser discretos.
Valores de parámetro opcionales
Si un valor de parámetro está configurado como opcional, los usuarios no están obligados a introducir un valor
cuando se les solicite hacerlo.
Valores de parámetro estáticos o dinámicos
Los valores de parámetro estáticos se almacenan en el informe. Los valores de parámetro dinámicos se
recuperan de un origen de datos fuera del informe.
Valores de parámetro dinámicos en cascada
Una solicitud dinámica puede incluir una lista en cascada de valores que guiarán al usuario por una secuencia de
solicitudes dinámicas para determinar un valor de parámetro final. Por ejemplo, se puede solicitar a los usuarios
que seleccionen un país antes de que aparezcan las opciones de región.
Valores de parámetro interactivos
Es posible manipular los valores de parámetro en tiempo de ejecución usando la propiedad
CrystalReportViewer.ViewTimeSelectionFormula. El tiempo de vista de la fórmula de selección se aplica
después de que se hayan aplicado los resultados de las fórmulas de selección guardadas con el informe.
Tipos de valores de parámetro
Un campo de parámetro debe contener un determinado ParameterType.
Un valor de parámetro debe ser uno de los siguientes tipos de parámetro:
●
ReportParameter
●
StoredProcedureParameter
136
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
●
QueryParameter
1.4.3.1.2
El panel de parámetros
Dé formato y filtre los datos de un informe de forma interactiva usando el panel de parámetros.
El nuevo panel de parámetros de SAP Crystal Reports 2008 permite que los usuarios establezcan parámetros
estáticos y dinámicos y que actualicen el informe. Además, los usuarios pueden dar formato y filtrar los datos de
un informe de forma interactiva. El panel de parámetros está disponible en el panel de herramientas. Puede
acceder al panel de parámetros haciendo clic en el botón Parámetros en la barra de herramientas o mediante
programación usando el siguiente código:
myCrystalReportViewer.ToolPanelView = ToolPanelViewType.ParameterPanel
crystalReportViewer.ToolPanelView = ToolPanelViewType.ParameterPanel;
Puede ocultar el botón Parámetros mediante programación usando el siguiente código:
myCrystalReportViewer.ShowParameterPanelButton = False
crystalReportViewer.ShowParameterPanelButton = false;
El panel muestra todos los parámetros que se han establecido en Puede editarse o Sólo lectura. Si se establece un
parámetro en Puede editarse, puede agregar, eliminar o modificar los valores de parámetro haciendo clic en el
botón Mostrar el cuadro de diálogo Avanzadas. Si se modifican los valores de parámetro pero no se aplican,
aparecerá un asterisco junto al campo del parámetro para indicar que los valores no se han aplicado en el
informe.
Nota
Si el parámetro acepta valores personalizados, puede editar el valor del parámetro directamente en el cuadro
de texto del panel de parámetros.
Aparecerá un icono de base de datos junto a los parámetros de datos. Al modificar el valor de un parámetro de
datos, el informe se actualiza y accede a la base de datos para hacer los cambios correspondientes. Al modificar
el valor de un parámetro que no sea de datos, se cambia el formato del informe o se filtra en función de los datos
guardados en el informe. El informe no accede a la base de datos.
Información relacionada
Filtrar datos de informe con fórmulas de selección [página 146]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
137
1.4.3.1.3
Para establecer parámetros en la página ASPX
Al crear un informe de Crystal, la selección de datos del informe se controla mediante los criterios de "where". El
valor de los criterios de "where" puede ser un valor codificado. Pero cuando el valor debe ser dinámico, se crea un
parámetro y la cláusula "where" se asigna al parámetro. Los parámetros se tratan de forma distinta, en función de
si se programa con un modelo de codificación o un modelo de código reducido.
Cuando se programa con un modelo de codificación, Crystal Reports, versión para programadores de Microsoft
Visual Studio accede e interactúa con los parámetros mediante un grupo de clases relacionadas con parámetros
en el SDK de SAP Crystal Reports.
Cuando se programa con un modelo de código reducido (el modelo de aplicación basado en etiquetas), el control
CrystalReportSource accede e interactúa con los parámetros mediante el uso del marco de Parameters. El
marco de trabajo de parámetros es nuevo en la versión 2.0 de ASP.NET. Permite que los parámetros se asignen a
cualquier control DataSource (en este caso, un control CrystalReportSource.) Dichos parámetros se pueden
asignar al informe principal y a cualquier subinforme, a condición de que requieran parámetros.
Se puede asignar un parámetro entre cualquiera de los siguientes tipos de parámetro:
●
ControlParameter
●
QueryStringParameter
●
SessionParameter
●
FormParameter
●
CookieParameter
Esta asignación de parámetro permite crear una solución de código reducido, donde los parámetros de un
informe se pueden establecer a partir de selecciones efectuadas en controles DropDownList (u otros tipos de
controles), valores de la cadena de consulta URL, valores recuperados de Session, valores enviados desde
campos de formulario o valores de Cookie.
Configurar Parameters directamente en el código XML
En XML, la etiqueta <Parameters> está anidada dentro de la etiqueta <CrystalReportSource>. En la etiqueta
<Parameters> anidada, se pueden configurar vínculos al parámetro o a un parámetro de un control.
Ejemplo
Configurar un parámetro en el código XML
En este ejemplo se establece el valor predeterminado del parámetro Ciudad en Tokio.
<CR:CrystalReportSource ID="CrystalReportSource1"
runat="server">
<Report FileName="SalesReport.rpt">
<Parameters>
<CR:Parameter ConvertEmptyStringToNull="False"
DefaultValue="Tokyo" Name="City" ReportName="" />
</Parameters>
</Report>
</CR:CrystalReportSource>
138
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Ejemplo
Enlazar un parámetro a un control
Puede enlazar el valor de un parámetro a otro control del formulario web. En este ejemplo se establece el valor
de un parámetro con el nombre Ciudad en el valor de un control de cuadro de texto llamado Ubicación.
<CR:CrystalReportSource ID="CrystalReportSource1"
runat="server">
<Report FileName="SalesReport.rpt">
<Parameters>
<CR:ControlParameter ControlID="Location"
ConvertEmptyStringToNull="False"
Name="city" PropertyName="Text" ReportName="" />
</Parameters>
</Report>
</CR:CrystalReportSource>
Información relacionada
Configurar parámetros [página 694]
1.4.3.1.3.1
Acceder al cuadro de diálogo Editor de colección
de parámetros
Contexto
Los parámetros se configuran en el cuadro de diálogo Editor de colección de parámetros.
Procedimiento
1.
Seleccione el control CrystalReportSource.
2.
En Propiedades, expanda Informe.
3.
En la propiedad Report, haga clic en los puntos suspensivos ( ...) situados a la derecha de Parameters
(Collection).
4.
En el cuadro de diálogo Editor de colección de parámetros, especifique uno o varios parámetros para el
informe principal, así como para cualquier subinforme.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
139
1.4.3.1.4
informe
Para establecer parámetros discretos en un
En este ejemplo se establecen los parámetros en valores específicos que usa el informe de muestra.
Requisitos previos
Debe tener un informe con un campo de parámetro ya especificado.
Contexto
Con el modelo de objetos ReportDocument, puede establecer los valores de parámetro de los parámetros
existentes en un informe. A los parámetros se accede por nombre o mediante un valor de índice numérico. Para
agregar un nuevo parámetro a un informe, debe usar el modelo de objeto ReportClientDocument.
Procedimiento
1.
Cree una nueva constante de cadena, NOMBRE_CAMPO_DE_PARÁMETRO y establezca su valor con el nombre
de un parámetro existente.
2.
Cree una instancia de la clase ArrayList.
3.
Agregue un valor a la instancia de ArrayList para cada valor que desea asignar al parámetro.
4.
Llame al método ReportDocument.SetParameterValue y pase el nombre del parámetro y la lista de
valores.
El método ReportDocument.SetParameterValue establece el valor actual de un campo de parámetro. El
valor puede ser un valor primitivo, ParameterValue, una matriz de cualquier tipo o una colección
ParameterValues.
Ejemplo
Establecer parámetros discretos en un informe
Private Sub SettingParameters_RD(ByVal TestReport As ReportDocument)
Dim PARAMETER_FIELD_NAME As String = "Country"
Dim countries As New ArrayList()
countries.Add("Canada")
countries.Add("USA")
TestReport.SetParameterValue(PARAMETER_FIELD_NAME, countries.ToArray())
crystalReportViewer.ReportSource = TestReport
End Sub
private void SettingParameters_RD(ReportDocument TestReport)
{
string PARAMETER_FIELD_NAME = "Country";
ArrayList countries = new ArrayList();
140
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
}
countries.Add("Canada");
countries.Add("USA");
TestReport.SetParameterValue(PARAMETER_FIELD_NAME, countries.ToArray());
crystalReportViewer.ReportSource = TestReport;
Pasos siguientes
Es posible que un sitio Web de SAP Crystal Reports necesite codificación adicional para administrar el estado de
la sesión durante la visualización de diferentes páginas.
Información relacionada
Tutorial: Conservar el modelo de objetos ReportDocument con Session [página 337]
En este tutorial, usará el modelo de objetos ReportDocument y realizará cambios mediante programación en un
informe en tiempo de ejecución.
Tutorial: Leer y configurar parámetros discretos [página 385]
En este tutorial, aprenderá a crear un informe cuyos datos se puedan filtrar basándose en un parámetro
discreto.
1.4.3.1.5
Para establecer parámetros discretos en un
subinforme
Esta muestra define un parámetro en un subinforme establecido en un valor específico.
Requisitos previos
Debe tener un informe con un campo de parámetro ya especificado.
Contexto
Para establecer un valor discreto en un informe, debe llamar al método ReportDocument.SetParameterValue
con el nombre y el valor del parámetro. Este método no se admite en subinformes. En su lugar, debe acceder al
parámetro en el subinforme a través de la colección ParameterFields del informe principal y establecerlo como
un nuevo objeto ParameterDiscreteValue.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
141
Procedimiento
1.
Cree una instancia de la clase ParameterDiscreteValue.
Sugerencias
Use la clase ParameterRangeValue para los parámetros de rango.
2.
Establezca la propiedad ParameterDiscreteValue.Value en el nuevo valor del parámetro.
Dim dv As New ParameterDiscreteValue()
dv.Value = parameterValue
ParameterDiscreteValue dv = new ParameterDiscreteValue();
dv.Value = parameterValue;
3.
Cree una instancia de la colección ParameterFields y asígnele el valor de la propiedad
ReportDocument.ParameterFields desde el informe principal.
Dim parameterFields As ParameterFields = testReport.ParameterFields
ParameterFields parameterFields = testReport.ParameterFields;
4.
Acceda al parámetro del subinforme a través de un índice de nombres de la instancia de ParameterFields.
Dim parameterField As ParameterField = parameterFields(parameterFieldName,
subreportName)
ParameterField parameterField = parameterFields[parameterFieldName,
subreportName];
La colección ParameterFields requiere dos índices, uno para el nombre del parámetro y otro para el
nombre del subinforme.
5.
Borre el valor existente del campo de parámetro y agregue el objeto ParameterDiscreteValue que creó
anteriormente.
parameterField.CurrentValues.Clear()
parameterField.CurrentValues.Add(dv)
parameterField.CurrentValues.Clear();
parameterField.CurrentValues.Add(dv);
6.
Enlace el informe a un control CrystalReportViewer.
Nota
Los ParameterFields deben establecerse antes que la propiedad ReportSource del control
CrystalReportViewer; de lo contrario, el control solicitará los datos del parámetro.
142
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Ejemplo
Establecer parámetros discretos en un subinforme
Private Sub SubreportSettingParameters_RD(ByVal testReport As ReportDocument,
ByVal subreportName As String, ByVal parameterFieldName As String, ByVal
parameterValue As String)
Dim dv As New ParameterDiscreteValue()
dv.Value = parameterValue
Dim parameterFields As ParameterFields = testReport.ParameterFields
Dim parameterField As ParameterField = parameterFields(parameterFieldName,
subreportName)
parameterField.CurrentValues.Clear()
parameterField.CurrentValues.Add(dv)
crystalReportViewer1.ReportSource = TestReport
End Sub
private void SubreportSettingParameters_RD(ReportDocument testReport,
String subreportName, String parameterFieldName, String
parameterValue)
{
ParameterDiscreteValue dv = new ParameterDiscreteValue();
dv.Value = parameterValue;
ParameterFields parameterFields = testReport.ParameterFields;
ParameterField parameterField = parameterFields[parameterFieldName,
subreportName];
parameterField.CurrentValues.Clear();
parameterField.CurrentValues.Add(dv);
crystalReportViewer1.ReportSource = TestReport;
}
Pasos siguientes
Es posible que un sitio Web de SAP Crystal Reports necesite codificación adicional para administrar el estado de
la sesión durante la visualización de diferentes páginas.
Información relacionada
Tutorial: Conservar el modelo de objetos ReportDocument con Session [página 337]
En este tutorial, usará el modelo de objetos ReportDocument y realizará cambios mediante programación en un
informe en tiempo de ejecución.
Tutorial: Leer y configurar parámetros de rango para un subinforme [página 274]
En este tutorial se planteará una complicación adicional: ¿qué sucede si el informe contiene un subinforme que
requiere parámetros distintos?
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
143
1.4.3.1.6
Para establecer parámetros de rango en un informe
Requisitos previos
Debe tener un informe con un campo de parámetro ya especificado.
Contexto
Con el modelo de objetos ReportDocument, puede establecer los valores de parámetro de los parámetros
existentes en un informe. A los parámetros se accede por nombre o mediante un valor de índice numérico. Para
agregar un nuevo parámetro a un informe, debe usar el modelo de objeto ReportClientDocument.
Para establecer un parámetro de rango, debe crear una instancia de la clase ParameterRangeValue y pasarla al
método ReportDocument.SetParameterValue.
Procedimiento
1.
Cree una nueva constante de cadena, NOMBRE_CAMPO_DE_PARÁMETRO y establezca su valor con el nombre
de un parámetro existente.
2.
Cree una instancia de la clase ParameterRangeValue.
Dim dateRange As New ParameterRangeValue()
ParameterRangeValue dateRange = new ParameterRangeValue();
3.
Establezca los valores de inicio y fin del objeto ParameterRangeValue.
dateRange.StartValue = startDate
dateRange.EndValue = endDate
dateRange.StartValue = startDate;
dateRange.EndValue = endDate;
4.
144
Establezca los límites superior e inferior del rango.
Opción
Descripción
RangeBoundType.BoundExclusive
Los valores de rango superior e inferior no se incluyen en el rango.
RangeBoundType.BoundInclusive
Los valores de rango superior e inferior no se incluyen en el rango.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Opción
Descripción
RangeBoundType.NoBound
No se ha seleccionado ningún límite de rango.
dateRange.LowerBoundType = RangeBoundType.BoundInclusive
dateRange.UpperBoundType = RangeBoundType.BoundInclusive
dateRange.LowerBoundType = RangeBoundType.BoundInclusive;
dateRange.UpperBoundType = RangeBoundType.BoundInclusive;
5.
Llame al método ReportDocument.SetParameterValue y pase el nombre del parámetro y el objeto
ParameterRangeValue.
El método ReportDocument.SetParameterValue establece el valor actual de un campo de parámetro. El
valor puede ser un valor primitivo, ParameterValue, una matriz de cualquier tipo o una colección
ParameterValues.
Ejemplo
Private Sub SettingParameters_RD(ByVal testReport As ReportDocument, ByVal
startDate As String, ByVal endDate As String)
Dim PARAMETER_FIELD_NAME As String = "SalesDates"
Dim dateRange As New ParameterRangeValue()
dateRange.StartValue = startDate
dateRange.EndValue = endDate
dateRange.LowerBoundType = RangeBoundType.BoundInclusive
dateRange.UpperBoundType = RangeBoundType.BoundInclusive
testReport.SetParameterValue(PARAMETER_FIELD_NAME, dateRange)
crystalReportViewer1.ReportSource = testReport
End Sub
private void SettingParameters_RD(ReportDocument testReport, String startDate,
String endDate)
{
string PARAMETER_FIELD_NAME = "SalesDates";
ParameterRangeValue dateRange = new ParameterRangeValue();
dateRange.StartValue = startDate;
dateRange.EndValue = endDate;
dateRange.LowerBoundType = RangeBoundType.BoundInclusive;
dateRange.UpperBoundType = RangeBoundType.BoundInclusive;
}
testReport.SetParameterValue(PARAMETER_FIELD_NAME, dateRange);
crystalReportViewer1.ReportSource = testReport;
Pasos siguientes
Es posible que un sitio Web de SAP Crystal Reports necesite codificación adicional para administrar el estado de
la sesión durante la visualización de diferentes páginas.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
145
Información relacionada
Tutorial: Conservar el modelo de objetos ReportDocument con Session [página 337]
En este tutorial, usará el modelo de objetos ReportDocument y realizará cambios mediante programación en un
informe en tiempo de ejecución.
1.4.3.2
Filtrar datos de informe con fórmulas de selección
Las fórmulas de selección especifican y filtran los registros y los grupos que aparecen en un informe. Puede usar
tres posibles fórmulas de selección para filtrar los datos:
●
Fórmula de selección de registros
●
Fórmula de selección de datos guardados
●
Fórmula de selección de grupos
La siguiente tabla muestra los tipos de campos permitidos en los diferentes filtros de informe:
Fórmula de selección de
registros
Fórmula de selección de
datos guardados
Fórmula de selección de
grupos
Parámetros
X
X
X
Resúmenes
-
-
X
Fórmulas de hora de im­
presión/Totales acumula­
dos
-
-
-
La siguiente tabla muestra las diferencias de comportamiento asociadas con los diferentes filtros de informe:
Fórmula de selección de
registros
Fórmula de selección de
datos guardados
Fórmula de selección de
grupos
¿Puede referirse al resu­
men?
No.
Sí.
Sí.
¿Cuándo se evalúa la fór­
mula?
Durante la lectura de los
registros.
Si se usa un resumen, en
el momento de impresión;
de lo contrario, durante la
lectura de los registros.
Al imprimir.
¿Cuándo se actualiza el in­ Si el resultado de la eva­
Si se leen registros, al eva­ N/D
forme?
luación es falso, cuando se luarlos. Si el resultado de
exponen los registros.
la evaluación es falso,
cuando se exponen los re­
gistros.
¿Afecta al cálculo del resu­ Sí, no se cuentan los regis­ No, siempre que el filtro se No, los registros se cuen­
men?
tros descartados por el fil­ evalúe durante la lectura
tan aunque el filtro los
tro.
de los registros; en caso
haya descartado.
contrario, sí.
146
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Puede aplicar la fórmula de selección de datos guardados a la salida de la fórmula de selección de registros. El
siguiente diagrama muestra cómo se usan las fórmulas de selección de registros y de datos guardados:
Fórmula de selección de registros
La fórmula de selección de registros especifica los registros que formarán los datos guardados del informe. Esta
fórmula de selección permite dos niveles de filtrado:
●
Filtrado por base de datos
●
Filtrado por motor de procesamiento de informes
Fórmula de selección de datos guardados
SavedDataFilter permite que los usuarios vean un subconjunto de los datos guardados en un informe. Los
cambios en SavedDataFilter no provocarán que se descarten los datos guardados en un informe ni afectará
negativamente a la base de datos.
Fórmula de selección de grupos
La fórmula de selección de grupos especifica los registros que se considerarán al representar páginas de
informes. Esta fórmula normalmente usa valores producidos en fases anteriores del procesamiento del informe,
como resúmenes.
Nota
La fórmula de selección de grupos filtra por registros, no por grupos.
1.4.3.2.1
Para filtrar datos con fórmulas de selección
Contexto
En este ejemplo se aplica un filtro a uno de los parámetros de base de datos que usa el informe de muestra. El
filtro permite que los usuarios personalicen los valores que aparecen en un informe.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
147
Procedimiento
1.
Cree un método que tome un objeto ReportDocument y una cadena que contenga una fórmula de selección.
El SDK de SAP Crystal Reports .NET usa la misma sintaxis de fórmulas de selección que el diseñador
incrustado de SAP Crystal Reports.
2.
Asigne la fórmula de selección a la propiedad DataDefinition.RecordSelectionFormula del objeto
ReportDocument actual.
La clase DataDefinition contiene toda la información relacionada con la manipulación de datos en función del
origen de datos de un informe. Se puede acceder a la clase DataDefinition de cada informe a través de la
propiedad ReportDocument.DataDefinition.
3.
Enlace la propiedad ReportSource del control CrystalReportViewer a la instancia de ReportDocument.
Resultados
El informe se actualizará con nuevos resultados en función de la fórmula de selección especificada.
Ejemplo
En este ejemplo se acepta un objeto ReportDocument y un parámetro entero. El parámetro entero se
concatena con una cadena existente para crear una fórmula de selección completa. La fórmula de selección se
aplica al informe antes de enlazar el control CrystalReportViewer al objeto ReportDocument.
Private Sub FilterData_RD(ByVal TestReport As ReportDocument, ByVal sales As
Integer)
Dim selectFormula As String = "{Customer.Last Year's Sales} > " + sales
TestReport.DataDefinition.RecordSelectionFormula = selectionFormula
crystalReportViewer.ReportSource = TestReport
End Sub
private void FilterData_RD(ReportDocument TestReport, int sales)
{
string selectFormula = "{Customer.Last Year's Sales} > " + sales;
TestReport.DataDefinition.RecordSelectionFormula = selectionFormula;
crystalReportViewer.ReportSource = TestReport;
}
Pasos siguientes
Es posible que un sitio Web de SAP Crystal Reports necesite codificación adicional para administrar el estado de
la sesión durante la visualización de diferentes páginas.
Información relacionada
Tutorial: Conservar el modelo de objetos ReportDocument con Session [página 337]
148
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
En este tutorial, usará el modelo de objetos ReportDocument y realizará cambios mediante programación en un
informe en tiempo de ejecución.
Incorporar parámetros en fórmulas [página 699]
1.4.4
Establecer el origen de datos
SAP Crystal Reports puede elaborar informes con casi cualquier tipo de orígenes de datos, incluyendo los
orígenes persistentes, como bases de datos y archivos XML, y orígenes de tiempo de ejecución como colecciones
de objetos.
Con el modelo de objeto ReportDocument se puede acceder a la información de conexión y cambiarla en estos
orígenes de datos del archivo de informe en tiempo de ejecución mediante programación.
Existen diferentes formas de establecer un origen de datos:
●
Usar el método ReportDocument.DatasourceConnections[0].SetConnection.
Este método permite iniciar sesión en un informe o en un subinforme.
●
Actualice la propiedad ReportDocument.Table.LogOnInfo y active el método
ReportDocument.Table.ApplyLogOnInfo.
Este método permite iniciar sesión en un informe o en un subinforme. Este método también permite
especificar la ubicación completa de una tabla.
●
Use el método CrystalReportViewer.LogOnInfo.
Este método permite iniciar sesión en un informe, pero no permite establecer la ubicación de la base de
datos.
Clases usadas para configurar el origen de datos
●
CrystalDecisions.Shared.ConnectionInfo
Proporciona las propiedades de recuperación y configuración de las opciones de conexión a los servidores de
bases de datos u orígenes de datos ODBC.
●
CrystalDecisions.CrystalReports.Engine.Table
Representa una tabla de base de datos a la que tiene acceso el informe. Esta clase proporciona las
propiedades y los métodos para obtener información acerca de la tabla y establecer la información de
conexión de la tabla.
●
CrystalDecisions.CrystalReports.Engine.ReportDocument
Representa un informe y contiene las propiedades y los métodos para especificar un origen de datos en
tiempo de ejecución.
Información relacionada
Orígenes de datos admitidos [página 661]
Agregar datos y obtener acceso a ellos [página 661]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
149
1.4.4.1
Conectar a una base de datos
Los orígenes de datos más frecuentes en los informes de Crystal es una base de datos. Se accede a una base de
datos desde uno de los siguientes orígenes:
●
Directamente desde el archivo de informe, usando la información de conectividad de base de datos
almacenada en el archivo.
La información de conectividad de base de datos se configura a través de SAP Crystal Report Designer
incrustado cuando se crea o se modifica el informe. El motor de informes pasa automáticamente la
información a la base de datos siempre que se muestra el informe.
Las credenciales de inicio de sesión se pueden guardar con el informe o se pueden pasar en tiempo de
ejecución.
●
Desde el código API de SAP Crystal Reports .NET.
La información de conectividad de base de datos se puede volver a configurar a través del código que
interactúa con el informe mediante programación en tiempo de ejecución.
El escenario más frecuente para la creación de una conexión a una base de datos es establecer los parámetros de
conexión a la base de datos en el diseñador de SAP Crystal Reports y, a continuación, indicar la información de
inicio de sesión mediante programación en tiempo de ejecución.
Información relacionada
Agregar datos y obtener acceso a ellos [página 661]
1.4.4.1.1
Maximizar la seguridad al conectarse a una base de
datos de SQL Server
Independientemente del origen de los informes, la cuestión de seguridad es la misma: ¿cómo se protege la base
de datos contra ataques malintencionados?
Usar la Autenticación de Windows con Seguridad integrada
Para lograr la máxima seguridad, Microsoft recomienda el uso de la Seguridad integrada a través de la
Autenticación de Windows. Esta configuración significa que la aplicación no necesitará una cadena de ID de
usuario y contraseña.
150
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Usar la Autenticación de SQL Server con una cuenta de base de datos de
acceso limitado
Si debe usar la Autenticación de SQL Server con su base de datos, deberá realizar unos pasos adicionales para
conseguir una seguridad eficaz.
Nunca use el id ni la contraseña del administrador del sistema en el código, ya que esto conlleva un riesgo de
seguridad importante. En lugar de esto realice lo siguiente:
●
Cree una cuenta de base de datos de acceso limitado.
●
Configure dicha cuenta, de modo que sólo se pueda acceder a las tablas necesarias de la base de datos.
●
Para cada tabla a la que se pueda acceder, conceda sólo permiso para ejecutar la instrucción SELECT.
Microsoft recomienda además que codifique su ID de usuario y contraseña. Para obtener información sobre cómo
codificar su ID de usuario y contraseña, vea la información de seguridad en MSDN.
1.4.4.1.2
Para iniciar sesión en una base de datos segura de
SQL Server con un subinforme
Requisitos previos
Para ejecutar este ejemplo debe tener un informe que incluya un subinforme que requiera autenticación de SQL
segura. Es necesario indicar el nombre de usuario y contraseña para iniciar sesión en la base de datos de
SQL Server.
Contexto
En este ejemplo se cambiará la base de datos de un subinforme mediante programación.
Procedimiento
1.
Recupere la instancia de DataSourceConnections de la propiedad DataSourceConnections de las
instancias del informe y el subinforme.
2.
3.
Recupere IConnectionInfo en el índice 0 de la instancia de DataSourceConnections.
Llame al método SetConnection con su nombre de servidor, de base de datos y de usuario, así como su
contraseña.
4.
Llame al método SetLogon con su nombre de usuario y contraseña.
Ejemplo
Private Function SubreportLogon_RD(ByVal TestReport As ReportDocument) As
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
151
ReportDocument
Dim dataSourceConnections As DataSourceConnections =
TestReport.DataSourceConnections
Dim connectInfo As IConnectionInfo = dataSourceConnections(0)
connectInfo.SetConnection("ServerName", "DatabaseName", "UserName",
"Password")
Dim TestSubreport As ReportDocument = TestReport.Subreports("Subreport1")
Dim subreportDataSourceConnections As DataSourceConnections =
TestSubreport.DataSourceConnections
Dim connectInfo As IConnectionInfo = subreportDataSourceConnections(0)
connectInfo.SetLogon("UserName", "Password")
End Function
private ReportDocument SubreportLogon_RD(ReportDocument TestReport)
{
DataSourceConnections dataSourceConnections =
TestReport.DataSourceConnections;
IConnectionInfo connectInfo = dataSourceConnections[0];
connectInfo.SetConnection("ServerName", "DatabaseName", "UserName",
"Password");
ReportDocument TestSubreport = TestReport.Subreports["Subreport1"];
DataSourceConnections subreportDataSourceConnections =
TestSubreport.DataSourceConnections;
IConnectionInfo connectInfo = subreportDataSourceConnections[0];
connectInfo.SetLogon("UserName", "Password");
}
1.4.4.1.3
Para iniciar sesión en una base de datos segura de
SQL Server con el modelo de objeto ReportDocument
Este ejemplo muestra cómo iniciar sesión en una base de datos usando autenticación de SQL segura.
Requisitos previos
Antes de empezar, debe tener un informe que requiera autenticación de SQL segura.
Contexto
Para actualizar la información de conexión para un informe con el modelo de objeto ReportDocument, debe
actualizar la propiedad ConnectionInfo de cada objeto Table en la colección
ReportDocument.Database.Tables. Una vez actualizadas todas las propiedades, debe llamar al método
Table.ApplyLogOnInfo para aplicar los cambios.
152
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Procedimiento
1.
Cree un nuevo objeto ConnectionInfo.
2.
Establezca las propiedades DatabaseName, UserID y Password del objeto ConnectionInfo según los
valores requeridos para el inicio de sesión.
Nota
Si decide establecer únicamente las propiedades DatabaseName, UserID y Password, se conectará con
el servidor predeterminado de la base de datos especificada en el informe. Sin embargo, si elige asignar
una propiedad ServerName alternativa, podrá redirigir el informe a un servidor diferente en tiempo de
ejecución.
3.
Recupere la instancia de Tables de la propiedad Database de la clase ReportDocument.
Nota
Tables es una clase indizada que contiene instancias de la clase Table.
4.
Para cada objeto Table de la colección:
a) Recupere la instancia TableLogOnInfo de la propiedad LogOnInfo de la clase Table.
b) Actualice la propiedad ConnectionInfo del objeto TableLogOnInfo.
c) Llame al método ApplyLogOnInfo para aplicar el cambio.
Ejemplo
Private Sub setDatabaseLogon(ByVal rd As ReportDocument, ByVal databaseName As
String, ByVal userName As String, ByVal password As String)
Dim myConnectionInfo As New ConnectionInfo()
myConnectionInfo.DatabaseName = databaseName
myConnectionInfo.UserID = userName
myConnectionInfo.Password = password
Dim myTables As Tables = rd.Database.Tables
For Each myTable As Table In myTables
Dim newLogonInfo As TableLogOnInfo = myTable.LogOnInfo
newLogonInfo.ConnectionInfo = myConnectionInfo
myTable.ApplyLogOnInfo(newLogonInfo)
Next
End Sub
private void setDatabaseLogon(ReportDocument rd, String databaseName, String
userName, String password)
{
ConnectionInfo connectionInfo = new ConnectionInfo();
connectionInfo.DatabaseName = databaseName;
connectionInfo.UserID = userName;
connectionInfo.Password = password;
Tables tables = rd.Database.Tables;
foreach (Table table in tables)
{
TableLogOnInfo newLogonInfo = table.LogOnInfo;
newLogonInfo.ConnectionInfo = connectionInfo;
table.ApplyLogOnInfo(newLogonInfo);
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
153
}
}
Pasos siguientes
Después de establecer la información de inicio de sesión en la base de datos para la instancia de
ReportDocument, actualice la propiedad ReportSource del objeto CrystalReportViewer.
1.4.4.1.4
Para iniciar sesión en una base de datos segura de
SQL Server con el control CrystalReportViewer
Contexto
Cuando utilice el modelo de objetos CrystalReportViewer para conectar con una base de datos segura de SQL
Server, debe usar clases del espacio de nombres CrystalDecisions.Shared.
Las propiedades de la clase ConnectionInfo se usan para conectar con el servidor de base de datos u otros
orígenes de datos de ODBC.
Procedimiento
1.
Cree un nuevo objeto ConnectionInfo.
2.
Establezca las propiedades DatabaseName, UserID y Password del objeto ConnectionInfo según los
valores requeridos para el inicio de sesión.
Nota
Si decide establecer únicamente las propiedades DatabaseName, UserID y Password, se conectará con
el servidor predeterminado de la base de datos especificada en el informe. Sin embargo, si elige asignar
una propiedad ServerName alternativa, podrá redirigir el informe a un servidor diferente en tiempo de
ejecución.
3.
Recupere la instancia de TableLogOnInfos de la propiedad LogOnInfo de la clase
CrystalReportViewer.
Nota
TableLogOnInfos es una clase indizada que contiene instancias de la clase TableLogOnInfo.
4.
Para cada objeto TableLogOnInfo de la colección, establezca la propiedad ConnectionInfo del objeto
TableLogOnInfo en la del objeto ConnectionInfo.
154
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Ejemplo
Private
String,
Dim
Dim
For
Sub setDatabaseLogon(ByVal databaseName As String, ByVal userName As
ByVal password As String)
myCconnectionInfo As New ConnectionInfo()
logOnInfos As TableLogOnInfos = crystalReportViewer.LogOnInfo
Each logOnInfo As TableLogOnInfo In logOnInfos
logOnInfo.ConnectionInfo = myCconnectionInfo
Next
myCconnectionInfo.DatabaseName = databaseName
myCconnectionInfo.UserID = userName
myCconnectionInfo.Password = password
End Sub
private void setDatabaseLogon(String databaseName, String userName, String
password){
ConnectionInfo connectionInfo = new ConnectionInfo();
TableLogOnInfos logOnInfos = crystalReportViewer.LogOnInfo;
foreach(TableLogOnInfo logOnInfo in logOnInfos) {
logOnInfo.ConnectionInfo = connectionInfo;
}
connectionInfo.DatabaseName = databaseName;
connectionInfo.UserID = userName;
connectionInfo.Password = password;
}
1.4.4.2
Conectar a IDataReader
Muchos proyectos .NET usan DataReader, en lugar de DataSet, para obtener datos. Por ejemplo, una forma
habitual de enlazar un control (por ejemplo el control GridView) a datos es crear un método que obtenga datos
mediante un DataReader y, a continuación, devolver dichos datos procedentes del método a través de una
interfaz IDataReader.
El diseñador incrustado de SAP Crystal Report puede acceder a IDataReader, siempre que se cumplan
determinadas condiciones:
●
Los datos los debe devolver un método, a través de la interfaz IDataReader.
●
El proveedor de datos que se use dentro del método deberá ser el proveedor de datos OleDb .NET.
Nota
Las clases de este proveedor de datos se encuentran en el espacio de nombres System.Data.OleDb.
●
El método deberá ser Shared [Visual Basic] o estático [C#].
●
La clase que contenga este método deberá formar parte de un proyecto de biblioteca de clases y tendrá que
compilarse en un ensamblado.
Para crear un informe de Crystal que use una instancia de IDataReader como orígenes de datos, debe crear una
biblioteca de clases con un método estático que devuelva un objeto IDataReader. Después de formar esta
biblioteca de clases, la recopilación resultante actuará como orígenes de datos del informe.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
155
Nota
No podrá establecer los orígenes de datos del informe en IDataReader hasta que haya creado una biblioteca
de clases compilada.
Información relacionada
Tutorial: Conectar a IDataReader [página 558]
En este tutorial de conectividad de datos, aprenderá a conectar con una instancia de IDataReader.
1.4.4.3
Conectar a conjuntos de datos de ADO.NET
Un objeto de conjunto de datos ADO.NET es un grupo de clases de conjuntos de datos creado en memoria. Puede
crear un conjunto de datos de ADO.NET a partir de varios orígenes de datos (entre ellos se incluyen bases de
datos de Access, Oracle y SQL Server) con Visual Studio ADO.NET Dataset Designer. ADO.NET Dataset Designer
proporciona una vista gráfica de la base de datos con las tablas, los campos y los tipos correspondientes. Puede
arrastrar tablas desde el Explorador de servidores a un archivo de esquema en la ficha Esquema del diseñador.
Para crear un informe de Crystal que use un conjunto de datos ADO.Net como origen de datos, debe crear una
biblioteca de clases con un método estático o una propiedad que devuelva un objeto DataSet. Después de
formar esta biblioteca de clases, la recopilación resultante actuará como orígenes de datos del informe.
Nota
No podrá establecer los orígenes de datos del informe en DataSet hasta que haya creado una biblioteca de
clases compilada.
Cuándo utilizar un DataSet
Los DataSets son útiles cuando:
●
Es necesario modificar datos incluidos en el DataSet tras ejecutar la consulta.
●
Es necesario combinar datos de diversos orígenes.
Nota
Los DataSets son una representación XML de datos, normalmente procedentes de una base de datos. Un
DataSet no es equivalente a una sola tabla de una base de datos, sino a un grupo de tablas. Esto plantea un
problema de escalabilidad potencial para los informes. Si un informe recupera varias tablas en un DataSet
y se requiere una combinación entre dichas tablas, el informe debe realizar el procesamiento de
combinación al interactuar con cada una de las tablas por separado. Éste no es un proceso eficaz. Es mejor
ubicar las instrucciones de combinación en la consulta que se utilice para llenar el DataSet. Como
156
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
resultado se crea una 'pseudo-tabla' simple de datos precombinados en el DataSet, lo que exime al informe
de centrarse en la presentación de los datos.
Información relacionada
Evitar DataSets para consultas simples [página 67]
Almacenar DataSets en memoria caché en caso de utilizarlos [página 68]
Tutorial: Conectar a conjuntos de datos de ADO.NET [página 544]
1.4.4.4
Conectar a colecciones de objetos
SAP Crystal Reports 2008 es capaz de generar informes de datos de objetos. Los datos de objetos pueden ser
simples, como una cadena o datos enteros. También pueden ser complejos, como una clase o una colección. Las
colecciones deben ser una matriz sencilla o un objeto IEnumerable. SAP Crystal Reports puede acceder a estas
colecciones como a un origen de datos normal, ofreciendo así un origen de datos versátil para los informes de
Crystal.
Con una colección de objetos, puede escribir una clase personalizada que rellene un objeto con datos mediante
programación o dinámicamente. También puede escribir sus propios objetos de acceso a datos, ampliando el
número de orígenes de datos indicados con la instalación predeterminada de SAP Crystal Reports, versión para
programadores de Microsoft Visual Studio.
Para usar una colección de objetos como origen de datos, es necesario crear una clase que muestre al menos una
propiedad pública. Si la propiedad devuelve datos sencillos, como una cadena o valores enteros, SAP Crystal
Reports tratará estos datos como un campo de una base de datos. Si la propiedad devuelve datos complejos,
como un objeto de lista de matrices, cada objeto de la colección de objetos ofrecerá una fila de detalle en el
informe.
Acceder a datos en objetos
Las versiones anteriores de SAP Crystal Reports permiten acceder a propiedades que devuelven sólo tipos de
datos sencillos. Por ejemplo, si un objeto contiene una propiedad que devuelve una cadena, esa cadena se
muestra como un campo normal en tiempo de diseño. En cambio, si el objeto contiene una propiedad que
devuelve un objeto, los datos que contiene el objeto devuelto no se mostrarán aunque contenga datos sencillos.
SAP Crystal Reports 2008 y las versiones posteriores permiten acceder a los datos que se encuentran en tipos de
datos complejos mediante la expansión de tipos complejos. En tiempo de diseño verá el objeto devuelto como un
origen de datos jerárquico. Los datos complejos se pueden expandir para mostrar los tipos de datos sencillos que
contienen, los cuales se pueden agregar a continuación al informe.
Para habilitar la expansión de tipos complejos, agregue el atributo CrystalComplexTypeExpansionLevels a la
propiedad que devuelve el objeto que desea expandir. Es necesario establecer el atributo
CrystalComplexTypeExpansionLevels en un valor mayor que 1 para profundizar en los datos de la clase. Si
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
157
no se establece el atributo CrystalComplexTypeExpansionLevels, SAP Crystal Reports no podrá acceder a
los datos del campo que hay en la clase.
Ejemplo
Mostrar datos sencillos
Este ejemplo tiene dos objetos: Employee y Person. Al agregar el objeto Employee al informe como origen de
datos, la propiedad Employee.EmployeeID se muestra como un campo válido; sin embargo, la propiedad
Employee.Person no será visible porque devuelve un tipo de datos complejo.
Class Employee
Private _employeeID As Integer
Private _person As New Person()
Public Property EmployeeID() As Integer
Get
Return _employeeID
End Get
Set(ByVal value As Integer)
_employeeID = value
End Set
End Property
Public ReadOnly Property Person() As Person
Get
Return _person
End Get
End Property
End Class
Class Person
Private _name As String
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
End Class
class Employee
{
int _employeeID;
Person _person = new Person();
public int EmployeeID
{
get { return _employeeID; }
set { _employeeID = value; }
}
}
public Person Person
{
get { return _person; }
}
class Person
{
158
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
private String _name;
}
public String Name
{
get { return _name; }
set { _name = value; }
}
Ejemplo
Permitir la expansión de tipos complejos
En el ejemplo anterior, la propiedad Employee.Person no es visible porque devuelve un tipo de datos
complejo.
En este ejemplo, el atributo CrystalComplexTypeExpansionLevels se ha agregado a la propiedad
Employee.Person, lo que permitirá al diseñador del informe ver un campo nuevo en el Explorador de campos:
Persona-Nombre.
Class Employee
Private _employeeID As Integer
Private _person As New Person()
Public Property EmployeeID() As Integer
Get
Return _employeeID
End Get
Set(ByVal value As Integer)
_employeeID = value
End Set
End Property
_
<CrystalDecisions.CrystalReports.Engine.CrystalComplexTypeExpansionLevels(1)>
Public ReadOnly Property Person() As Person
Get
Return _person
End Get
End Property
End Class
Class Person
Private _name As String
Public Property Name() As String
Get
Return _name
End Get
Set(ByVal value As String)
_name = value
End Set
End Property
End Class
class Employee
{
int _employeeID;
Person _person = new Person();
public int EmployeeID
{
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
159
}
}
get { return _employeeID; }
set { _employeeID = value; }
[CrystalDecisions.CrystalReports.Engine.CrystalComplexTypeExpansionLevels(1)]
public Person Person
{
get { return _person; }
}
class Person
{
private String _name;
}
public String Name
{
get { return _name; }
set { _name = value; }
}
Información relacionada
Tutorial: Conectar a colecciones de objetos [página 569]
En este tutorial sobre conectividad de datos, aprenderá a usar una colección de objetos como origen de datos
de un informe de Crystal Reports.
1.4.4.5 Para habilitar el almacenamiento en caché de
informes en un sitio Web de SAP Crystal Reports
Requisitos previos
Estos pasos utilizan la característica Tareas inteligentes. La característica Tareas inteligentes está disponible en
Visual Studio 2005 y en versiones posteriores.
Contexto
Los proyectos para Windows que usan Crystal Reports, versión para programadores de Microsoft Visual Studio
siguen usando el mismo entorno de almacenamiento en caché que el usado en Visual Studio .NET 2003. Es decir,
cuando se agrega un informe a un proyecto, se crean dos clases contenedoras de informes: una clase de informes
normal y una clase de informes en caché.
Si no se genera ninguna clase contenedora para un informe, el almacenamiento en caché se controla mediante la
propiedad EnableCaching del control CrystalReportSource.
160
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Procedimiento
1.
Crear un sitio Web Crystal Reports, versión para programadores de Microsoft Visual Studio.
2.
En la página Default.aspx, seleccione la vista Origen.
3.
Busque la etiqueta XML para el control CrystalReportSource.
4.
Cambie el valor de la propiedad EnableCaching de False a True.
Nota
Para obtener información detallada sobre el almacenamiento en caché de informes, la versión almacenada
en caché de la clase contenedora de informe y una explicación de cuándo utilizar el almacenamiento en
caché, vea Cache y persistencia del modelo de objetos ReportDocument [página 58].
Ejemplo
<CR:CrystalReportSource ID="myCrystalReportSource" runat="server"
EnableCaching="True">
<Report FileName="CrystalReport1.rpt">
</Report>
</CR:CrystalReportSource>
1.4.4.6
Usar LINQ
LINQ (Language Integrated Query) es un componente de Microsoft Framework que permite realizar consultas en
cualquier origen de datos.
SAP Crystal Reports puede elaborar un informe basado en una colección de objetos personalizados. De este
modo puede controlar mejor cómo se muestra la información en un informe. Sin embargo, la recopilación de una
colección de objetos puede resultar complicada si la colección contiene datos agregados de varios orígenes de
datos.
LINQ simplifica el proceso de elaboración de informes basados en una colección de objetos y permite ejecutar
consultas similares a las consultas SQL en objetos personalizados. Por ejemplo, supongamos que tiene una base
de datos SQL, un archivo XML y un archivo Microsoft Access que contienen datos de ventas. LINQ le permite
hacer consultas que parten de los tres orígenes de datos y mostrar los datos en un único informe.
LINQ permite hacer lo siguiente:
●
Recopilar una colección de objetos pertenecientes a varios orígenes de datos.
●
Unir dos colecciones de objetos.
●
Agrupar elementos en una colección.
Es necesario tener instalado el siguiente software para poder usar LINQ con SAP Crystal Reports:
●
Visual Studio 2008 o posterior.
●
Microsoft .NET Framework versión 3.5
●
SAP Crystal Reports Basic para Visual Studio 2008 o posterior.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
161
Información relacionada
Establecer el origen de datos [página 149]
1.4.5
Visualizar un informe
El control CrystalReportViewer se usa para ver informes de Crystal. Existen dos controles CrystalReportViewer en
el SDK de SAP Crystal Reports .NET. Para un sitio web, usará la clase
CrystalDecisions.Web.CrystalReportViewer. Para una aplicación de Windows, usará la clase
CrystalDecisions.Windows.Forms.CrystalReportViewer.
Para ver un informe, debe agregar en primer lugar un control CrystalReportViewer a la aplicación y, a
continuación, asignar la propiedad ReportSource de ese control a un informe. Se denomina enlace de informes
al proceso de asignación de un informe a un control CrystalReportViewer.
Existen diferentes formas de enlazar un control CrystalReportViewer a un informe. En esta sección se detalla cada
escenario de enlace de informes, así como consideraciones generales para la visualización de informes.
Clases usadas para visualizar informes
●
CrystalDecisions.Windows.Forms.CrystalReportViewer
Proporciona propiedades, métodos y eventos que modifican o recuperan información sobre como aparece y
funciona el control CrystalReportViewer.
●
CrystalDecisions.Web.CrystalReportViewer
Proporciona propiedades, métodos y eventos que modifican o recuperan información sobre como aparece y
funciona el control CrystalReportViewer.
●
CrystalDecisions.CrystalReports.Engine.ReportDocument
Representa un informe y contiene las propiedades y los métodos para definir, dar formato, cargar, exportar e
imprimir el informe.
Información relacionada
¿Cómo utilizo los controles de visores de informes? [página 42]
Control CrystalReportViewer [página 42]
Escenarios de enlace de informes [página 168]
162
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.5.1
Comparar informes incrustados y no incrustados
¿Cuál es la diferencia entre informes incrustados y no incrustados?
Un informe incrustado es un informe que se ha importado a un proyecto de Visual Studio, o que se ha creado en
él. Cuando se incrusta un informe en el proyecto, automáticamente se genera una clase contenedora para el
informe. De esta forma podrá tener acceso al informe por nombre, en lugar de mediante una instancia de
ReportDocument independiente.
Un informe no incrustado es un informe externo al proyecto de Visual Studio. Existen muchas formas de tener
acceso al informe y cargarlo en un modelo de objetos, para habilitar la interacción con el informe mediante
programación, pero el informe siempre continuará siendo externo al proyecto de Visual Studio.
Cómo funciona un informe incrustado
Cuando se importa o se crea el informe en el proyecto, se crea una clase contenedora, con el mismo nombre que
el informe. Esta clase contiene, o representa, el informe en el proyecto. Cuando ocurre esto, todo el código del
proyecto interactúa con la clase del informe que se ha creado para representarlo, en vez de hacerlo con el propio
archivo de informe original.
Al compilar el proyecto, tanto el informe como su clase contenedora se incrustan en el ensamblado, lo mismo que
ocurriría con cualquier otro recurso del proyecto.
Nota
.Net Framework tiene restricciones de tamaño para los archivos DLL. Esto significa que puede que el proyecto
no se compile si contiene grandes informes incrustados. En los proyectos que utilizan informes grandes,
deshabilite los datos guardados en el informe o modifique el proyecto para que utilice informes no incrustados.
El límite de tamaño varía según la versión de .Net Framework. Consulte la documentación de .Net Framework
para obtener más información.
La clase contenedora de un informe se extiende desde ReportDocument de la clase base común. Hereda todas las
propiedades y métodos de ReportDocument.
ReportDocument es la clase raíz del modelo de objetos ReportDocument.
Cómo funciona un informe no incrustado
A un informe no incrustado siempre se obtiene acceso externamente y el SDK puede tener acceso a él de diversas
formas:
●
El informe puede estar en la unidad de disco duro en una ruta de directorio de archivos.
●
El informe puede estar expuesto como servicio Web de informes.
●
El informe puede formar parte de un grupo de informes expuestos a través de Crystal Services.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
163
Nunca se importan informes no incrustados en el proyecto y, por lo tanto, nunca se crea ninguna clase
contenedora de informe, a diferencia de los informes incrustados. En su lugar, se carga el informe no incrustado
en uno de los modelos de objetos en tiempo de ejecución, de la forma correspondiente:
●
El modelo de objetos ReportDocument utiliza el método ReportDocument.Load() para cargar el informe en el
modelo de objetos ReportDocument.
●
El modelo de objetos CrystalReportViewer utiliza la propiedad CrystalReportViewer.ReportSource para
enlazar el informe directamente al control.
Cuándo elegir informes incrustados o no incrustados
Si desea simplificar la implementación del proyecto, utilice informes incrustados. Tendrá menos archivos con los
que trabajar y no se tendrá que preocupar de si los informes están mal colocados en la ruta de directorio de
archivos equivocada. Además, esta solución es más segura, en tanto que los informes no se exponen a
modificaciones.
Los informes incrustados son más sencillos y seguros, pero requieren más trabajo. No se pueden modificar sin
volver a compilar todo el proyecto. Si los informes se deben modificar regularmente, utilice informes no
incrustados para facilitar su acceso y modificación, sin preocuparse por la necesidad de volver a compilar los
ensamblados cada vez. Además, existen límites en el tamaño que puede tener un informe incrustado. No se
puede compilar un informe muy grande como un recurso incrustado.
Los casos de enlace de informes le mostrarán muchas formas de enlazar informes incrustados y no incrustados.
También verá la forma en que puede utilizar ReportDocument como la clase genérica para cualquier tipo de
informe. De esta forma, puede mantener los cambios de código al mínimo, en caso de que decida cambiar los
enfoques.
Incrustar informes en un proyecto Web
La admisión de informes incrustados se habilita mediante el uso de un proveedor de versiones que compila
informes en un archivo DLL. Para incrustar el informe de una DLL durante el tiempo de compilación, deberá
establecer embedRptInResource como verdadero en el archivo web.config. Para tener acceso a la clase de
contenedor mediante Intellisense, deberá colocar el informe en la carpeta App_Code/Global de su solución.
Nota
Si el informe se encuentra en el directorio App_Code/Global y embedRptInResource está establecido en
falso, el archivo de informe no podrá copiarse en la ubicación de destino al publicar el sitio Web. Para evitar
este problema, copie el sitio Web en el destino.
embedRptInResour
ce
Ubicación del
informe
Intellisense
disponible
Publicar para
implementar
Copiar para
implementar
Verdadero
App_Code/Global
X
X
X
164
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
embedRptInResour
ce
Ubicación del
informe
Verdadero
Fuera de App_Code/
Intellisense
disponible
Publicar para
implementar
Copiar para
implementar
X
X
X
X
Global, pero en el
proyecto
Falso
App_Code/Global
Falso
Fuera de App_Code/
X
X
Global, pero en el
proyecto
Información relacionada
Configuración del archivo Web.Config [página 19]
1.4.5.2
Establecer el origen del informe
El control CrystalReportViewer muestra sólo un informe a la vez. Para indicar al control el informe que se va a
mostrar, enlace la propiedad ReportSource del control a un informe en concreto. En tiempo de ejecución, el
control carga el informe enlazado a la propiedad ReportSource y lo muestra.
Un control CrystalReportViewer se puede enlazar a un archivo ubicado en el disco, a un objeto ReportDocument o
a un objeto ReportClientDocument. El enlace con un objeto ofrece funcionalidad adicional a través de los modelos
de objetos ReportDocument y ReportClientDocument. Este procedimiento es la mejor forma de establecer la
propiedad ReportSource.
En su forma más sencilla, la asignación tiene el siguiente aspecto:
crystalReportViewer1.ReportSource = "C:\WorldSalesReport.rpt"
crystalReportViewer1.ReportSource = "C:\\WorldSalesReport.rpt";
En este caso, el informe está enlazado al control directamente desde su ruta en el directorio de archivos.
El control CrystalReportSource
El control CrystalReportSource forma parte del nuevo modelo de desarrollo de aplicaciones basado en etiquetas
que se proporciona con la versión 2.0 de ASP.NET.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
165
Nota
El control CrystalReportSource sólo está disponible para sitios web.
En el marco del control DataSource, los controles .NET visuales se conectan a controles DataSource no visuales
(controles que no muestran información). Este nuevo marco de DataSource encapsula la información de
conectividad de datos escrita como líneas de código en los controles .NET en el formulario Web Forms.
1.4.5.2.1
Para enlazar el control CrystalReportViewer a un
archivo en disco
Contexto
La forma más sencilla de enlazar un control CrystalReportViewer a un informe de Crystal es establecer la
propiedad ReportSource en una ubicación del disco. Este informe no incrustado se muestra cuando se ejecuta
la aplicación.
De esta forma se enlaza el informe directamente al control. Toda interacción mediante programación con el
informe se debe realizar en el modelo de objetos CrystalReportViewer limitado.
Procedimiento
1.
Agregue un control CrystalReportViewer a la aplicación de Windows o al sitio web.
2.
Abra el formulario Web Forms o Windows Forms.
3.
En el menú Ver, haga clic en Código.
4.
Establezca la propiedad ReportSource en la ubicación del informe en el sistema local de archivos.
○
Si trabaja con aplicaciones de Windows Forms o un sitio Web:
myCrystalReportViewer.ReportSource = "C:\MyReport.rpt"
crystalReportViewer.ReportSource = "C:\\MyReport.rpt";
○
Si trabaja con una aplicación WPF:
myCrystalReportViewer.ViewerCore.ReportSource = "C:\MyReport.rpt"
crystalReportViewer.ViewerCore.ReportSource = "C:\\MyReport.rpt";
166
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.5.2.2
Para enlazar el control CrystalReportViewer a un
objeto ReportDocument
Contexto
Este escenario de vinculación de informes permite usar el modelo de objetos ReportDocument, más eficaz, con
informes no incrustados; es decir, informes externos al proyecto.
En lugar de enlazar las rutas del directorio directamente al visor, páselas al método ReportDocument.Load(). A
continuación, enlace el control CrystalReportViewer al objeto ReportDocument.
Procedimiento
1.
Agregue un control CrystalReportViewer a la aplicación de Windows o al sitio web.
2.
Abra el formulario Web Forms o Windows Forms.
3.
En el menú Ver, haga clic en Código.
4.
Cree una instancia de un nuevo objeto ReportDocument y cargue el informe desde el disco mediante el
método ReportDocument.Load.
Dim rd As ReportDocument = New ReportDocument()
rd.Load(reportPath)
ReportDocument rd = new ReportDocument();
rd.Load(reportPath);
5.
Establezca la propiedad ReportSource en el objeto ReportDocument.
○
Si trabaja con aplicaciones de Windows Forms o un sitio Web:
myCrystalReportViewer.ReportSource = rd
crystalReportViewer.ReportSource = rd;
○
Si trabaja con una aplicación WPF:
myCrystalReportViewer.ViewerCore.ReportSource = rd
crystalReportViewer.ViewerCore.ReportSource = rd;
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
167
1.4.5.3
Escenarios de enlace de informes
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio ofrece múltiples maneras de ligar un
control CrystalReportViewer a un informe. Para ayudarle a elegir el mejor caso de enlace de informes para la
aplicación, en esta sección se resumen las ventajas y las desventajas de los casos recomendados y se explica la
razón de la mayor popularidad de algunos.
Nota
La mayoría de sitios web o proyectos para Windows se pueden basar en los dos casos de enlace más simples:
el enlace a un informe incrustado o el no incrustado.
Después de leer esta sección, quizá prefiera ver el listado detallado de todos los casos, para explorar totalmente
todas las opciones disponibles del SDK.
Casos de enlaces recomendados de SAP Crystal Reports
Los escenarios que enlazan informes con el modelo de objetos ReportDocument se suelen preferir a los que
utilizar el modelo de objetos CrystalReportViewer. La explicación es que el modelo de objetos ReportDocument
proporciona una API más completa para la interacción mediante programación con el informe.
La mayoría de los usuarios prefieren el escenario Enlazar a una clase de informe incrustado [página 198]. Aunque
no es la mejor opción para optimizar el rendimiento, es el método más simple de usar: agregue un informe al
proyecto para crear una clase contenedora de informe, cree una instancia de la clase contenedora de informe y, a
continuación, pásela al control CrystalReportViewer. Puesto que la clase contenedora de informe hereda de la
clase base ReportDocument, tiene acceso a toda la funcionalidad del modelo de objetos ReportDocument.
Otra forma popular de ligar informes está descrita en Enlazar a una clase de informe no incrustado cargado en
ReportDocument [página 200]. También le proporciona acceso a toda la funcionalidad del modelo de objetos
ReportDocument pero con la ventaja adicional de los informes no incrustados, por lo que puede modificarlos sin
volver a compilar la aplicación.
Casos de enlaces recomendados para el servidor de aplicaciones de informes
(RAS)
Por lo que respecta a RAS, puede usar escenarios de enlace de informes adicionales, en función de la
configuración del proyecto.
●
Si usa SAP Crystal Reports 10 con RAS 10, puede trasladar los proyectos creados originalmente con SAP
Crystal Reports (mediante informes incrustados) a RAS y al modelo de objetos ReportClientDocument con
sólo dos líneas de código adicionales necesarias por informe.
●
168
Para optimizar el escenario anterior, haga copias de los informes incrustados en el servidor RAS e indique a
RAS que las use.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Escenarios de enlace de informes recomendados para SAP Crystal Reports
Server o la plataforma SAP BusinessObjects Business Intelligence
Si ha actualizado a SAP Crystal Reports Server o la plataforma SAP BusinessObjects Business Intelligence,
dispone de cuatro escenarios de enlace de informes recomendados. El caso que va a usar está determinado por
las necesidades de modificación y escalabilidad de los informes:
●
Puede mostrar un informe, sin modificaciones mediante programación, con la mayor velocidad y el mejor
rendimiento posibles.
●
Puede modificar el informe mediante programación como parte del proceso de presentación teniendo acceso
al modelo de objetos ReportClientDocument.
●
Si usa SAP Crystal Reports, versión para programadores de Microsoft Visual Studio con SAP Crystal Reports
Server o la plataforma SAP BusinessObjects Business Intelligence, puede trasladar los proyectos creados en
primera instancia con SAP Crystal Reports (mediante informes incrustados) a SAP Crystal Reports Server o
la plataforma SAP BusinessObjects Business Intelligence y conservar también el código del informe existente
publicando copias de los informes incrustados en SAP Crystal Reports Server o la plataforma SAP
BusinessObjects Business Intelligence.
●
Puede tener acceso al informe como instancia de InfoObject en el marco de plataforma, con la posibilidad
de programarlo y modificar sus parámetros.
Información relacionada
Controles de visores de informes [página 34]
1.4.5.3.1
Enlazar informes al modelo de objetos
CrystalReportViewer
El modelo de objeto CrystalReportViewer es el modelo de objeto más sencillo. A causa de sus características
limitadas, se desaconseja el uso de este modelo de objeto y se recomienda el uso de ReportDocument, que es
más completo.
Información relacionada
Modelo de objetos CrystalReportViewer [página 36]
Enlazar a una ruta de directorio de archivos en el código [página 170]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
169
1.4.5.3.1.1
código
Enlazar a una ruta de directorio de archivos en el
Modelo de objetos
Este escenario de enlace de informes usa el modelo de objeto CrystalReportViewer.
Ubicación de los informes
Los informes se encuentran en un directorio de archivos.
Descripción
Este es el caso de enlace de informes más simple: un informe del directorio de archivos se enlaza al control
CrystalReportViewer mediante su ruta de acceso.
Ventajas
●
Bajo mantenimiento: los informes se pueden agregar, quitar o modificar sin volver a compilar la aplicación.
●
Implementación simplificada: no hay necesidad de declarar ni crear instancias de las clases. Pasa por alto el
uso del modelo de objetos ReportDocument, pasando un informe directamente al control
CrystalReportViewer.
Desventajas
●
Distribución limitada: los informes suelen estar en el mismo equipo que la aplicación, debido a las
complicaciones que supone la concesión de permisos a la cuenta de usuario ASPNET para tener acceso a
otro equipo de la red.
●
Modelo de objetos limitado: este escenario de enlace proporciona sólo el modelo de objetos limitado que
forma parte de CrystalReportViewer.
Información relacionada
Enlazar a una ruta de directorio de archivos mediante la ventana Propiedades [página 171]
170
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.5.3.1.1.1
Para enlazar el control CrystalReportViewer a
un archivo en disco
Contexto
La forma más sencilla de enlazar un control CrystalReportViewer a un informe de Crystal es establecer la
propiedad ReportSource en una ubicación del disco. Este informe no incrustado se muestra cuando se ejecuta
la aplicación.
De esta forma se enlaza el informe directamente al control. Toda interacción mediante programación con el
informe se debe realizar en el modelo de objetos CrystalReportViewer limitado.
Procedimiento
1.
Agregue un control CrystalReportViewer a la aplicación de Windows o al sitio web.
2.
Abra el formulario Web Forms o Windows Forms.
3.
En el menú Ver, haga clic en Código.
4.
Establezca la propiedad ReportSource en la ubicación del informe en el sistema local de archivos.
○
Si trabaja con aplicaciones de Windows Forms o un sitio Web:
myCrystalReportViewer.ReportSource = "C:\MyReport.rpt"
crystalReportViewer.ReportSource = "C:\\MyReport.rpt";
○
Si trabaja con una aplicación WPF:
myCrystalReportViewer.ViewerCore.ReportSource = "C:\MyReport.rpt"
crystalReportViewer.ViewerCore.ReportSource = "C:\\MyReport.rpt";
1.4.5.3.1.2
Enlazar a una ruta de directorio de archivos
mediante la ventana Propiedades
Modelo de objetos
Este escenario de enlace de informes usa el modelo de objeto CrystalReportViewer.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
171
Ubicación de los informes
Los informes están almacenados en un directorio de archivos.
Descripción
Ésta es una versión alternativa del caso de enlace de informes más sencillo, Enlazar a una ruta de directorio de
archivos en el código [página 170]. Un informe del directorio de archivos se enlaza al control
CrystalReportViewer mediante su ruta de acceso, pero la asignación se establece en la ventana Propiedades,
se puede asignar directamente a la propiedad ReportSource o a la propiedad DataBindings>ReportSource.
En el caso de un proyecto Web, la cadena de ruta de informe se inserta directamente en el código HTML de la
página ASPX, en vez de hacerlo en el código de la clase de código subyacente.
Ventajas
●
Vista previa en tiempo de diseño: se puede obtener una vista previa del informe en tiempo de diseño en el
formulario Web Forms o Windows Forms.
Nota
La vista previa en tiempo de diseño es una función que había estado disponible en sitios Web, pero es
nueva en los proyectos Windows.
●
Bajo mantenimiento: los informes se pueden agregar, quitar o modificar sin volver a compilar la aplicación.
●
Implementación simplificada: no hay necesidad de declarar ni crear instancias de las clases. Pasa por alto el
uso del modelo de objetos ReportDocument, pasando un informe directamente al control
CrystalReportViewer.
Desventajas
●
En el caso de las aplicaciones Web, como el enlace tiene lugar en la página HTML, hay que llamar al método
DataBind() para el control CrystalReportViewer en la clase de código subyacente.
Nota
Esta limitación se ha eliminado de SAP Crystal Reports para Visual Studio 2005.
●
Distribución limitada: los informes suelen estar en el mismo equipo que la aplicación, debido a las
complicaciones que supone la concesión de permisos a la cuenta de usuario ASPNET para tener acceso a
otro equipo de la red.
●
Modelo de objetos limitado: este escenario de enlace proporciona sólo el modelo de objetos limitado que
forma parte de CrystalReportViewer.
172
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Información relacionada
Enlazar a un control CrystalReportSource (sitios Web en Visual Studio) [página 173]
1.4.5.3.1.2.1
Para enlazar a una ruta de directorio de
archivos mediante la ventana Propiedades
Procedimiento
1.
Cree un proyecto Web o Windows.
2.
En el Cuadro de herramientas, arrastre un control CrystalReportViewer en Web Forms o Windows Forms.
3.
Haga clic en el control CrystalReportViewer para seleccionarlo.
4.
En la ventana Propiedades, asigne una ruta de acceso del directorio de archivos a la propiedad
ReportSource.
Nota
La ruta de directorio de archivos lleva a los informes de muestra de Visual Studio 2005.
Gracias a la función de vista previa en tiempo de diseño, el informe se muestra en el modo de vista previa.
C:\Archivos de programa\Microsoft Visual Studio 8.0\Crystal Reports\Samples\Es
\Reports\Feature Examples\Hierarchical Grouping.rpt
5.
Para ver el informe, cree y ejecute el proyecto.
1.4.5.3.1.3
Enlazar a un control CrystalReportSource (sitios
Web en Visual Studio)
Modelo de objetos
Este escenario de enlace de informes usa el modelo de objeto CrystalReportViewer.
Ubicación de los informes
Los informes están almacenados en un directorio de archivos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
173
Descripción
Ésta es una versión alternativa del caso de enlace de informes más sencillo, Enlazar a una ruta de directorio de
archivos en el código [página 170]. En este escenario, el informe se enlaza con el nuevo modelo de desarrollo de
aplicaciones de código reducido y basado en etiquetas de ASP.NET versión 2.0.
Nota
Este caso de enlace de informes sólo está disponible para sitios Web.
En este caso se utilizan tareas inteligentes para crear un control CrystalReportSource. A continuación, se
selecciona un informe para el control CrystalReportSource.
En vez de escribir código manualmente para interactuar con el informe y habilitar su acceso al modelo de objetos
CrystalReportViewer, se realizan selecciones en el panel Tarea inteligente (en la vista Diseño) o se escribe
directamente código XML de declaración (en la vista Origen).
Con el código XML de declaración puede asociar las etiquetas <Parameters> y <DataSources>, que están
anidadas en la etiqueta <Report>, a un conjunto de controles no visuales que están disponibles para los marcos
Parameter y DataSource.
Nota
Los marcos de trabajo Parameter y DataSource son nuevas características de ASP.NET 2.0. Incluyen controles
como: ControlParameter o QueryStringParameter y SqlDataSource o JetDataSource.
El modelo de desarrollo de aplicaciones basado en etiquetas proporciona un método rápido y sencillo de realizar
una interacción limitada con el informe, sin necesidad de escribir código.
Ventajas
●
Vista previa en tiempo de diseño: se puede obtener una vista previa del informe en tiempo de diseño en el
formulario Web Forms o Windows Forms.
●
Forma más sencilla de crear interacción de informe: se puede utilizar el enfoque simplificado de código
reducido del modelo de desarrollo de aplicaciones basado en etiquetas, para interactuar con el informe.
●
Las mismas ventajas se enumeran en Enlazar a una ruta de directorio de archivos en el código [página 170].
Desventajas
●
Distribución limitada: los informes suelen estar en el mismo equipo que la aplicación, debido a las
complicaciones que supone la concesión de permisos a la cuenta de usuario ASPNET para tener acceso a
otro equipo de la red.
●
Modelo de objetos limitado: este escenario de enlace proporciona sólo el modelo de objetos limitado que
forma parte de CrystalReportViewer.
174
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.5.3.1.3.1
Para enlazar a un control CrystalReportSource
mediante el modelo de código reducido
Procedimiento
1.
Arrastre el control CrystalReportViewer al formulario web.
2.
En la esquina superior derecha del control CrystalReportViewer, haga clic en el botón triangular pequeño.
Se abrirá el panel Tarea inteligente denominado Tareas de CrystalReportViewer. En la lista Elegir un origen de
informe, se muestra <Ninguno>.
3.
Haga clic en la lista Elegir un origen de informe y seleccione <Nuevo origen de informe…>.
Se abrirá el cuadro de diálogo Crear ReportSource.
4.
En el cuadro de texto Especifique nombre del control, deje la entrada predeterminada CrystalReportSource1.
5.
Haga clic en la lista Especifique un informe para el control CrystalReportSource y seleccione <Examinar...>.
La selección alternativa es <Nuevo informe>. Esta opción permite crear un nuevo informe de Crystal.
6.
Seleccione un informe para mostrarlo en el control CrystalReportViewer y haga clic en Aceptar.
7.
Vuelva a hacer clic en Aceptar para cerrar el cuadro de diálogo Elegir un origen de informe.
Información relacionada
Tutorial: Configurar sitios Web de código reducido con SAP Crystal Reports mediante tareas inteligentes [página
503]
En este tutorial, aprenderá a utilizar el nuevo modelo de desarrollo de aplicaciones basado en etiquetas de
Visual Studio. Va a seguir los pasos de un modelo de desarrollo de código reducido para configurar un sitio Web
con SAP Crystal Reports, mediante tareas inteligentes.
1.4.5.3.1.4
Enlazar a una dirección URL de un servicio Web
de informes
Modelo de objetos
Este escenario de enlace de informes usa el modelo de objeto CrystalReportViewer.
Ubicación de los informes
Los informes se ubican como servicio Web de informes, alojados en un servidor Web, normalmente remoto.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
175
Descripción
Un informe, que se almacena en otro servidor y se atiende como servicio Web de informes, se enlaza mediante su
dirección URL al control CrystalReportViewer.
Ventajas
●
Amplia distribución: puede haber informes en cualquier ubicación de Internet.
●
Facilidad de distribución: los servicios Web de informes están en el puerto 80, por lo que se puede obtener
acceso a ellos incluso a través de servidores de seguridad.
Desventajas
●
Modelo de objetos limitado: este escenario de enlace proporciona sólo el modelo de objetos limitado que
forma parte de CrystalReportViewer.
Implementación
Nota
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos [página 14].
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.
●
En el método ConfigureCrystalReports() (creado en Configuración de proyectos [página 14]), asigne
una dirección URL del servicio Web de informes a la propiedad ReportSource de la clase CrystalReportViewer.
De esta forma se enlaza el informe directamente al control. Toda interacción mediante programación con el
informe se debe realizar en el modelo de objetos CrystalReportViewer limitado.
myCrystalReportViewer.ReportSource = _
"http://localhost/TestProject/World_Sales_ReportService.asmx"
crystalReportViewer.ReportSource =
"http://localhost/TestProject/World_Sales_ReportService.asmx";
Nota
Para utilizar este caso de enlace, cree un proyecto de servicios Web de informes en Visual Studio.
176
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Información relacionada
Trabajar con Crystal Reports como servicio web [página 80]
1.4.5.3.1.5
Escenarios de enlaces CrystalReportViewer que
utilizan Crystal Services
Usar Crystal Services en Visual Studio
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio permite el acceso programático a
los ficheros de servidor mediante Crystal Services.
Usar Crystal Services en Visual Studio 2003
En Visual Studio 2003 se puede acceder a los informes Crystal a través del nodo Crystal Services en el Explorador
de servidores. Cuando están instalados SAP Crystal Reports y Crystal Services, éstos últimos aparecen como un
subnodo dentro de cada servidor enumerado en el Explorador de servidores.
El nodo Crystal Services se expande para mostrar listas de informes desde diversas ubicaciones:
●
El directorio de archivos local de la unidad de disco duro.
●
Report Application Server (RAS)
●
Crystal Enterprise (CE)
Puede arrastrar y colocar cualquier informe desde estas listas a Web Forms o Windows Forms.
Crystal Services normalmente muestra dos subnodos que se pueden expandir, en función de la versión de SAP
Crystal Reports que tenga instalada actualmente, y de las licencias adicionales que tenga del Servidor de
aplicaciones de informes (RAS) o de Crystal Enterprise. La tabla de la siguiente sección describe los requisitos de
acceso a un nodo en particular.
Es posible que deba ajustar la configuración del servidor de seguridad para poder acceder al CMS de la
plataforma SAP BusinessObjects Business Intelligence. El puerto predeterminado del CMS es 6400. Póngase en
contacto con el administrador del sistema para obtener más información sobre la configuración de la dirección de
red y el puerto del sistema de plataforma SAP BusinessObjects Business Intelligence. Puede encontrar más
información sobre la personalización de puertos en el Manual del administrador de la plataforma SAP
BusinessObjects Business Intelligence.
Clases contenedoras
Al arrastrar un informe de Crystal Services a un formulario Web Forms o Windows Forms, se crea una instancia de
clase contenedora que hace referencia al informe en la sección de código generado, de la clase de código
subyacente del Diseñador de Web Forms o Windows Forms.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
177
Nota
El tipo de clase contenedora varía con las versiones de SAP Crystal Reports. Vea la siguiente tabla.
Los servicios de Crystal Services que aparecen en la siguiente tabla muestran tipos de clases contenedoras que
no contienen ningún modelo de objetos; dependen del modelo de objetos limitado proporcionado con el control
CrystalReportViewer.
La tabla muestra los servicios de Crystal Services incluidos en SAP Crystal Reports para Visual Studio 2003.
Estos servicios de Crystal Services exponen grupos de informes, bien desde el directorio de archivos local o desde
el componente WCS (Web Component Server) de Crystal Enterprise. Los informes se incluyen dos clases
contenedoras distintas: ServerFileReport para informes del directorio de archivos locales o EnterpriseReport para
informes del servidor WCS de Crystal Enterprise.
Clase contenedora
expuesta mediante
Crystal Services
Nombre del nodo si­ Versiones de SAP
tuado debajo de
Crystal Reports
Crystal Services
Descripción
Requisitos para te­
ner acceso a este
nodo
ServerFileReport
Archivos de servidor
Expone los informes
del directorio de ar­
chivos local me­
diante un servicio
Web común, Server­
FileReportService.
Para obtener más in­
formación, vea Enla­
zar a Archivos de
servidor (VS .NET
2003) [página 179].
Configurar permisos
para los usuarios
ASPNET. (Vea Enla­
zar a Archivos de
servidor (VS .NET
2003) [página
179].)
Accede a servicios
Web de informes
mostrados por el
servidor WCS de
Crystal Enterprise 8,
8.5, 9 o 10 mediante
un servicio Web co­
mún, EnterpriseRe­
portService. Para
obtener más infor­
mación, vea Enlazar
a Crystal Enterprise
(VS .NET 2003) [pá­
gina 183].
Acceso a la instala­
ción de Crystal En­
terprise, que expone
los informes Enter­
prise mediante su
servidor WCS.
SAP Crystal Reports
para Visual Stu­
dio .NET 2003
(el nodo se reem­
plaza al instalar SAP
Crystal Reports 9 o
10)
EnterpriseReport
Crystal Enterprise
SAP Crystal Reports
para Visual Stu­
dio .NET 2003
(el nodo se reem­
plaza al instalar SAP
Crystal Reports 9 o
10)
178
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.5.3.1.5.1
Enlazar a Archivos de servidor (VS .NET 2003)
Modelo de objetos
Este escenario de enlace de informes utiliza CrystalReportViewer.
Ubicación de los informes
Los informes están en una carpeta de informes del directorio de archivos local. Los informes de esta ubicación se
exponen como servicios Web de informes.
Información general sobre Crystal Services
Este escenario de enlace de informes se aplica a informes a los que se accede desde el nodo del servidor de
Crystal Services en el Explorador de servidores.
Esta sección examina el subnodo Archivos de servidor de Crystal Services, dentro de Visual Studio .NET 2003.
[NOMBRE_DE_SERVIDOR]
●
Crystal Reports
○
Archivos de servidor
Descripción
El subnodo Archivos de servidor accede y muestra informes que se han expuesto como servicios Web de
informes desde un directorio de archivos local. Estos informes se exponen mediante el protocolo de los servicios
Web de informes. En Visual Studio .NET 2003, para acceder a Archivos de servidor, haga clic en el nodo Archivos
de servidor, en Crystal Services.
Ventajas
●
Acceso centralizado a los informes: proporciona un solo punto de acceso a todos los informes del directorio
de informes de muestra, que crea un repositorio de informes eficaz en la unidad de disco duro local.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
179
Desventajas
●
Se ha sustituido en SAP Crystal Reports 9 y 10 por un nodo de Crystal Services de RAS no administrado. Vea
la sección Descripción anterior para obtener más detalles.
●
Modelo de objetos limitado: este escenario de enlace proporciona sólo el modelo de objetos limitado que
forma parte de CrystalReportViewer.
Configurar Archivos de servidor
Los archivos de servidor se proporcionan como un nodo de Crystal Services en SAP Crystal Reports para Visual
Studio 2003. Si SAP Crystal Reports 9 o 10 (versiones completas) se instalan encima de la versión suministrada
con Visual Studio 2003, el nodo Archivos de servidor deja de ser visible.
Archivos de servidor es compatible con el SDK de todas las ediciones de SAP Crystal Reports Developer. Sin
embargo, es necesaria la codificación manual para trabajar con Archivos de servidor en dicha versión.
Información relacionada
Configurar Archivos de servidor en Crystal Services [página 84]
Enlazar a Crystal Enterprise (VS .NET 2003) [página 183]
Utilizar Crystal Services [página 83]
1.4.5.3.1.5.1.1
Para instalar Crystal Services
Requisitos previos
Debe tener instalado SAP Crystal Reports para Visual Studio 2003.
Contexto
Crystal Services no se instala de forma predeterminada durante la instalación de Visual Studio .NET 2003. En
este procedimiento instalará Crystal Services desde el CD de instalación de Visual Studio .Net 2003.
Procedimiento
1.
180
En el CD de instalación de Microsoft Visual Studio .NET, busque Crystal Reports.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
2.
Seleccione los servicios Web de Crystal.
3.
Haga clic en el botón Actualizar.
1.4.5.3.1.5.1.2
Para utilizar el nodo Crystal
Services>Archivos de servidor
Requisitos previos
●
SAP Crystal Reports para Visual Studio 2003 está instalado y funciona correctamente.
●
O SAP Crystal Reports 9 o posterior está instalado y funciona correctamente.
Nota
En SAP Crystal Reports 9 y 10, se ha sustituido Archivos de servidor (ya no se muestra como nodo bajo
Crystal Services). Sin embargo, lo puede seguir codificando manualmente.
Nota
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos [página 14].
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.
Procedimiento
1.
En el menú Ver, haga clic en Otras ventanas y, a continuación, en Explorador de servidores.
2.
Expanda Crystal Services y, a continuación, expanda Archivos de servidor.
3.
Seleccione un informe del árbol de Archivos de servidor y arrástrelo al formulario.
Nota
Cuando se coloca un informe de Archivos de servidor en el formulario, se agrega una instancia de la clase
ServerFileReport a la región de código generado por el diseñador del formulario.
Cuando se crea una instancia de las clases que heredan de System.ComponentModel.Component (como
ServerFileReport) y se configura en la región de código generado por el diseñador, aparece un icono de
esta clase en la parte inferior del formulario de la vista Diseño.
En la parte inferior de la vista Diseño del formulario, aparece un objeto serverFileReport1.
4.
Cambie a la vista de código y abra la región de código generado por el Diseñador de Web Forms o Windows
Forms.
Se ha creado una instancia de la clase ServerFileReport y se ha configurado en esta región.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
181
5.
En el método ConfigureCrystalReports() (creado en Configuración de proyectos), asigne la instancia de
ServerFileReport a la propiedad ReportSource del control CrystalReportViewer.
myCrystalReportViewer.ReportSource = serverFileReport1
crystalReportViewer.ReportSource = serverFileReport1;
Pasos siguientes
Para ver el informe, cree y ejecute el proyecto.
1.4.5.3.1.5.1.3
manualmente
Para codificar Archivos de servidor
Requisitos previos
●
SAP Crystal Reports para Visual Studio 2003 está instalado y funciona correctamente.
●
O SAP Crystal Reports 9 o posterior está instalado y funciona correctamente.
Nota
En SAP Crystal Reports 9 y 10, se ha sustituido Archivos de servidor (ya no se muestra como nodo bajo
Crystal Services). Sin embargo, lo puede seguir codificando manualmente.
Nota
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos [página 14].
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.
Procedimiento
1.
En el método ConfigureCrystalReports() (que ha creado en Configuración de proyectos), declare una
instancia de ServerFileReport.
Dim myServerFileReport As CrystalDecisions.Shared.ServerFileReport = _
New CrystalDecisions.Shared.ServerFileReport()
CrystalDecisions.Shared.ServerFileReport serverFileReport = new
CrystalDecisions.Shared.ServerFileReport();
182
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
2.
Establezca el valor de la propiedad ObjectType de ServerFileReport en REPORT.
myServerFileReport.ObjectType = CrystalDecisions.
[Shared].EnumServerFileType.REPORT
serverFileReport.ObjectType = CrystalDecisions.Shared.EnumServerFileType.REPORT;
3.
Establezca el valor de la propiedad ReportPath de ServerFileReport en el informe y en su subdirectorio.
myServerFileReport.ReportPath = "\General Business\World Sales Report.rpt"
serverFileReport.ReportPath = "\\General Business\\World Sales Report.rpt";
4.
Establezca el valor de la propiedad WebServiceURL de ServerFileReport en el directorio virtual del visor
para la versión instalada de SAP Crystal Reports.
Nota
En este código de ejemplo, el directorio virtual de visores está configurado para SAP Crystal Reports 10.
myServerFileReport.WebServiceUrl = "http://localhost/crystalreportviewers10/
ServerFileReportService.asmx"
serverFileReport.WebServiceUrl = "http://localhost/crystalreportviewers10/
ServerFileReportService.asmx";
5.
Establezca el valor de la propiedad ReportSource del control CrystalReportViewer en la instancia de
ServerFileReport.
myCrystalReportViewer.ReportSource = myServerFileReport
crystalReportViewer.ReportSource = serverFileReport1;
1.4.5.3.1.5.2
Enlazar a Crystal Enterprise (VS .NET 2003)
Este escenario de enlace se refiere a la tecnología utilizada en versiones anteriores y está destinado a los usuarios
que tienen instalada una versión de Crystal Enterprise. Crystal Enterprise ha sido reemplazado por SAP Crystal
Reports Server y la plataforma SAP BusinessObjects Business Intelligence.
Modelo de objetos
Este caso de enlace de informes utiliza CrystalReportViewer (vea Enlazar informes al modelo de objetos
CrystalReportViewer [página 169]).
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
183
Ubicación de los informes
El informe se encuentra en Web Component Server (servidor WCS) en Crystal Enterprise 8, 8.5, 9 o 10. Los
informes del servidor WCS se muestran como servicios Web de informes a través del servicio Web
EnterpriseReportService.asmx. Este servicio Web está situado en el directorio virtual de visores de Web
Component Server.
Información general sobre Crystal Services
Este escenario de enlace de informes se aplica a informes a los que se accede desde el nodo del servidor de
Crystal Services en el Explorador de servidores.
Esta sección examina el subnodo Crystal Enterprise de Crystal Services, dentro de Visual Studio .NET 2003.
[NOMBRE_DE_SERVIDOR]
●
Crystal Reports
○
Crystal Enterprise
Descripción
El subnodo Crystal Enterprise accede y muestra informes que se han expuesto como servicios Web de informes
desde un servidor WCS.
Para que el subnodo Crystal Enterprise acceda a informes y muestre una lista de ellos correctamente desde el
servidor WCS de Crystal Enterprise, se deben cumplir las siguientes condiciones:
●
El servidor que vea actualmente en el Explorador de servidor tiene que ejecutar Crystal Enterprise 8 o 8.5.
Nota
Deberá actualizar SAP Crystal Reports para Visual Studio 2003 a SAP Crystal Reports Developer (versión
9 o superior) si desea conectar a Crystal Enterprise 9 o posterior.
●
El servidor WCS (Web Component Server) de Crystal Enterprise tiene que estar instalado en el servidor de
Crystal Enterprise.
Nota
El servidor WCS se instala de forma predeterminada en Crystal Enterprise 9 y 10. En Crystal Enterprise 8 y
8.5, el servidor WCS se debe instalar por separado.
●
184
Para configurar los servicios Web de informes en el servidor de Crystal Enterprise 10, deberá instalar Visual
Studio .NET 2003 en el servidor de Crystal Enterprise y, a continuación, ejecutar la instalación personalizada
para agregar Crystal Services específicamente.
Si el administrador de Crystal Enterprise no desea instalar una versión completa de Visual Studio .NET 2003
en el servidor de Crystal Enterprise, en su lugar, se puede hacer lo siguiente:
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
○
Instalar el módulo de combinación managed.msm.
○
Localizar el directorio virtual de visores instalado en el equipo de desarrollo y copiar el archivo
EnterpriseReportService.asmx de dicho directorio y pegarlo en el directorio virtual de visores del equipo
servidor.
Una vez que los informes se muestren correctamente en Crystal Services, elija un informe, arrástrelo y suéltelo en
el formulario Web Forms o Windows Forms. Al colocar en el formulario el informe, éste se engloba en una clase
contenedora de informe y, a continuación, se muestra como una instancia de informe en la bandeja de
componentes.
Nota
Existen varios tipos diferentes de clases contenedoras de informe, dependiendo del origen del informe en el
servidor y del protocolo de conexión. Éstos varían en función de las distintas versiones de SAP Crystal Reports.
Instalar Crystal Services
Crystal Services no se instala de forma predeterminada durante la instalación de Visual Studio .NET 2003. Para
agregar Crystal Services, cargue el CD de instalación de Microsoft Visual Studio .NET, busque Crystal Reports,
seleccione Servicios Web de Crystal y haga clic en el botón de actualización.
Ventajas
●
Fácil acceso a los informes de Crystal Enterprise desde una aplicación Web o para Windows.
Desventajas
●
Modelo de objetos limitado: este escenario de enlace proporciona sólo el modelo de objetos limitado que
forma parte del control CrystalReportViewer.
Nota
En SAP Crystal Reports 9 y 10, Crystal Services se actualiza a una clase contenedora y un protocolo de
conexión diferentes.
Información relacionada
Directorio de visores [página 13]
Utilizar Crystal Services [página 83]
Enlazar a Archivos de servidor (Visual Studio 2005 y posterior) [página 187]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
185
1.4.5.3.1.5.2.1
Para acceder a Crystal Services>Crystal
Enterprise en el Explorador de servidores
Procedimiento
1.
En el menú Ver, haga clic en Otras ventanas y en Explorador de servidores.
2.
Si su servidor de Crystal Enterprise se encuentra en un equipo que no es el local (recomendado):
a) Haga clic con el botón secundario en Servidores y haga clic en Agregar servidor...
b) En el cuadro de diálogo Agregar servidor, en el campo Equipos, escriba el nombre de red del servidor
Crystal Enterprise y, a continuación, haga clic en Aceptar.
c) Dentro del nodo Servidores, expanda el subnodo del nuevo servidor agregado y, dentro de él, expanda el
subnodo Crystal Services.
d) En el cuadro de diálogo Inicio de sesión de Enterprise, rellene los campos Nombre de usuario y
Contraseña, y, a continuación, haga clic en Aceptar.
3.
Si su servidor de Crystal Enterprise se encuentra en el equipo local:
a) Dentro del nodo Servidores, expanda el subnodo de su equipo local y, dentro de él, expanda el subnodo
Crystal Services.
b) En el cuadro de diálogo Inicio de sesión de Enterprise, rellene los campos Nombre de usuario y
Contraseña, y, a continuación, haga clic en Aceptar.
Resultados
Ahora ya podrá configurar Crystal Services>Crystal Enterprise en su proyecto Web o Windows.
1.4.5.3.1.5.2.2
Para configurar un informe de Crystal
Services>Crystal Enterprise
Requisitos previos
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos [página 14]. 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.
Procedimiento
1.
186
Seleccione un informe en el subnodo Crystal Enterprise y arrástrelo al formulario Web Forms o Windows
Forms.
En la parte inferior del formulario, en la bandeja de componentes, aparecerá un objeto enterpriseReport1.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
2.
Cambie a la vista de código y abra la región de código generado por el Diseñador de Web Forms o Windows
Forms.
Nota
Se ha creado una instancia de la clase EnterpriseReport y se ha configurado en esta región.
3.
En el método ConfigureCrystalReports() (que ha creado en Configuración de proyectos [página 14]),
asigne la instancia de EnterpriseReport a la propiedad ReportSource del control CrystalReportViewer.
myCrystalReportViewer.ReportSource = enterpriseReport1
crystalReportViewer.ReportSource = enterpriseReport1;
4.
Para ver el informe, cree y ejecute el proyecto.
1.4.5.3.1.5.3
Enlazar a Archivos de servidor (Visual Studio
2005 y posterior)
Modelo de objetos
Este escenario de vinculación de informes usa el modelo de objeto CrystalReportViewer.
Ubicación de los informes
Los informes están en una carpeta de informes del directorio de archivos local. Los informes de esta ubicación se
exponen como servicios Web de informes.
Información general de Archivos de servidor
Este escenario de enlace de informes se aplica a los informes a los que se accede como archivo de servidor a
través de un servicio Web.
Descripción
El servicio Web de archivos de servidor accede y muestra informes que se han expuesto como servicios Web de
informes desde el directorio de archivos local. En Visual Studio 2005 y posterior, se accede a Archivos de servidor
mediante programación.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
187
Ventajas
●
Acceso centralizado a los informes: proporciona un solo punto de acceso a todos los informes del directorio
de informes de muestra, que crea un repositorio de informes eficaz en la unidad de disco duro local.
Desventajas
●
Modelo de objetos limitado: este escenario de enlace proporciona sólo el modelo de objetos limitado que
forma parte de CrystalReportViewer.
Configurar Archivos de servidor
En SAP Crystal Reports, versión para programadores de Microsoft Visual Studio, se accede a Archivos de servidor
mediante programación. Archivos de servidor es compatible mediante programación con el SDK de todas las
ediciones de SAP Crystal Reports Developer.
Información relacionada
Configurar archivos de servidor en Visual Studio 2005 y posterior [página 87]
1.4.5.3.1.5.3.1
manualmente
Para codificar Archivos de servidor
Requisitos previos
●
Un servicio Web de informes que permita el acceso a Archivos de servidor mediante programación, que esté
bien configurado y que funcione correctamente.
●
O que SAP Crystal Reports Developer está instalado y funciona correctamente.
Nota
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos [página 14].
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.
188
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Procedimiento
1.
En el método ConfigureCrystalReports() (que ha creado en Configuración de proyectos [página 14]),
declare una instancia de ServerFileReport.
Dim myServerFileReport As CrystalDecisions.Shared.ServerFileReport = _New
CrystalDecisions.Shared.ServerFileReport()
CrystalDecisions.Shared.ServerFileReport serverFileReport = new
CrystalDecisions.Shared.ServerFileReport();
2.
Establezca el valor de la propiedad ObjectType de ServerFileReport en REPORT.
myServerFileReport.ObjectType = CrystalDecisions.
[Shared].EnumServerFileType.REPORT
serverFileReport.ObjectType = CrystalDecisions.Shared.EnumServerFileType.REPORT;
3.
Establezca el valor de la propiedad ReportPath de ServerFileReport en el informe y el subdirectorio
correspondiente.
myServerFileReport.ReportPath = "\General Business\World Sales
Report.rpt"
serverFileReport.ReportPath = "\\General Business\\World Sales
Report.rpt";
4.
Establezca el valor de la propiedad WebServiceURL de ServerFileReport en la ubicación del servicio Web de
informes.
Si tiene instalado SAP Crystal Reports Developer, este será el directorio virtual del visor para la versión
instalada de SAP Crystal Reports, vea Directorio de visores [página 13]. Si no tiene instalado SAP Crystal
Reports Developer, este será la dirección URL en el servicio Web de informes que ha creado en Configurar
archivos de servidor en Visual Studio 2005 y posterior [página 87].
Nota
En el siguiente código, el directorio virtual de visores está configurado para SAP Crystal Reports para
Visual Studio 2005.
myServerFileReport.WebServiceUrl =
"http://localhost/CrystalReportsWebServices2005/ServerFileReportService.asmx"
serverFileReport.WebServiceUrl =
"http://localhost/CrystalReportsWebServices2005/ServerFileReportService.asmx";
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
189
5.
Establezca el valor de la propiedad ReportSource del control CrystalReportViewer en la instancia de
ServerFileReport.
myCrystalReportViewer.ReportSource = myServerFileReport
crystalReportViewer.ReportSource = serverFileReport1;
1.4.5.3.1.5.4
Enlazar a SAP Crystal Reports Server o la
plataforma SAP BusinessObjects Business Intelligence (Visual
Studio)
Modelo de objetos
Este caso de enlace de informes utiliza CrystalReportViewer (vea Enlazar informes al modelo de objetos
CrystalReportViewer [página 169]).
Ubicación de los informes
El informe se encuentra en el Web Component Server (servidor WCS) en SAP Crystal Reports Server o la
plataforma SAP BusinessObjects Business Intelligence. Los informes del servidor WCS se muestran como
servicios Web de informes a través del servicio Web EnterpriseReportService.asmx. Este servicio Web está
situado en el directorio virtual de visores de Web Component Server.
Información general sobre Crystal Services
Este escenario de enlace de informes se aplica a informes a los que se accede desde el nodo del servidor de
Crystal Services en el Explorador de servidores.
En esta sección se examina el subnodo SAP Crystal Reports Services de Crystal Services, dentro de Visual Studio.
[NOMBRE_DE_SERVIDOR]
●
SAP Crystal Reports Services
○
190
Server Reports
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Descripción
El subnodo de la plataforma SAP BusinessObjects Business Intelligence accede a los informes que se han
expuesto como servicios Web de informes de un servidor WCS de la plataforma SAP BusinessObjects Business
Intelligence.
Para que el subnodo de la plataforma SAP BusinessObjects Business Intelligence acceda a una lista de informes
desde el servidor WCS de la plataforma SAP BusinessObjects Business Intelligence y la muestre correctamente,
se deben cumplir las siguientes condiciones:
●
El servidor que se ve actualmente en el explorador de servidores está ejecutando la plataforma SAP
BusinessObjects Business Intelligence.
●
Para configurar los servicios web de informes en la plataforma SAP BusinessObjects Business Intelligence,
instale Visual Studio en el servidor de la plataforma SAP BusinessObjects Business Intelligence y, a
continuación, ejecute la instalación personalizada para agregar Crystal Services en concreto.
Nota
La instalación de Visual Studio en el servidor de la plataforma SAP BusinessObjects Business Intelligence,
y la instalación personalizada de Crystal Services, son necesarias para que se instale y configure
adecuadamente el archivo EnterpriseReportService.asmx en el directorio virtual de visores.
Si el administrador de Crystal Enterprise no desea instalar una versión completa de Visual Studio en el
servidor de la plataforma SAP BusinessObjects Business Intelligence, en su lugar se puede hacer lo siguiente:
○
Instalar el módulo de combinación managed.msm.
○
Localizar el directorio virtual de visores instalado en el equipo de desarrollo y copiar el archivo
EnterpriseReportService.asmx de dicho directorio y pegarlo en el directorio virtual de visores del equipo
servidor.
Una vez que los informes se muestran correctamente en SAP BusinessObjects Services, puede enlazar un
control CrystalReportsViewer a cualquiera de los informes de la lista. Para obtener más información, consulte
la documentación sobre la plataforma SAP BusinessObjects Business Intelligence.
Ventajas
●
Fácil acceso a los informes de la plataforma SAP BusinessObjects Business Intelligence desde una aplicación
web o de Windows.
Desventajas
●
Modelo de objetos limitado: este escenario de enlace proporciona sólo el modelo de objetos limitado que
forma parte del control CrystalReportViewer.
Nota
En SAP Crystal Reports 9 y 10, Crystal Services se actualiza a una clase contenedora y un protocolo de
conexión diferentes.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
191
Información relacionada
Directorio de visores [página 13]
Utilizar Crystal Services [página 83]
Elegir el modelo de objetos correcto para el proyecto [página 31]
1.4.5.3.1.5.4.1
Para enlazar a una ruta de directorio de
archivos mediante la ventana Propiedades
Procedimiento
1.
Cree un proyecto Web o Windows.
2.
En el Cuadro de herramientas, arrastre un control CrystalReportViewer en Web Forms o Windows Forms.
3.
Haga clic en el control CrystalReportViewer para seleccionarlo.
4.
En la ventana Propiedades, asigne una ruta de acceso del directorio de archivos a la propiedad
ReportSource.
Nota
La ruta de directorio de archivos lleva a los informes de muestra de Visual Studio 2005.
Gracias a la función de vista previa en tiempo de diseño, el informe se muestra en el modo de vista previa.
C:\Archivos de programa\Microsoft Visual Studio 8.0\Crystal Reports\Samples\Es
\Reports\Feature Examples\Hierarchical Grouping.rpt
5.
Para ver el informe, cree y ejecute el proyecto.
1.4.5.3.1.6
Enlazar a ReportSource (SAP
Crystal Reports Server o SAP BusinessObjects Enterprise 11)
Nota
Esta página describe una funcionalidad que no está disponible en SAP Crystal Reports, versión para
programadores de Microsoft Visual Studio, pero sí lo está en las versiones actualizadas.
Modelo de objetos
Este escenario de enlace de informes usa el modelo de objeto CrystalReportViewer.
192
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Ubicación de los informes
Se obtiene acceso a los informes desde el servidor de páginas de la plataforma SAP BusinessObjects Business
Intelligence.
Descripción
SAP Crystal Reports Server o la plataforma SAP BusinessObjects Business Intelligence permite la distribución de
informes desde los servidores de un entorno de Enterprise. Un informe almacenado en SAP Crystal Reports
Server o la plataforma SAP BusinessObjects Business Intelligence se puede mostrar en distintos servidores a
horas diferentes, según su finalidad. En SAP Crystal Reports Server o la plataforma SAP BusinessObjects
Business Intelligence, si desea mostrar un informe con el mejor rendimiento posible y no precisa realizar
modificaciones importantes mediante programación, muestre el informe directamente desde el servidor de
páginas con la clase ReportSource.
La clase ReportSource no está asociada a ningún modelo de objetos. Si desea modificar los parámetros o la
configuración de base de datos, puede utilizar el modelo de objetos limitado proporcionado con el control
CrystalReportViewer. Sin embargo, para una interacción con el informe mediante programación más
compleja, use uno de los demás escenarios de enlace de informes de SAP Crystal Reports Server o la plataforma
SAP BusinessObjects Business Intelligence.
Nota
Para obtener una comparación de los diversos escenarios que usan varios servidores en SAP Crystal Reports
Server o la plataforma SAP BusinessObjects Business Intelligence, vea los escenarios de enlace recomendados
para SAP Crystal Reports Server o la plataforma SAP BusinessObjects Business Intelligence en Escenarios de
enlace de informes [página 168].
Es posible que deba ajustar la configuración del servidor de seguridad para poder acceder al CMS de la
plataforma SAP BusinessObjects Business Intelligence. El puerto predeterminado del CMS es 6400. Póngase en
contacto con el administrador del sistema para obtener más información sobre la configuración de la dirección de
red y el puerto del sistema de plataforma SAP BusinessObjects Business Intelligence. Puede encontrar más
información sobre la personalización de puertos en el Manual del administrador de la plataforma SAP
BusinessObjects Business Intelligence.
Ventajas
●
Más rápido: proporciona el mejor rendimiento para mostrar un informe de SAP Crystal Reports Server o la
plataforma SAP BusinessObjects Business Intelligence.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
193
Desventajas
●
Modelo de objetos limitado: la modificación mediante programación del inicio de sesión o la configuración de
parámetros de la base de datos está limitada al modelo de objetos CrystalReportViewer.
●
Disponibilidad limitada: este escenario sólo está disponible en Crystal Enterprise 10, SAP
Crystal Reports Server o SAP BusinessObjects Enterprise XI.
Información relacionada
Enlazar informes al modelo de objetos ReportDocument [página 198]
1.4.5.3.1.6.1
Para enlazar el control CrystalReportViewer a
un informe que se atiende fuera del servidor de páginas de SAP
Crystal Reports Server o la plataforma SAP BusinessObjects
Business Intelligence
Requisitos previos
●
SAP Crystal Reports Server o la plataforma SAP BusinessObjects Business Intelligence está instalado y
funcionando.
●
El SDK de SAP Crystal Reports Server o la plataforma SAP BusinessObjects Business Intelligence (incluidos
los ensamblados .NET) está instalado y funcionando.
Nota
Si ha instalado SAP Crystal Reports Server o la plataforma SAP BusinessObjects Business Intelligence en
el equipo de desarrollo, el SDK se incluye en la instalación.
Procedimiento
1.
Busque y escriba el nombre de un servidor de SAP Crystal Reports Server o de la plataforma SAP
BusinessObjects Business Intelligence. Para este ejemplo, el nombre del servidor es " BOE01".
a) Para buscar el nombre del servidor, haga clic con el botón secundario en el icono Mi PC y, a continuación,
seleccione Propiedades.
b) En el cuadro de diálogo Propiedades del sistema, haga clic en la ficha Identificación de la red.
c) El nombre del equipo se encuentra en el campo "Nombre completo de equipo".
2.
194
Use el asistente de publicación para publicar el archivo Chart.rpt en el servidor de SAP Crystal Reports Server
o la plataforma SAP BusinessObjects Business Intelligence.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Nota
Para saber cómo usar el asistente de publicación, vea la documentación del usuario de SAP Crystal
Reports Server o la plataforma SAP BusinessObjects Business Intelligence.
3.
4.
Agregue las siguientes referencias de ensamblados al proyecto.
○
CrystalDecisions.Enterprise.Framework
○
CrystalDecisions.Enterprise.InfoStore
○
CrystalDecisions.Enterprise.Viewing.ReportSource
○
CrystalDecisions.ReportAppServer.Controllers
En el menú Ver, haga clic en Código para ver la clase de código subyacente de Web Forms o Windows Forms.
Sobre la clase, agregue una instrucción "Imports" [Visual Basic] o "using" [C#] para el espacio de
nombres CrystalDecisions.Enterprise.
Imports CrystalDecisions.Enterprise
Imports CrystalDecisions.Enterprise.Viewing
Imports CrystalDecisions.ReportAppServer.Controllers
using CrystalDecisions.Enterprise;
using CrystalDecisions.Enterprise.Viewing;
using CrystalDecisions.ReportAppServer.Controllers;
1.4.5.3.1.6.2
Para iniciar sesión en SAP
Crystal Reports Server o SAP BusinessObjects Enterprise
Procedimiento
1.
En el método ConfigureCrystalReports() (creado en Configuración de proyectos [página 14]), declare
una variable de cadena serverName y establezca su valor en el nombre del servidor SAP
Crystal Reports Server o SAP BusinessObjects Enterprise.
Dim serverName As String = "BOE01"
string serverName = "BOE01";
2.
Declare y cree una instancia de la clase SessionMgr.
Dim mySessionMgr As SessionMgr = New SessionMgr()
SessionMgr sessionMgr = new SessionMgr();
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
195
3.
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.
Dim myEnterpriseSession As EnterpriseSession = mySessionMgr.Logon( _
"Administrator", "", serverName, "secEnterprise")
EnterpriseSession enterpriseSession = sessionMgr.Logon(
"Administrator", "", serverName, "secEnterprise");
4.
Recupere el servicio InfoStore (como EnterpriseService), desde el método GetService de
EnterpriseSession.
Dim myEnterpriseService As EnterpriseService = _
myEnterpriseSession.GetService("InfoStore")
EnterpriseService enterpriseService = enterpriseSession.GetService("InfoStore");
5.
Declare y cree una instancia de InfoStore y pase EnterpriseService recuperado como parámetro a
InfoStore.
Dim myInfoStore As InfoStore = New InfoStore(myEnterpriseService)
InfoStore infoStore = new InfoStore(enterpriseService);
1.4.5.3.1.6.3
Para recuperar el informe Hierarchical
Grouping de SAP Crystal Reports Server o
SAP BusinessObjects Enterprise
Procedimiento
1.
Para volver a asignar el valor de la instancia de EnterpriseService al servicio de fábrica de informes de Page
Server, pase la cadena "PSReportFactory" al método GetService() de EnterpriseService.
myEnterpriseService = myEnterpriseSession.GetService("PSReportFactory")
enterpriseService = enterpriseSession.GetService("PSReportFactory");
2.
Devuelva la propiedad Interface a EnterpriseService como variable de objeto.
Dim psrfObject As Object = myEnterpriseService.Interface
Object psrfObject = enterpriseService.Interface;
3.
Proyecte la variable de objeto a una instancia de PSReportFactory.
Dim myPSReportFactory As PSReportFactory = CType(psrfObject, PSReportFactory)
196
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
PSReportFactory psReportFactory = (PSReportFactory)psrfObject;
4.
Introduzca la siguiente cadena de consulta para realizar una consulta sobre el informe en SAP
Crystal Reports Server o SAP BusinessObjects Enterprise.
Dim queryString As String = "Select SI_ID, SI_NAME, SI_PARENTID From
CI_INFOOBJECTS " _
& "Where SI_PROGID='CrystalEnterprise.Report' " _
& "And SI_NAME Like 'Chart'"
string queryString = "Select SI_ID, SI_NAME, SI_PARENTID From CI_INFOOBJECTS "
+ "Where SI_PROGID='CrystalEnterprise.Report' "
+ "And SI_NAME Like 'Chart'";
5.
Pase la cadena de consulta al método Query de InfoStore, para recuperar una clase indizada
InfoObjects con el resultado de la consulta.
Dim myInfoObjects As InfoObjects = myInfoStore.Query(queryString)
InfoObjects infoObjects = infoStore.Query(queryString);
6.
Recupere InfoObject desde la primera columna de la clase indizada InfoObjects.
Dim myInfoObject As InfoObject = myInfoObjects(1)
InfoObject infoObject = infoObjects[1];
7.
Declare y llene una instancia de ReportSource desde el método OpenReportSource() de la instancia de
PSReportFactory, pasando la propiedad ID de InfoObject.
Dim myReportSource As ReportSource =
myPSReportFactory.OpenReportSource(myInfoObject.ID)
ReportSource reportSource = psReportFactory.OpenReportSource(infoObject.ID);
8.
Enlace la instancia de ReportSource a la propiedad ReportSource del control CrystalReportViewer.
myCrystalReportViewer.ReportSource = myReportSource
crystalReportViewer.ReportSource = reportSource;
9.
Para ver el informe, cree y ejecute el proyecto.
El informe ahora se muestra desde el servidor de páginas en SAP Crystal Reports Server o
SAP BusinessObjects Enterprise, según su ID. Si utiliza un método alternativo para tener acceso al Id. de
informe (por ejemplo, eligiendo el Id. de la lista de un control DropDownList), no tendrá que consultar
InfoStore ni generar ningún InfoObject para recuperar el Id. de informe.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
197
1.4.5.3.2
Enlazar informes al modelo de objetos
ReportDocument
El modelo de objetos ReportDocument es el modelo de objetos más eficaz y completo que se proporciona con
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio. Es el modelo de objetos que se
prefiere usar para desarrollar un proyecto con SAP Crystal Reports, versión para programadores de Microsoft
Visual Studio.
1.4.5.3.2.1
Enlazar a una clase de informe incrustado
Modelo de objetos
Este escenario de enlace de informes usa el modelo de objeto ReportDocument.
Ubicación de los informes
Los informes se incrustan en el proyecto.
Nota
En las versiones anteriores de esta documentación se hacía referencia a los informes incrustados como "con
tipos declarados". El término principal que se usa ahora para hacer referencia a un informe que se agrega o
importa a un proyecto de Visual Studio es "incrustado".
Descripción
En este caso, un informe se incrusta en el proyecto. Para incrustar un informe, puede crear un nuevo informe con
SAP Crystal Reports Designer incrustado (que se encuentra en Visual Studio) o importar un informe existente en
el proyecto. Cuando se crea o importa el informe, se genera automáticamente una clase contenedora de informe
para representarlo. El nombre de esta clase contenedora es el mismo que el del informe. Se deriva de la clase
base ReportDocument y, por tanto, hereda todas las propiedades y los métodos de ReportDocument, que lo
incluye en su modelo de objetos.
Ventajas
●
Seguridad agregada: El informe se incrusta y, por tanto, se distribuye como parte de la aplicación.
●
Amplia interacción mediante programa: proporciona acceso al potente modelo de objetos ReportDocument.
198
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
●
Seguridad agregada: proporciona el tipo de acceso más controlado a los orígenes de datos.
●
Más utilizado: la mayoría de los programadores consideran que es el que tiene más ventajas.
Desventajas
●
Mantenimiento agregado: los cambios en los informes implican la necesidad de compilar y redistribuir la
aplicación de nuevo.
1.4.5.3.2.1.1
Para enlazar a una clase de informe incrustado
Contexto
Cuando se crea o importa un informe, se genera automáticamente una clase contenedora de informes para
representarlo. El nombre de esta clase contenedora es el mismo que el del informe. Se deriva de la clase base
ReportDocument y, por tanto, hereda todas las propiedades y los métodos de ReportDocument, que lo incluye en
su modelo de objetos.
Procedimiento
1.
Agregue un control CrystalReportViewer al formulario de Windows Forms.
Nota
Todas las versiones de SAP Crystal Reports admiten el enlace a una clase de informe incrustado para
aplicaciones de Windows. Algunas configuraciones ofrecen compatibilidad con este escenario de enlace
para sitios web a través de un proveedor de compilación mejorada.
2.
Agregue un informe al proyecto. De este modo se genera automáticamente una clase contenedora de
informe con el mismo nombre que el informe.
3.
Cree una instancia de la clase contenedora de informe.
Dim myReport As New QuarterlySalesReport()
QuarterlySalesReport myReport = new QuarterlySalesReport();
4.
Asígnela a la propiedad ReportSource del control CrystalReportViewer.
myCrystalReportViewer.ReportSource = myReport
crystalReportViewer.ReportSource = myReport;
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
199
1.4.5.3.2.2
Enlazar a una clase de informe no incrustado
cargado en ReportDocument
Modelo de objetos
Este escenario de enlace de informes usa el modelo de objeto ReportDocument.
Ubicación de los informes
Los informes se encuentran en el directorio de archivos.
Descripción
Este escenario de enlace de informes permite utilizar el modelo de objetos ReportDocument más eficaz con
informes no incrustados; es decir, informes externos al proyecto.
En Enlazar a una ruta de directorio de archivos en el código [página 170], establezca el enlace a los informes
mediante las rutas de acceso a los directorios de archivos; pero en vez de enlazar las rutas directamente al visor,
páselas al método ReportDocument.Load(). De esta forma, podrá utilizar el modelo de objetos
ReportDocument.
Además, puesto que cada informe externo se carga en la clase común ReportDocument, puede desarrollar un
proceso de selección de informes que comparta el código de enlace de informes común para todos los informes.
Ventajas
●
Bajo mantenimiento: los informes se pueden agregar, quitar o modificar sin volver a compilar la aplicación.
●
Amplia interacción mediante programación: proporciona acceso al potente modelo de objetos
ReportDocument.
●
Menos codificación gracias al uso compartido de código: los informes pueden compartir código, ya que todos
ellos se cargan en la clase común ReportDocument.
Desventajas
●
Distribución limitada: los informes deben estar en el mismo equipo que la aplicación. (Normalmente se
restringe el acceso desde la cuenta de usuario ASPNET del servidor Web al resto de los servidores de la red.)
●
Esfuerzo de implementación agregado: los informes se deben distribuir junto con la aplicación en la ruta
relativa correcta.
200
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
●
Origen de informe menos seguro: existe el peligro de que los informes se cambien de ubicación o se quiten del
equipo de implementación en tiempo de ejecución.
1.4.5.3.2.2.1
Para enlazar a u informe no incrustado
mediante el objeto de modelos ReportDocument
Requisitos previos
Nota
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos [página 14].
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.
Procedimiento
1.
Agregue un enunciado "Imports" [Visual Basic] o "using" [C#] al principio de la clase para el
espacio de nombres CrystalDecisions.CrystalReports.Engine.
Nota
Es necesario declarar este espacio de nombres para tener acceso a la clase ReportDocument sin ningún
prefijo de espacio de nombres.
Imports CrystalDecisions.CrystalReports.Engine
using CrystalDecisions.CrystalReports.Engine;
2.
Busque el archivo World Sales Report.rpt en el subdirectorio General Business de su versión de SAP Crystal
Reports.
3.
Copie la ruta de directorio de archivos completa al Portapapeles, incluido World Sales Report.rpt.
4.
En el método ConfigureCrystalReports() (creado en Configuración de proyectos [página 14]), declare
una variable de cadena reportPath y asigne una cadena que contenga la ruta de directorio de archivos de
World Sales Report copiado en el paso anterior.
Dim reportPath As String = _
"C:\Archivos de programa\Microsoft Visual Studio 9.0\" _ & "Crystal Reports
\Samples\Es\Reports\General Business\" _ & "World Sales Report.rpt"
string reportPath =
"C:\\Archivos de programa\\Microsoft Visual Studio 9.0\\" + "Crystal Reports\
\Samples\\Es\\Reports\\General Business\\" + "World Sales Report.rpt";
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
201
5.
Debajo de la declaración de cadena, declare una instancia de ReportDocument.
Dim myReportDocument As ReportDocument = New ReportDocument()
ReportDocument reportDocument = new ReportDocument();
6.
Cargue la variable de cadena que contiene la ruta de directorio de archivos, a la clase de informe no
incrustado de ReportDocument.
myReportDocument.Load(reportPath)
reportDocument.Load(reportPath);
7.
Asigne la instancia de ReportDocument (que ya contiene el informe no incrustado cargado) a la propiedad
ReportSource del control CrystalReportViewer.
myCrystalReportViewer.ReportSource = myReportDocument
crystalReportViewer.ReportSource = reportDocument;
8.
Para ver el informe, cree y ejecute el proyecto.
1.4.5.3.2.3
Enlazar a una clase de informe incrustado
almacenado en caché
Modelo de objetos
Este escenario de enlace de informes usa el modelo de objeto ReportDocument.
Ubicación de los informes
Los informes se incrustan en el proyecto.
Descripción
Cuando se incrusta un informe en un proyecto de Visual Studio, se genera automáticamente una clase
contenedora de informes que representa el archivo del informe en el proyecto. Al mismo tiempo, se genera
automáticamente una clase de utilidad de administración de caché para ese informe.
202
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
En este caso, enlace el control CrystalReportViewer a la clase de utilidad de administración de caché, para que se
administre automáticamente el almacenamiento en caché en el objeto ASP.NET Cache.
Uso del almacenamiento en caché
El almacenamiento en caché tiene un uso específico y limitado, que puede consumir demasiados recursos del
sistema si no se administra con cuidado.
Almacenamiento en caché de informes no incrustados
Si desea administrar el almacenamiento en caché de informes no incrustados, debe crear su propia clase de
utilidad de administración de caché. Para obtener más información, vea Enlazar a un informe no incrustado
cargado en una clase de utilidad de administración de caché [página 205].
Ventajas
●
Compartibilidad: es ideal para almacenar informes con compartibilidad alta y pocas permutaciones en los
parámetros o en la información de inicio de sesión.
●
Optimiza el acceso a los datos: si los informes con compartibilidad alta son muy grandes, o tienen una
consulta tan compleja que tarda varios minutos en recuperar la información, se puede tener acceso a los
datos más rápidamente con la clase de utilidad d
Desventajas
●
Penalización de servidor: los informes que se conservan en el objeto ASP.NET Cache pueden sobrecargar los
recursos de memoria del servidor.
●
Problemas de persistencia: el caché tiene algunas dependencias que le permiten buscar los cambios de una
instancia de informe y volver a almacenarla en caché. Sin embargo, si cambia la base de datos, la instancia del
informe de Cache no se actualiza para mostrar ese cambio.
●
Consume recursos: un informe con parámetros a los que se llama frecuentemente con distintas cadenas de
parámetros (sobre todo si uno de esos parámetros es el id de usuario) implican un nuevo informe en caché
cada vez. Este proceso consume los recursos del sistema. Si el informe no tiene compartibilidad alta, la
instancia del mismo se debe asignar a un objeto Session.
Información relacionada
Cuándo utilizar informes normales o almacenados en caché [página 219]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
203
Modelo de objetos ReportDocument [página 36]
Session y persistencia del modelo de objetos ReportDocument [página 56]
1.4.5.3.2.3.1
Para enlazar a una clase de utilidad de
administración de caché
Requisitos previos
Nota
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos [página 14].
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.
Procedimiento
1.
En el método ConfigureCrystalReports() (creado en Configuración de proyectos [página 14]), elimine
las líneas de código existentes para reemplazar la clase contenedora de informes por la clase de utilidad de
administración de caché.
2.
Cree una instancia de la clase de utilidad de administración de caché asociada con el informe Hierarchical
Grouping.rpt.
Dim cachedHierarchicalGroupingReport As CachedHierarchical_Grouping
= New CachedHierarchical_Grouping()
CachedHierarchical_Grouping cachedHierarchicalGroupingReport = new
CachedHierarchical_Grouping();
3.
Pase la instancia de la utilidad de administración de caché al control CrystalReportViewer.
myCrystalReportViewer.ReportSource = cachedHierarchicalGroupingReport
crystalReportViewer.ReportSource = cachedHierarchicalGroupingReport;
4.
204
Para ver el informe, cree y ejecute el proyecto.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.5.3.2.4
Enlazar a un informe no incrustado cargado en
una clase de utilidad de administración de caché
Modelo de objetos
Este escenario de enlace de informes usa el modelo de objeto ReportDocument.
Ubicación de los informes
Los informes se encuentran en el directorio de archivos.
Descripción
Este caso de enlace de informes es parecido al siguiente caso de enlace de informes Enlazar a una clase de
informe incrustado almacenado en caché [página 202]. La diferencia con este caso es que los informes no están
incrustados. Para obtener más información sobre los informes no incrustados, vea Comparar informes
incrustados y no incrustados [página 163].
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio incluye dos funciones para facilitar
el almacenamiento en caché de informes mediante el objeto ASP.NET Cache:
●
Un marco de administración de caché de informes integrados, que reconoce los informes idénticos que
tienen parámetros o credenciales de inicio de sesión únicos que requieren una clave única para cada instancia
que se almacena en caché.
●
Una interfaz, ICachedReport, que identifica las clases de utilidades de administración de almacenamiento
en caché de informes en el marco de trabajo de la administración de almacenamiento en caché de informes.
En Enlazar a una clase de informe incrustado almacenado en caché [página 202], obtuvo información sobre la
clase Cached[nombre de informe] que se crea automáticamente cuando se incrusta un informe en el proyecto.
Sin embargo, puede crear una clase de utilidad de administración de almacenamiento en caché que administre
los informes no incrustados. Para obtener un ejemplo de código, vea la sección Implementación más adelante.
Uso del almacenamiento en caché
El almacenamiento en caché tiene un uso específico y limitado, que puede consumir demasiados recursos del
sistema si no se administra con cuidado.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
205
Ventajas
●
Compartibilidad: es ideal para almacenar informes con compartibilidad alta y pocas permutaciones en los
parámetros o en la información de inicio de sesión.
●
Optimiza el acceso a los datos: si los informes con compartibilidad alta son muy grandes, o tienen una
consulta tan compleja que tarda varios minutos en recuperar la información, se puede tener acceso a los
datos más rápidamente con la clase de utilidad d
Desventajas
●
Penalización de servidor: los informes que se conservan en el objeto ASP.NET Cache pueden sobrecargar los
recursos de memoria del servidor.
●
Problemas de persistencia: el caché tiene algunas dependencias que le permiten buscar los cambios de una
instancia de informe y volver a almacenarla en caché. Sin embargo, si cambia la base de datos, la instancia del
informe de Cache no se actualiza para mostrar ese cambio.
●
Consume recursos: un informe con parámetros a los que se llama frecuentemente con distintas cadenas de
parámetros (sobre todo si uno de esos parámetros es el id de usuario) implican un nuevo informe en caché
cada vez. Este proceso consume los recursos del sistema. Si el informe no tiene compartibilidad alta, la
instancia del mismo se debe asignar a un objeto Session.
Información relacionada
Enlazar con el componente ReportDocument [página 211]
Modelo de objetos ReportDocument [página 36]
Session y persistencia del modelo de objetos ReportDocument [página 56]
1.4.5.3.2.4.1
Para almacenar en caché y, a continuación,
enlazar un informe no incrustado a un control
CrystalReportViewer
Requisitos previos
Nota
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos [página 14].
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.
206
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Procedimiento
1.
Busque el archivo World Sales Report.rpt en el subdirectorio General Business.
2.
Copie la ruta de directorio de archivos completa al Portapapeles, incluido World Sales Report.rpt.
3.
En el método ConfigureCrystalReports() (creado en Configuración de proyectos [página 14]), declare
una variable de cadena reportPath y asigne una cadena que contenga la ruta de directorio del archivo World
Sales Report copiado en el paso anterior.
Dim reportPath As String = _
"C:\Program Files\Microsoft Visual Studio 9.0\" _
& "Crystal Reports\Samples\En\Reports\General Business\" _
& "World Sales Report.rpt"
string reportPath =
"C:\\Program Files\\Microsoft Visual Studio 9.0\\"
+ "Crystal Reports\\Samples\\En\\Reports\\General Business\\"
+ "World Sales Report.rpt";
4.
Declare y cree una instancia de la clase NonEmbeddedReportCacher y, a continuación, pásela a la variable
de cadena reportFile.
Nota
Para obtener información sobre cómo crear la clase NonEmbeddedReportCacher, vea el procedimiento
de varios pasos que sigue a este procedimiento de varios pasos.
Dim myNonEmbeddedReportCacher As NonEmbeddedReportCacher = _New
NonEmbeddedReportCacher(reportFile)
NonEmbeddedReportCacher nonEmbeddedReportCacher = new
NonEmbeddedReportCacher(reportFile);
5.
Asigne la instancia de la clase de utilidad de administración de almacenamiento en caché de informes a la
propiedad ReportSource del control CrystalReportViewer.
myCrystalReportViewer.ReportSource = myNonEmbeddedReportCacher
crystalReportViewer.ReportSource = nonEmbeddedReportCacher;
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
207
1.4.5.3.2.4.2
Para crear la clase de utilidad de
administración de almacenamiento en caché de la clase
NonEmbeddedReportCacher
Procedimiento
1.
Cree una nueva clase en el proyecto denominada NonEmbeddedReportCacher.
Public Class NonEmbeddedReportCacher
End Class
using System;
namespace MyWebApplication
{
public class NonEmbeddedReportCacher
{
public NonEmbeddedReportCacher()
{
}
}
}
2.
Agregue la interfaz ICachedReport a la firma de la clase.
Public Class NonEmbeddedReportCacher
Implements ICachedReport
public class NonEmbeddedReportCacher : ICachedReport
3.
Agregue tres instrucciones "Imports" [Visual Basic] o "using" [C#] en la parte superior de la clase.
Imports CrystalDecisions.Shared
Imports CrystalDecisions.ReportSource
Imports CrystalDecisions.CrystalReports.Engine
using CrystalDecisions.Shared;
using CrystalDecisions.ReportSource;
using CrystalDecisions.CrystalReports.Engine;
4.
En la clase, declare dos instancias de nivel de clase: una instancia de clase denominada reportFileName y
una instancia de ReportDocument denominada nonEmbeddedReportDocument.
Private reportFileName As String
Private nonEmbeddedReportDocument As ReportDocument
private string reportFileName;
private ReportDocument nonEmbeddedReportDocument;
208
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
5.
Establezca el valor del constructor para que acepte una cadena reportFileName y, en el constructor, asigne
esa cadena a la variable de clase reportFileName.
Public Sub New(ByVal reportFileName As String)
Me.reportFileName = reportFileName
End Sub
public NonEmbeddedReportCacher(string reportFileName)
{
this.reportFileName = reportFileName;
}
El resto de los pasos implementan propiedades o métodos requeridos por la interfaz:
6.
○
IsCacheable
○
ShareDBLogonInfo
○
CacheTimeOut
○
CreateReport()
○
GetCustomizedCacheKey(solicitud RequestContext)
Cree la propiedad IsCacheable, que debe devolver true.
Public Overridable Property IsCacheable() As Boolean Implements
ICachedReport.IsCacheable
Get
Return True
End Get
Set(ByVal Value As Boolean)
End Set
End Property
public virtual Boolean IsCacheable
{
get
{
return true;
}
set
{
}
}
7.
Cree la propiedad ShareDBLogonInfo, que debe devolver false.
Public Overridable Property ShareDBLogonInfo() As Boolean Implements
ICachedReport.ShareDBLogonInfo
Get
Return False
End Get
Set(ByVal Value As Boolean)
End Set
End Property
public virtual Boolean ShareDBLogonInfo
{
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
209
get
{
return false;
}
8.
}
set
{
}
Cree la propiedad CacheTimeOut, que devuelve una constante desde la clase CachedReportConstants.
Public Overridable Property CacheTimeOut() As TimeSpan Implements
ICachedReport.CacheTimeOut
Get
Return CachedReportConstants.DEFAULT_TIMEOUT
End Get
Set(ByVal Value As TimeSpan)
End Set
End Property
public virtual TimeSpan CacheTimeOut
{
get
{
return CachedReportConstants.DEFAULT_TIMEOUT;
}
set
{
}
}
9.
Cree el método CreateReport(), que devuelve un informe no incrustado cargado en la instancia
ReportDocument de nivel de clase.
Public Overridable Function CreateReport() As ReportDocument Implements
ICachedReport.CreateReport
nonEmbeddedReportDocument = New ReportDocument()
nonEmbeddedReportDocument.Load(reportFileName)
Return nonEmbeddedReportDocument
End Function
public virtual ReportDocument CreateReport()
{
nonEmbeddedReportDocument = new ReportDocument();
nonEmbeddedReportDocument.Load(reportFileName);
return nonEmbeddedReportDocument;
}
10. Cree el método GetCustomizedCacheKey() y devuelva el valor nulo.
Nota
Si este método devuelve el valor null, hace que el propio SDK de SAP Crystal Reports .NET administre la
clave de búsqueda en caché. La alternativa es crear y agregar su propio método de clave de caché
personalizado.
Public Overridable Function GetCustomizedCacheKey(ByVal request As
210
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
RequestContext) As String Implements ICachedReport.GetCustomizedCacheKey
Return Nothing
End Function
public virtual String GetCustomizedCacheKey(RequestContext request)
{
return null;
}
11. Para ver el informe, cree y ejecute el proyecto.
1.4.5.3.2.5
Enlazar con el componente ReportDocument
Modelo de objetos
Este escenario de enlace de informes usa el modelo de objeto ReportDocument.
Ubicación de los informes
Los informes se encuentran en el directorio de archivos.
Descripción
El componente ReportDocument se encuentra en el Cuadro de herramientas y proporciona un método basado en
la GUI para generar código de creación de instancias de la clase para el informe en la clase de código subyacente.
Puede especificar un informe no incrustado, un informe incrustado, o un informe incrustado almacenado en
caché.
Nota
El cuadro de diálogo usa los términos heredados "informe sin tipo" para referirse a un informe no incrustado y
"informe con tipos declarados" para referirse a un informe incrustado.
El uso de este cuadro de diálogo para agregar ReportDocument como un componente hace que se cree una
instancia de la clase ReportDocument (o la clase contenedora del informe incrustado) dentro de la región
generada automáticamente de la clase de código subyacente. A la vez, aparece un icono en la bandeja de
componentes de IDE para representar visualmente la clase de informe de la que se ha creado una instancia.
Nota
No hace falta agregar un componente ReportDocument al proyecto para crear una instancia del informe en la
clase de código subyacente. Para tener un mayor control sobre el código, es recomendable agregar el código
de creación de instancias manualmente.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
211
Información relacionada
Modelo de objetos ReportDocument [página 36]
1.4.5.3.2.6
Escenarios de enlaces de ReportDocument que
usan Crystal Services (VS.NET 2003)
Crystal Services proporciona informes de fácil acceso en Visual Studio 2003. Esta función no está disponible en
Visual Studio 2005 o Visual Studio 2008. Cuando están instalados SAP Crystal Reports y Crystal Services, éstos
últimos aparecen como un subnodo debajo de cada servidor dentro del nodo de servidores del Explorador de
servidores. El nodo Crystal Services se expande para mostrar listas de informes desde diversas ubicaciones:
●
El directorio de archivos local de la unidad de disco duro.
●
Report Application Server (RAS)
●
Plataforma SAP Business Intelligence (BIP)
Puede arrastrar y colocar cualquier informe desde estas listas a formularios Web Forms o Windows Forms.
Crystal Services normalmente muestra dos subnodos que se pueden expandir, en función de la versión de SAP
Crystal Reports que tenga instalada actualmente y en cualquier licencia adicional que pueda tener para el servidor
de aplicaciones de informes (RAS) o la plataforma SAP BusinessObjects Business Intelligence. La tabla de la
siguiente sección describe los requisitos de acceso a un nodo en particular.
Nota
Algunas versiones de la plataforma SAP BusinessObjects Business Intelligence no incluyen compatibilidad
para Crystal Services. Para obtener más información consulte la documentación sobre la plataforma SAP
BusinessObjects Business Intelligence.
Es posible que deba ajustar la configuración del servidor de seguridad para poder acceder al CMS de la
plataforma SAP BusinessObjects Business Intelligence. El puerto predeterminado del CMS es 6400. Póngase en
contacto con el administrador del sistema para obtener más información sobre la configuración de la dirección de
red y el puerto del sistema de plataforma SAP BusinessObjects Business Intelligence. Puede encontrar más
información sobre la personalización de puertos en el Manual del administrador de la plataforma SAP
BusinessObjects Business Intelligence.
Clases contenedoras
Al arrastrar un informe de Crystal Services a un formulario Web Forms o Windows Forms, se crea una instancia de
clase contenedora que hace referencia al informe en la sección de código generado de la clase de código
subyacente del formulario Web Forms o Windows Forms.
Nota
El tipo de clase contenedora varía con las versiones de SAP Crystal Reports. Vea la siguiente tabla.
212
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Los Servicios de Crystal citados en la siguiente tabla exponen los tipos de clases contenedoras de
ReportDocument.
Estos dos Crystal Services se incluyen en SAP Crystal Reports 10. Exponen grupos de informes que se atienden
desde un servidor RAS no administrado o un servidor RAS administrado. La clase contenedora se ha cambiado
(desde SAP Crystal Reports 9) a ReportDocument.
Clase contenedora
expuesta mediante
Crystal Services
Nombre del nodo si­ Versiones de SAP
tuado debajo de
Crystal Reports
Crystal Services
Descripción
Requisitos para te­
ner acceso a este
nodo
ReportDocument
Servidor de aplica­
ciones de informes
SAP Crystal Reports
10
Expone informes de Instale un servidor
un servidor RAS car­ RAS no adminis­
gados en ReportDo­ trado.
cument. Para obte­
ner más informa­
ción, vea Enlazar con
Report Application
Server (SAP Crystal
Reports 10 y versio­
nes superiores) [pá­
gina 213].
ReportDocument
Crystal Enterprise
SAP Crystal Reports
10
Expone informes
Instalar Crystal En­
desde el servidor
terprise.
RAS administrado,
que se carga en Re­
portDocument. Para
obtener más infor­
mación, vea Enlazar
a Crystal Enterprise
(SAP Crystal Reports
10 y versiones supe­
riores) [página 216].
Las versiones anteriores de Crystal Services exponen tipos de clases contenedoras que no utilizan el modelo de
objetos ReportDocument. Por lo tanto, dependen del modelo de objetos limitado proporcionado con el control
CrystalReportViewer. Para obtener más información, vea Escenarios de enlaces CrystalReportViewer que utilizan
Crystal Services [página 177].
1.4.5.3.2.6.1
Enlazar con Report Application Server (SAP
Crystal Reports 10 y versiones superiores)
Nota
Esta página describe una funcionalidad que no está disponible en SAP Crystal Reports, versión para
programadores de Microsoft Visual Studio, pero sí lo está en las versiones actualizadas.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
213
Modelo de objetos
Este escenario de enlace de informes usa el modelo de objeto ReportDocument.
Ubicación de los informes
Los informes se encuentran en el servidor RAS no administrado. La clase ReportDocument contiene el informe.
Información general sobre Crystal Services
Este escenario de enlace de informes se aplica a informes a los que se accede desde el nodo del servidor de
Crystal Services en el Explorador de servidores.
En esta sección se examina el subnodo Report Application Server de Crystal Services, dentro de SAP Crystal
Reports Developer.
[NOMBRE_DE_SERVIDOR]
●
Crystal Reports
○
Servidor de aplicaciones de informes
Descripción
El subnodo Report Application Server accede y muestra informes que ha expuesto un servidor RAS no
administrado. El nodo RAS sólo es funcional cuando se ha instalado RAS no administrado en el equipo de
desarrollo.
Cuando se arrastra y coloca un informe desde el nodo de Crystal Services>plataforma de BusinessObjects
Business Intelligence en un formulario de web o de Windows, se genera una instancia de ReportDocument. La
clase ReportDocument funciona como clase contenedora. Su objetivo es contener (representar) el informe
pasado desde el servidor RAS no administrado.
Ventajas
●
Acceso sencillo: los informes del servidor RAS no administrado se pueden ver fácilmente en una vista de árbol
y arrastrarse a un formulario Web Forms.
●
Amplia interacción mediante programación: proporciona acceso al potente modelo de objetos
ReportDocument. La clase contenedora del informe de esta versión es ReportDocument . Esta es la primera
versión de Crystal Services que da acceso al modelo de objetos ReportDocument.
214
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Desventajas
●
La codificación no es tan directa: no tan directa como la codificación de informes de RAS con el modelo de
objetos ReportClientDocument.
Información relacionada
Enlazar a Crystal Enterprise (SAP Crystal Reports 10 y versiones superiores) [página 216]
Modelo de objetos ReportDocument [página 36]
Utilizar Crystal Services [página 83]
1.4.5.3.2.6.1.1
Para utilizar Crystal Services>Report
Application Server
Requisitos previos
●
SAP Crystal Reports 10 o superior está instalado y su funcionamiento es correcto.
●
El servidor RAS no administrado está instalado y se comprueba su correcto funcionamiento.
Nota
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos [página 14].
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.
Procedimiento
1.
En Visual Studio, abra Explorador de servidores.
2.
Expanda Crystal Services y, a continuación, expanda Servidor de aplicaciones de informes.
3.
Seleccione un informe desde el árbol de Report Application Server y arrástrelo al formulario Web Form o
Windows Form.
En la parte inferior del formulario, en la vista Diseño, aparece un objeto reportDocument1.
Nota
Cuando se coloca un informe del Servidor de aplicaciones de informes en el formulario, se agrega una
instancia de la clase ReportDocument a la región de código generado por el diseñador del formulario.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
215
Cuando se crea una instancia de las clases que heredan de System.ComponentModel.Component (como
ReportDocument) y se configura en la región de código generado por el diseñador, aparece un icono de esta
clase en la parte inferior del formulario en la vista Diseño.
4.
Cambie a la vista de código y abra la región Código generado por el Diseñador de Web Forms o Windows
Forms.
Nota
Se ha creado una instancia de la clase ReportDocument y se ha configurado en esta región.
5.
En el método ConfigureCrystalReports() (creado en Configuración de proyectos [página 14]), asigne la
instancia de ReportDocument a la propiedad ReportSource del control CrystalReportViewer.
myCrystalReportViewer.ReportSource = reportDocument1
crystalReportViewer.ReportSource = reportDocument1;
6.
Para ver el informe, cree y ejecute el proyecto.
1.4.5.3.2.6.2
Enlazar a Crystal Enterprise (SAP Crystal
Reports 10 y versiones superiores)
Nota
Esta página describe una funcionalidad que no está disponible en SAP Crystal Reports, versión para
programadores de Microsoft Visual Studio, pero sí lo está en las versiones actualizadas.
Modelo de objetos
Este escenario de enlace de informes usa el modelo de objeto ReportDocument.
Ubicación de los informes
Los informes se encuentran en el servidor RAS administrado. La clase ReportDocument contiene los informes.
Información general sobre Crystal Services
Este escenario de enlace de informes se aplica a informes a los que se accede desde el nodo del servidor de
Crystal Services en el Explorador de servidores.
216
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
En esta sección se examina el subnodo de la plataforma SAP BusinessObjects Business Intelligence de Crystal
Services, dentro de SAP Crystal Reports Developer.
[NOMBRE_DE_SERVIDOR]
●
Crystal Reports
○
Crystal Enterprise
Descripción
El subnodo de la plataforma SAP BusinessObjects Business Intelligence accede y muestra informes que ha
expuesto un servidor RAS administrado dentro de la plataforma SAP BusinessObjects Business Intelligence.
El nodo de Crystal Services>plataforma SAP BusinessObjects Business Intelligence expone los informes desde
Crystal Enterprise, a través del servidor RAS administrado. El nodo de la plataforma SAP BusinessObjects
Business Intelligence es funcional, pero, si no se ha instalado la plataforma SAP BusinessObjects Business
Intelligence en el equipo de desarrollo, vaya a las propiedades de este nodo y establezca el nombre del servidor de
la plataforma SAP BusinessObjects Business Intelligence en la red.
Cuando se arrastra y coloca un informe desde el nodo de Crystal Services>plataforma de BusinessObjects
Business Intelligence en un formulario de web o de Windows, se genera una instancia de ReportDocument. La
clase ReportDocument funciona como clase contenedora. Su objetivo es contener (representar) el informe que se
pasa del servidor RAS en Crystal Enterprise.
Ventajas
●
Acceso sencillo: fácil acceso a los informes de RAS en Crystal Enterprise desde una aplicación Web.
●
Amplia interacción mediante programa: proporciona acceso al potente modelo de objetos ReportDocument.
La clase contenedora del informe de esta versión es ReportDocument. Esta es la primera versión de Crystal
Services que da acceso al modelo de objetos ReportDocument.
Desventajas
●
La codificación no es tan directa: no tan directa como la codificación de informes de RAS con el modelo de
objetos ReportClientDocument.
Información relacionada
Utilizar Crystal Services [página 83]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
217
1.4.5.3.2.6.2.1
Para usar Crystal Services>Crystal Enterprise
Requisitos previos
●
SAP Crystal Reports 10 o XI está instalado y su funcionamiento es correcto.
Nota
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos [página 14].
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.
Procedimiento
1.
En Visual Studio, abra Explorador de servidores.
2.
Expanda Crystal Services y, a continuación, expanda Crystal Enterprise.
3.
Seleccione un informe del árbol de Crystal Enterprise y arrástrelo al formulario.
En la parte inferior del formulario, en la vista Diseño, aparece un objeto reportDocument1.
Nota
Cuando se coloca un informe de Crystal Enterprise en el formulario, se agrega una instancia de la clase
ReportDocument a la región de código generado por el diseñador del formulario.
Cuando se crea una instancia de las clases que heredan de System.ComponentModel.Component
(como ReportDocument) y se configura en la región de código generado por el diseñador, aparece un
icono de esta clase en la parte inferior del formulario de la vista Diseño.
4.
Cambie a la vista de código y abra la región Código generado por el Diseñador de Web Forms o Windows
Forms.
Se ha creado una instancia de la clase ReportDocument y se ha configurado en esta región.
5.
En el método ConfigureCrystalReports() (creado en Configuración de proyectos [página 14]), asigne la
instancia de ReportDocument a la propiedad ReportSource del control CrystalReportViewer.
myCrystalReportViewer.ReportSource = reportDocument1
crystalReportViewer.ReportSource = reportDocument1;
6.
218
Cree y ejecute el proyecto Web para ver el informe.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.5.4
caché
Cuándo utilizar informes normales o almacenados en
Al planear la creación de una aplicación con el SDK de SAP Crystal Reports, una de las consideraciones más
importantes es si se van a usar informes normales o almacenados en caché. Conocer los aspectos fundamentales
del SDK que afectan al almacenamiento en caché de informes le ayuda a elegir la mejor estructura del proyecto
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio.
¿Qué son informes almacenados en caché?
Los informes almacenados en caché son objetos de informe que se han almacenado en el objeto ASP.NET Cache
para incrementar el rendimiento y la escalabilidad. SAP Crystal Reports incluye un marco específico para colocar
instancias de ReportDocument en Cache. Dicho marco almacena en caché automáticamente cualquier informe
que implemente la interfaz ICachedReport.
¿Qué es un objeto ASP.NET Cache?
Tanto en ASP como en ASP.NET, los objetos de informe se colocan en los objetos Session o Application en el
servidor Web, por dos razones:
1.
Para conservar el estado del objeto de informe siempre que se vuelve a cargar la página.
2.
Para mejorar la escalabilidad y el rendimiento mediante la colocación de informes largos o lentos de cargar en
la memoria del servidor.
En ASP.NET, se introdujo una variación ampliada del objeto Application denominado Cache. Igual que ocurre con
Application, Cache continúa conservando instancias únicas de un objeto de informe. Sin embargo, Cache añade
inteligencia que busca dependencias basadas en archivo, clave u hora. Estas dependencias pueden caducar
automáticamente e incluso actualizar los objetos del informe dentro de Cache para mantener el contenido del
objeto Cache actual.
Los informes guardados en Cache son específicos por usuario y por sesión.
Nota
Los términos "objeto Cache" y "Cache" se utilizan intercambiablemente, como ocurre con los términos "objeto
Session" y "Session" u "objeto Application" y "Application," pero su significado es el mismo. El término "objeto"
resalta el hecho de que se trata de objetos de persistencia que se ejecutan dentro del espacio de memoria
de .NET Framework en el servidor Web.
¿Cómo se colocan los objetos de informe en el objeto ASP.NET Cache?
Puede colocar los objetos de informe en el objeto ASP.NET Cache de dos formas:
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
219
●
Asignar el objeto de informe a Cache con la misma sintaxis con la que se asigna un objeto de informe a
Session o Application; es decir, asignación explícita.
●
Crear una instancia de la versión del informe que implemente la interfaz ICachedReport. El motor del informe
busca cualquier objeto que implemente esta interfaz y automáticamente coloca dicho objeto en Cache; es
decir, asignación implícita.
¿Qué es la interfaz ICachedReport?
La interfaz ICachedReport marca las clases del informe que permiten que ICachedReport funcione con el marco
de almacenamiento en caché de SAP Crystal Reports. Este marco personalizado proporciona una capa sobre el
objeto ASP.NET Cache, para satisfacer las necesidades específicas del almacenamiento en caché del informe.
La interfaz ICachedReport incluye firmas de método que, cuando se implementan en la clase del informe, indican
al marco cómo almacenar en caché esa clase en particular.
¿Cuáles son las funciones de almacenamiento en caché de informes incluidas
cuando se incrusta un informe en un proyecto de Visual Studio?
Al crear o importar un informe a un proyecto de Visual Studio, el informe se incrusta en el proyecto y se generan
automáticamente dos clases:
●
Una clase contenedora de informe, con el mismo nombre del informe.
Esta clase contenedora representa el informe del proyecto y hereda de ReportDocument. Para obtener más
información, vea Comparar informes incrustados y no incrustados [página 163].
●
Una clase de utilidad de administración de caché (denominada clase Cached[ReportName]).
Esta clase de utilidad de administración de caché se encarga del almacenamiento en caché de ese informe
incrustado, mediante el uso del objeto ASP.NET Cache y del marco de almacenamiento en caché integrado en
el SDK de SAP Crystal Reports.
La tabla siguiente muestra los elementos que se generan cuando al agregar el informe de agrupamiento
jerárquico:
¿Cómo se llama?
¿Qué es?
Hierarchical Grouping.rpt
El informe
Clase Hierarchical_Grouping
La clase contenedora de informe
Clase CachedHierarchical_Grouping
La clase de utilidad de administración de caché se uti­
liza para administrar el almacenamiento en caché de la
clase contenedora de informe
La clase contenedora de informe y la clase de utilidad de administración de caché tienen tareas distintas:
●
La clase contenedora de informe hereda de ReportDocument y, por lo tanto, tiene acceso al modelo de
objetos ReportDocument completo. Se trata de la clase básica en la que programa para interactuar con el
informe.
●
La clase de utilidad de administración de caché administra y almacena las instancias de la clase contenedora
de informe en el objeto ASP.NET Cache. Reconoce instancias distintas de la clase contenedora de informe y
220
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
evita que esas instancias se sobrescriban entre sí en Cache. Por ejemplo, reconoce diferencias creadas al
cambiar parámetros e inicios de sesión. Para ello, asigna una clave única para cada instancia única de la clase
contenedora de informe.
●
Para identificarse respecto a la funcionalidad de almacenamiento en caché de SAP Crystal Reports .NET
Framework, la utilidad de administración de caché implementa la interfaz ICachedReport.
Tanto la clase contenedora de informe como la clase de utilidad de administración de caché se generan en el
mismo archivo de clase. Para ver ambas clases, haga clic con el botón secundario en el archivo de clase de
informe en el Explorador de soluciones y elija Ver código. Cuando se abre el archivo, puede encontrar el código de
la clase contenedora de informe en la parte superior del mismo y el de la clase de utilidad de administración de
caché hacia la mitad.
Nota
Para obtener información sobre cómo enlazar el control CrystalReportViewer a esta clase de utilidad de
administración de caché, vea Enlazar a una clase de informe incrustado almacenado en caché [página 202].
Para crear su propia clase de utilidad de administración de caché, vea Enlazar a un informe no incrustado
cargado en una clase de utilidad de administración de caché [página 205].
Cuándo se deben almacenar en caché los informes
Conserve sólo un porcentaje bajo de objetos de informe en el objeto ASP.NET Cache. La mayoría de los objetos de
informe tienen una compartibilidad baja; es decir, no se utilizan como recursos compartidos con otros objetos.
Por lo tanto, no utilizan Cache de forma económica. Su persistencia es necesaria. Por tanto, coloque los objetos
de informe en el objeto Session del usuario.
Coloque el objeto de informe en Cache de ASP.NET sólo si el mismo usuario visualizará el informe varias veces en
una sesión determinada. Esto es particularmente importante si el objeto de informe es muy grande o si tiene una
consulta que es tan compleja que se tardan varios minutos en recuperar los datos.
Información relacionada
Enlazar a una clase de informe incrustado almacenado en caché [página 202]
1.4.5.5
Visualizar un informe en tiempo de diseño
SAP Crystal Reports permite obtener una vista previa de un informe en tiempo de diseño en Visual Studio.
Cuando se asigna un informe a la propiedad ReportSource en la ventana Propiedades, en el formulario de
Windows Forms o una página ASPX, se muestra una vista previa del informe.
Los datos estáticos, como fechas, imágenes o campos de texto, se mostrarán a medida que aparezcan en tiempo
de ejecución. Los datos dinámicos, como los datos de una base de datos, pueden usar valores artificiales en lugar
de datos del origen de datos. Si el informe contiene datos guardados, dichos datos guardados aparecerán en la
vista previa en tiempo de diseño.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
221
SAP Crystal Reports Designer incrustado proporciona una funcionalidad de visualización a través de la ficha Vista
previa. Cuando visualice el informe en la ficha de Vista previa, SAP Crystal Reports intentará recuperar nuevos
datos del origen de datos especificado. La vista previa en tiempo de diseño no intentará recuperar datos. En su
lugar, mostrará los datos que se encuentren guardados en ese momento en el informe.
Nota
La ficha Vista previa no está disponible en SAP Crystal Reports Designer para Visual Studio .NET 2003
incrustado.
Información relacionada
Ficha Vista previa [página 653]
1.4.6
Personalizar el control CrystalReportViewer
El control CrystalReportViewer se usa en .NET Framework para enlazar y mostrar informes. El control
CrystalReportViewer predeterminado incluye elementos de interfaz de usuario para facilitar la visualización,
guardado y navegación en un informe.
Según su aplicación, puede interesarle modificar ciertos elementos del control predeterminado. SAP
Crystal Reports permite personalizar de diferentes formas el aspecto del visor que se muestra en la aplicación.
Entre otras opciones:
●
Se puede eliminar del visor la barra de herramientas de CrystalReportViewer.
●
Se pueden agregar o eliminar los botones de la barra de herramientas mediante programación.
●
El control CrystalReportViewer admite la personalización mediante CSS o temas.
En esta sección se detalla cómo modificar el control del visor para su aplicación.
Clases usadas para visualizar informes
●
CrystalDecisions.Windows.Forms.CrystalReportViewer
Proporciona propiedades, métodos y eventos que modifican o recuperan información sobre como aparece y
funciona el control CrystalReportViewer.
●
CrystalDecisions.Web.CrystalReportViewer
Proporciona propiedades, métodos y eventos que modifican o recuperan información sobre como aparece y
funciona el control CrystalReportViewer.
Información relacionada
¿Cómo utilizo los controles de visores de informes? [página 42]
222
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.6.1
Indicador del procesamiento de informes
El indicador de procesamiento de informes ofrece una indicación visual del tiempo de procesamiento en el sitio
Web de SAP Crystal Reports. Si el tiempo de procesamiento de un informe supera un umbral especificado,
aparecerá un cuadro de diálogo para ofrecer una indicación del progreso de la acción que se está realizando.
Tanto el texto del cuadro de diálogo como el tiempo que debe transcurrir antes de que aparezca el cuadro se
pueden especificar en el archivo Web.Config de su sitio web.
El texto predeterminado es: Espere mientras el documento se procesa.
El tiempo predeterminado antes de que se muestre el indicador de procesamiento de informes es de
200 milisegundos.
Información relacionada
Configuración del archivo Web.Config [página 19]
1.4.6.1.1
Para personalizar el texto del indicador de
procesamiento de informes
Contexto
El texto del indicador de procesamiento de informes se configura en el archivo Web.Config de su sitio web.
Procedimiento
1.
Agregue un control CrystalReportViewer a la aplicación.
2.
Abra el archivo Web.Config.
Si no tiene un archivo Web.Config, haga clic en
Depurar
Iniciar depuración
para depurar la aplicación.
Visual Studio le pedirá que cree un nuevo archivo Web.Config. Haga clic en Aceptar para crear el nuevo
archivo.
3.
En el archivo Web.Config, agregue la configuración NameValueSectionHandler como primer elemento
secundario del elemento de configuración.
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="crystalReportViewer"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
223
El elemento configSections debe ser un elemento secundario y único del elemento configuration. Si ya
tiene un elemento configSections para SAP Crystal Reports, agregue el elemento section de
CrystalReportViewer al nodo existente de configSections.
4.
Agregue la configuración processingIndicatorText directamente después del elemento
configSections.
<businessObjects>
<crystalReports>
<crystalReportViewer>
<add key="processingIndicatorText" value="Thank you for waiting"/>
</crystalReportViewer>
</crystalReports>
</businessObjects>
5.
Sustituya el texto del atributo value con el mensaje que desea que se muestre en el indicador de
procesamiento de informes.
El elemento processingIndicatorText controla el texto que se muestra en el indicador de procesamiento
de informes. El texto predeterminado es: Espere mientras el documento se procesa.
Resultados
El control CrystalReportViewer usará ahora el mensaje personalizado del indicador de procesamiento de
informes.
Ejemplo
En este ejemplo se reduce el tiempo que debe esperar el indicador de procesamiento de informes a
20 milisegundos y se cambia el mensaje que se muestra a “Thank you for waiting”.
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="crystalReportViewer"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<crystalReportViewer>
<add key="processingIndicatorText" value="Thank you for waiting."/>
<add key="processingIndicatorDelay" value="20"/>
</crystalReportViewer>
</crystalReports>
</businessObjects>
<appSettings>
<add key="CrystalImageCleaner-AutoStart" value="true"/>
<add key="CrystalImageCleaner-Sleep" value="60000"/>
<add key="CrystalImageCleaner-Age" value="120000"/>
</appSettings>
<connectionStrings/>
<system.web>
<compilation debug="true">
224
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
<assemblies>
<add assembly="CrystalDecisions.Web, Version=12.0.2000.0,
Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.Shared, Version=12.0.2000.0,
Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.ReportSource, Version=12.0.2000.0,
Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.CrystalReports.Engine,
Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
</assemblies>
</compilation>
<authentication mode="Windows"/>
<httpHandlers>
<add verb="GET" path="CrystalImageHandler.aspx"
type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web,
Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
</httpHandlers>
</system.web>
</configuration>
1.4.6.1.2
Para cambiar el tiempo que debe transcurrir antes
de que se muestre el indicador de procesamiento de informes
Contexto
El tiempo que debe transcurrir antes de que se muestre el indicador de procesamiento de informes se configura
en el archivo Web.Config del sitio web. El elemento processingIndicatorDelay controla el tiempo que
transcurre antes de que aparezca el indicador de procesamiento de informes.
Procedimiento
1.
Agregue un control CrystalReportViewer a la aplicación.
2.
Abra el archivo Web.Config.
Si no tiene un archivo Web.Config, haga clic en
Depurar
Iniciar depuración
para depurar la aplicación.
Visual Studio le pedirá que cree un nuevo archivo Web.Config. Haga clic en Aceptar para crear el nuevo
archivo.
3.
En el archivo Web.Config, agregue la configuración NameValueSectionHandler como primer elemento
secundario del elemento de configuración.
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="crystalReportViewer"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
225
El elemento configSections debe ser un elemento secundario y único del elemento configuration. Si ya
tiene un elemento configSections para SAP Crystal Reports, agregue el elemento section de
CrystalReportViewer al nodo existente de configSections.
4.
Agregue la configuración processingIndicatorDelay directamente después del elemento
configSections.
<businessObjects>
<crystalReports>
<crystalReportViewer>
<add key="processingIndicatorDelay" value="20"/>
</crystalReportViewer>
</crystalReports>
</businessObjects>
5.
Sustituya el texto del atributo value con la indicación del tiempo que debe transcurrir antes de que aparezca
el indicador de procesamiento de informes.
Este valor se indica en milisegundos. Si se establece este valor en 0, se deshabilitará el indicador de
procesamiento de informes. El valor predeterminado es 200 milisegundos.
Ejemplo
En este ejemplo se reduce el tiempo que debe esperar el indicador de procesamiento de informes a
20 milisegundos y se cambia el mensaje que se muestra a “Thank you for waiting”.
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="businessObjects">
<sectionGroup name="crystalReports">
<section name="crystalReportViewer"
type="System.Configuration.NameValueSectionHandler" />
</sectionGroup>
</sectionGroup>
</configSections>
<businessObjects>
<crystalReports>
<crystalReportViewer>
<add key="processingIndicatorText" value="Thank you for waiting."/>
<add key="processingIndicatorDelay" value="20"/>
</crystalReportViewer>
</crystalReports>
</businessObjects>
<appSettings>
<add key="CrystalImageCleaner-AutoStart" value="true"/>
<add key="CrystalImageCleaner-Sleep" value="60000"/>
<add key="CrystalImageCleaner-Age" value="120000"/>
</appSettings>
<connectionStrings/>
<system.web>
<compilation debug="true">
<assemblies>
<add assembly="CrystalDecisions.Web, Version=12.0.2000.0,
Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.Shared, Version=12.0.2000.0,
Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.ReportSource, Version=12.0.2000.0,
Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
<add assembly="CrystalDecisions.CrystalReports.Engine,
Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692FBEA5521E1304"/>
</assemblies>
226
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
</compilation>
<authentication mode="Windows"/>
<httpHandlers>
<add verb="GET" path="CrystalImageHandler.aspx"
type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web,
Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>
</httpHandlers>
</system.web>
</configuration>
1.4.6.2 Admitir varios idiomas con el control
CrystalReportViewer
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio incluye el soporte para clientes web
y para Windows multilingües, a través de la localización dinámica.
La localización dinámica permite a los usuarios para ver información sobre herramientas y otro contenido del
control CrystalReportViewer en el idioma deseado. Para habilitar la localización dinámica, debe poder acceder a
los archivos de recursos del idioma que desee.
Información relacionada
Tutorial: Configurar la compatibilidad con clientes multilingües [página 584]
En este tutorial aprenderá a configurar la compatibilidad con clientes multilingües en un sitio Web o un proyecto
para Windows.
1.4.6.2.1
Archivos de recursos de idioma
Los archivos de recursos de idioma contienen una serie de parejas de claves y valores que indican el texto que se
muestra en la aplicación. Cada elemento de texto que aparece en una aplicación de Crystal Reports tiene su valor
correspondiente en el archivo de recursos de idioma que especifica cómo debe mostrarse ese texto en cada
idioma.
Archivos de recursos de idioma
En el servidor Web o el cliente Windows, puede acceder a los recursos de idioma del control CrystalReportViewer
desde dos orígenes posibles:
●
DLL de recursos de idioma predeterminadas, que incluyen lo siguiente:
○
Inglés (en)
○
Francés (fr)
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
227
●
○
Alemán (de)
○
Español (es)
○
Italiano (it)
○
Japonés (jp)
○
Coreano (ko)
○
Chino simplificado (zh-chs)
○
Chino tradicional (zh-cht)
Archivos de recursos de idioma personalizados, que crea como cadenas de texto y posteriormente compila
como DLL de recursos de idioma personalizadas.
Recursos neutros y no neutros
Los recursos de idioma incluyen recursos neutros y no neutros.
Los recursos neutros representan una configuración de idioma general, como por ejemplo en (para inglés), fr
(para francés) y jp (para japonés).
Los recursos no neutros representan una versión de idioma que se cualifica basándose en un criterio adicional,
como la región: por ejemplo, de-AT para alemán (Austria).
Recursos globales y locales
Los recursos de idioma predeterminados se instalan en el GAC y por ello están siempre disponibles globalmente,
pero a los recursos de idioma personalizados se puede acceder global o localmente.
La carpeta de recursos de idioma personalizados se puede almacenar y compartir en una ubicación central, o se
puede copiar en el directorio local de la aplicación Web o para Windows.
Si los recursos de idioma personalizados se almacenan en una ubicación central, se denominan recursos
globales. En dicho caso, se debe informar a la aplicación Web o para Windows de la ubicación de los recursos
mediante un archivo de configuración XML. Para que un recurso global se cargue correctamente, el nombre de la
carpeta que contiene los archivos de recursos debe ajustarse a la configuración regional de idioma.
Si los recursos de idioma personalizados se copian en el directorio local, se denominan recursos locales. En dicho
caso, no es necesario un archivo de configuración. Para que un recurso local se cargue correctamente, los
archivos de recursos y el nombre de la carpeta que contiene los archivos de recursos deben ajustarse a la
configuración regional de idioma.
Elegir el uso de recursos globales o locales
Los recursos globales son adecuados cuando se tienen que compartir con más de una aplicación. Por ejemplo
para un servidor Web, con varios sitios Web que requiere que se comparta un conjunto común de recursos de
idioma para todos los sitios Web, es conveniente utilizar recursos globales.
228
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Los recursos locales son preferibles cuando los recursos los usa una única aplicación, cuya amplia distribución
requiere una configuración simple. Por ejemplo para una aplicación de Windows, formada por una única carpeta
de aplicación que se desea distribuir ampliamente, es conveniente utilizar recursos locales.
En la mayoría de los casos, las aplicaciones Web son más adecuadas para los recursos globales, y las aplicaciones
para Windows son más adecuadas para los recursos locales.
Qué recurso se carga primero
Si configura los recursos globales y locales para una aplicación particular, los recursos locales tendrán más
prioridad (serán los primeros en el orden de carga). Si desea garantizar que se utilicen los recursos globales,
verifique que el archivo de configuración es correcto, y elimine la carpeta de recursos locales.
Los recursos neutros y no neutros también se ven afectados por el orden de carga. Si ha configurado los recursos
neutros y no neutros para un idioma concreto (por ejemplo "Alemán (Austria)" y "Alemán"), se seleccionará
primero el recurso no neutro.
En ambos casos, lo específico tiene preferencia sobre lo general.
Presentación en el lado del cliente
Los siguientes factores determinan el idioma que se mostrará en la aplicación cliente en tiempo de ejecución:
En una aplicación de Windows:
●
La configuración de las opciones regionales del equipo de cada usuario.
En un sitio Web:
●
La configuración de las opciones regionales del servidor Web.
●
La configuración de idioma del explorador del cliente.
●
La propiedad Culture, que se configura en una página ASPX independiente.
1.4.6.2.2
Compatibilidad con codificación de caracteres
Unicode y GB18030
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio incluye el soporte para caracteres
internacionales en los estándares de los siguientes sets de caracteres:
●
Unicode
●
GB18030
Para entender la forma en la que SAP Crystal Reports admite la codificación Unicode y GB18030, deberá
comprender las tres vistas de caracteres diferentes (repertorio de caracteres, caracteres como puntos de código
y caracteres como datos codificados). También tendrá que entender las relaciones entre los puntos de código (un
término más preciso para los caracteres codificados) y las unidades de código.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
229
1.4.6.2.2.1
Vistas de caracteres
Para entender los estándares de conjunto de caracteres, deberá distinguir entre las tres vistas de caracteres
diferentes:
●
Repertorio de caracteres (la lista de caracteres abstracta).
●
Caracteres como puntos de código con valores escalares.
●
Caracteres como datos codificados.
Repertorio de caracteres (la lista de caracteres abstracta)
El repertorio de caracteres es una la lista abstracta de más de un millón de caracteres que se encuentran en una
gran variedad de sistemas de escritura, incluido el latín, cirílico, chino, coreano, japonés, hebreo y arameo. Otros
símbolos como los de la notación musical también se incluyen en el repertorio de caracteres.
Los estándares Unicode y GB18030 tienen un repertorio de caracteres. Cuando se añaden nuevos caracteres a un
estándar, el otro estándar también añade dichos caracteres para mantener la paridad.
Caracteres como puntos de código con valores escalares
Nota
Esta segunda vista de caracteres sólo se aplica a Unicode, no a GB18030.
Cada carácter del repertorio de caracteres se asigna a un punto de código. Cada punto de código tiene un valor
numérico específico, que se conoce como su valor escalar. El valor escalar a menudo se expresa en formato
hexadecimal.
Los puntos de código existen en un espacio de código. El espacio de código consta de un intervalo de valores
escalares, que se dividen en dos planos:
●
Plano multilingüe básico (64 k de tamaño).
En Unicode, la expresión hexadecimal de los valores de este plano inferior va desde U+0000 hasta U+FFFF.
●
Plano multilingüe suplementario (16 secciones adicionales de 64 k de tamaño).
En Unicode, la expresión hexadecimal de los valores de este plano superior va desde U+10000 hasta U
+10FFFF.
El espacio de código completo de todos los valores escalares posibles es 17 * 64 k de tamaño (1.088.000 valores
posibles).
Caracteres como datos codificados
Cada formato de codificación convierte los caracteres del repertorio de caracteres en datos codificados.
230
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
En GB18030, los datos codificados se derivan directamente del repertorio de caracteres: el concepto de un valor
escalar como un intermedio entre el repertorio de caracteres y los datos codificados sólo está limitado a Unicode.
En Unicode, los datos codificados se obtienen aplicando un algoritmo al valor escalar.
Unicode define tres formatos de codificación de caracteres:
●
UTF-8
●
UTF-16
●
UTF-32
1.4.6.2.2.2
código
Relaciones entre puntos de código y unidades de
Para entender cómo SAP Crystal Reports, versión para programadores de Microsoft Visual Studio</pname>
admite GB18030 y Unicode, es importante comprender las relaciones entre los puntos de código y las unidades
de código.
Puntos de código y unidades de código
En cada codificación, a los puntos de código se le asigna una o varias unidades de código.
Una unidad de código es una unidad simple dentro de cada formato de codificación. El tamaño de la unidad de
código equivale a la medida en bits de la codificación particular:
●
Una unidad de código en UTF-8 consta de 8 bits.
●
Una unidad de código en UTF-16 consta de 16 bits.
●
Una unidad de código en UTF-32 consta de 32 bits.
●
En GB18030, una unidad de código consta de 8 bits.
Número de unidades de código en cada punto de código
El número de unidades de código que se deben asignar a cada punto de código varía según el formato de
codificación:
●
UTF-8
Varias unidades de código por punto de código son habituales en UTF-8 porque usa unidades de código
pequeñas. Los puntos de código se asignarán a una, dos, tres o cuatro unidades de código.
●
UTF-16
Las unidades de código UTF-16 son el doble de grandes que las de 8 bits. Por lo tanto, los puntos de código
con un valor escalar inferior a U+10000 se codificarán con una única unidad de código.
Para los puntos de código con un valor escalar de U+10000 o superior, se necesitan dos unidades de código
por cada punto de código. Estos pares de unidades de código tienen un término exclusivo en UTF-16: "pares
suplentes de Unicode".
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
231
Nota
La compatibilidad con pares suplentes de Unicode se tratará a continuación.
●
UTF-32
La unidad de código de 32 bits usada en UTF-32 es lo suficientemente grande para que cada punto de código
se codifique como una única unidad de código.
●
GB18030
Varias unidades de código por punto de código son habituales en GB18030 porque usa unidades de código
pequeñas. Los puntos de código se asignarán a una, dos, o cuatro unidades de código.
Compatibilidad con pares suplentes de Unicode
Algunos sistemas de escritura compatibles con Unicode contienen caracteres cuyos puntos de código tienen un
valor escalar de U+10000 o superior. En UTF-16, estos puntos de código se codifican mediante pares suplentes.
Es importante que los pares suplentes de Unicode se procesen adecuadamente. Por ejemplo, al trabajar con texto
en una aplicación que use UTF-16 para la codificación, el cursor de texto debe desplazarse por cada punto de
código como un carácter de texto individual al agregar, eliminar o seleccionar caracteres para cortar, copiar o
pegar.
1.4.6.2.2.3
Compatibilidad de SAP Crystal Reports con
GB18030 a través de Unicode
SAP Crystal Reports, versión para programadores de Microsoft Visual Studio</pname> no admite GB18030
directamente. En su lugar, accede a GB18030 a través de valores que ya se han convertido a uno de los formatos
de codificación de Unicode.
Las conversiones se facilitan gracias a una serie de orígenes incluido .NET Framework, ciertos controladores de
base de datos y el sistema operativo Windows. El texto se almacena normalmente en la unidad de disco duro
como UTF-8, y se carga en memoria como UTF-16. SAP Crystal Reports admite pares suplentes de Unicode en
UTF-16.
Ejemplos de compatibilidad con GB18030 usando Unicode
Las áreas más importantes que hay que conocer en las que compatibilidad con GB18030 se realiza a través de la
conversión a Unicode son las siguientes:
●
232
Bases de datos que contienen datos codificados en GB18030.
Los datos de bases de datos codificados en GB18030 sólo se admiten cuando el controlador de bases de
datos convierte los datos en UTF-16 cuando los obtiene.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Nota
Microsoft SQL Server 2005 convierte los datos GB18030 en UTF-16 cuando los obtiene. Para otros
servidores, consulte a su proveedor de bases de datos.
●
DataSets que exponen los datos de un origen GB18030.
Independientemente de su origen, los DataSets se formatean como XML, que se codifica con UTF-8.
●
Servicios Web que exponen los datos de un origen GB18030.
Todo el texto enviado o recibido en un servicio Web ya está convertido a Unicode.
Casos de GB18030 no admitidos
La situación principal en la que SAP Crystal Reports no admite GB18030 es al acceder o importar archivos de
texto codificados mediante GB18030.
El archivo de texto codificado mediante GB18030 lo debe convertir primero a Unicode un tercero, en cuyo
momento SAP Crystal Reports puede interactuar con el archivo de texto codificado mediante Unicode.
1.4.6.3
Administrar eventos de error
En versiones anteriores de SAP Crystal Reports, versión para programadores de Microsoft Visual Studio, siempre
que use el control CrystalReportViewer tiene que buscar todas las excepciones que se produzcan. Las
excepciones que se quedaban sin detectar interrumpían el procesamiento de la página y se mostraba un error.
Para evitar interrupciones y errores, se ha agregado un nuevo evento al control CrystalReportViewer, el
evento Error. Cuando se utiliza el evento Error, el control CrystalReportViewer visualiza mensajes de
excepción sin interrupciones en la parte superior del control CrystalReportViewer.
1.4.6.3.1
Para suprimir la página con error mediante el
método de evento Error
Contexto
Para suprimir la excepción producida, se llama al método de evento Error y se establece
ErrorEventArgs.Handled en True en el controlador de eventos.
Procedimiento
1.
Agregue el método de evento Error a la clase de código subyacente.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
233
2.
Establezca ErrorEventArgs.Handled en True en el controlador de eventos.
Ejemplo
Sub myCrystalReportViewer_Error(ByVal source As Object, ByVal e As
CrystalDecisions.Web.ErrorEventArgs)
e.Handled = True
End Sub
void crystalReportViewer_Error(object source,
CrystalDecisions.Web.ErrorEventArgs e)
{
e.Handled = true;
}
1.4.6.4
Personalizar el control CrystalReportViewer con CSS
El aspecto visual del control CrystalReportViewer se crea mediante el uso de gráficos y una hoja de estilo en
cascada (CSS).
La hoja de estilos que tiene el nombre default.css se almacena en un subdirectorio del directorio virtual del
visor que se denomina css.
Nota
En Visual Studio 2005 y versiones posteriores (y la versión 2.0 de ASP.NET), la apariencia de los controles
visuales se puede administrar mediante una nueva herramienta denominada Temas. Los temas se pueden
aplicar al control CrystalReportViewer con el fin de aplicar una apariencia coherente a los controles de una
página o en un sitio Web completo.
Información relacionada
Personalizar el control CrystalReportViewer con temas [página 235]
Establecer clase CSS (cuadro de diálogo) [página 942]
Dar formato a informes mediante hojas de estilo en cascada [página 736]
234
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.6.4.1
Personalizar la hoja de estilos en cascada para el
control CrystalReportViewer
Contexto
A la hoja de estilos se tiene acceso desde la propiedad CssFileName del control CrystalReportViewer, que se
puede ver desde la ventana Propiedades cuando se selecciona el control CrystalReportViewer en la vista
Diseño.
Procedimiento
1.
Cree un sitio Web con un control CrystalReportViewer y un informe de Crystal.
2.
Compile y ejecute el proyecto al menos una vez para ver el control CrystalReportViewer con su configuración
de estilo predeterminada y, a continuación, salga del modo de depuración.
3.
Abra la página Default.aspx en la vista Diseño.
4.
Haga clic una vez en el control CrystalReportViewer para seleccionarlo.
5.
En la ventana Propiedades, busque la ruta de directorio de archivos en la propiedad CssFileName al archivo
"default.css".
6.
En el Explorador de Windows, busque este archivo y cópielo en el directorio del sitio Web.
7.
Cambie el nombre del archivo a "custom.css".
8.
Edite la propiedad CssFileName para que indique el directorio del sitio Web y el nombre de archivo
"custom.css".
9.
Vuelva a compilar y verifique que el control CrystalReportViewer ve el archivo custom.css en el directorio del
sitio Web local.
10. Salga del modo de depuración.
11. Abra el archivo "custom.css" y edite la hoja de estilos.
12. Vuelva a compilar y verifique que los cambios se han aplicado al control CrystalReportViewer.
1.4.6.5
temas
Personalizar el control CrystalReportViewer con
Los temas son una herramienta destinada a dar una apariencia común a todos los controles visuales de una
página (o de todo el sitio web).
En el nivel de página, para administrar la apariencia de los controles visuales se establece la propiedad Theme de
un control visual en el nombre de un tema. El tema se aplica a todos los controles visuales de la página.
El control CrystalReportViewer es compatible con los temas de ASP.NET 2.0. Los cambios que realice en un tema
se extienden al control CrystalReportViewer y a los demás controles visuales de la página.
Para obtener más información sobre cómo establecer y personalizar los temas en ASP.NET 2.0, vea la
documentación de la versión 2.0 de .NET Framework.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
235
Información relacionada
Personalizar el control CrystalReportViewer con CSS [página 234]
1.4.6.6 Personalizar la barra de herramientas de
CrystalReportViewer
La barra de herramientas de CrystalReportViewer contiene botones que controlan funciones frecuentes de
CrystalReportVIewer, como imprimir, exportar o cambiar la página que se puede visualizar en ese momento.
Personalizar los botones de la barra de herramientas
La barra de herramientas de CrystalReportViewer contiene botones que controlan funciones frecuentes de
CrystalReportVIewer, como imprimir, exportar o cambiar la página que se puede visualizar en ese momento.
La visibilidad de cada botón del control CrystalReportViewer se gestiona a través de su correspondiente
propiedad de la clase CrystalReportViewer. Los nombres de las propiedades varían entre las versiones
Windows y Web del control CrystalReportViewer.
En un sitio web, el aspecto de la barra de herramientas se puede controlar mediante CSS o mediante temas
ASP .Net. Puede cambiar el aspecto de los iconos predeterminados de los botones cambiando las imágenes en el
directorio virtual del visor.
Quitar la barra de herramientas
Puede quitar la barra de herramientas del control CrystalReportViewer mediante programación o a través del
panel de tareas inteligentes. Puede crear controles personalizados para imitar el comportamiento de varios
botones de la barra de herramientas de CrystalReportViewer.
Información relacionada
Personalizar el control CrystalReportViewer con CSS [página 234]
Personalizar el control CrystalReportViewer con temas [página 235]
Directorio de visores [página 13]
236
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.6.6.1
Controlar los botones que aparecen en la barra de
herramientas de CrystalReportViewer
Se puede habilitar o deshabilitar individualmente cada uno de los botones de la barra de herramientas de
CrystalReportViewer.
La visibilidad de cada botón del control CrystalReportViewer se gestiona a través de su correspondiente
propiedad de la clase CrystalReportViewer. Existen dos controles CrystalReportViewer en el SDK de SAP
Crystal Reports .NET. Para un sitio web, usará la clase CrystalDecisions.Web.CrystalReportViewer. Para
una aplicación de Windows, usará la clase CrystalDecisions.Windows.Forms.CrystalReportViewer.
El nombre de la propiedad que controla la visibilidad de un botón de la barra de herramientas variará en función
de la versión del control CrystalReportViewer que se use. Para la clase
CrystalDecisions.Web.CrystalReportViewer, cada propiedad comienza con “Has”, como
HasExportButton, HasPrintButton o HasSearchButton. Para la clase
CrystalDecisions.Windows.Forms.CrystalReportViewer, cada propiedad comienza con “Show”, como
ShowExportButton, ShowPrintButton o ShowSearchButton.
Para obtener más información sobre la clase CrystalDecisions.Web.CrystalReportViewer o la clase
CrystalDecisions.Windows.Forms.CrystalReportViewer, consulte SAP Crystal Reports .NET API
Reference.
Nota
Al quitar un botón de la barra de herramientas no se deshabilitará el comportamiento correspondiente.
Ejemplo
Este ejemplo muestra cómo quitar varios botones de la barra de herramientas de CrystalReportViewer en un
sitio web.
Private Sub ConfigureCrystalReports()
CrystalReportViewer1.HasPrintButton = False
CrystalReportViewer1.HasExportButton = False
CrystalReportViewer1.HasSearchButton = False
End Sub
private void ConfigureCrystalReports()
{
InitializeComponent();
crystalReportViewer1.HasPrintButton = false;
crystalReportViewer1.HasExportButton = false;
crystalReportViewer1.HasSearchButton = false;
}
Información relacionada
Para quitar el botón de impresión del control CrystalReportViewer [página 113]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
237
Para quitar el botón de exportación del control CrystalReportViewer [página 126]
1.4.6.6.2 Para quitar la barra de herramientas de
CrystalReportViewer
Contexto
Sugerencias
Puede quitar la barra de herramientas de la aplicación mediante programación o hacerlo desmarcando la
casilla de verificación Mostrar barra de herramientas en el panel de tareas inteligentes Tareas de
CrystalReportViewer.
Procedimiento
1.
Agregue un control CrystalReportViewer a la aplicación.
2.
Establezca la propiedad CrystalReportViewer.DisplayToolbar como falsa.
Resultados
Al ejecutar la aplicación, la barra de herramientas ya no aparecerá en el control CrystalReportViewer.
Ejemplo
Private Sub ConfigureCrystalReports()
CrystalReportViewer1.DisplayToolbar = False
End Sub
private void ConfigureCrystalReports()
{
InitializeComponent();
crystalReportViewer1.DisplayToolbar = false;
}
238
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.6.6.3 Para cambiar los botones predeterminados de la
barra de herramientas en el visor web
Contexto
La barra de herramientas de CrystalReportViewer está formada por diferentes gráficos que representan la
mayoría de las propiedades disponibles. Los gráficos se almacenan en el directorio virtual de visores de la versión
de SAP Crystal Reports, versión para programadores de Microsoft Visual Studio.
Para un sitio Web, la barra de herramientas usa gráficos para representar las siguientes propiedades:
●
Árbol de grupo
●
Exportar
●
Imprimir
●
Sintetizar
●
Exploración de páginas: página primera, última, anterior y siguiente
●
Ir a página
●
Buscar
●
Logotipo de SAP BusinessObjects
No es posible cambiar estos botones a su propio conjunto de iconos personalizados.
Procedimiento
1.
Desplácese hasta el directorio virtual del visor.
2.
Haga doble clic en la carpeta images.
3.
Haga doble clic en la carpeta toolbar.
En la carpeta toolbar, puede encontrar todas las imágenes utilizadas para la barra de herramientas de
CrystalReportViewer.
4.
Reemplace las imágenes por otras que elija, o abra las imágenes en un editor de gráficos para modificarlas.
No obstante, se conservará el nombre de la imagen.
Resultados
Se cambiarán las imágenes de la barra de herramientas de CrystalReportViewer para todas las aplicaciones
web que usen ese directorio virtual de visores.
Información relacionada
Directorio de visores [página 13]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
239
1.4.7
Uso de los informes de sólo lectura de SAP Crystal
Reports (RPTR)
Los informes de sólo lectura de SAP Crystal Reports (RPTR) son informes de Crystal que pueden verse en las
aplicaciones del visor de informes, pero que no pueden modificarse con el SDK ni abrirse con las aplicaciones del
diseñador de informes. Esto permite proteger la propiedad intelectual al impedir que los usuarios modifiquen el
informe u obtengan información sobre la lógica comercial de propiedad almacenada en la definición del informe.
Los informes de formato de sólo lectura de SAP Crystal Reports tienen la extensión de archivo RPTR en lugar de
la extensión de archivo RPT de los informes de Crystal. Puede crear un informe RPTR exportando un informe RPT
al formato RPTR. No obstante, no existe un modo de convertir un informe RPTR en un informe RPT.
Puesto que la definición de un informe RPTR no se puede modificar, no se puede usar este SDK para definir la
ubicación de origen de los datos de un informe RPTR mediante el controlador de la base de datos. Sin embargo,
se pueden actualizar los datos de un informe RPTR en tiempo de ejecución.
Puede usar este SDK para realizar las tareas siguientes:
●
Crear un informe RPTR exportando un informe de Crystal (RPT) al formato RPTR.
Nota
Sólo se pueden exportar al formato RPTR los informes creados por SAP Crystal Reports 2011.
●
Ver un informe RPTR obteniendo el origen del informe y pasándolo a un visor.
●
Actualizar los datos de un informe RPTR en tiempo de ejecución.
●
Abrir un informe RPTR y exportarlo a otros formatos diferentes de RPT.
No se puede usar este SDK para realizar las tareas siguientes:
●
Modificar la definición de un informe RPTR.
●
Definir la ubicación del origen de datos del informe.
●
Recuperar información sobre la definición de un informe RPTR, incluidos las fórmulas, los campos, las
secciones y los objetos que componen el objeto.
●
Exportar un informe RPTR a formato RPT.
●
Agregar un informe RPTR como un subinforme a un informe RPT.
1.5
Tutoriales
1.5.1
Tutoriales del modelo de objeto CrystalReportViewer
Los tutoriales de esta sección utilizan los métodos y las propiedades de la clase CrystalReportViewer y las clases
del espacio de nombres CrystalDecisions.Shared.
Los tutoriales de esta sección utilizan los métodos y las propiedades de la clase CrystalReportViewer y las clases
del espacio de nombres CrystalDecisions.Shared.
240
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.1.1
Tutorial: Conectar con una base de datos segura de
SQL Server utilizando autenticación de SQL
En este tutorial, aprenderá a agregar código de conexión para mostrar un informe que contiene información de
una base de datos segura de SQL Server.
Introducción
Cuando utilice el modelo de objetos CrystalReportViewer para conectar con una base de datos segura de SQL
Server, debe usar clases del espacio de nombres CrystalDecisions.Shared.
Las propiedades de la clase ConnectionInfo se utilizan para conectar con el servidor de base de datos u otros
orígenes de datos ODBC. En este tutorial, establecerá las propiedades ServerName, DatabaseName, UserID y
Password. Si decide establecer únicamente las propiedades DatabaseName, UserID y Password, se conectará
con el servidor predeterminado de la base de datos especificada en el informe. Sin embargo, si elige asignar una
propiedad ServerName alternativa, podrá redirigir el informe a un servidor diferente en tiempo de ejecución.
Obtendrá la instancia de TableLogOnInfos de la propiedad LogOnInfo del control CrystalReportViewer. A
continuación, asignará la instancia de ConnectionInfo a cada objeto TableLogOnInfo de la instancia de
TableLogOnInfos.
El código de conexión de este tutorial también funciona para los subinformes insertados en el informe principal.
Para el modelo de objetos ReportDocument, debe modificar el código con el fin de que funcione para los
subinformes (vea Tutorial: Conectar con una base de datos segura de SQL Server con un subinforme [página
378]).
Para realizar este tutorial mediante el modelo de objetos ReportDocument, vea Tutorial: Conectar con una base de
datos segura de SQL Server utilizando autenticación de SQL [página 241]. El modelo de objetos ReportDocument
se recomienda con respecto al modelo de objetos CrystalReportViewer.
Código de ejemplo
Cada tutorial viene con código de ejemplo de C# y Visual Basic que muestra la versión finalizada del proyecto.
Siga las instrucciones de este tutorial para crear un nuevo proyecto o para abrir el proyecto de código de ejemplo
y trabajar con una versión finalizada.
El código de ejemplo se almacena en carpetas que están clasificadas por idioma y tipo de proyecto. Los nombres
de las carpetas de cada versión del código de ejemplo son los siguientes:
●
Sitio Web en C#: CS_Web_CRVObjMod_DBLogon
●
Proyecto para Windows en C#: CS_Win_CRVObjMod_DBLogon
●
Sitio Web en Visual Basic: VB_Web_CRVObjMod_DBLogon
●
Proyecto para Windows en Visual Basic: VB_Win_CRVObjMod_DBLogon
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
241
Información relacionada
Elegir el modelo de objetos correcto para el proyecto [página 31]
Directorio de informes de muestra [página 14]
1.5.1.1.1
Crear un informe conectado a una base de datos
segura de SQL Server
Requisitos previos
●
Configuración de SQL Server:
○
Si tiene instalado SQL Server (o la versión OEM, MSDE), debe configurarse de modo que requiera la
Autenticación de SQL Server.
○
Si no tiene instalado SQL Server (ni la versión OEM, MSDE), debe instalar MSDE con la autenticación de
SQL Server establecida en "True".
●
Se debe instalar la base de datos Northwind incluida con SQL Server y verificar que requiere la autenticación
de SQL Server.
●
Se debe crear una cuenta de acceso limitado para utilizarla en el sitio Web.
Contexto
Una vez configurados SQL Server y la base de datos Northwind de acuerdo a las secciones anteriores, ya podrá
crear un informe que obtenga su información de la base de datos Northwind de forma segura.
Nota
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos [página 14].
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.
Procedimiento
1.
En el Explorador de soluciones, haga clic con el botón secundario en el nombre de proyecto en negrita, elija
Agregar y, a continuación, haga clic en Agregar nuevo elemento.
2.
En el cuadro de diálogo Agregar nuevo elemento, en la vista Plantillas, seleccione la plantilla Crystal Report.
3.
En el campo Nombre, escriba "NorthwindCustomers.rpt" y haga clic en Abrir.
4.
En el panel Crear un nuevo documento de Crystal Reports del cuadro de diálogo Galería de Crystal Reports,
seleccione Usar asistente de informes.
242
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
5.
En el panel Elegir un Asistente, seleccione Estándar y, a continuación, haga clic en Aceptar.
Aparecerá la ventana Asistente para la creación de informes estándar.
6.
En el panel Orígenes de datos disponibles, expanda la carpeta Crear nueva conexión.
7.
En la subcarpeta que se abre, expanda la carpeta OLE DB (ADO).
Aparecerá la ventana OLE DB (ADO).
8.
Seleccione Proveedor de Microsoft OLE DB para SQL Server y, a continuación, haga clic en Siguiente.
9.
Especifique los valores de su servidor de base de datos, ID de usuario y contraseña en los campos Servidor, ID
de usuario y Contraseña.
10. En la lista desplegable Base de datos, seleccione "Northwind".
Deje desactivada la casilla de verificación Seguridad integrada porque está usando la autenticación de SQL
Server en lugar de la autenticación de NT.
11. Haga clic en Finalizar.
Ahora se expandirá la carpeta OLE DB, mostrando el servidor de base de datos y, dentro de él, la base de
datos Northwind.
12. Expanda los nodos Northwind, dbo y Tablas, y, a continuación, seleccione la tabla Customers.
13. Haga clic en el símbolo > para mover la tabla al panel Tablas seleccionadas y, a continuación, haga clic en
Siguiente.
14. Expanda la tabla Customers y, a continuación, mantenga presionada la tecla Ctrl mientras hace clic en
CompanyName, ContactName y City.
15. Haga clic en el símbolo > para mover estos campos al panel Campos a mostrar y, a continuación, haga clic en
Siguiente.
16. En el panel Campos disponibles, en Campos del informe, seleccione Cliente.Ciudad, haga clic en el símbolo >
para mover el campo al panel Agrupar por y, a continuación, haga clic en Finalizar.
Se creará el informe NorthwindCustomers y se cargará en la ventana principal de Visual Studio.
1.5.1.1.2
Enlazar el informe sin código de conexión
En Configuración de proyectos [página 14], ha colocado un control CrystalReportViewer en el formulario Web
Forms o Windows Forms. En el paso anterior, ha agregado un informe NorthwindCustomers al proyecto.
En esta sección enlazará la ruta de directorio de archivos del informe NorthwindCustomers al control
CrystalReportViewer. A continuación, probará si el informe se muestra correctamente cuando no se ha
establecido el código de conexión.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
243
1.5.1.1.2.1
Para enlazar la ruta de directorio de archivos del
informe NorthwindCustomers al control CrystalReportViewer
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
Busque el método ConfigureCrystalReports() (que ha creado en Configuración de proyectos [página
14]).
4.
Declare una variable de cadena, llámela reportPath y asígnele una ruta en tiempo de ejecución al informe
local. Esta ruta se determina de forma diferente para los sitios Web y los proyectos para Windows:
○
Para un sitio Web, pase el nombre del archivo de informe local como un parámetro de cadena al método
Server.MapPath(). Esto asigna el informe local a la ruta del directorio de archivos de la unidad de disco
duro en tiempo de ejecución.
Dim reportPath As String = Server.MapPath("NorthwindCustomers.rpt")
string reportPath = Server.MapPath("NorthwindCustomers.rpt");
○
Para un proyecto Windows, concatene la propiedad Application.StartupPath con una barra diagonal
inversa y el nombre del archivo de informe local. Esto asigna el informe al mismo directorio del archivo
ejecutable de Windows.
Nota
En la fase de compilación se copiará el informe al directorio que contiene el archivo ejecutable.
Dim reportPath As String = Application.StartupPath & "\" &
"NorthwindCustomers.rpt"
string reportPath = Application.StartupPath + "\\" + "NorthwindCustomers.rpt";
5.
Asigne la ruta del directorio de archivos del informe NorthwindCustomers a la propiedad ReportSource del
control CrystalReportViewer.
myCrystalReportViewer.ReportSource = reportPath
crystalReportViewer.ReportSource = reportPath;
244
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.1.1.2.2
Para probar la carga del informe
NorthwindCustomers
Contexto
Ahora estará listo para crear y ejecutar el proyecto. Está previsto que falle la carga del informe, porque aún no se
ha escrito el código para conectarse con la base de datos.
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
Si usa un informe no incrustado en un proyecto Windows, busque el archivo ejecutable de Windows
compilado en el subdirectorio \bin\debug\ y, a continuación, copie el informe en dicho subdirectorio.
Nota
Para que el archivo ejecutable de Windows cargue el informe no incrustado en tiempo de ejecución, el
informe deberá estar almacenado en el mismo directorio que el archivo ejecutable de Windows.
4.
En el menú Depurar, haga clic en Iniciar.
No se mostrará el informe NorthwindCustomers. Se mostrará después de agregar el código de conexión con
la base de datos.
Nota
Los resultados pueden variar según la versión de SAP Crystal Reports que use. Por ejemplo, si tiene
instalado SAP Crystal Reports 10 o una versión superior, se le pedirá información de conexión a la base de
datos para ese informe. Si ejecuta una versión anterior de SAP Crystal Reports, se produce una excepción.
En cualquier caso, debe seguir el siguiente procedimiento de pasos para crear una aplicación totalmente
funcional.
5.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.1.3
Agregar el código de conexión del informe
Ahora estará preparado para agregar el código de conexión del informe a la clase de código subyacente. Va a
empezar por crear un método auxiliar privado, SetDBLogonForReport().
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
245
1.5.1.1.3.1
Para crear y codificar el método
SetDBLogonForReport()
Procedimiento
1.
Regrese a la clase de código subyacente de este Web Forms o Windows Forms.
2.
En la parte inferior de la clase, cree un nuevo método privado denominado SetDBLogonForReport() al que
se le pase ConnectionInfo en la firma de método.
Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo)
End Sub
private void SetDBLogonForReport(ConnectionInfo connectionInfo)
{
}
3.
Con este método, se obtiene la instancia de TableLogOnInfos de la propiedad LogOnInfo de la clase
CrystalReportViewer.
Nota
TableLogOnInfos es una clase indizada que contiene instancias de la clase TableLogOnInfo.
Dim myTableLogOnInfos As TableLogOnInfos = myCrystalReportViewer.LogOnInfo
TableLogOnInfos tableLogOnInfos = crystalReportViewer.LogOnInfo;
4.
Cree un bucle foreach que recorra todas las instancias de TableLogOnInfo de la instancia de clase
indizada TableLogOnInfos.
For Each myTableLogOnInfo As TableLogOnInfo In myTableLogOnInfos
Next
foreach(TableLogOnInfo tableLogOnInfo in tableLogOnInfos)
{
}
5.
En el bucle foreach, establezca la propiedad ConnectionInfo de TableLogOnInfo en el parámetro
ConnectionInfo.
myTableLogOnInfo.ConnectionInfo = myConnectionInfo
tableLogOnInfo.ConnectionInfo = connectionInfo;
246
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.1.1.3.2
Para modificar el método
ConfigureCrystalReports() para direccionar el código de
conexión con la base de datos
Contexto
El procedimiento de este paso ha creado un método para establecer la conexión de la base de datos. Sin
embargo, debe modificar el método ConfigureCrystalReports() para direccionar este método, con el fin de
que el informe sepa que tiene información sobre conexión de base de datos.
La modificación del método ConfigureCrystalReports() requiere dos acciones:
●
Configurar la instancia de ConnectionInfo.
●
Llamar al método SetDBLogonForReport().
Procedimiento
1.
En el método ConfigureCrystalReports(), declare y cree una instancia de la clase ConnectionInfo
debajo del código que enlaza el informe al control CrystalReportViewer.
Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
ConnectionInfo connectionInfo = new ConnectionInfo();
2.
En la siguiente línea, llame al método SetDBLogonForReport() y pásele la instancia de ConnectionInfo.
SetDBLogonForReport(myConnectionInfo)
SetDBLogonForReport(connectionInfo);
3.
Establezca las propiedades DatabaseName, UserID y Password de la instancia de ConnectionInfo.
Nota
Por razones de seguridad, es importante utilizar una cuenta de base de datos con permisos de acceso
limitado.
En el código que escriba, reemplace la contraseña de ejemplo 1234 (que se muestra más abajo) por su propia
contraseña.
myConnectionInfo.DatabaseName = "Northwind"
myConnectionInfo.UserID = "limitedPermissionAccount"
myConnectionInfo.Password = "1234"
connectionInfo.DatabaseName = "Northwind";
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
247
connectionInfo.UserID = "limitedPermissionAccount";
connectionInfo.Password = "1234";
1.5.1.1.3.3
Para probar la carga del informe
NorthwindCustomers
Contexto
Ahora estará listo para crear y ejecutar el proyecto. El informe se debe cargar correctamente, ya que ha agregado
código para conectar con la base de datos.
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
El informe NorthwindCustomers se mostrará correctamente.
4.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.1.4
Agregar la posibilidad de cambiar la ubicación de la
base de datos en tiempo de ejecución
En esta sección, aprenderá a cambiar la ubicación de la base de datos en tiempo de ejecución. Sólo requiere una
pequeña modificación de la instancia de ConnectionInfo.
Nota
En este tutorial cambiará el nombre del servidor de base de datos, no el nombre de la base de datos. No es
posible cambiar el nombre de la base de datos con el control CrystalReportViewer.
1.5.1.1.4.1
Para cambiar la ubicación de la base de datos en
tiempo de ejecución
Procedimiento
1.
En el método ConfigureCrystalReports(), agregue un par de saltos de línea al código detrás de la línea
que llama SetDBLogonForReport().
248
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
2.
En los saltos de línea, establezca la propiedad ServerName de la instancia de ConnectionInfo.
Nota
En el código que escriba, reemplace el nombre del servidor de ejemplo DevDatabaseServer (que aparece
más abajo) por el nombre de su servidor.
myConnectionInfo.ServerName = "DevDatabaseServer"
connectionInfo.ServerName = "DevDatabaseServer";
1.5.1.1.4.2
Para probar si el informe se puede restablecer a
un servidor de base de datos alternativo en tiempo de
ejecución
Contexto
Ahora estará listo para crear y ejecutar el proyecto. El informe se debe redirigir al servidor de base de datos
alternativo en tiempo de ejecución.
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
El informe NorthwindCustomers se mostrará correctamente.
4.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.2
Tutorial: Leer y configurar parámetros discretos
En este tutorial aprenderá a crear un informe cuyos datos se puedan filtrar según un parámetro discreto.
Introducción
Un parámetro discreto es un único valor, a diferencia de un parámetro de rango, que hace referencia a un rango
de valores. A los elementos de texto (como ciudades) se tiene acceso normalmente mediante parámetros
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
249
discretos. A los elementos numéricos(como sueldos de empleados) se suele acceder mediante parámetros de
rango.
En este tutorial establecerá un valor de un parámetro discreto para ver un informe de clientes basado en un solo
campo. El informe muestra únicamente los clientes que viven en las ciudades seleccionadas en una lista de
ciudades. La lista de ciudades proviene de los valores predeterminados del parámetro de ciudad. Dichos valores
predeterminados del parámetro de ciudad se encapsulan dentro del informe.
Para empezar, va a crear un informe de clientes con un parámetro de ciudad. Los datos del informe proceden de
la base de datos de ejemplo incluida en SAP Crystal Reports, versión para programadores de Microsoft Visual
Studio. Al crear una instancia del informe en el código, generará un ArrayList que contiene nombres de ciudades
(Paris, Tokyo) y pasará dicha instancia de ArrayList a un método auxiliar que establezca estos nombres como
valores actuales del parámetro Ciudad. A continuación, enlazará el informe al control CrystalReportViewer y verá
el informe que mostrará únicamente los clientes que vivan en París y Tokio.
En la siguiente parte del tutorial, realizará las siguientes acciones:
●
Crear un método que obtenga todos los valores predeterminados y los devuelva en un ArrayList.
●
Agregar un control ListBox al formulario y rellenarlo a partir de ArrayList.
●
Agregar un control Button para volver a mostrar el informe basado en las selecciones de ListBox.
En la parte final del tutorial, codificará el evento de clic de botón para obtener los elementos seleccionados en el
control ListBox y establecerlos para que sean los valores actuales del parámetro de ciudad. El informe se volverá
a mostrar incluyendo únicamente los clientes que vivan en las ciudades seleccionadas en el control ListBox.
Código de ejemplo
Este tutorial incluye código de ejemplo de C# y Visual Basic que muestra la versión finalizada del proyecto. Siga
las instrucciones de este tutorial para crear un nuevo proyecto o para abrir el proyecto de código de ejemplo y
trabajar con una versión finalizada.
El código de ejemplo se almacena en carpetas que están clasificadas por idioma y tipo de proyecto. Los nombres
de las carpetas de cada versión del código de ejemplo son los siguientes:
●
Sitio Web en C#: CS_Web_CRVObjMod_Parameters
●
Proyecto para Windows en C#: CS_Win_CRVObjMod_Parameters
●
Sitio Web en Visual Basic: VB_Web_CRVObjMod_Parameters
●
Proyecto para Windows en Visual Basic: VB_Win_CRVObjMod_Parameters
Base de datos Xtreme
Algunos de los tutoriales utilizan la base de datos Xtreme. Se incluye con el paquete de código de muestra que se
puede descargar desde http://www.sdn.sap.com/irj/boc/sdklibrary
ODBC a la base de datos.
250
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
. Deberá crear manualmente una conexión
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Información relacionada
Directorio de informes de muestra [página 14]
1.5.1.2.1
Crear un informe con parámetros
Para comenzar, cree un informe que obtenga su información de la base de datos Xtreme.
1.5.1.2.1.1
Para crear un informe con parámetros
Procedimiento
1.
En el Explorador de soluciones, haga clic con el botón secundario en el nombre de proyecto en negrita, elija
Agregar y, a continuación, haga clic en Agregar nuevo elemento.
2.
En el cuadro de diálogo Agregar nuevo elemento, en la vista Plantillas, seleccione la plantilla Crystal Report.
3.
En el campo Nombre, escriba el nombre CustomersByCity.rpt y haga clic en Agregar.
4.
En el panel Crear un nuevo documento de Crystal Reports del cuadro de diálogo Galería de Crystal Reports,
seleccione Usar asistente de informes.
5.
En el panel Elegir un Asistente, seleccione Estándar y, a continuación, haga clic en Aceptar.
6.
En el panel Orígenes de datos disponibles de la ventana Asistente para la creación de informes estándar,
expanda la carpeta Crear nueva conexión.
7.
En la subcarpeta que se abre, expanda la carpeta ODBC (RDO).
8.
En la ventana ODBC (RDO), seleccione la entrada ODBC DSN correcta para la base de datos Xtreme y haga
clic en Finalizar.
9.
Expanda el nodo Tablas, haga doble clic en la tabla Cliente para mover la tabla al panel Tablas seleccionadas y,
a continuación, haga clic en Siguiente.
10. Expanda la tabla Cliente, mantenga presionada la tecla Ctrl y haga clic en Nombre del cliente, Título del
contacto, Dirección1, Apellido del cliente y Ciudad.
11. Haga clic en el símbolo > para mover estos campos al panel Campos a mostrar y, a continuación, haga clic en
el botón Siguiente.
12. En el panel Campos disponibles, en Campos del informe, haga doble clic en Cliente.Ciudad para mover el
campo al panel Agrupar por y, a continuación, haga clic en el botón Finalizar.
Se creará el informe CustomersByCity y se cargará en la ventana principal de Visual Studio.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
251
1.5.1.2.1.2
Para agregar un parámetro Ciudad
Contexto
Ahora ya podrá agregar un parámetro denominado Ciudad y ocuparlo con valores predeterminados.
El Explorador de campos debe estar visible, porque proporciona acceso a las distintas funciones del informe,
incluidos los parámetros. Para ver el Explorador de campos, en el menú Crystal Reports, haga clic en Explorador
de campos.
Procedimiento
1.
Si el Explorador de campos no está visible, en la barra de herramientas de Crystal Reports, haga clic en
Cambiar la vista del campo.
Sugerencias
Otro modo de ver el Explorador de campos es ir al menú Crystal Reports y hacer clic en Explorador de
campos.
2.
En el Explorador de campos, haga clic con el botón secundario en Campos de parámetro y seleccione Nuevo...
3.
En el cuadro de diálogo Crear campo de parámetro:
a) Establezca el Nombre como Ciudad.
b) Defina Tipo como Cadena. Establezca Texto de solicitud en Seleccione una o varias ciudades.
c) Defina Campo de valor como Ciudad.
d) Haga clic en Acciones y seleccione Anexar todos los valores de base de datos. De esta forma se agregará
la lista de ciudades completa al panel intermedio.
e) En el panel Opciones de valor, establezca Texto de petición en Seleccione una o varias ciudades.
f)
En el mismo panel, defina Permitir valores múltiples como Verdadero.
g) Establezca Permitir valores discretos como Verdadero.
4.
Haga clic en Aceptar para cerrar el cuadro de diálogo Crear campo de parámetro.
1.5.1.2.1.3
Para conectar el parámetro Ciudad a la columna
de base de datos Ciudad
Contexto
Acaba de establecer los valores predeterminados para que contengan una amplia lista de ciudades.
Posteriormente, en este tutorial, va a tener acceso a esta misma lista de valores predeterminados mediante
programación, a través de la propiedad ParameterFieldInfo de la clase CrystalReportViewer.
Ahora va a utilizar el Asistente de selección para establecer una fórmula que conecte la columna de base de datos
Ciudad con el campo de parámetro Ciudad creado recientemente.
252
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Procedimiento
1.
En la barra de herramientas de Crystal Reports, haga clic en Asistente de selección.
2.
En el cuadro de diálogo Elegir campo, en Campos del informe, seleccione Cliente.Ciudad y, a continuación,
haga clic en Aceptar.
3.
En el cuadro de diálogo Select Expert, en la ficha Customer.City, establezca la lista desplegable como
"es igual a".
4.
En la nueva lista desplegable que aparece a la derecha, seleccione la primera opción de la lista, {?City} y, a
continuación, haga clic en Aceptar.
Nota
Esta selección, {?City}, es el parámetro Ciudad creado anteriormente.
5.
En el menú Archivo, seleccione Guardar todo.
Resultados
Ahora podrá enlazar el informe al control CrystalReportViewer y establecer el parámetro de ciudad con dos
valores iniciales, París y Tokio.
1.5.1.2.2
Enlazar el informe
Al seguir las instrucciones de Configuración de proyectos [página 14] para preparar este tutorial, ha colocado un
control CrystalReportViewer en el formulario Web Forms o Windows Forms. En los pasos anteriores, agregó un
informe CustomersByCity al proyecto.
En esta sección enlazará la ruta de directorio de archivos del informe CustomersByCity con el control
CrystalReportViewer. A continuación, probará si el informe se muestra correctamente cuando no se han
establecido valores actuales para su campo de parámetro.
1.5.1.2.2.1
Para enlazar la ruta de directorio de archivos del
informe CustomersByCity al control CrystalReportViewer
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código para ver la clase de código subyacente de Web Forms o Windows Forms.
3.
Busque el método ConfigureCrystalReports() (que ha creado en Configuración de proyectos [página
14]).
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
253
4.
Declare una variable de cadena, llámela reportPath y asígnele una ruta en tiempo de ejecución al informe
local. Esta ruta se determina de forma diferente para los sitios Web y los proyectos para Windows:
○
Para un sitio Web, pase el nombre del archivo de informe local como un parámetro de cadena al método
Server.MapPath(). Esto asigna el informe local a la ruta del directorio de archivos de la unidad de disco
duro en tiempo de ejecución.
Dim reportPath As String = Server.MapPath("CustomersByCity.rpt")
string reportPath = Server.MapPath("CustomersByCity.rpt");
○
Para un proyecto Windows, concatene la propiedad Application.StartupPath con una barra diagonal
inversa y el nombre del archivo de informe local. Esto asigna el informe al mismo directorio del archivo
ejecutable de Windows.
Nota
En la fase de compilación se copiará el informe al directorio que contiene el archivo ejecutable.
Dim reportPath As String = Application.StartupPath & "\" &
"CustomersByCity.rpt"
string reportPath = Application.StartupPath + "\\" + "CustomersByCity.rpt";
5.
Asigne la ruta de directorio de archivos del informe CustomersByCity a la propiedad ReportSource del
control CrystalReportViewer.
myCrystalReportViewer.ReportSource = reportPath
crystalReportViewer.ReportSource = reportPath;
1.5.1.2.2.2
Para probar la carga del informe
CustomersByCity
Contexto
Ahora estará listo para crear y ejecutar el proyecto. Está previsto que falle la carga del informe, porque aún no se
ha escrito el código para establecer un valor para el campo de parámetro Ciudad.
254
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
Si usa un informe no incrustado en un proyecto Windows, busque el archivo ejecutable de Windows
compilado en el subdirectorio \bin\ [Visual Basic] o \bin\debug\ [C#] y, a continuación, copie el
informe en dicho subdirectorio.
Nota
Para que el archivo ejecutable de Windows cargue el informe no incrustado en tiempo de ejecución, el
informe deberá estar almacenado en el mismo directorio que el archivo ejecutable de Windows.
4.
En el menú Depurar, haga clic en Iniciar.
No se muestra el informe CustomersByCity. Se muestra después de agregar un valor para el parámetro
Ciudad más adelante en este tutorial.
Nota
Los resultados pueden variar según la versión de SAP Crystal Reports que use. En versiones más
recientes, verá un formulario que le pedirá que indique valores de parámetro para dicho informe. En
versiones anteriores, se produce una excepción "Falta el valor actual del campo de parámetro". En
cualquiera caso, debe agregar código adicional para que la aplicación sea completamente funcional.
5.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.2.3
Configurar parámetros manualmente en el código
Ahora ya puede establecer dos valores ("París" y "Tokio") en el campo de parámetro Ciudad del informe
CustomersByCity.
Esto implica codificación, que puede separar en los siguientes procesos:
●
Necesita una constante PARAMETER_FIELD_NAME para que contenga el nombre del campo de parámetro
"Ciudad".
●
El código para agregar los valores actuales al parámetro Ciudad se utiliza en distintas partes de este tutorial;
por lo tanto, este código se creará como un método auxiliar independiente.
●
En el método ConfigureCrystalReports(), va a agregar los parámetros "Paris" y "Tokyo" a una instancia
de ArrayList y va a pasar el informe y la instancia de ArrayList al método auxiliar para que se procesen.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
255
1.5.1.2.3.1
Para crear una constante
PARAMETER_FIELD_NAME
Procedimiento
1.
Regrese a la clase de código subyacente de este Web Forms o Windows Forms.
2.
En el nivel de clase, cree una nueva constante de cadena, PARAMETER_FIELD_NAME, y establezca su valor
como "Ciudad".
Private Const PARAMETER_FIELD_NAME As String = "City"
private const string PARAMETER_FIELD_NAME = "City";
1.5.1.2.3.2
Para crear un método auxiliar que agregue los
valores actuales al parámetro en el informe
Contexto
Ahora ya puede crear el método auxiliar que agregue los valores actuales al parámetro en el informe.
Procedimiento
1.
Regrese a la clase de código subyacente de este Web Forms o Windows Forms.
2.
Sobre la firma de clase, agregue una declaración "Imports" [Visual Basic] o "using" [C#] en la parte
superior de la clase para el espacio de nombres System.Collections (si todavía no se ha declarado este
espacio de nombres).
Nota
Esta declaración se necesita para tener acceso a la clase ArrayList.
Imports System.Collections
using System.Collections;
3.
En la parte inferior de la clase, cree un nuevo método privado denominado
SetCurrentValuesForParameterField() con dos variables en la firma de método: ParameterFields y
ArrayList.
Private Sub SetCurrentValuesForParameterField(ByVal myParameterFields As
256
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
ParameterFields, ByVal myArrayList As
ArrayList)
End Sub
private void SetCurrentValuesForParameterField(ParameterFields parameterFields,
ArrayList arrayList)
{
}
4.
En este método, declare y cree una instancia de la clase ParameterValues como la variable
currentParameterValues.
Nota
Para que se pueda tener acceso a la clase ParameterValues, debe haber incluido una declaración
"Imports" [Visual Basic] o "using" [C#] en la parte superior de la clase de código subyacente del
espacio de nombres CrystalDecisions.Shared. (Esta declaración se ha agregado en Configuración de
proyectos [página 14].)
Dim currentParameterValues As ParameterValues = New ParameterValues()
ParameterValues currentParameterValues = new ParameterValues();
5.
Cree un bucle foreach para obtener todos los valores enviados (como tipo Object) de la instancia de
ArrayList.
Nota
En este método, recupera valores de ArrayList. Posteriormente, va a escribir código que agregue valores a
ArrayList.
For Each submittedValue As Object In myArrayList
Next
foreach(object submittedValue in arrayList)
{
}
6.
En el bucle foreach, declare y cree una instancia de la clase ParameterDiscreteValue.
Dim myParameterDiscreteValue As ParameterDiscreteValue = New
ParameterDiscreteValue()
ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue();
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
257
7.
En el bucle foreach, convierta submittedValue en una cadena y pásela a la propiedad Value de la
instancia de ParameterDiscreteValue.
myParameterDiscreteValue.Value = submittedValue.ToString()
parameterDiscreteValue.Value = submittedValue.ToString();
8.
En el bucle foreach, agregue la instancia de ParameterDiscreteValue a la clase indizada
currentParameterValues.
Esto completará el código en el bucle foreach. Coloque el código restante (a partir de los pasos siguientes)
después del bucle foreach.
currentParameterValues.Add(myParameterDiscreteValue)
currentParameterValues.Add(parameterDiscreteValue);
9.
Fuera del bucle foreach, obtenga la instancia de ParameterField de la clase indizada ParameterFields
que se basa en la entrada de índice de la constante PARAMETER_FIELD_NAME.
Dim myParameterField As ParameterField = myParameterFields(PARAMETER_FIELD_NAME)
ParameterField parameterField = parameterFields[PARAMETER_FIELD_NAME];
10. Pase la instancia de currentParameterValues a la propiedad CurrentValues de la instancia de
ParameterField.
myParameterField.CurrentValues = currentParameterValues
parameterField.CurrentValues = currentParameterValues;
1.5.1.2.3.3
Para llamar al método
SetCurrentValuesForParameterField () antes de enlazar el
informe al control CrystalReportViewer
Contexto
En este procedimiento con varios pasos se ha mostrado el modo de crear un método que recupera los valores
enviados desde una instancia de ArrayList y los coloca como valores actuales en una instancia de
ParameterField. A continuación, debe llamar a este método antes de enlazar el informe al control
CrystalReportViewer, para que el informe sepa que tiene configuración de parámetros.
258
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Procedimiento
1.
En el método ConfigureCrystalReports(), declare y cree una instancia de ArrayList encima de la línea
que enlaza el informe al control CrystalReportViewer.
Dim myArrayList As ArrayList = New ArrayList()
ArrayList arrayList = new ArrayList();
2.
Agregue los nombres de ciudad "París" y "Tokio" como cadenas a la instancia de ArrayList.
myArrayList.Add("Paris")
myArrayList.Add("Tokyo")
arrayList.Add("Paris");
arrayList.Add("Tokyo");
3.
Debajo del código que enlaza el control CrystalReportViewer, obtenga la instancia de ParameterFields
de la propiedad ParameterFieldInfo del control CrystalReportViewer.
Dim myParameterFields As ParameterFields =
myCrystalReportViewer.ParameterFieldInfo
ParameterFields parameterFields = crystalReportViewer.ParameterFieldInfo;
4.
Llame al método SetCurrentValuesForParameterField() y pásele la instancia de ParameterFields y la
instancia de ArrayList.
SetCurrentValuesForParameterField(myParameterFields, myArrayList)
SetCurrentValuesForParameterField(parameterFields, arrayList);
1.5.1.2.3.4
Para probar la carga del informe
CustomersByCity
Contexto
Ahora estará listo para crear y ejecutar el proyecto. Se espera que el informe se muestre correctamente, porque
ahora existe código escrito para establecer los valores actuales en el campo de parámetro.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
259
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
4.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
Resultados
En la siguiente sección, aprenderá como obtener los valores predeterminados del campo de parámetro y
establecerá dichos valores en un control ListBox. Éstos se utilizan al final del tutorial para seleccionar nuevas
ciudades dinámicamente y filtrar el informe basándose en las ciudades seleccionadas recientemente.
1.5.1.2.4
Crear un control ListBox que muestre los
parámetros predeterminados
El resto del tutorial trata cómo mostrar una lista completa de valores predeterminados del campo de parámetro
en un control ListBox, y según las selecciones que se realicen en dicho control ListBox, volver a filtrar el
contenido del informe.
En esta sección aprenderá a rellenar el control ListBox con los valores predeterminados del campo de
parámetro.
Nota
Recuerde que ya estableció los Valores predeterminados, una amplia lista de ciudades, al crear este informe al
principio del tutorial.
Para hacerlo, deberá agregar y configurar un control ListBox y, a continuación, crear un método auxiliar para
rellenar el control ListBox.
1.5.1.2.4.1
formulario
Para crear y configurar un control ListBox en el
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Diseñador.
3.
Si está desarrollando un sitio Web, realice las siguientes acciones:
260
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
a) Haga clic en el control CrystalReportViewer para seleccionarlo.
b) Presione la FLECHA IZQUIERDA del teclado de modo que aparezca un cursor parpadeante y, a
continuación, presione INTRO.
4.
Si está desarrollando un proyecto de Windows, realice las siguientes acciones:
a) Haga clic en el control CrystalReportViewer para seleccionarlo.
b) En la ventana Propiedades, establezca Dock en "Bottom".
c) Ajuste el tamaño del control CrystalReportViewer, con el fin de que disponga del espacio necesario sobre
él para un control ListBox.
d) En la ventana Propiedades, establezca Anchor en "Top, Bottom, Left, Right".
5.
En el Cuadro de herramientas, arrastre un control ListBox sobre el control CrystalReportViewer.
6.
Haga clic en el control ListBox para seleccionarlo.
7.
Desde la ventana Propiedades siga estos pasos:
a) Establezca ID o Name en "defaultParameterValuesList".
b) Establezca SelectionMode en "Multiple" (en un proyecto de Windows, "MultiExtended").
8.
En el menú Archivo, seleccione Guardar todo.
1.5.1.2.4.2
Para crear un método auxiliar que obtenga los
valores predeterminados del campo de parámetro
Contexto
Ahora podrá crear un método auxiliar que obtenga los valores predeterminados del campo de parámetro.
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte inferior de la clase, cree un nuevo método privado denominado
GetDefaultValuesFromParameterField() que devuelva una instancia de ArrayList y se pase
ParameterFields en la firma de método.
Private Function GetDefaultValuesFromParameterField(ByVal
myParameterFields As ParameterFields) As ArrayList
End Function
private ArrayList
GetDefaultValuesFromParameterField(ParameterFields parameterFields)
{
}
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
261
4.
Recupere la instancia de ParameterField de la clase indizada ParameterFields basada en la entrada de
índice de la constante PARAMETER_FIELD_NAME.
Dim myParameterField As ParameterField =
myParameterFields(PARAMETER_FIELD_NAME)
ParameterField parameterField =
parameterFields[PARAMETER_FIELD_NAME];
5.
Obtenga una clase indizada ParameterValues (como la variable defaultParameterValues) a partir de la
propiedad DefaultValues de la instancia de ParameterField.
Dim defaultParameterValues As ParameterValues =
myParameterField.DefaultValues
ParameterValues defaultParameterValues =
parameterField.DefaultValues;
6.
Declare y cree una instancia de ArrayList.
Dim myArrayList As ArrayList = New ArrayList()
ArrayList arrayList = new ArrayList();
7.
Cree un bucle foreach que obtenga cada instancia de ParameterValue a partir de
defaultParameterValues.
En el bucle foreach, cree ahora un bloque condicional anidado que busque valores de parámetros discretos
(en oposición a parámetros de rango). Existen dos versiones de este bloque condicional porque la API ha
cambiado ligeramente en las distintas versiones de SAP Crystal Reports, versión para programadores de
Microsoft Visual Studio. Compruebe su API (mediante IntelliSense) para ver qué propiedad está disponible en
ParameterValue:
For Each myParameterValue As ParameterValue In
defaultParameterValues
Next
foreach(ParameterValue parameterValue in defaultParameterValues)
{
}
8.
Si la propiedad disponible es IsRange, en el bucle foreach, escriba este código:
If (Not myParameterValue.IsRange) Then
End If
262
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
if(!parameterValue.IsRange)
{
}
9.
O bien, si la propiedad disponible es Kind (DiscreteOrRangeKind, una enumeración con tres valores:
DiscreteValue, RangeValue, DiscreteAndRangeValue), por cada bucle foreach escriba este código en
su lugar:
If (myParameterValue.Kind = DiscreteOrRangeKind.DiscreteValue) Then
End If
if(parameterValue.Kind == DiscreteOrRangeKind.DiscreteValue)
{
}
10. En este bloque condicional anidado, proyecte la instancia de ParameterValue en su clase ampliada,
DiscreteParameterValue.
Dim myParameterDiscreteValue As ParameterDiscreteValue =
CType(myParameterValue, ParameterDiscreteValue)
ParameterDiscreteValue parameterDiscreteValue =
(ParameterDiscreteValue)parameterValue;
11. Además, en el bloque condicional anidado, agregue la propiedad Value de la instancia de
ParameterDiscreteValue (convertida en cadena) a la instancia de ArrayList.
myArrayList.Add(myParameterDiscreteValue.Value.ToString())
arrayList.Add(parameterDiscreteValue.Value.ToString());
12. Fuera del bloque condicional y del bucle foreach, al final del método, devuelva la instancia de ArrayList del
método.
Return myArrayList
return arrayList;
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
263
1.5.1.2.4.3
Para enlazar el ArrayList devuelto del método al
ListBox de un proyecto Web
Contexto
Ha obtenido los valores predeterminados del campo de parámetro y los ha devuelto del método como un
ArrayList. Debe enlazar este ArrayList al control ListBox defaultParameterValuesList.
El código varía ligeramente en función de si se utiliza un proyecto Web o un proyecto de Windows; por lo tanto,
asegúrese de que sólo realiza el procedimiento para Web o para Windows.
Procedimiento
1.
En el método ConfigureCrystalReports(), agregue un par de saltos de línea al código inmediatamente
después de la línea de código que obtiene la instancia de ParameterFields.
2.
En los saltos de línea, cree un bloque condicional Not IsPostBack.
Nota
El bloque condicional Not IsPostBack se usa para encapsular código que sólo se debe ejecutar la
primera vez que se carga la página. Los controles se suelen enlazar a los valores de datos en bloques
condicionales Not IsPostBack para que sus valores de datos (y los eventos de control posteriores) no se
restablezcan cuando se vuelva a cargar la página.
If Not IsPostBack Then
End If
if(!IsPostBack)
{
}
3.
En el bloque condicional Not IsPostBack, establezca el valor de la propiedad DataSource del control
ListBox defaultParameterValuesList en el método auxiliar
GetDefaultValuesFromParameterField() y pase la instancia de ParameterFields como parámetro de
método.
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(myParameterFields)
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(parameterFields);
264
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
4.
Aún dentro del bloque condicional Not IsPostBack, llame al método DataBind() del control ListBox
defaultParameterValuesList.
defaultParameterValuesList.DataBind()
defaultParameterValuesList.DataBind();
1.5.1.2.4.4
Para enlazar el ArrayList devuelto del método al
ListBox de un proyecto de Windows
Procedimiento
1.
En el método ConfigureCrystalReports(), agregue un par de saltos de línea al código inmediatamente
después de la línea de código que obtiene la instancia de ParameterFields.
En los saltos de línea, ahora puede escribir código adicional que establece el origen de datos para el control
ListBox defaultParameterValuesList cuando la página se carga por primera vez.
2.
En los saltos de línea, establezca la propiedad DataSource del control ListBox defaultParameterValuesList en
el método auxiliar GetDefaultValuesFromParameterField() y pase la instancia de ParameterFields
como un parámetro de método.
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(myParameterFields)
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(parameterFields);
1.5.1.2.4.5
Para probar si está relleno el control ListBox
defaultParameterValuesList
Contexto
Ahora estará listo para crear y ejecutar el proyecto, para verificar si el cuadro de lista
defaultParameterValuesList se ha rellenado.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
265
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
El control ListBox defaultParameterValuesList mostrará una lista completa de valores
predeterminados (ciudades, en nuestro tutorial).
4.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.2.5
Configurar parámetros a partir de las selecciones
de ListBox
En esta sección, agregará un botón para volver a mostrar el informe según las selecciones del control ListBox
defaultParameterValuesList. En el método de evento de este botón, llamará al mismo método que se llama
al cargar la página por primera vez: SetCurrentValuesForParameterField(). Pero esta vez, en lugar de
pasar valores arbitrarios (Paris y Tokyo), pasará los valores seleccionados en el control ListBox
defaultParameterValuesList.
1.5.1.2.5.1
Para crear y configurar un botón que vuelva a
mostrar el informe en el formulario
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Diseñador.
3.
En el Cuadro de herramientas, arrastre un control Button a la derecha del control ListBox.
4.
Haga clic en el control Button para seleccionarlo.
5.
Desde la ventana Propiedades siga estos pasos:
a) Establezca el valor de ID (o Name) en "redisplay".
b) Establezca Text como "Volver a mostrar el informe".
266
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.1.2.5.2
Para crear el método de evento de clic del botón
que vuelve a mostrar el informe en un proyecto Web
Contexto
Ahora podrá crear un método de evento de clic de botón que busque los elementos seleccionados en el control
ListBox y los pase al método SetCurrentValuesForParameterField().
El código varía ligeramente para un proyecto Web o un proyecto de Windows; por lo tanto, realice sólo el
procedimiento para Web o para Windows.
Procedimiento
1.
Haga doble clic en el botón Volver a mostrar el informe.
Pasa a la clase de código subyacente en la que se ha generado automáticamente un método de evento
redisplay_Click().
2.
Sobre la firma de clase, agregue una declaración "Imports" [Visual Basic] o "using" [C#] en la parte
superior de la clase para el espacio de nombres System.Web.UI.WebControls (si todavía no se ha declarado
este espacio de nombres).
Imports System.Web.UI.WebControls
using System.Web.UI.WebControls;
3.
En el método de evento redisplay_Click() que se ha generado de manera automática, cree una nueva
instancia de un ArrayList.
Dim myArrayList As ArrayList = New ArrayList()
ArrayList arrayList = new ArrayList();
4.
Cree un bucle foreach para obtener cada instancia de ListItem a partir de la propiedad Items del control
ListBox defaultParameterValuesList.
For Each item As ListItem In defaultParameterValuesList.Items
Next
foreach(ListItem item in defaultParameterValuesList.Items)
{
}
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
267
5.
En el bucle foreach, cree un bloque condicional anidado que compruebe si la propiedad Selected de la
instancia de Item actual está establecida como True.
If item.Selected Then
End If
if(item.Selected)
{
}
6.
En el bloque condicional, agregue la propiedad Value de la instancia de Item a la instancia de ArrayList.
myArrayList.Add(item.Value)
arrayList.Add(item.Value);
7.
Fuera del bloque condicional y del bucle foreach, vuelva a enlazar la ruta de directorio de archivos del informe
CustomersByCity a la propiedad ReportSource de la clase CrystalReportViewer.
Nota
La ruta de directorio de archivos que se muestra más abajo es la de un proyecto de Visual Studio.
"ProjectName" se reemplaza por el nombre del sitio Web. "UserName" se reemplaza por el nombre de
conexión.
La ruta predeterminada para un proyecto de sitio Web:
myCrystalReportViewer.ReportSource = "C:\WebSites\ ProjectName
\CustomersByCity.rpt"
crystalReportViewer.ReportSource = "C:\\WebSites\\ ProjectName\
\CustomersByCity.rpt";
8.
Recupere la instancia de ParameterFields de la propiedad ParameterFieldInfo del control
CrystalReportViewer.
Dim myParameterFields As ParameterFields =
myCrystalReportViewer.ParameterFieldInfo
ParameterFields parameterFields =
crystalReportViewer.ParameterFieldInfo;
9.
Pase la instancia de ParameterFields y de ArrayList al método
SetCurrentValuesForParameterField().
SetCurrentValuesForParameterField(myParameterFields, myArrayList)
268
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
SetCurrentValuesForParameterField(parameterFields, arrayList);
1.5.1.2.5.3
Para crear el método de evento de clic del botón
que vuelve a mostrar el informe en un proyecto de Windows
Procedimiento
1.
Haga doble clic en el control Button que vuelve a mostrar el informe.
Pasa a la clase de código subyacente en la que se ha generado automáticamente un método de evento
redisplay_Click().
2.
En el método de evento redisplay_Click() que se ha generado de manera automática, cree una nueva
instancia de un ArrayList.
Dim myArrayList As ArrayList = New ArrayList()
ArrayList arrayList = new ArrayList();
3.
Cree un bucle foreach para obtener cada elemento (como una cadena) de la propiedad SelectedItems del
control ListBox defaultParameterValuesList.
For Each item As String In defaultParameterValuesList.SelectedItems
Next
foreach(string item in defaultParameterValuesList.SelectedItems)
{
}
4.
En el bucle foreach, agregue la instancia de cadena de elemento a la instancia de ArrayList.
myArrayList.Add(item)
arrayList.Add(item);
5.
Fuera del bucle foreach, vuelva a enlazar la ruta de directorio de archivos del informe CustomersByCity a la
propiedad ReportSource de la clase CrystalReportViewer.
Nota
La ruta de directorio de archivos que se muestra más abajo es la de un proyecto de Visual Studio.
"ProjectName" se reemplaza por el nombre del proyecto de Windows. "UserName" se reemplaza por el
nombre de conexión.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
269
La ruta predeterminada para un proyecto de Windows:
myCrystalReportViewer.ReportSource = "C:\Documents and Settings\UserName\Mis
documentos\Visual Studio\Projects\ProjectName\CustomersByCity.rpt"
crystalReportViewer.ReportSource = "C:\\Documents and Settings\\UserName\\Mis
documentos\\Visual Studio\\Projects\\ProjectName\\CustomersByCity.rpt";
6.
Recupere la instancia de ParameterFields de la propiedad ParameterFieldInfo del control
CrystalReportViewer.
Dim myParameterFields As ParameterFields =
myCrystalReportViewer.ParameterFieldInfo
ParameterFields parameterFields =
crystalReportViewer.ParameterFieldInfo;
7.
Pase la instancia de ParameterFields y de ArrayList al método
SetCurrentValuesForParameterField().
SetCurrentValuesForParameterField(myParameterFields, myArrayList)
SetCurrentValuesForParameterField(parameterFields, arrayList);
1.5.1.2.5.4
Para probar si está relleno el control ListBox
defaultParameterValuesList
Contexto
Ahora que se han aplicado los valores seleccionados del control ListBox como los valores actuales del campo de
parámetro, estará listo para volver a mostrar el informe.
Ahora estará preparado para generar y ejecutar el proyecto para verificar que el campo de parámetro se ha
restablecido correctamente.
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
4.
En el control ListBox, presione la tecla CTRL mientras hace clic para seleccionar ciudades diferentes en la
lista.
270
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
5.
Haga clic en el botón Volver a mostrar el informe.
La página se volverá a cargar y mostrará los registros de cliente para los clientes que vivan en la lista de
ciudades que ha seleccionado.
6.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.2.6
Configurar la persistencia de parámetros
En esta sección configurará la persistencia (en un tutorial basado en Web) de las selecciones de campo de
parámetro que se han realizado en el control ListBox.
1.5.1.2.6.1
Para agregar código de persistencia al método
ConfigureCrystalReports()
Contexto
Debe agregar código de persistencia a la aplicación para que se conserven los cambios efectuados cuando se
vuelvan a cargar las páginas Web.
Para comenzar, va a agregar código de persistencia al método ConfigureCrystalReports(), agregando un
bloque Else al bloque condicional If Not IsPostBack. A continuación, va a establecer valores únicos para la
instancia de ArrayList por cada condición del bloque condicional. Al iniciarse la página, va a establecer los
valores predeterminados ("Paris" y "Tokyo") en la instancia de ArrayList. Al volver a cargarse la página, va a
recuperar la instancia de ArrayList que está almacenada en Session.
Procedimiento
1.
En el método ConfigureCrystalReports(), corte y pegue las dos líneas de código que agregan Paris y
Tokyo al ArrayList en la parte inferior del bloque condicional Not IsPostBack.
Cuando haya terminado, el aspecto del bloque condicional debe ser parecido al siguiente:
If Not IsPostBack Then
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(myParameterFields)
defaultParameterValuesList.DataBind()
myArrayList.Add("Paris")
myArrayList.Add("Tokyo")
End If
if (!IsPostBack)
{
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(parameterFields);
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
271
}
2.
defaultParameterValuesList.DataBind();
arrayList.Add("Paris");
arrayList.Add("Tokyo");
Agregue una línea final de código al bloque condicional que asigna la instancia ArrayList a Session.
Nota
Puede agregar el nombre de variable como el identificador de cadena para el Session que agregue.
Session("myArrayList") = myArrayList
Session["arrayList"] = arrayList;
3.
Agregue una condición Else al bloque condicional Not IsPostBack.
4.
En el bloque Else, obtenga la instancia de ArrayList de Session y proyéctela en ArrayList.
myArrayList = Ctype(Session("myArrayList"), ArrayList)
arrayList = (ArrayList)Session["arrayList"];
Resultados
Cuando haya terminado, el aspecto del bloque condicional debe ser parecido al siguiente:
If Not IsPostBack Then
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(myParameterFields)
defaultParameterValuesList.DataBind()
myArrayList.Add("Paris")
myArrayList.Add("Tokyo")
Session("myArrayList") = myArrayList
Else
myArrayList = Ctype(Session("myArrayList"), ArrayList)
End If
if (!IsPostBack)
{
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(parameterFields);
defaultParameterValuesList.DataBind();
arrayList.Add("Paris");
arrayList.Add("Tokyo");
Session["arrayList"] = arrayList;
}
else
{
arrayList = (ArrayList)Session["arrayList"];
}
272
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Estas modificaciones del método ConfigureCrystalReports() garantizan que la instancia actual de ArrayList
siempre está disponible para pasarla al método SetCurrentValuesForParameterField().
En la siguiente sección, realizará dos cambios en el código del evento de clic de botón:
●
Tomar el ArrayList que ha creado y asignarlo a Session.
●
Reemplazar las dos últimas líneas de código (que configuran y muestran el informe) con una llamada al
método ConfigureCrystalReports() para realizar esta función en un conjunto común de código.
1.5.1.2.6.2
Para modificar el código del método de evento de
clic de botón para que funcione con la persistencia de Session
Procedimiento
1.
Elimine las tres últimas líneas de código del método de evento de clic de botón.
○
La primera línea de código que se eliminará es el código que enlaza la ruta de directorio de archivos del
informe a la propiedad ReportSource del control CrystalReportViewer.
○
La segunda línea de código que se eliminará es el código que obtiene la instancia de ParameterFields de la
propiedad ParameterFieldInfo del control CrystalReportViewer.
○
La tercera línea de código que se eliminará es la llamada al método
SetCurrentValuesForParameterField().
En el siguiente paso agregará dos nuevas líneas de código para reemplazar el código eliminado.
2.
En el método de evento de clic de botón, inmediatamente fuera del bucle foreach, agregue una línea de
código que asigne la instancia de ArrayList a Session.
Nota
Puede utilizar el nombre de variable como identificador de cadena para el control Session que agregue.
Session("myArrayList") = myArrayList
Session["arrayList"] = arrayList;
3.
Llamar al método ConfigureCrystalReports().
De este modo se obtiene la instancia de ArrayList, la aplica al informe y enlaza el informe al control
CrystalReportViewer.
ConfigureCrystalReports()
ConfigureCrystalReports();
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
273
1.5.1.2.6.3
Para probar si está relleno el control ListBox
defaultParameterValuesList
Contexto
Ahora estará preparado para generar y ejecutar el proyecto para verificar que el campo de parámetro se ha
restablecido correctamente.
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
4.
En el control ListBox, presione la tecla Mayús mientras hace clic para seleccionar todas las ciudades de la
lista.
5.
Haga clic en Volver a mostrar el informe.
La página se vuelve a cargar y muestra los registros de cliente de todos los clientes de todas las ciudades. Es
un informe extenso que contiene muchas páginas.
6.
En la barra de herramientas de CrystalReportViewer, haga clic en Próxima página.
7.
Ahora se conserva la lista de las ciudades seleccionadas. Se muestra la página 2 del informe.
8.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.3
Tutorial: Leer y configurar parámetros de rango para
un subinforme
En este tutorial se planteará una complicación adicional: ¿qué sucede si el informe contiene un subinforme que
requiere parámetros distintos?
Introducción
En el tutorial anterior, Tutorial: Leer y configurar parámetros discretos [página 249], obtuvo información sobre
cómo crear un informe con un parámetro discreto y cómo escribir código que estableciera dicho parámetro en
tiempo de ejecución, tanto con valores de parámetro codificados como con valores de parámetros pasados desde
un control ListBox o TextBox.
En este tutorial, aprenderá a agregar parámetros de rango a un subinforme.
Necesita realizar cuatro modificaciones al proyecto que ha creado anteriormente:
274
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
●
Agregará un subinforme al informe original.
Este subinforme direcciona la tabla Pedidos de la base de datos Xtreme. La tabla Pedidos está relacionada
con la tabla Clientes que se ha utilizado en el tutorial anterior mediante una clave externa ID del cliente.
●
Agregará un parámetro de rango al subinforme que filtre por un rango de fechas de pedido.
●
Agregue dos controles Text al formulario, orderStartDate y orderEndDate, para establecer el rango de fechas
de pedido en tiempo de ejecución.
●
Modificará el método SetCurrentValuesForParameter() que ha creado en el tutorial anterior.
Este método crea una instancia de ParameterRangeValue que contiene los valores startDate y endDate
values, y, a continuación, pasa dicha instancia de ParameterRangeValue al parámetro de rango en el
subinforme.
Cuando termine este tutorial, podrá filtrar los valores que se muestran en el informe en tiempo de ejecución. El
código que agregue limita el número de ciudades que se muestran en el informe principal, así como el rango de las
fechas de pedido que se muestran en el subinforme.
Este tutorial también se puede realizar con clases del modelo de objetos ReportDocument; vea Tutorial: Leer y
configurar parámetros con un subinforme [página 413].
Código de ejemplo
Este tutorial incluye código de ejemplo de C# y Visual Basic que muestra la versión finalizada del proyecto. Siga
las instrucciones de este tutorial para crear un nuevo proyecto o para abrir el proyecto de código de ejemplo y
trabajar con una versión finalizada.
El código de ejemplo se almacena en carpetas que están clasificadas por idioma y tipo de proyecto. Los nombres
de las carpetas de cada versión del código de ejemplo son los siguientes:
●
Sitio Web en C#: CS_Web_CRVObjMod_ParametersSubrpt
●
Proyecto para Windows en C#: CS_Win_CRVObjMod_ParametersSubrpt
●
Sitio Web en Visual Basic: VB_Web_CRVObjMod_ParametersSubrpt
●
Proyecto Para Windows En VISUAL Basic: VB_Win_crvobjmod_ParametersSubrpt
Información relacionada
Elegir el modelo de objetos correcto para el proyecto [página 31]
Directorio de informes de muestra [página 14]
1.5.1.3.1
Agregar un subinforme al informe original
Para empezar, agregará un subinforme al informe original.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
275
1.5.1.3.1.1
Para agregar un subinforme
Procedimiento
1.
Abra el proyecto creado en el tutorial anterior, Tutorial: Leer y configurar parámetros discretos [página 249].
2.
En el Explorador de soluciones, haga doble clic en el informe CustomersByCity para abrirlo.
3.
Haga clic con el botón secundario en la barra gris Detalles y seleccione Insertar sección abajo.
4.
Haga clic con el botón secundario en la nueva sección Detalles b que ha creado, seleccione Insertar y, a
continuación, haga clic en Subinforme.
Aparece un cuadrado gris alrededor del cursor del mouse.
5.
Arrastre el rectángulo gris en la nueva sección Detalles b y, a continuación, haga clic para soltarlo.
6.
En el cuadro de diálogo Insertar subinforme, en la ficha Subinforme, seleccione Crear un subinforme con el
Asistente de informes.
Nota
El cuadro de diálogo Insertar un subinforme incluye otras opciones que permiten elegir un informe
existente y subinformes a petición. Para obtener más información sobre estas funciones, vea Ficha
Subinforme (cuadro de diálogo Insertar subinforme) [página 928].
7.
En el campo Nombre del informe nuevo, escriba "PedidosClientes".
8.
Haga clic en Asistente de informes...
9.
En el panel Orígenes de datos disponibles de la ventana Asistente para la creación de informes estándar,
expanda la carpeta Crear nueva conexión.
10. En la subcarpeta que se abre, expanda la carpeta ODBC (RDO).
11. En la ventana ODBC (RDO), seleccione la entrada ODBC DSN correcta para la base de datos Xtreme y haga
clic en Finalizar.
Se expandirá la carpeta ODBC (RDO) y mostrará la base de datos Xtreme.
12. Seleccione la tabla Pedidos y haga clic en el símbolo > para moverla al panel Seleccionar tablas y, a
continuación, haga clic en Siguiente.
13. En el panel Campos disponibles, seleccione ID del pedido, Fecha del pedido, Fecha de envío y Enviar vía.
14. Haga clic en el símbolo > para mover estos campos al panel Campos a mostrar y, a continuación, haga clic en
Finalizar.
15. En el cuadro de diálogo Insertar un subinforme, seleccione la ficha Vínculo.
16. En el panel Campo(s) del informe contenedor para vincular, en la lista Campos disponibles, expanda la tabla
Clientes, seleccione ID del cliente y, a continuación, haga clic en el símbolo >.
17. En el panel Vínculo de campo Clientes.ID del cliente que aparece, deje las selecciones predeterminadas
inalteradas.
Estas selecciones de parámetros y de datos generan automáticamente entre el informe principal y el
subinforme.
18. Haga clic en Aceptar.
El nuevo subinforme, PedidosClientes, se muestra en la sección Detalles b del informe principal.
276
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Nota
Al agregar un subinforme a la sección Detalles, el subinforme se muestra por cada fila, lo que agrega un
costo de rendimiento al informe. Si no necesita información de subinforme a ese nivel de granularidad,
coloque el subinforme en una sección Grupo en vez de hacerlo en una sección Detalles.
1.5.1.3.1.2
Para verificar la configuración del subinforme
Procedimiento
1.
En la sección Detalles, haga doble clic en el subinforme PedidosClientes para verlo.
En la parte inferior de la vista del diseñador, aparecen botones de desplazamiento para el informe principal y
el subinforme PedidosClientes.
2.
Si el Explorador de campos no está visible, en la barra de herramientas de Crystal Reports, haga clic en
Cambiar la vista del campo.
Nota
Otro modo de ver el Explorador de campos es ir al menú Crystal Reports y hacer clic en Explorador de
campos.
3.
En el Explorador de campos, expanda Campos de parámetro.
4.
Verifique que el campo de parámetro Pm-Clientes.ID del cliente se ha generado automáticamente al
vincular el subinforme.
5.
En la barra de herramientas de Crystal Reports, haga clic en Asistente de selección.
6.
En el cuadro de diálogo Asistente de selección, verifique que está establecido el criterio Pedidos.ID del
cliente es igual a {Pm-Clientes.ID del cliente} y, a continuación, haga clic en Aceptar.
7.
En el menú Archivo, seleccione Guardar todo.
Resultados
Ha agregado correctamente un subinforme PedidosClientes al informe CustomersByCity.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
277
1.5.1.3.1.3
Para agregar un parámetro OrderDateRange al
subinforme
Procedimiento
1.
En el Explorador de campos, haga clic con el botón secundario en Campos de parámetro y seleccione Nuevo.
2.
En el cuadro de diálogo Crear campo de parámetro:
a) Defina el Nombre como "OrderDateRange".
b) Defina Texto de solicitud como "Especifique un rango de fechas de pedidos para mostrar".
c) Defina Tipo de valor como "Fecha".
d) Defina Opciones como una sola selección, "Rango de valores".
3.
Haga clic en Aceptar.
4.
En la barra de herramientas de Crystal Reports, haga clic en Asistente de selección.
5.
Haga clic en la ficha Nuevo.
6.
En el cuadro de diálogo Elegir campo, expanda la tabla Pedidos, seleccione Fecha del pedido y, a continuación,
haga clic en Aceptar.
7.
En la nueva ficha Orders.OrderDate, en la lista desplegable de criterios, seleccione fórmula y escriba la
siguiente fórmula: {Pedidos.Fecha del pedido} en {?OrderDateRange}
8.
Haga clic en Aceptar.
9.
En el menú Archivo, seleccione Guardar todo.
Ha agregado correctamente un parámetro OrderDateRange al subinforme y lo ha vinculado a la columna
Orders.OrderDate. En la sección siguiente agregará código para direccionar el parámetro
OrderDateRange en el subinforme.
1.5.1.3.2
Agregar el código de parámetro de subinforme
Contexto
Ahora está listo para agregar el código de parámetro para el subinforme a la clase de código subyacente. Para
empezar, cree un método auxiliar privado, SetDateRangeForOrders().
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte superior de la clase, agregue dos nuevas constantes debajo de la constante
PARAMETER_FIELD_NAME agregada en el tutorial anterior.
Private Const SUBREPORT_PARAMETER_FIELD_NAME As String =
278
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
"OrderDateRange"
Private Const SUBREPORT_NAME As String = "CustomerOrders"
private const string SUBREPORT_PARAMETER_FIELD_NAME =
"OrderDateRange";
private const string SUBREPORT_NAME = "CustomerOrders";
4.
En la parte inferior de la clase, cree un nuevo método privado denominado SetDateRangeForOrders() con
tres parámetros: ParameterFields, una cadena startDate y una cadena endDate.
Private Sub SetDateRangeForOrders(ByVal myParameterFields As
ParameterFields, ByVal startDate As String, ByVal endDate As
String)
End Sub
private void SetDateRangeForOrders(ParameterFields parameterFields,
string startDate, string endDate)
{
}
5.
En este método, declare y cree una instancia de la clase ParameterRangeValue.
Nota
Para que la clase ParameterRangeValue sea accesible, deberá incluir un enunciado "Imports"
[Visual Basic] o "using" [C#] en la parte superior de la clase de código subyacente del espacio de
nombres CrystalDecisions.Shared. (Esta declaración se ha agregado en Configuración de proyectos
[página 14].)
Dim myParameterRangeValue As ParameterRangeValue = New
ParameterRangeValue()
ParameterRangeValue parameterRangeValue = new
ParameterRangeValue();
6.
Establezca la propiedad StartValue de la instancia de ParameterRangeValue en el parámetro de método
startDate.
Nota
Las propiedades StartValue y EndValue de la clase ParameterRangeValue aceptan valores de tipo
Object. Este tipo genérico permite que el valor de rango que se pasa sea de muchos valores, incluidos:
texto, número, fecha, moneda o tiempo.
myParameterRangeValue.StartValue = startDate
parameterRangeValue.StartValue = startDate;
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
279
7.
Establezca la propiedad EndValue de la instancia de ParameterRangeValue en el parámetro de método
endDate.
myParameterRangeValue.EndValue = endDate
parameterRangeValue.EndValue = endDate;
8.
Establezca los límites inferior y superior para que sean bound-inclusive.
Nota
Para BoundInclusive, los valores de rango superior e inferior se incluyen en el rango.
myParameterRangeValue.LowerBoundType =
RangeBoundType.BoundInclusive
myParameterRangeValue.UpperBoundType =
RangeBoundType.BoundInclusive
parameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusive;
parameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive;
Ahora está preparado para asignar la instancia de ParameterRangeValue al parámetro del subinforme.
9.
Recupere la instancia de ParameterField de la clase indizada ParameterFields que se basa en dos
valores indizados: el nombre de campo de parámetro de subinforme y el nombre de subinforme. Pase los dos
valores de constante que ha declarado al principio de la clase.
Dim myParameterField As ParameterField =
myParameterFields(SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME)
ParameterField parameterField =
parameterFields[SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME];
10. Llame al método Clear() de la propiedad CurrentValues de la instancia de ParameterField para eliminar
cualquier valor existente de la propiedad CurrentValues.
myParameterField.CurrentValues.Clear()
parameterField.CurrentValues.Clear();
11. Agregue la instancia de ParameterRangeValue, que ha creado anteriormente, a la propiedad
CurrentValues de la instancia de ParameterField.
myParameterField.CurrentValues.Add(myParameterRangeValue)
parameterField.CurrentValues.Add(parameterRangeValue);
280
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Resultados
Este procedimiento de varios pasos ha establecido los valores de fecha inicial y final en una instancia de
ParameterRangeValue y los ha pasado al parámetro OrderDateRange del subinforme CustomerOrders.
1.5.1.3.3
Agregar controles TextBox para contener valores
de parámetro de rango
En esta sección, agregará dos controles TextBox que proporcionan los valores de fecha inicial y final en tiempo de
ejecución al parámetro de rango OrderDateRange del informe PedidosClientes.
Nota
Si implementa este tutorial en un sitio Web, la persistencia de los valores de fecha que el usuario escribe en los
cuadros de texto se mantiene mediante ViewState.
1.5.1.3.3.1
Para crear y configurar un botón que vuelva a
mostrar el informe en el formulario
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Diseñador.
3.
Si está desarrollando un sitio Web, realice las siguientes acciones:
a) Haga clic entre el control ListBox y el control Button.
b) Presione INTRO tres veces para crear dos líneas entre el control ListBox y el control Button.
c) En la primera línea creada debajo del control ListBox, escriba Fecha inicial de pedidos.
d) En la segunda línea creada debajo del control ListBox, escriba Fecha final de pedidos.
4.
Si está desarrollando un proyecto de Windows, realice las siguientes acciones:
a) En el Cuadro de herramientas, arrastre dos controles Label a la derecha del control ListBox. Coloque
una etiqueta encima de la otra y ambas encima del control Button.
b) Seleccione el primer control Label y, a continuación, en la ventana Propiedades, establezca la propiedad
Text en Fecha inicial de pedidos.
c) Seleccione el segundo control Label y, a continuación, en la ventana Propiedades, establezca la propiedad
Text en Fecha final de pedidos.
5.
En el Cuadro de herramientas, arrastre un control hasta la derecha de "Fecha inicial de pedidos".
6.
Haga clic en el control TextBox para seleccionarlo.
7.
En la ventana Propiedades, establezca ID (o Name) en orderStartDate.
8.
En el Cuadro de herramientas, arrastre un control TextBox hasta la derecha de "Fecha final de pedidos".
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
281
9.
Haga clic en el control TextBox para seleccionarlo.
10. En la ventana Propiedades, establezca ID (o Name) en orderEndDate.
11. En el menú Archivo, seleccione Guardar todo.
1.5.1.3.4
Modificar métodos para llamar al subinforme
Debe modificar el método ConfigureCrystalReports() y el método de evento redisplay_Click() para
recibir información de estos controles TextBox y aplicarlos al método SetDateRangeForOrders() con el fin de
que se procese la información de parámetros de los subinformes.
En el tutorial anterior, Tutorial: Leer y configurar parámetros discretos [página 249], ha diseñado estos métodos
de dos formas distintas, en función de si incluía la persistencia de Session.
Nota
Los proyectos de Windows no requieren persistencia de Session. Los sitios Web normalmente requieren
persistencia de Session.
Elija uno de los procedimientos con pasos siguientes (pero no ambos). Modifique los métodos que excluyen la
persistencia de Session o los que la incluyen.
1.5.1.3.4.1
Modificar los métodos que excluyen la
persistencia de Session
Si ha terminado el tutorial anterior, Tutorial: Leer y configurar parámetros discretos [página 249], y ha excluido la
persistencia de Session, realice los siguientes procedimientos. De lo contrario, vaya a Modificar los métodos que
incluyen la persistencia de Session [página 284].
1.5.1.3.4.1.1
Para modificar el método
ConfigureCrystalReports() que excluye la persistencia de
Session
Procedimiento
1.
En el método ConfigureCrystalReports(), agregue un par de saltos de línea al código después de las
líneas que asignan "Paris" y "Tokyo" como variables ArrayList.
2.
En los saltos de línea, declare y establezca valores codificados para dos variables de cadena, startDate y
endDate.
Dim startDate As String = "8/1/1997"
Dim endDate As String = "8/31/1997"
282
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
string startDate = "8/1/1997";
string endDate = "8/31/1997";
3.
Debajo del código que llama a SetCurrentValuesForParameterField(), llame al método
SetDateRangeForOrders() y pásele la instancia de ParameterFields y las variables startDate y endDate.
SetDateRangeForOrders(myParameterFields, startDate, endDate)
SetDateRangeForOrders(parameterFields, startDate, endDate);
4.
En el menú Archivo, seleccione Guardar todo.
1.5.1.3.4.1.2
Para modificar el método redisplay_Click() que
excluye la persistencia de Session
Procedimiento
1.
En el método de evento redisplay_Click(), agregue un par de saltos de línea al código encima de la línea
que enlaza el informe al control CrystalReportViewer.
2.
En los saltos de línea, declare y establezca valores para dos variables de cadena, startDate y endDate, de
los controles TextBox que ha agregado al formulario Web Forms o Windows Forms.
Dim startDate As String = orderStartDate.Text
Dim endDate As String = orderEndDate.Text
string startDate = orderStartDate.Text;
string endDate = orderEndDate.Text;
3.
Debajo del código que llama a SetCurrentValuesForParameterField(), llame al método
SetDateRangeForOrders() y pásele la instancia de ParameterFields y las variables startDate y endDate.
SetDateRangeForOrders(myParameterFields, startDate, endDate)
SetDateRangeForOrders(parameterFields, startDate, endDate);
4.
En el menú Archivo, seleccione Guardar todo.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
283
1.5.1.3.4.2
Modificar los métodos que incluyen la
persistencia de Session
Si ha terminado el tutorial anterior, Tutorial: Leer y configurar parámetros discretos [página 249], y ha incluido la
persistencia de Session, realice los siguientes procedimientos. En caso contrario, continúe con Modificar los
métodos que excluyen la persistencia de Session [página 282].
1.5.1.3.4.2.1
Para modificar el método
ConfigureCrystalReports() que incluye la persistencia de
Session
Procedimiento
1.
En el método ConfigureCrystalReports(), agregue un par de saltos de línea al código detrás de la línea
que declara y crea una instancia de ArrayList.
2.
En los saltos de línea, declare dos variables de cadena, startDate y endDate.
Dim startDate As String
Dim endDate As String
string startDate;
string endDate;
3.
En el bloque condicional Not IsPostBack, escriba los valores predeterminados para las variables startDate
y endDate.
startDate = "8/1/1997"
endDate = "8/31/1997"
startDate = "8/1/1997";
endDate = "8/31/1997";
4.
En el bloque condicional Not IsPostBack, asigne las variables startDate y endDate a Session.
Session("startDate") = startDate
Session("endDate") = endDate
Session["startDate"] = startDate;
Session["endDate"] = endDate;
284
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
5.
En el bloque Else, después de obtener la instancia de ArrayList de Session, obtenga las variables startDate y
endDate de Session.
startDate = Session("startDate").ToString()
endDate = Session("endDate").ToString()
startDate = Session["startDate"].ToString();
endDate = Session["endDate"].ToString();
Con este enfoque, se llega al final del bloque con las variables de fecha asignadas en cualquier caso. De este
modo se sigue la lógica paralela a la asignación de la variable ArrayList que ha configurado en el tutorial
anterior.
6.
Debajo del código que llama a SetCurrentValuesForParameterField(), llame al método
SetDateRangeForOrders() y pásele la instancia de ParameterFields y las variables startDate y
endDate.
SetDateRangeForOrders(myParameterFields, startDate, endDate)
SetDateRangeForOrders(parameterFields, startDate, endDate);
7.
En el menú Archivo, seleccione Guardar todo.
1.5.1.3.4.2.2
Para modificar el método redisplay_Click() que
incluye la persistencia de Session
Contexto
A continuación, modificará el método de evento redisplay_Click.
Procedimiento
1.
En el método de evento redisplay_Click(), agregue un par de saltos de línea al código después de la línea
que asigna la instancia de ArrayList a Session.
2.
En los saltos de línea, asigne la propiedad Text del TextBox orderStartDate y orderEndDate a variables de
Session.
Session("startDate") = orderStartDate.Text
Session("endDate") = orderEndDate.Text
Session["startDate"] = orderStartDate.Text;
Session["endDate"] = orderEndDate.Text;
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
285
3.
En el menú Archivo, seleccione Guardar todo.
Resultados
Estos valores de Session startDate y endDate se recuperan y aplican cuando se llama al método
ConfigureCrystalReports().
Ahora estará preparado para generar y ejecutar el proyecto para verificar que los valores TextBox restablecen el
parámetro de rango del subinforme.
1.5.1.3.5
Probar el parámetro de subinforme
Contexto
Ya está preparado para probar la configuración del parámetro de subinforme desde los valores TextBox.
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
4.
En el control ListBox, presione la tecla CTRL mientras hace clic para seleccionar al menos cuatro ciudades
diferentes en la lista.
5.
En el cuadro de texto orderStartDate, escriba 1/1/1997.
6.
En el cuadro de texto orderEndDate, escriba 8/31/1997.
7.
Haga clic en el botón Volver a mostrar el informe.
La página se volverá a cargar y mostrará los registros de cliente para los clientes que vivan en las ciudades de
la lista que acaba de seleccionar, así como un subinforme que muestra los pedidos del rango de fechas
especificado anteriormente.
8.
En el control CrystalReportViewer, aumente el nivel de Zoom al 125%.
La página se recargará al 125% de zoom. Se conservan los valores que están seleccionados para ambas
ciudades y el rango de fechas de pedido.
9.
286
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.1.4
Tutorial: Filtrar datos con fórmulas de selección
En este tutorial, aprenderá a usar las fórmulas de selección para filtrar los registros que desee mostrar en un
informe de Crystal.
Introducción
Las fórmulas de selección se utilizan para filtrar los registros que desee mostrar en un informe de Crystal. Para
escribir fórmulas de selección, puede usar las sintaxis Basic y Crystal.
En este tutorial, va a crear una fórmula de selección para filtrar los registros de los clientes cuyo campo Ventas
del año pasado es mayor que un valor especificado y el campo Nombre del cliente se compara con otra cadena.
Se utiliza un control ListBox con el fin de seleccionar un operador de comparación para el campo Nombre del
cliente. Puede elegir que se muestren los nombres de los clientes que son iguales a, menores que, mayores que,
menores o iguales que, iguales o mayores que o que no son iguales que el valor de cadena especificado.
La fórmula se pasa como variable de cadena a la propiedad SelectionFormula de la clase CrystalReportViewer.
Una vez establecida la propiedad, el informe de Crystal que enlaza con el control CrystalReportViewer se filtra
antes de mostrarse.
Código de ejemplo
Este tutorial incluye código de ejemplo de C# y Visual Basic que muestra la versión finalizada del proyecto. Siga
las instrucciones de este tutorial para crear un nuevo proyecto o para abrir el proyecto de código de ejemplo y
trabajar con una versión finalizada.
El código de ejemplo se almacena en carpetas que están clasificadas por idioma y tipo de proyecto. Los nombres
de las carpetas de cada versión del código de ejemplo son los siguientes:
●
Sitio Web en C#: CS_Web_CRVObjMod_FilteringData
●
Proyecto para Windows en C#: CS_Win_CRVObjMod_FilteringData
●
Sitio Web en Visual Basic: VB_Web_CRVObjMod_FilteringData
●
Proyecto para Windows en Visual Basic: VB_Win_CRVObjMod_FilteringData
Información relacionada
Referencia de fórmulas [página 777]
Directorio de informes de muestra [página 14]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
287
1.5.1.4.1
Crear un informe con una fórmula de selección
En esta sección, creará un informe que obtenga su información de la base de datos Xtreme.
1.5.1.4.1.1
Para crear un informe con datos seguros de la
base de datos Xtreme
Procedimiento
1.
En el Explorador de soluciones, haga clic con el botón secundario en el nombre de proyecto en negrita, elija
Agregar y, a continuación, haga clic en Agregar nuevo elemento.
2.
En el cuadro de diálogo Agregar nuevo elemento, en la vista Plantillas, seleccione la plantilla Crystal Report.
3.
En el campo Nombre, especifique el nombre CustomersBySalesName.rpt y haga clic en Agregar.
4.
En el panel Crear un nuevo documento de Crystal Reports del cuadro de diálogo Galería de Crystal Reports,
seleccione Usar asistente de informes.
5.
En el panel Elegir un Asistente, seleccione Estándar y, a continuación, haga clic en Aceptar.
6.
En el panel Orígenes de datos disponibles de la ventana Asistente para la creación de informes estándar,
expanda la carpeta Crear nueva conexión.
7.
En la subcarpeta que se abre, expanda la carpeta ODBC (RDO).
8.
En la ventana ODBC (RDO), seleccione la entrada ODBC DSN correcta para la base de datos de muestra
Xtreme y haga clic en Finalizar.
Se expandirá la carpeta ODBC (RDO) y mostrará la base de datos Xtreme.
9.
Expanda el nodo Tablas, haga doble clic en la tabla Cliente para moverla al panel Tablas seleccionadas y, a
continuación, haga clic en Siguiente.
10. Expanda la tabla Cliente y, a continuación, mantenga presionada la tecla Ctrl y haga clic en Nombre del cliente
y Ventas del año pasado.
11. Haga clic en el símbolo > para mover estos campos al panel Campos a mostrar y, a continuación, haga clic en
Siguiente.
12. En el panel Campos disponibles, en Campos del informe, haga doble clic en Cliente.Nombre del cliente para
mover el campo al panel Agrupar por y, a continuación, haga clic en Finalizar.
Se crea el informe CustomersBySalesName y se carga en la ventana principal de Visual Studio.
1.5.1.4.1.2
Para crear una fórmula de selección basada en las
ventas del año pasado
Contexto
Después, cree una fórmula de selección para filtrar los datos basándose en el valor del campo Ventas del año
pasado.
288
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código para ver la clase de código subyacente de Web Forms o Windows Forms.
3.
Para un sitio Web, en el método ConfigureCrystalReports() (que ha creado en Configuración de
proyectos [página 14]), cree un bloque condicional Not IsPostBack.
Nota
El bloque condicional Not IsPostBack encapsula el código que se debería ejecutar sólo la primera vez
que se carga la página.
If Not IsPostBack Then
End If
if(!IsPostBack)
{
}
4.
Para un sitio Web, agregue las siguientes líneas de código en el bloque condicional Not IsPostBack. Para un
proyecto Windows, agregue el código al método ConfigureCrystalReports(), sin el bloque condicional
Not IsPostBack.
a) Especifique la fórmula para seleccionar sólo los registros cuyo valor del campo Ventas del año pasado
sea mayor que $11000,00 y cuyos nombres de clientes empiecen por la letra "A".
Dim mySelectFormula As String = "{Customer.Last Year's Sales} >
11000.00 " _
& "AND Mid({Customer.Customer Name}, 1, 1) = ""A"" "
string selectFormula = "{Customer.Last Year's Sales} > 11000.00
"
+ "AND Mid({Customer.Customer Name}, 1, 1) = \"A\"";
b) Asigne la cadena de la fórmula de selección a la propiedad SelectionFormula del control
CrystalReportViewer.
myCrystalReportViewer.SelectionFormula = mySelectFormula
crystalReportViewer.SelectionFormula = selectFormula;
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
289
1.5.1.4.2
Enlazar el informe
Cuando siguió las instrucciones de la sección Configuración de proyectos [página 14] para prepararse para este
tutorial, colocó un control CrystalReportViewer en el formulario Web Forms o Windows Forms. En los pasos
anteriores, agregó un informe CustomersBySalesName y una fórmula de selección al proyecto.
En esta sección enlazará la ruta de directorio de archivos del informe CustomersBySalesName con el control
CrystalReportViewer. Después, va a comprobar si el informe se muestra correctamente con los registros
filtrados por la fórmula de selección.
1.5.1.4.2.1
Para enlazar la ruta de directorio de archivos del
informe CustomersBySalesName al control
CrystalReportViewer
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código para ver la clase de código subyacente de Web Forms o Windows Forms.
3.
Busque el método ConfigureCrystalReports() (que ha creado en Configuración de proyectos [página
14]).
4.
Declare una variable de cadena, llámela reportPath y asígnele una ruta en tiempo de ejecución al informe
local. Esta ruta se determina de forma diferente para los sitios Web y los proyectos para Windows:
○
Para un sitio Web, pase el nombre del archivo de informe local como un parámetro de cadena al método
Server.MapPath(). Esto asigna el informe local a la ruta del directorio de archivos de la unidad de disco
duro en tiempo de ejecución.
Dim reportPath As String =
Server.MapPath("CustomersBySalesName.rpt")
string reportPath = Server.MapPath("CustomersBySalesName.rpt");
○
Para un proyecto Windows, concatene la propiedad Application.StartupPath con una barra diagonal
inversa y el nombre del archivo de informe local. Esto asigna el informe al mismo directorio del archivo
ejecutable de Windows.
Nota
En la fase de compilación se copiará el informe al directorio que contiene el archivo ejecutable.
Dim reportPath As String = Application.StartupPath & "\" &
"CustomersBySalesName.rpt"
string reportPath = Application.StartupPath + "\\" +
"CustomersBySalesName.rpt";
290
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
5.
Asigne la ruta de directorio de archivos del informe NorthwindCustomers a la propiedad ReportSource del
control CrystalReportViewer.
myCrystalReportViewer.ReportSource = reportPath
crystalReportViewer.ReportSource = reportPath;
1.5.1.4.2.2
Para probar la fórmula de selección del informe
CustomersBySalesName
Procedimiento
1.
En el menú Generar, haga clic en Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
Si usa un informe no incrustado en un proyecto Windows, busque el archivo ejecutable de Windows
compilado en el subdirectorio \bin\ [Visual Basic] o \bin\debug\ [C#] y, a continuación, copie el
informe en dicho subdirectorio.
Nota
Para que el archivo ejecutable de Windows cargue el informe no incrustado en tiempo de ejecución, el
informe deberá estar almacenado en el mismo directorio que el archivo ejecutable de Windows.
4.
En el menú Depurar, haga clic en Iniciar.
El informe de Crystal Reports muestra cuatro registros de cliente: Alley Cat Cycles, Ankara Bicycle Company,
Arsenault et Maurier y Athens Bicycle Co.
5.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.4.3
selección
Agregar controles para usarlos en la fórmula de
Contexto
En esta sección, va a agregar controles para cambiar dinámicamente los valores utilizados en la fórmula de
selección. Para el campo Ventas del año pasado, va a agregar un cuadro de texto para especificar el valor mínimo
de ventas que se va a mostrar en el informe de Crystal. En el campo Nombre del cliente , va a agregar un control
DropDownList y un control TextBox para especificar los nombres de los clientes que se van a mostrar.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
291
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Diseñador.
3.
Si está desarrollando un sitio Web, realice las siguientes acciones:
a) Haga clic en el control CrystalReportViewer para seleccionarlo.
b) Presione la FLECHA IZQUIERDA del teclado de modo que aparezca un cursor parpadeante y, a
continuación, presione INTRO tres veces.
El control CrystalReportViewer bajará tres líneas.
4.
Si está desarrollando un proyecto de Windows, realice las siguientes acciones:
a) Haga clic en el control CrystalReportViewer para seleccionarlo.
b) En la ventana Propiedades, establezca el valor de Dock en "Bottom".
c) Ajuste el tamaño del control CrystalReportViewer, para que aparezcan tres líneas aproximadamente
sobre él.
d) En la ventana Propiedades, establezca el valor de Anchor en "Top, Bottom, Left, Right".
5.
Si está desarrollando un sitio Web, en la primera línea escriba Especifique el valor mínimo de las
ventas del año pasado: $.
6.
Si está desarrollando un proyecto de Windows, realice las siguientes acciones:
a) En el Cuadro de herramientas, arrastre un control Label hasta la parte superior del formulario.
b) En la ventana Propiedades, establezca el valor de la propiedad Text en Especifique el valor
mínimo de las ventas del año pasado: $.
7.
En el Cuadro de herramientas, arrastre un control TextBox hasta la derecha del texto.
8.
Seleccione el control TextBox y, a continuación, en la ventana Propiedades, siga estos pasos:
a) Establezca el valor de ID (o Name) en lastYearsSales.
b) Establezca el valor de Text en 11000,00.
9.
Si está desarrollando un sitio Web, en la segunda línea, escriba Mostrar el nombre de los clientes.
10. Si está desarrollando un proyecto de Windows, realice las siguientes acciones:
a) En el Cuadro de herramientas, arrastre un control Label hasta la segunda línea del formulario.
b) En la ventana Propiedades, establezca el valor de la propiedad Text en "Mostrar el nombre de los
clientes".
11. En el Cuadro de herramientas, arrastre un control DropDownList (ComboBox para un proyecto Windows)
hasta la derecha del texto.
12. Seleccione el control DropDownList (ComboBox) y, a continuación, en la ventana Propiedades, establezca el
valor de ID (o Name) en "selectOperatorList".
13. En el Cuadro de herramientas, arrastre un control TextBox hasta la derecha del control DropDownList.
14. Seleccione el control TextBox y, a continuación, en la ventana Propiedades, siga estos pasos:
a) Establezca ID o Name en customerName.
b) Establezca el valor de Text en A.
15. En el Cuadro de herramientas, arrastre un control Button hasta la tercera línea del formulario y sobre el
control CrystalReportViewer.
16. Seleccione el control Button y, a continuación, en la ventana Propiedades, siga estos pasos:
a) Establezca el valor de ID (o Name) en redisplay.
292
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
b) Establezca Text como Volver a mostrar el informe.
1.5.1.4.4
código
Establecer la fórmula de selección manualmente en
Ya está preparado para agregar código para modificar la fórmula de selección en la clase de código subyacente.
1.5.1.4.4.1
Para codificar la fórmula de selección
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, seleccione Diseñador.
3.
Haga doble clic en Volver a mostrar el informe.
Aparece la clase de código subyacente del informe, que muestra que se ha generado automáticamente un
controlador de eventos redisplay_Click().
4.
En la fórmula de selección, cree una variable de cadena que incluya los valores desde los controles TextBox.
La fórmula de selección es parecida al texto escrito en el método ConfigureCrystalReports(). En vez del
valor de mínimo de ventas de $11000,00, utilice el valor del control TextBox lastYearsSales. Para el
campo Nombre del cliente, utilice el valor del control TextBox customerName.
Dim mySelectFormula As String = "{Customer.Last Year's Sales} >
" & lastYearsSales.Text _
& " AND Mid({Customer.Customer Name}, 1, 1) > """ &
customerName.Text & """"
string selectFormula = "{Customer.Last Year's Sales} > " +
lastYearsSales.Text
+ " AND Mid({Customer.Customer Name}, 1, 1) > \"" +
customerName.Text + "\"";
5.
Asigne la variable de cadena a la propiedad SelectionFormula del control CrystalReportViewer.
myCrystalReportViewer.SelectionFormula = mySelectFormula
crystalReportViewer.SelectionFormula = selectFormula;
6.
Vuelva a enlazar el informe CustomerBySalesName a la propiedad ReportSource del control
CrystalReportViewer.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
293
Nota
La ruta de directorio de archivos que se muestra aquí es la de un proyecto de Visual Studio. ProjectName
se reemplaza por el nombre del proyecto Web o de Windows. UserName se reemplaza por el nombre de
conexión del equipo.
○
La ruta predeterminada de un sitio Web es la siguiente:
myCrystalReportViewer.ReportSource = "C:\WebSites\ ProjectName
\CustomersBySalesName.rpt"
crystalReportViewer.ReportSource = "C:\\WebSites\\ ProjectName\
\CustomersBySalesName.rpt";
○
La ruta predeterminada de un proyecto de Windows es la siguiente:
myCrystalReportViewer.ReportSource = "C:\Documents and Settings\ UserName\Mis
documentos\Visual Studio\Projects\ ProjectName\CustomersBySalesName.rpt"
crystalReportViewer.ReportSource = "C:\\Documents and Settings\\ UserName\
\Mis documentos\\Visual Studio\\Projects\\ ProjectName\
\CustomersBySalesName.rpt";
Resultados
Ya ha creado una fórmula de selección que puede modificar en tiempo de ejecución.
1.5.1.4.4.2
Para probar la fórmula de selección
Procedimiento
1.
En el menú Generar, haga clic en Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
4.
En el control TextBox lastYearsSales, escriba 200000.
5.
En el control TextBox customerName, escriba SAB.
6.
Haga clic en Volver a mostrar el informe.
El informe Crystal Reports muestra tres registros de clientes: SAB Mountain, Tek Bikes y Tienda de Bicicletas
El Pardo.
Se muestran sólo los registros de clientes con nombres mayores que "SAB" y ventas del año pasado mayor
que "200000".
294
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
7.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.4.5
Utilizar un control DropDownList para modificar la
fórmula de selección
En esta sección, va a llenar el control DropDownList con operadores de comparación. Va a crear una
enumeración que contiene los operadores de comparación.
El control DropDownList selecciona si desea mostrar los nombres de los clientes que sean iguales, menores,
mayores, menores o iguales, mayores o iguales que o no sean iguales que el texto especificado en el control
TextBox.
En el método de evento redisplay_Click(), va a modificar la cadena actualmente asignada a la propiedad
SelectionFormula del control CrystalReportViewer.
1.5.1.4.5.1
Para crear la enumeración
CeComparisonOperator
Procedimiento
1.
En el Explorador de soluciones, haga clic con el botón secundario en el nombre de proyecto en negrita, elija
Agregar y, a continuación, haga clic en Agregar nuevo elemento.
2.
En el cuadro de diálogo Agregar nuevo elemento, seleccione Clase en la vista Plantillas.
3.
En el campo Nombre, escriba CeComparisonOperator y, a continuación, haga clic en Agregar.
Nota
Puede que se le pida que coloque esta clase en un directorio de código. Haga clic en el botón Sí.
4.
En la firma de clase, cambie la palabra clase por enum para convertir la clase en una enumeración.
En un proyecto Windows de C#, también debe cambiar el espacio de nombres al nombre del proyecto.
Nota
En Visual Basic, recuerde cambiar las firmas tanto de apertura como de cierre de la clase a enumeración.
5.
Puesto que las enumeraciones no tienen constructores, elimine el método constructor predeterminado que
se proporciona en la versión de C# del código.
6.
En la enumeración, especifique los valores:
EqualTo
LessThan
GreaterThan
LessThan_or_EqualTo
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
295
GreaterThan_or_EqualTo
Not_EqualTo
EqualTo,
LessThan,
GreaterThan,
LessThan_or_EqualTo,
GreaterThan_or_EqualTo,
Not_EqualTo
1.5.1.4.5.2
Para llenar el control DropDownList desde la
enumeración CeComparisonOperator para un sitio Web
Contexto
Los siguientes procedimientos explican cómo enlazar la enumeración CeComparisonOperator al control
DropDownList de un sitio Web o un proyecto para Windows. Siga las instrucciones de uno de los siguientes
procedimientos de varios pasos.
Procedimiento
1.
Abra el formulario Web Forms.
2.
En el menú Ver, haga clic en Código.
3.
En el bloque condicional Not IsPostBack del método ConfigureCrystalReports(), delante de la
declaración de cadena de la fórmula de selección, establezca el valor de la propiedad DataSource del control
DropDownList en los valores de la enumeración CeComparisonOperator.
selectOperatorList.DataSource =
System.Enum.GetValues(GetType(CeComparisonOperator))
selectOperatorList.DataSource =
System.Enum.GetValues(typeof(CeComparisonOperator));
4.
Ahora, llame al método DataBind() del control DropDownList selectOperatorList para enlazar los valores al
control.
selectOperatorList.DataBind()
selectOperatorList.DataBind();
296
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.1.4.5.3
Para llenar el control DropDownList desde la
enumeración CeComparisonOperator para un proyecto
Windows
Procedimiento
1.
Abra el formulario Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En el método ConfigureCrystalReports(), delante de la declaración de cadena de la fórmula de
selección, establezca el valor de la propiedad del control ComboBox selectOperatorList en los valores de la
enumeración CeComparisonOperator.
selectOperatorList.DataSource =
System.Enum.GetValues(GetType(CeComparisonOperator))
selectOperatorList.DataSource =
System.Enum.GetValues(typeof(CeComparisonOperator));
1.5.1.4.5.4
Para crear el método auxiliar
GetSelectedCompareOperator()
Contexto
Después, va a crear el método auxiliar GetSelectedCompareOperator() para que devuelva el índice
seleccionado como cadena que representa un signo de operador de comparación.
Procedimiento
1.
En la parte inferior de la clase, cree un método auxiliar privado denominado
GetSelectedCompareOperator() que devuelva una variable de cadena.
Private Function GetSelectedCompareOperator() As String
End Function
private string GetSelectedCompareOperator()
{
}
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
297
2.
En el método, cree un enunciado "Select Case" [Visual Basic] o "switch" [C#] que haga referencia
a los miembros de la enumeración CeComparisonOperator y devuelva el signo del operador de comparación
como variable de cadena.
Select Case selectOperatorList.SelectedIndex
Case CeComparisonOperator.EqualTo
return "="
Case CeComparisonOperator.LessThan
return "<"
Case CeComparisonOperator.GreaterThan
return ">"
Case CeComparisonOperator.LessThan_or_EqualTo
return "<="
Case CeComparisonOperator.GreaterThan_or_EqualTo
return ">="
Case CeComparisonOperator.Not_EqualTo
return "<>"
Case Else
return "="
End Select
switch ((CeComparisonOperator)selectOperatorList.SelectedIndex)
{
case CeComparisonOperator.EqualTo:
return "=";
case CeComparisonOperator.LessThan:
return "<";
case CeComparisonOperator.GreaterThan:
return ">";
case CeComparisonOperator.LessThan_or_EqualTo:
return "<=";
case CeComparisonOperator.GreaterThan_or_EqualTo:
return ">=";
case CeComparisonOperator.Not_EqualTo:
return "<>";
default:
return "=";
}
1.5.1.4.5.5
Para modificar el operador de comparación de
Nombre del cliente asignado a la propiedad SelectionFormula
Contexto
En el método de evento redisplay_Click(), se utiliza actualmente un signo "mayor que" (">") para la selección
del campo Nombre del cliente. A continuación, aprenderá a cambiar el signo al operador de comparación
seleccionado desde el control DropDownList. El signo seleccionado se devuelve como cadena al llamar al
método auxiliar GetSelectedCompareOperator().
298
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Procedimiento
1.
En la parte superior del método de evento redisplay_Click(), llame al método auxiliar
GetSelectedCompareOperator() y asigne el resultado a una variable de cadena.
Dim mySelectedOperator As String = GetSelectedCompareOperator()
string selectedOperator = GetSelectedCompareOperator();
2.
Para la variable de cadena de la fórmula de selección, reemplace el signo "mayor que" (">") por la cadena del
operador seleccionado.
Dim mySelectFormula As String = "{Customer.Last Year's Sales} >
" & lastYearsSales.Text _
& " AND Mid({Customer.Customer Name}, 1, 1) " &
mySelectedOperator & " """ & customerName.Text & """"
string selectFormula = "{Customer.Last Year's Sales} > " +
lastYearsSales.Text
+ " AND Mid({Customer.Customer Name}, 1, 1) " + selectedOperator + "
\"" + customerName.Text + "\"";
1.5.1.4.5.6
Para probar la fórmula de selección del informe
CustomersBySalesName
Contexto
Ha creado una fórmula de selección que depende de los valores especificados para el campo Ventas del año
pasado y el campo Nombre del cliente.
Ahora puede generar y probar la fórmula de selección.
Procedimiento
1.
En el menú Generar, haga clic en Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
a) En el control TextBox lastYearsSales, escriba 40000.
b) En el control TextBox customerName, escriba Athens Bicycle Co..
c) En DropDownList, seleccione LessThan.
d) Haga clic en Volver a mostrar el informe.
El informe de Crystal Reports muestra dos registros de cliente: Alley Cat Cycles y Ankara Bicycle Company.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
299
4.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.5
Tutorial: Personalizar el control CrystalReportViewer
En este tutorial, aprenderá a personalizar la presentación del control CrystalReportViewer.
Introducción
En este tutorial, aprenderá a personalizar el aspecto del control CrystalReportViewer mediante el uso de las
propiedades desde su clase subyacente.
Asimismo, aprenderá a utilizar los métodos de selección de página, zoom, búsqueda e impresión.
Para comenzar, va a aprender a personalizar la barra de herramientas de CrystalReportViewer. Necesita un
control ListBox que almacene las propiedades disponibles para la barra de herramientas. Sólo las propiedades
seleccionadas desde este control se muestran en la barra de herramientas de CrystalReportViewer.
A continuación, agregará un segundo control ListBox para almacenar los elementos del informe. En los sitios
Web, también puede elegir mostrar todas las páginas del informe como una sola página o como páginas
separadas.
Aprenderá a personalizar el color de fondo mediante un control DropDownList.
Después, aprenderá a seleccionar la página del informe que desee ver. Necesita un control TextBox para
especificar el número de página y un control Button para volver a cargar el informe en la página seleccionada.
Necesita, también, los controles TextBox y Button para modificar el factor de zoom y para buscar texto en el
informe.
Para un sitio Web, tiene acceso a las propiedades del control CrystalReportViewer que no están disponibles en un
proyecto de Windows: una propiedad para elegir el modo de impresión y otras propiedades para cambiar el
ancho, el estilo y el color de los bor
Código de ejemplo
Este tutorial incluye código de ejemplo de C# y Visual Basic que muestra la versión finalizada del proyecto. Siga
las instrucciones de este tutorial para crear un nuevo proyecto o para abrir el proyecto de código de ejemplo y
trabajar con una versión finalizada.
El código de ejemplo se almacena en carpetas que están clasificadas por idioma y tipo de proyecto. Los nombres
de las carpetas de cada versión del código de ejemplo son los siguientes:
●
Sitio Web en C#: CS_Web_CRVObjMod_CustomizeViewer
●
Proyecto para Windows en C#: CS_Win_CRVObjMod_CustomizeViewer
●
Sitio Web en Visual Basic: VB_Web_CRVObjMod_CustomizeViewer
●
Proyecto para Windows en Visual Basic: VB_Win_CRVObjMod_CustomizeViewer
300
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Información relacionada
Directorio de informes de muestra [página 14]
1.5.1.5.1
Crear una tabla de configuración personalizada
En esta sección, creará y configurará una tabla (en un sitio Web) o un control TableLayoutPanel (en un proyecto
para Windows) para albergar los distintos controles que forman la tabla de configuración personalizada.
Debido a que los sitios Web y los proyectos para Windows usan un tipo de tabla diferente, seleccione el
procedimiento con pasos que corresponda a su sitio Web o proyecto para Windows.
1.5.1.5.1.1
Para crear una tabla de configuración
personalizada para un sitio Web
Procedimiento
1.
Abra la página Default.aspx (el formulario Web Forms) en la vista Diseño.
2.
Haga clic en el control CrystalReportViewer para seleccionarlo.
3.
Presione la flecha izquierda para mover el cursor a la izquierda del control CrystalReportViewer y presione
Intro.
4.
Presione la flecha arriba para mover el cursor a la línea vacía situada encima del control CrystalReportViewer.
5.
En el menú Diseño, haga clic en Insertar tabla.
6.
En el cuadro de diálogo Insertar tabla, seleccione el botón de opción Personalizado.
7.
En el panel Diseño, active la casilla de verificación Ancho y deje el valor en un 100%.
8.
Aumente el número de Filas a 6 y el de Columnas a 4.
9.
En el panel Atributos, active la casilla de verificación Borde, y aumente el número a 1.
10. Haga clic en el botón Propiedades de celda...
11. En el cuadro de diálogo Propiedades de celda, en el panel Diseño, establezca el cuadro combinado Alineación
vertical en Superior.
12. Active la casilla de verificación Sin ajuste de línea y, a continuación, haga clic en Aceptar.
13. Haga clic en Aceptar de nuevo para cerrar el cuadro de diálogo Insertar tabla.
Resultados
Ahora ya estará preparado para agregar controles personalizados a esta tabla para el sitio Web.
Continúe con Elementos de barra de herramientas y de informe del control CrystalReportViewer [página 303].
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
301
1.5.1.5.1.2
Para crear una tabla de configuración
personalizada para un proyecto para Windows
Contexto
Nota
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos [página 14].
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.
Procedimiento
1.
Abra el formulario Windows Forms en la vista Diseño.
2.
Haga clic en la barra de título Formulario para seleccionar todo el formulario y, a continuación, arrastre la
esquina inferior derecha del formulario para ampliarlo de modo que llene el área principal.
3.
Haga clic en el control CrystalReportViewer para seleccionarlo.
4.
En la ventana Propiedades, establezca Dock en "Bottom".
5.
En la ventana Propiedades, establezca Anchor en "Top, Bottom, Left, Right".
6.
En el Cuadro de herramientas, arrastre un control TableLayoutPanel hasta la parte superior izquierda del
formulario Windows Forms.
Aparecerá un control TableLayoutPanel, mostrando dos columnas y dos filas.
7.
Si el panel Tarea inteligente no está abierto, haga clic en el botón triangular de la esquina superior derecha del
control TableLayoutPanel.
Se abrirá el panel Tarea inteligente denominado "TableLayoutPanel Tasks".
8.
En la etiqueta TableLayoutPanel Tasks, haga clic en el vínculo Editar filas y columnas.
9.
En el cuadro de diálogo Estilos de columna y fila, en el cuadro combinado Tipo de miembro, seleccione
Columnas.
10. Haga clic en Agregar hasta que tenga un total de cuatro columnas.
11. Para cada columna, realice lo siguiente:
a) Seleccione la columna.
b) En el panel Tipo de tamaño seleccione Porcentaje.
c) Establezca cada valor al 25%.
12. En el cuadro combinado Tipo de miembro, seleccione Filas.
13. Haga clic en Agregar hasta que tenga un total de cinco filas.
Nota
La tabla de un proyecto Windows requiere una fila menos que la tabla de un sitio Web, porque hay menos
opciones configurables en un control CrystalReportViewer de un proyecto Windows.
302
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
14. Para cada fila, realice lo siguiente:
a) Seleccione la fila.
b) En el panel Tipo de tamaño seleccione Porcentaje.
c) Establezca el valor de la primera fila al 40%, y para las filas subsiguientes establezca el valor al 15%.
Nota
(1 x 40%) y (4 x 15%) = 100% de espacio disponible.
15. Haga clic en Aceptar.
16. Cierre la etiqueta TableLayoutPanel Tasks.
17. Arrastre la esquina inferior derecha del control TableLayoutPanel para agrandar la tabla hasta que llene el
espacio creado encima del control CrystalReportViewer.
Resultados
Ahora ya estará preparado para agregar controles personalizados a esta tabla para el proyecto para Windows.
1.5.1.5.2
Elementos de barra de herramientas y de informe
del control CrystalReportViewer
En este tutorial manipulará los distintos elementos de barra de herramientas y de informe del control
CrystalReportViewer.
Elementos de visor
Los elementos predeterminados del control CrystalReportViewer varían ligeramente para los sitios Web y para los
proyectos para Windows:
●
Tanto para sitios Web como para proyectos para Windows:
○
Barra de herramientas: muestra una barra de herramientas encima del área principal del informe. Los
elementos individuales dentro de la barra de herramientas se controlan por separado.
Nota
Para obtener más información, vea la sección siguiente relativa a los elementos de barra de
herramientas.
○
●
Árbol de grupos: muestra los encabezados de cada grupo del informe, de forma similar al árbol de
directorios; aparece en el panel de la columna izquierda del informe.
Sólo para sitios Web:
○
Página principal: muestra el informe en el área principal de la página.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
303
○
●
Activar páginas separadas: determina si el informe se muestra en una única página Web o como páginas
independientes con formato.
Sólo para proyectos para Windows:
○
Barra de estado: muestra el número de página actual y otra información sobre el informe, en la parte
inferior del área del informe.
Elementos de la barra de herramientas
Los elementos predeterminados de la barra de herramientas varían ligeramente para los sitios Web y para los
proyectos para Windows:
●
●
●
Tanto para sitios Web como para proyectos para Windows:
○
Botón de árbol de grupos: muestra u oculta la sección del árbol de grupos del informe.
○
Exportar: guarda el informe de Crystal Reports en otro formato de archivo, como RPT, PDF, DOC, XLS o
RTF.
○
Imprimir: imprime el informe de Crystal Reports en un archivo PDF o llama al cuadro de diálogo Imprimir.
○
Exploración de páginas: le permite seleccionar la página siguiente, anterior, última o primera para verla.
○
Ir a página: le permite escribir el número de página que desee ver.
○
Buscar: le permite escribir una cadena que desee buscar en el informe.
○
Factor de zoom: le permite seleccionar el factor de zoom del informe.
Sólo para sitios Web:
○
Vista de lista (sólo para un sitio Web): elige la vista del informe que se mostrará (por ejemplo,
subinformes, etc.).
○
Profundizar: abre una página con información más específica que el tema actual.
○
Logotipo de Crystal: muestra el logotipo del producto SAP Crystal Reports.
Sólo para proyectos para Windows:
○
Actualizar: vuelve a mostrar el informe.
○
Cerrar vista actual: cierra la vista actual del informe si hay varias vistas abiertas.
1.5.1.5.3
Agregar un mecanismo para mostrar u ocultar los
elementos de barra de herramientas y de informe
Contexto
En esta sección aprenderá a agregar un mecanismo que determina qué elementos de la barra de herramientas
CrystalReportViewer se muestran u ocultan.
Empezará agregando los controles ListBox y Button a la tabla en el formulario Web Forms o Windows Forms.
A continuación, creará dos enumeraciones que muestran una lista de los elementos del informe y de la barra de
herramientas, y llenará cada control ListBox con los valores de una de las enumeraciones.
Después, codificará el evento de clic del control Button para actualizar los elementos de la barra de herramientas.
304
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Dentro del controlador de eventos las propiedades de la clase CrystalReportViewer se establecen basándose en
los dos controles ListBox. Si se selecciona un elemento de ListBox, la propiedad de la barra de herramientas se
establece en True.
Más tarde en este tutorial, se utilizará el control Button para actualizar selecciones adicionales.
En tiempo de ejecución, puede seleccionar qué elementos del informe y de la barra de herramientas desea
mostrar.
Empezará agregando los controles a la tabla en la parte superior del formulario Web Forms o Windows Forms.
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms en la vista Diseño.
2.
En el Cuadro de herramientas, arrastre un control Label a la sexta fila y a la columna uno de la tabla.
3.
Seleccione el control Label y, a continuación, en la ventana Propiedades, establezca la propiedad Text en
Seleccionar elementos de informe para mostrar.
4.
En el Cuadro de herramientas, arrastre un control ListBox a la primera fila y la columna dos de la tabla.
5.
Seleccione el control ListBox y, a continuación, en la ventana Propiedades, siga estos pasos:
a) Establezca el ID a listCRVReport.
b) Establezca SelectionMode en Multiple (en un proyecto de Windows, MultiExtended).
6.
En el Cuadro de herramientas, arrastre un segundo control Label a la primera fila y la columna tres de la tabla.
7.
Seleccione el control Label y, a continuación, en la ventana Propiedades, establezca la propiedad Text en
Seleccionar elementos de barra de herramientas para mostrar.
8.
En el Cuadro de herramientas, arrastre un control Button a la tercera fila y la columna uno de la tabla.
9.
Haga clic en el control Button para seleccionarlo.
10. En la ventana Propiedades:
a) Establezca ID en "redisplay".
b) Establezca Text como "Volver a mostrar el informe".
11. En un proyecto para Windows, ajuste el tamaño del control Button para mostrar el texto completo del botón.
Resultados
Los pasos siguientes varían, dependiendo de si se crea un sitio Web o un proyecto para Windows. Elija uno de los
temas siguientes:
●
Configurar los controles ListBox de un sitio Web [página 306]
●
Configurar los controles ListBox de un proyecto para Windows [página 312]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
305
1.5.1.5.4
Configurar los controles ListBox de un sitio Web
Esta sección explica cómo configurar los controles ListBox de un sitio Web. Si va a crear un proyecto para
Windows, vea Configurar los controles ListBox de un proyecto para Windows [página 312].
Ahora puede crear el controlador de eventos de clic para el control Button y, a continuación, agregar código a este
controlador de eventos. El controlador de eventos define varios valores booleanos para las propiedades de barra
de herramientas de la clase CrystalReportViewer basándose en las selecciones del usuario en el control ListBox.
Antes de crear este controlador de eventos, deberá crear dos enumeraciones: CeWebCRVReportOptions y
CeWebCRVToolbarOptions.
Estas enumeraciones proporcionan una lista de elementos de informe y de barra de herramientas seleccionables.
1.5.1.5.4.1
Para crear la enumeración
CeWebCRVReportOptions
Procedimiento
1.
En el Explorador de soluciones, haga clic con el botón secundario en el nombre del sitio Web, seleccione
Agregar y, a continuación, haga clic en Agregar nuevo elemento.
2.
En el cuadro de diálogo Agregar nuevo elemento, seleccione Clase en la vista Plantillas.
3.
En el campo Nombre, escriba "CeWebCRVReportOptions" y, a continuación, haga clic en Agregar.
Nota
Puede que se le pida que coloque esta clase en un directorio App_Code. Haga clic en el botón Sí.
4.
En la firma de clase, cambie la palabra clase por "enum" para convertir la clase en una enumeración.
Nota
En Visual Basic, recuerde cambiar las firmas tanto de apertura como de cierre de la clase a enumeración.
5.
Puesto que las enumeraciones no tienen constructores, elimine el método constructor predeterminado que
se proporciona en la versión de C# del código.
6.
En la enumeración, especifique los valores:
Toolbar
Group_Tree
Main_Page
Enable_Separate_Pages
Toolbar,
Group_Tree,
Main_Page,
Enable_Separate_Pages
306
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
7.
En el menú Archivo, haga clic en Guardar todo.
1.5.1.5.4.2
Para crear la enumeración
CeWebCRVToolbarOptions
Procedimiento
1.
En el Explorador de soluciones, haga clic con el botón secundario en el nombre del sitio Web, seleccione
Agregar y, a continuación, haga clic en Agregar nuevo elemento.
2.
En el cuadro de diálogo Agregar nuevo elemento, seleccione Clase en la vista Plantillas.
3.
En el campo Nombre, escriba CeWebCRVToolbarOptions y, a continuación, haga clic en Agregar.
Nota
Puede que se le pida que coloque esta clase en un directorio App_Code. Haga clic en el botón Sí.
4.
En la firma de clase, cambie la palabra clase por "enum" para convertir la clase en una enumeración.
Nota
En Visual Basic, recuerde cambiar las firmas tanto de apertura como de cierre de la clase a enumeración.
5.
Puesto que las enumeraciones no tienen constructores, elimine el método constructor predeterminado que
se proporciona en la versión de C# del código.
6.
En la enumeración, especifique los valores:
Group_Tree_Button
Export_Button
Print_Button
View_List_Button
Drill_Up_Button
Page_Navigation_Button
Go_to_Page_Button
Search_Button
Zoom_Button
Crystal_Logo
Group_Tree_Button,
Export_Button,
Print_Button,
View_List_Button,
Drill_Up_Button,
Page_Navigation_Button,
Go_to_Page_Button,
Search_Button,
Zoom_Button,
Crystal_Logo
7.
En el menú Archivo, haga clic en Guardar todo.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
307
1.5.1.5.4.3
Para llenar los controles ListBox a partir de las
enumeraciones
Contexto
Ahora llene los controles ListBox con los valores de la enumeración, que representan las propiedades
disponibles para la barra de herramientas de CrystalReportViewer.
Procedimiento
1.
Abra el formulario Web Forms.
2.
En el menú Ver, haga clic en Código.
3.
En el método ConfigureCrystalReports(), agregue un bloque condicional Not IsPostBack.
Nota
El método ConfigureCrystalReports() lo creó durante Configuración de proyectos [página 14] al
comienzo de este tutorial.
If Not IsPostBack Then
End If
if (!IsPostBack)
{
}
4.
En el bloque condicional, establezca el valor de la propiedad DataSource del control ListBox
listCRVReport en los valores de la enumeración CeWebCRVReportOptions.
listCRVReport.DataSource = System.Enum.GetValues(GetType(CeWebCRVReportOptions))
listCRVReport.DataSource = System.Enum.GetValues(typeof(CeWebCRVReportOptions));
5.
Llame al método DataBind() del control ListBox listCRVReport para enlazar los valores al control.
listCRVReport.DataBind()
listCRVReport.DataBind();
308
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
6.
A continuación, establezca el valor de la propiedad DataSource del CeWebCRVToolbarOptions ListBox a
los valores de la enumeración listCRVToolbar.
listCRVToolbar.DataSource =
System.Enum.GetValues(GetType(CeWebCRVToolbarOptions))
listCRVToolbar.DataSource =
System.Enum.GetValues(typeof(CeWebCRVToolbarOptions));
7.
Llame al método DataBind() del control ListBox listCRVToolbar para enlazar los valores al control.
listCRVToolbar.DataBind()
listCRVToolbar.DataBind();
8.
Fuera del bloque condicional Not IsPostBack, enlace el archivo Chart.rpt a la propiedad ReportSource del
control CrystalReportViewer.
Para obtener información sobre informes de ejemplo, vea Directorio de informes de muestra [página 14].
myCrystalReportViewer.ReportSource = "C:\Archivos de programa\Microsoft Visual
Studio 9.0\Crystal Reports\Samples\En\Reports\Feature Examples\Chart.rpt"
crystalReportViewer.ReportSource = "C:\\Archivos de programa\\Microsoft Visual
Studio 9.0\\Crystal Reports\\Samples\\Es\\Reports\\Feature Examples\\Chart.rpt";
1.5.1.5.4.4
Para codificar el control Button que vuelve a
mostrar el informe de un sitio Web
Contexto
Ahora puede agregar código al evento de clic del control Button. El método de clic debe establecer los valores
booleanos de los elementos de barra de herramientas y de informe de la clase CrystalReportViewer. Si se
selecciona un elemento, el valor booleano establece en True, y se muestra el elemento de barra de herramientas o
de informe. Si no se selecciona ninguna propiedad, el valor booleano se establece en False y no se muestra el
elemento de barra de herramientas o de informe.
Procedimiento
1.
Abra el formulario Web Forms.
2.
En el menú Ver, haga clic en Diseñador.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
309
3.
Haga doble clic en el control Button redisplay.
Aparece la clase de código subyacente del informe, que muestra que se ha generado automáticamente un
controlador de eventos redisplay_Click().
4.
En el método de evento redisplay_Click(), llame a la propiedad Selected para cada uno de elementos
de los controles ListBox listCRVReport y listCRVToolbar.
La propiedad Selected devuelve un valor booleano para establecer las propiedades de la barra de
herramientas de CrystalReportViewer.
Nota
Los elementos de barra de herramientas y de informe de CrystalReportViewer se establecen a sus
valores correspondientes en las enumeraciones CeWebCRVReportOptions y
CeWebCRVToolbarOptions. Los valores de la clase de enumeración devuelven una cadena, que debe
convertir a un número entero.
myCrystalReportViewer.HasToggleGroupTreeButton =
listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Group_Tree_Button)).S
elected
myCrystalReportViewer.HasExportButton =
listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Export_Button)).Selec
ted
myCrystalReportViewer.HasPrintButton =
listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Print_Button)).Select
ed
myCrystalReportViewer.HasViewList =
listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.View_List_Button)).Se
lected
myCrystalReportViewer.HasDrillUpButton =
listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Drill_Up_Button)).Sel
ected
myCrystalReportViewer.HasPageNavigationButtons =
listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Page_Navigation_Butto
n)).Selected
myCrystalReportViewer.HasGotoPageButton =
listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Go_to_Page_Button)).S
elected
myCrystalReportViewer.HasSearchButton =
listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Search_Button)).Selec
ted
myCrystalReportViewer.HasZoomFactorList =
listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Zoom_Button)).Selecte
d
myCrystalReportViewer.HasCrystalLogo =
listCRVToolbar.Items(Convert.ToInt32(CeWebCRVToolbarOptions.Crystal_Logo)).Select
ed
myCrystalReportViewer.DisplayToolbar =
listCRVReport.Items(Convert.ToInt32(CeWebCRVReportOptions.Toolbar)).Selected
myCrystalReportViewer.DisplayGroupTree =
listCRVReport.Items(Convert.ToInt32(CeWebCRVReportOptions.Group_Tree)).Selected
myCrystalReportViewer.DisplayPage =
listCRVReport.Items(Convert.ToInt32(CeWebCRVReportOptions.Main_Page)).Selected
myCrystalReportViewer.SeparatePages =
listCRVReport.Items(Convert.ToInt32(CeWebCRVReportOptions.Enable_Separate_Pages))
.Selected
crystalReportViewer.HasToggleGroupTreeButton =
listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Group_Tree_Button)].S
elected;
310
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
crystalReportViewer.HasExportButton =
listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Export_Button)].Selec
ted;
crystalReportViewer.HasPrintButton =
listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Print_Button)].Select
ed;
crystalReportViewer.HasViewList =
listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.View_List_Button)].Se
lected;
crystalReportViewer.HasDrillUpButton =
listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Drill_Up_Button)].Sel
ected;
crystalReportViewer.HasPageNavigationButtons =
listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Page_Navigation_Butto
n)].Selected;
crystalReportViewer.HasGotoPageButton =
listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Go_to_Page_Button)].S
elected;
crystalReportViewer.HasSearchButton =
listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Search_Button)].Selec
ted;
crystalReportViewer.HasZoomFactorList =
listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Zoom_Button)].Selecte
d;
crystalReportViewer.HasCrystalLogo =
listCRVToolbar.Items[Convert.ToInt32(CeWebCRVToolbarOptions.Crystal_Logo)].Select
ed;
crystalReportViewer.DisplayToolbar =
listCRVReport.Items[Convert.ToInt32(CeWebCRVReportOptions.Toolbar)].Selected;
crystalReportViewer.DisplayGroupTree =
listCRVReport.Items[Convert.ToInt32(CeWebCRVReportOptions.Group_Tree)].Selected;
crystalReportViewer.DisplayPage =
listCRVReport.Items[Convert.ToInt32(CeWebCRVReportOptions.Main_Page)].Selected;
crystalReportViewer.SeparatePages =
listCRVReport.Items[Convert.ToInt32(CeWebCRVReportOptions.Enable_Separate_Pages)]
.Selected;
1.5.1.5.4.5
Para probar el control Button que vuelve a
mostrar el informe
Contexto
Ahora estará listo para generar y ejecutar el proyecto para personalizar la barra de herramientas
CrystalReportViewer.
Procedimiento
1.
En el menú Generar, haga clic en Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
Los controles ListBox listCRVReport y listCRVToolbar muestran una lista completa de opciones de
barra de herramientas y de informe de CrystalReportViewer.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
311
4.
En el control ListBox de opciones de barra de herramientas, seleccione "Page_Navigation_Button",
"Print_Button" y "Export_Button".
5.
En el control ListBox de opciones de informe, seleccione "Toolbar", "Group_Tree" y "Main_Page".
6.
Haga clic en Volver a mostrar el informe.
La página se vuelve a cargar para mostrar un control CrystalReportViewer con una barra de
herramientas, un árbol de grupos y una página principal visibles. Dentro de la barra de herramientas, sólo
están visibles los botones Exploración de páginas, Imprimir y Exportar.
7.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.5.5
Configurar los controles ListBox de un proyecto
para Windows
Esta sección explica cómo configurar los controles ListBox de un proyecto para Windows. Si va a crear un sitio
Web, vea Configurar los controles ListBox de un sitio Web [página 306].
Ahora puede crear el controlador de eventos de clic para el control Button y, a continuación, agregar código a este
controlador de eventos. El controlador de eventos define varios valores booleanos para las propiedades de barra
de herramientas de la clase CrystalReportViewer basándose en las selecciones del usuario en el control ListBox.
Antes de crear este controlador de eventos, deberá crear dos enumeraciones: CeWinCRVReportOptions y
CeWinCRVToolbarOptions.
Estas enumeraciones proporcionan una lista de elementos de informe y de barra de herramientas seleccionables.
1.5.1.5.5.1
Para crear la enumeración
CeWinCRVReportOptions
Procedimiento
1.
En el Explorador de soluciones, haga clic con el botón secundario en el nombre de proyecto en negrita, elija
Agregar y, a continuación, haga clic en Clase.
2.
En el cuadro de diálogo Agregar nuevo elemento, en el campo Nombre, escriba CeWinCRVReportOptions y,
a continuación, haga clic en Agregar.
Nota
En Visual Studio, puede que se le pida que coloque esta clase en un directorio App_Code. Haga clic en el
botón Sí.
3.
En la firma de clase, cambie la palabra clase por "enum" para convertir la clase en una enumeración.
Nota
En Visual Basic, recuerde cambiar las firmas tanto de apertura como de cierre de la clase a enumeración.
312
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
4.
Puesto que las enumeraciones no tienen constructores, elimine el método constructor predeterminado que
se proporciona en la versión de C# del código.
5.
En la enumeración, especifique los valores:
Toolbar
Group_Tree
Status_Bar
Toolbar,
Group_Tree,
Status_Bar
6.
En el menú Archivo, haga clic en Guardar todo.
1.5.1.5.5.2
Para crear la enumeración
CeWinCRVToolbarOptions
Procedimiento
1.
En el Explorador de soluciones, haga clic con el botón secundario en el nombre de proyecto en negrita, elija
Agregar y, a continuación, haga clic en Clase.
2.
En el cuadro de diálogo Agregar nuevo elemento, en el campo Nombre, escriba "CeWinCRVToolbarOptions" y,
a continuación, haga clic en Agregar.
Nota
Puede que se le pida que coloque esta clase en un directorio App_Code. Haga clic en el botón Sí.
3.
En la firma de clase, cambie la palabra clase por "enum" para convertir la clase en una enumeración.
Nota
En Visual Basic, recuerde cambiar las firmas tanto de apertura como de cierre de la clase a enumeración.
4.
Puesto que las enumeraciones no tienen constructores, elimine el método constructor predeterminado que
se proporciona en la versión de C# del código.
5.
En la enumeración, especifique los valores:
Page_Navigation_Button
Go_to_Page_Button
Close_View_Button
Print_Button
Refresh_Button
Export_Button
Group_Tree_Button
Zoom_Button
Search_Button
Page_Navigation_Button,
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
313
Go_to_Page_Button,
Close_View_Button,
Print_Button,
Refresh_Button,
Export_Button,
Group_Tree_Button,
Zoom_Button,
Search_Button
6.
En el menú Archivo, haga clic en Guardar todo.
1.5.1.5.5.3
Para llenar los controles ListBox a partir de las
enumeraciones
Contexto
Ahora llene los controles ListBox con los valores de la enumeración, que representan las propiedades disponibles
para la barra de herramientas de CrystalReportViewer.
Procedimiento
1.
Abra el formulario Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En el método ConfigureCrystalReports(), establezca la propiedad DataSource del control ListBox
listCRVReport en los valores de la enumeración CeWinCRVReportOptions.
Nota
El método ConfigureCrystalReports() lo creó durante Configuración de proyectos [página 14] al
comienzo de este tutorial.
listCRVReport.DataSource =
System.Enum.GetValues(GetType(CeWinCRVReportOptions))
listCRVReport.DataSource =
System.Enum.GetValues(typeof(CeWinCRVReportOptions));
4.
Establezca el valor de la propiedad DataSource del control ListBox listCRVToolbar en los valores de la
enumeración CeWinCRVToolbarOptions.
listCRVToolbar.DataSource =
System.Enum.GetValues(GetType(CeWinCRVToolbarOptions))
listCRVToolbar.DataSource =
System.Enum.GetValues(typeof(CeWinCRVToolbarOptions));
314
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
5.
Enlace el archivo Chart.rpt a la propiedad ReportSource del CrystalReportViewercontrol..
Para obtener información sobre informes de ejemplo, vea Directorio de informes de muestra [página 14].
myCrystalReportViewer.ReportSource = "C:\Archivos de programa\Microsoft Visual
Studio 9.0\Crystal Reports\Samples\En\Reports\Feature Examples\Chart.rpt"
crystalReportViewer.ReportSource = "C:\\Archivos de programa\\Microsoft Visual
Studio 9.0\\Crystal Reports\\Samples\\Es\\Reports\\Feature Examples\\Chart.rpt";
1.5.1.5.5.4
Para codificar el control Button que vuelve a
mostrar el informe de un proyecto de Windows
Contexto
Ahora puede agregar código al evento de clic del control Button. El método de clic debe establecer los valores
booleanos de los elementos de barra de herramientas y de informe de la clase CrystalReportViewer. Si se
selecciona un elemento, el valor booleano establece en True, y se muestra el elemento de barra de herramientas o
de informe. Si no se selecciona ninguna propiedad, el valor booleano se establece en False y no se muestra el
elemento de barra de herramientas o de informe.
Procedimiento
1.
Abra el formulario Windows Forms.
2.
En el menú Ver, haga clic en Diseñador.
3.
Haga doble clic en el control Button redisplay.
Aparece la clase de código subyacente del informe, que muestra que se ha generado automáticamente un
controlador de eventos redisplay_Click().
4.
En el método de evento redisplay_Click(), llame al método GetSelected() y pase todos los elementos
desde ListBox.
El método GetSelected() devuelve un valor booleano para establecer las propiedades de barra de
herramientas o de informe de CrystalReportViewer.
Nota
Los elementos de barra de herramientas y de informe de CrystalReportViewer se establecen a sus
valores correspondientes en las enumeraciones CeWinCRVReportOptions y
CeWinCRVToolbarOptions.
myCrystalReportViewer.ShowPageNavigateButtons =
listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Page_Navigation_Button)
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
315
myCrystalReportViewer.ShowGotoPageButton =
listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Go_to_Page_Button)
myCrystalReportViewer.ShowCloseButton = listCRVToolbar.
GetSelected(CeWinCRVToolbarOptions.Close_View_Button)
myCrystalReportViewer.ShowPrintButton =
listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Print_Button)
myCrystalReportViewer.ShowRefreshButton =
listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Refresh_Button)
myCrystalReportViewer.ShowExportButton =
listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Export_Button)
myCrystalReportViewer.ShowGroupTreeButton =
listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Group_Tree_Button)
myCrystalReportViewer.ShowZoomButton =
listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Zoom_Button)
myCrystalReportViewer.ShowTextSearchButton =
listCRVToolbar.GetSelected(CeWinCRVToolbarOptions.Search_Button)
myCrystalReportViewer.DisplayToolbar =
listCRVReport.GetSelected(CeWinCRVReportOptions.Toolbar)
myCrystalReportViewer.DisplayGroupTree =
listCRVReport.GetSelected(CeWinCRVReportOptions.Group_Tree)
myCrystalReportViewer.DisplayStatusBar =
listCRVReport.GetSelected(CeWinCRVReportOptions.Status_Bar)
crystalReportViewer.ShowPageNavigateButtons =
listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Page_Navigation
_Button));
crystalReportViewer.ShowGotoPageButton =
listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Go_to_Page_Butt
on));
crystalReportViewer.ShowCloseButton = listCRVToolbar.
GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Close_View_Button));
crystalReportViewer.ShowPrintButton =
listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Print_Button));
crystalReportViewer.ShowRefreshButton =
listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Refresh_Button)
);
crystalReportViewer.ShowExportButton =
listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Export_Button))
;
crystalReportViewer.ShowGroupTreeButton =
listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Group_Tree_Butt
on));
crystalReportViewer.ShowZoomButton =
listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Zoom_Button));
crystalReportViewer.ShowTextSearchButton =
listCRVToolbar.GetSelected(Convert.ToInt32(CeWinCRVToolbarOptions.Search_Button))
;
crystalReportViewer.DisplayToolbar =
listCRVReport.GetSelected(Convert.ToInt32(CeWinCRVReportOptions.Toolbar));
crystalReportViewer.DisplayGroupTree =
listCRVReport.GetSelected(Convert.ToInt32(CeWinCRVReportOptions.Group_Tree));
crystalReportViewer.DisplayStatusBar =
listCRVReport.GetSelected(Convert.ToInt32(CeWinCRVReportOptions.Status_Bar));
316
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.1.5.5.5
Para probar el control Button que vuelve a
mostrar el informe
Contexto
Ya está preparado para generar y ejecutar el proyecto con el fin de personalizar la barra de herramientas de
CrystalReportViewer.
Procedimiento
1.
En el menú Generar, haga clic en Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
Los controles de cuadro de lista listCRVReport y listCRVToolbar muestran una lista completa de las
opciones de informe y barra de herramientas de CrystalReportViewer.
4.
En el control ListBox de opciones de barra de herramientas, seleccione "Page_Navigation_Button",
"Print_Button" y "Export_Button".
5.
En el control ListBox de opciones de informe, seleccione "Toolbar", "Group_Tree" y "Main_Page".
6.
Haga clic en Volver a mostrar el informe.
La página se vuelve a cargar para mostrar un control CrystalReportViewer con una barra de
herramientas, un árbol de grupos y una página principal visibles. Dentro de la barra de herramientas, sólo
están visibles los botones Exploración de páginas, Imprimir y Exportar.
7.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.5.6
Modificar el color de fondo del informe
En esta sección, aprenderá a modificar el color de fondo del informe.
Para empezar, agregará un control DropDownList para la selección de color de fondo.
1.5.1.5.6.1
fondo
Para agregar controles para cambiar el color de
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Diseñador.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
317
3.
En el Cuadro de herramientas, arrastre un control Label a la segunda fila y la columna uno de la tabla.
4.
Seleccione el control Label y, a continuación, en la ventana Propiedades, establezca la propiedad Text en
Seleccionar color de fondo.
5.
En el Cuadro de herramientas, arrastre un control DropDownList (para sitios Web) o ComboBox (para
proyectos para Windows) a la segunda fila y la columna dos de la tabla.
6.
Seleccione el control DropDownList/ComboBox y, a continuación, en la ventana Propiedades, establezca el
valor de ID/Name en "selectBackColor".
1.5.1.5.6.2
Para establecer los valores predeterminados de
los controles
Contexto
Ahora, debe agregar código al método ConfigureCrystalReports() para establecer los valores
predeterminados de la lista de colores de fondo y de las casillas de verificación de los componentes del informe.
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
A continuación, en el método ConfigureCrystalReports(), agregue el código para establecer los valores
predeterminados de los controles.
Nota
Si está creando un sitio Web, coloque estas líneas de código en el bloque condicional Not IsPostBack. Si
está creando un proyecto para Windows, coloque estas líneas de código en el área principal del método
ConfigureCrystalReports().
3.
Asigne la enumeración KnownColor a la propiedad DataSource del control DropDownList
selectBackColor.
selectBackColor.DataSource = System.Enum.GetValues(GetType(KnownColor))
selectBackColor.DataSource = System.Enum.GetValues(typeof(KnownColor));
4.
En un sitio Web, enlace el origen de datos al control DropDownList selectBackColor.
selectBackColor.DataBind()
selectBackColor.DataBind();
318
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.1.5.6.3
sitio Web
Para asignar la selección de color de fondo en un
Contexto
Después, va a agregar código al evento de clic Button para volver a mostrar el informe basándose en las
selecciones del control DropDownList selectBackColor.
El código varía para un sitio Web en comparación con un proyecto para Windows. Seleccione el procedimiento
adecuado para el sitio Web o para el proyecto para Windows.
Procedimiento
1.
Abra el formulario Web Forms.
2.
En el menú Ver, haga clic en Código.
3.
Sobre la firma de clase, agregue una declaración "Imports" [Visual Basic] o "using" [C#] en la parte
superior de la clase de System.Drawing (si aún no se ha declarado este espacio de nombres).
Imports System.Drawing
using System.Drawing;
4.
En el controlador de eventos redisplay_Click(), agregue el siguiente código: desde el control
DropDownList selectBackColor, recupere el elemento seleccionado como cadena y páselo al método
FromName() de la clase Color. Asigne el valor de Color a la propiedad BackColor del control
CrystalReportViewer.
myCrystalReportViewer.BackColor =
Color.FromName(selectBackColor.SelectedItem.Text)
crystalReportViewer.BackColor =
Color.FromName(selectBackColor.SelectedItem.Text);
1.5.1.5.6.4
Para asignar la selección de color de fondo en un
proyecto para Windows
Contexto
Ahora ya podrá probar el botón Redisplay Report. Pase a la siguiente sección.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
319
Procedimiento
1.
Abra el formulario Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
Sobre la firma de clase, agregue una declaración "Imports" [Visual Basic] o "using" [C#] en la parte
superior de la clase de System.Drawing (si aún no se ha declarado este espacio de nombres).
Imports System.Drawing
using System.Drawing;
4.
En el controlador de eventos redisplay_Click(), agregue código para recuperar el elemento seleccionado
desde el control ComboBox selectBackColor y convertirlo a una instancia de KnownColor.
Dim mySelectedKnownColor As KnownColor = CType(selectBackColor.SelectedItem,
KnownColor)
KnownColor selectedKnownColor = (KnownColor)selectBackColor.SelectedItem;
5.
Cree un bloque condicional que compruebe que el color de fondo seleccionado no es transparente.
If Not mySelectedKnownColor = KnownColor.Transparent Then
End If
if (selectedKnownColor != KnownColor.Transparent)
{
}
6.
Dentro del bloque If, pase la instancia de KnownColor al método FromKnownName() de la clase
System.Drawing.Color. Asigne el valor de Color a la propiedad BackColor del control CrystalReportViewer.
myCrystalReportViewer.BackColor =
System.Drawing.Color.FromKnownColor(mySelectedKnownColor)
crystalReportViewer.BackColor =
System.Drawing.Color.FromKnownColor(selectedKnownColor);
320
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.1.5.6.5
Para probar el control Button que vuelve a
mostrar el informe
Contexto
Ahora ya podrá probar el botón Redisplay Report.
Procedimiento
1.
En el menú Generar, haga clic en Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
Se muestran los controles DropDownList/ComboBox, junto con los controles ListBox y Button agregados en
el procedimiento anterior.
4.
En el control DropDownList de selectBackColor, seleccione "Blue".
Nota
No se olvide de seleccionar los elementos del informe, especialmente Main_Page, para que esté visible.
5.
Haga clic en Volver a mostrar el informe.
La página se vuelve a cargar para mostrar el informe en un fondo azul.
6.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.5.7
informe
Agregar código para seleccionar una página del
En esta sección, aprenderá a codificar la opción "Ir a página" de la barra de herramientas de
CrystalReportViewer.
La barra de herramientas de CrystalReportViewer contiene botones de exploración de páginas y un cuadro de
texto para seleccionar las páginas del informe. Puede utilizar los siguientes métodos de la clase
CrystalReportViewer con el fin de escribir código manualmente para las selecciones de página:
●
ShowFirstPage()
●
ShowLastPage()
●
ShowNextPage()
●
ShowNthPage(int PageNumber)
●
ShowPreviousPage()
Cuando se llama a uno de estos métodos, se muestra la página seleccionada para el informe actual.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
321
1.5.1.5.7.1
Para agregar los controles TextBox y Button de la
opción "Ir a página"
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms en la vista Diseño.
2.
En el Cuadro de herramientas, arrastre un control TextBox a la cuarta fila y a la columna uno de la tabla.
3.
Seleccione el control TextBox y, a continuación, en la ventana Propiedades, siga estos pasos:
a) Establezca el valor de ID (o Name) en "pageNumber".
b) Establezca el valor de la propiedad Text para que esté vacía.
4.
En el Cuadro de herramientas, arrastre un control Button a la quinta fila y la columna dos de la tabla.
5.
Seleccione el control Button y, a continuación, en la ventana Propiedades, siga estos pasos:
a) Establezca el valor de ID (o Name) en "goToPage".
b) Establezca el valor de Text en "Ir a página".
1.5.1.5.7.2
Para codificar el controlador de eventos Click()
del control Button
Procedimiento
1.
Haga doble clic en el control Button de Ir a página.
Aparece la clase de código subyacente del informe, que muestra que se ha generado automáticamente un
controlador de eventos goToPage_Click().
2.
Convierta el texto escrito en el control TextBox en un número entero y, a continuación, pase el valor al método
ShowNthPage() del control CrystalReportViewer.
Nota
No ha validado que se especificó un número entero en el control TextBox. Para una aplicación de
producción, debería agregar un control de validación configurado respecto al control TextBox.
myCrystalReportViewer.ShowNthPage(Convert.ToInt32(pageNumber.Text))
crystalReportViewer.ShowNthPage(Convert.ToInt32(pageNumber.Text));
322
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.1.5.7.3
Para probar el control del botón goToPage
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
Se muestran el informe Chart y todos los controles agregados.
4.
Especifique 3 en el control TextBox pageNumber y, a continuación, haga clic en Ir a página.
Se vuelve a cargar la página para mostrar la página 3 del informe.
5.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.5.8
Modificar el factor de zoom
De forma predeterminada, la barra de herramientas de CrystalReportViewer le permite seleccionar un factor
de zoom comprendido entre el 25% y el 400% mediante incrementos fijos de 25%, 50% o 100%. En esta sección,
va a agregar código para permitir cualquier factor de zoom que desee.
Necesita un control TextBox en el que escribir el factor de zoom deseado y un control Button para volver a cargar
la página.
1.5.1.5.8.1
Para agregar los controles TextBox y Button para
la opción Zoom
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms en la vista Diseño.
2.
En el Cuadro de herramientas, arrastre un control TextBox a la cuarta fila y a la columna tres de la tabla.
3.
Seleccione el control TextBox y, a continuación, en la ventana Propiedades, siga estos pasos:
a) Establezca el valor de ID (o Name) en "zoomFactor".
b) Establezca el valor de la propiedad Text para que esté vacía.
4.
En el Cuadro de herramientas, arrastre un control Button a la cuarta fila y la columna cuatro de la tabla.
5.
Seleccione el control Button y, a continuación, en la ventana Propiedades, siga estos pasos:
a) Establezca el valor de ID (o Name) en "updateZoomFactor".
b) Establezca el valor de Text en "Factor de zoom".
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
323
1.5.1.5.8.2
Para codificar el controlador de eventos Click()
del control Button
Procedimiento
1.
Haga doble clic en el control Button updateZoomFactor.
Aparece la clase de código subyacente del informe, que muestra que se ha generado automáticamente un
controlador de eventos updateZoomFactor_Click().
2.
Convierta el texto escrito en el control TextBox en un número entero y, a continuación, pase el valor al método
Zoom() del control CrystalReportViewer.
Nota
No ha validado que se especificó un número entero en el control TextBox. Para una aplicación de
producción, debería agregar un control de validación configurado respecto al control TextBox.
myCrystalReportViewer.Zoom(Convert.ToInt32(zoomFactor.Text))
crystalReportViewer.Zoom(Convert.ToInt32(zoomFactor.Text));
1.5.1.5.8.3
Para probar el control Button updateZoomFactor
Procedimiento
1.
En el menú Generar, haga clic en Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
Se muestran el informe Chart y todos los controles agregados.
4.
Especifique "38" en el cuadro de texto zoomFactor y, a continuación, haga clic en Zoom.
Se vuelve a cargar la página para mostrar la página actual al 38% de su tamaño original.
5.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.5.9
Buscar en el informe
En esta sección, aprenderá a buscar texto en un informe de Crystal Reports que enlace con el control
CrystalReportViewer.
Necesita un control TextBox para escribir la cadena de búsqueda deseada, un control Button para buscar en el
informe y un control Label para notificar si la búsqueda se ha realizado o no correctamente.
324
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.1.5.9.1
Para agregar los controles TextBox, Button y
Label de la opción Buscar
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms en la vista Diseño.
2.
En el Cuadro de herramientas, arrastre un control TextBox a la quinta fila y a la columna uno de la tabla.
3.
Seleccione el control TextBox y, a continuación, en la ventana Propiedades, siga estos pasos:
a) Establezca el valor de ID (o Name) en "searchText".
b) Establezca el valor de la propiedad Text para que esté vacía.
4.
En el Cuadro de herramientas, arrastre un control Button a la quinta fila y la columna dos de la tabla.
5.
Seleccione el control Button y, a continuación, en la ventana Propiedades, siga estos pasos:
a) Establezca el valor de ID (o Name) en "search".
b) Establezca el valor de Text en "Buscar texto".
6.
En el Cuadro de herramientas, arrastre un control Label a la quinta fila y a la columna tres de la tabla.
a) Establezca el valor de ID (o Name) en "message".
b) Establezca el valor de Text para que esté vacío.
c) Establezca el valor de ForeColor en Red.
7.
Cree la clase MessageConstants para almacenar respuestas estándar como constantes de cadena para la
búsqueda.
1.5.1.5.9.2
Para codificar el controlador de eventos
search_Click() para un sitio Web
Contexto
Después, debe llamar al método SearchAndHighlightText() en el control Button de búsqueda.
Nota
El método SearchAndHighlightText() no tiene el mismo comportamiento si se trata de un sitio Web o un
proyecto Windows.
Como el método no tiene el mismo comportamiento si se trata de un sitio Web o un proyecto para Windows,
realice el siguiente procedimiento con pasos correspondiente a un sitio Web o un proyecto para Windows.
Procedimiento
1.
Haga doble clic en el control Button search.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
325
Aparece la clase de código subyacente del informe, que muestra que se ha generado automáticamente un
controlador de eventos search_Click().
2.
Recupere el texto escrito en el control TextBox y, a continuación, pase el valor al método
SearchAndHighlightText() del control CrystalReportViewer. Asigne la llamada del método a una variable
booleana.
Nota
Para que la clase SearchDirection sea accesible, deberá incluir un enunciado "Imports" [Visual
Basic] o "using" [C#] en la parte superior de la clase de código subyacente del espacio de nombres
CrystalDecisions.Shared. (Esta declaración se ha agregado en Configuración de proyectos [página 14].)
Dim mySearchResult As Boolean =
myCrystalReportViewer.SearchAndHighlightText(searchText.Text,
SearchDirection.Forward)
bool searchResult = crystalReportViewer.SearchAndHighlightText(searchText.Text,
SearchDirection.Forward);
3.
Cree un bloque condicional que compruebe si la búsqueda tiene éxito.
If Not mySearchResult Then
Else
End If
if(!searchResult)
{
}
else
{
}
4.
En el bloque If, asigne la constante MessageConstants.SUCCESS a la propiedad Text del control Label
message.
message.Text = MessageConstants.SUCCESS
message.Text = MessageConstants.SUCCESS;
5.
En el bloque Else, asigne la constante MessageConstants.FAILURE a la propiedad Text del control Label
message.
message.Text = MessageConstants.FAILURE
message.Text = MessageConstants.FAILURE;
326
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.1.5.9.3
Para codificar el controlador de eventos
search_Click() para un proyecto para Windows
Contexto
Sáltese el siguiente procedimiento de un proyecto para Windows y vaya al próximo procedimiento de prueba.
Procedimiento
1.
Haga doble clic en el control Button search.
Aparece la clase de código subyacente del informe, que muestra que se ha generado automáticamente un
controlador de eventos search_Click().
2.
Recupere el texto escrito en el control TextBox y, a continuación, pase el valor al método
SearchAndHighlightText() del control CrystalReportViewer. Asigne la llamada del método a una variable
booleana.
Dim mySearchResult As Boolean =
myCrystalReportViewer.SearchAndHighlightText(searchText.Text)
bool searchResult = crystalReportViewer.SearchAndHighlightText(searchText.Text);
3.
Cree un bloque condicional que compruebe si la búsqueda tiene éxito.
If mySearchResult Then
Else
End If
if(searchResult)
{
}
else
{
}
4.
En el bloque If, asigne la constante MessageConstants.SUCCESS a la propiedad Text del control Label
message.
message.Text = MessageConstants.SUCCESS
message.Text = MessageConstants.SUCCESS;
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
327
5.
En el bloque Else, asigne la constante MessageConstants.FAILURE a la propiedad Text del control
message Label.
message.Text = MessageConstants.FAILURE
message.Text = MessageConstants.FAILURE;
1.5.1.5.9.4
Para probar el control Button search
Procedimiento
1.
En el menú Generar, haga clic en Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
Se muestran el informe Chart y todos los controles agregados.
4.
Especifique China en el cuadro de texto searchText y, a continuación, haga clic en Buscar.
Se vuelve a cargar la página para resaltar el resultado de la búsqueda y para mostrar un mensaje de éxito.
5.
Especifique hola en el cuadro de texto searchText y, a continuación, haga clic en Buscar.
Se vuelve a cargar la página para mostrar un mensaje de error.
6.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
Resultados
Las opciones de personalización restantes sólo están disponibles para la versión Web del control
CrystalReportViewer. Por lo tanto, si está desarrollando un sitio Web, continúe con Agregar un borde al informe de
un sitio Web [página 328].
Si está desarrollando un proyecto para Windows, ha terminado el tutorial.
1.5.1.5.10
Agregar un borde al informe de un sitio Web
En esta sección, aprenderá a agregar un borde personalizado al informe de Crystal para un sitio Web. En los
proyectos de Windows, no están disponibles las propiedades de ancho, estilo y color de borde.
Los estilos de borde se citan en la enumeración BorderStyle. Los colores se citan en la enumeración KnownColor.
Sin embargo, la propiedad BorderColor del control CrystalReportViewer incluye los valores de la clase Color. Por
tanto, debe convertir el valor KnownColor al valor Color.
328
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Para comenzar, va a agregar los controles necesarios al formulario Web Forms. Necesita un control TextBox, dos
controles DropDownList y un control Button para dibujar el borde.
1.5.1.5.10.1 Para agregar los controles con el fin de
establecer el ancho, el estilo y el color de borde
Procedimiento
1.
Abra el formulario Web Forms.
2.
En el menú Ver, haga clic en Diseñador.
3.
En el Cuadro de herramientas, arrastre un control Label a la sexta fila y a la columna uno de la tabla.
4.
Seleccione el control Label y, a continuación, en la ventana Propiedades, establezca la propiedad Text en
"Ancho del borde".
5.
En el Cuadro de herramientas, arrastre un control TextBox a la misma celda de la tabla que el control Label.
6.
Seleccione el control TextBox y, a continuación, en la ventana Propiedades, establezca el valor de ID (o Name)
en "borderWidth".
7.
En el Cuadro de herramientas, arrastre un segundo control Label a la sexta fila y a la columna dos de la tabla.
8.
Seleccione el control Label y, a continuación, en la ventana Propiedades, establezca Text en "Estilo del
borde".
9.
En el Cuadro de herramientas, arrastre un control DropDownList a la misma celda de la tabla que el control
Label.
10. Seleccione el control DropDownList y, a continuación, en la ventana Propiedades, establezca el valor de ID (o
Name) en "selectBorderColor".
11. En el Cuadro de herramientas, arrastre un tercer control Label a la sexta fila y a la columna tres de la tabla.
12. Seleccione el control Label y, a continuación, en la ventana Propiedades, establezca la propiedad Text en
"Color del borde".
13. En el Cuadro de herramientas, arrastre un control DropDownList a la misma celda de la tabla que el control
Label.
14. Seleccione el control DropDownList y, a continuación, en la ventana Propiedades, establezca el valor de ID (o
Name) en "selectBorderColor".
15. En el Cuadro de herramientas, arrastre un control Button a la sexta fila y la columna cuatro de la tabla.
16. Seleccione el control Button y, a continuación, en la ventana Propiedades, siga estos pasos:
a) Establezca el valor de ID (o Name) en "drawBorder".
b) Establezca el valor de la propiedad Text en "Dibujar borde".
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
329
1.5.1.5.10.2
Para llenar los controles DropDownList
Contexto
Ahora debe rellenar los controles DropDownList con los estilos o los colores de borde disponibles para el control
CrystalReportViewer. Los controles DropDownList se llenan en el método ConfigureCrystalReports().
En los sitios Web, los estilos de borde se almacenan en la enumeración
System.Web.UI.WebControls.BorderStyle. Los colores de borde se recuperan de la enumeración
System.Drawing.KnownColor.
Procedimiento
1.
Sobre la firma de clase, agregue una declaración "Imports" [Visual Basic] o "using" [C#] en la parte
superior de la clase de System.Web.UI.WebControls y System.Drawing (si aún no se ha declarado este
espacio de nombres).
Imports System.Web.UI.WebControls
Imports System.Drawing
using System.Web.UI.WebControls;
using System.Drawing;
2.
En el método ConfigureCrystalReports(), en el bloque condicional Not IsPostBack, asigne la
enumeración BorderStyle a la propiedad DataSource del control DropDownList selectBorderStyle.
selectBorderStyle.DataSource = System.Enum.GetValues(GetType(BorderStyle))
selectBorderStyle.DataSource = System.Enum.GetValues(typeof(BorderStyle));
3.
Enlace el origen de datos al control DropDownList selectBorderStyle.
selectBorderStyle.DataBind()
selectBorderStyle.DataBind();
4.
También en el bloque condicional Not IsPostBack, asigne la enumeración DataSource a la propiedad
DataSource del control DropDownList selectBorderColor.
selectBorderColor.DataSource =
System.Enum.GetValues(GetType(KnownColor))
selectBorderColor.DataSource =
System.Enum.GetValues(typeof(KnownColor));
330
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
5.
Enlace el origen de datos al control DropDownList selectBorderColor.
selectBorderColor.DataBind()
selectBorderColor.DataBind();
1.5.1.5.10.3
Para codificar el control del botón Dibujar borde
Contexto
A continuación, se asignan los valores a las propiedades BorderWidth, BorderStyle y BorderColor del
control CrystalReportViewer.
Procedimiento
1.
Abra el formulario Web Forms.
2.
En el menú Ver, haga clic en Diseñador.
3.
Haga doble clic en el control Button Dibujar borde.
Aparece la clase de código subyacente del informe, que muestra que se ha generado automáticamente un
controlador de eventos drawBorder_Click().
4.
En el controlador de eventos drawBorder_Click(), asigne el texto que está escrito en el control TextBox
borderWidth a la propiedad BorderWidth del control CrystalReportViewer.
Nota
No ha validado que se especificó un número entero en el control TextBox. Para una aplicación de
producción, debería agregar un control de validación configurado respecto al control TextBox.
myCrystalReportViewer.BorderWidth =
Unit.Parse(borderWidth.Text.ToString())
crystalReportViewer.BorderWidth =
Convert.ToInt32(borderWidth.Text);
5.
En el control selectBorderStyle DropDownList, recupere el índice seleccionado y conviértalo a un valor
BorderStyle. Asigne el valor de BorderStyle a la propiedad BorderStyle del control
CrystalReportViewer.
myCrystalReportViewer.BorderStyle = CType(selectBorderStyle.SelectedIndex,
BorderStyle)
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
331
crystalReportViewer.BorderStyle = (BorderStyle)selectBorderStyle.SelectedIndex;
6.
Desde el control DropDownList selectBorderColor, recupere el elemento seleccionado como cadena y páselo
al método FromName() de la clase Color. Asigne el valor Color a la propiedad BorderColor del control
CrystalReportViewer.
myCrystalReportViewer.BorderColor =
Color.FromName(selectBorderColor.SelectedItem.Text)
crystalReportViewer.BorderColor =
Color.FromName(selectBorderColor.SelectedItem.Text);
1.5.1.5.10.4
Crystal
Para dibujar un borde alrededor del informe de
Procedimiento
1.
En el menú Generar, haga clic en Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
4.
Para el ancho de borde, escriba 10.
5.
Para el estilo de borde, seleccione Double.
6.
Para el color de borde, seleccione SteelBlue.
7.
Haga clic en el botón Dibujar borde.
Se vuelve a cargar la página para mostrar un borde alrededor del informe de Crystal.
8.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.5.11
Web
Configurar la persistencia de Session de un sitio
En esta sección, aprenderá a configurar la persistencia de Session de los eventos de clic de botón.
Cuando se vuelve a cargar una página Web debido a un evento de clic de botón, se pierden los cambios realizados
en el modelo de objetos CrystalReportViewer.
332
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.1.5.11.1
Web
Para demostrar la falta de persistencia de un sitio
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
4.
En el control DropDownList selectBackColor, seleccione "Blue".
5.
Haga clic en Volver a mostrar el informe.
La página se vuelve a cargar para mostrar el informe sin barras de herramientas, en un fondo azul.
6.
Para el ancho de borde, escriba "10".
7.
Para el estilo de borde, seleccione "Double".
8.
Para el color de borde, seleccione "SteelBlue".
9.
Haga clic en Dibujar borde.
La página se vuelve a cargar para mostrar un borde alrededor del informe de Crystal, y el color de fondo ya no
es azul
10. Especifique "3" en el control TextBox pageNumber y, a continuación, haga clic en Ir a página.
La página se vuelve a cargar para mostrar la página 3 del informe, y el borde alrededor del informe ya no está
visible.
11. Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.1.5.11.2
Para agregar código de asignación de Session al
controlador de eventos drawBorder_Click()
Contexto
Debe agregar código de persistencia a la aplicación para que se conserven los cambios efectuados en el modelo
de objetos CrystalReportViewer cuando se vuelvan a cargar las páginas Web.
Para empezar, agregue código de persistencia para los valores de borde al controlador de eventos
drawBorder_Click(), en el que dichos valores se asignaron primero. A continuación, en el método
ConfigureCrystalReports(), los valores que están almacenados en Session se recuperan y asignan a la
propiedad correspondiente de la clase CrystalReportViewer.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
333
Procedimiento
En el controlador de eventos drawBorder_Click(), después del código existente, agregue cuatro
asignaciones Session para BackColor, BorderColor, BorderStyle y BorderWidth.
Session("myBorderColor") =
myCrystalReportViewer.BorderColor.ToString()
Session("myBorderStyle") = myCrystalReportViewer.BorderStyle
Session("myBorderWidth") = myCrystalReportViewer.BorderWidth
Session["borderColor"] =
crystalReportViewer.BorderColor.ToString();
Session["borderStyle"] = crystalReportViewer.BorderStyle;
Session["borderWidth"] = crystalReportViewer.BorderWidth;
1.5.1.5.11.3
Para agregar código de recuperación de Session
al método ConfigureCrystalReports()
Contexto
Ahora ya está preparado para obtener estos valores de Session en el método ConfigureCrystalReports().
Procedimiento
1.
En la parte inferior del método ConfigureCrystalReports(), cree un bloque If que compruebe que la
variable BackColor de Session no es nula.
Si no lo es, en el bloque If, obtenga la propiedad BackColor de Session y proyéctela en una cadena. Pase la
cadena al método FromName() de la clase Color y asigne la instancia de Color a la propiedad BackColor
de la instancia de CrystalReportViewer.
If Not IsNothing(Session("myBackColor")) Then
myCrystalReportViewer.BackColor =
Color.FromName(CType(Session("myBackColor"), String))
End If
if (Session["backColor"] != null)
{
crystalReportViewer.BackColor = Color.FromName((string)Session["backColor"]);
}
2.
Cree un segundo bloque If que compruebe que la variable BorderColor Session no es nula. Si no lo es, en el
bloque If, obtenga la propiedad BorderColor de Session y proyéctela en una cadena. Pase la cadena al
334
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
método FromName() de la clase Color y asigne la instancia de Color a la propiedad BorderColor de la
instancia de CrystalReportViewer.
If Not IsNothing(Session("myBorderColor")) Then
myCrystalReportViewer.BorderColor =
Color.FromName(CType(Session("myBorderColor"), String))
End If
if (Session["borderColor"] != null)
{
crystalReportViewer.BorderColor =
Color.FromName((string)Session["borderColor"]);
}
3.
Cree un tercer bloque If que compruebe que la variable BorderStyle Session no es nula. Si no lo es, en el
bloque If, obtenga la propiedad BorderStyle de Session y proyéctela en BorderStyle.
myCrystalReportViewer.BorderStyle = CType(Session("myBorderStyle"), BorderStyle)
if (Session["borderStyle"] != null)
{
crystalReportViewer.BorderStyle = (BorderStyle)Session["borderStyle"];
}
4.
Cree un cuarto bloque If que compruebe que la variable Session BorderWidth no es nula. Si no lo es, en el
bloque If, obtenga la propiedad BorderWidth de Session y conviértala en un número entero.
myCrystalReportViewer.BorderWidth = Convert.ToInt32(Session("myBorderWidth"))
if (Session["borderStyle"] != null)
{
crystalReportViewer.BorderWidth = Convert.ToInt32(Session["borderStyle"]);
}
1.5.1.5.11.4
Para codificar el botón de control de drawBorder
Contexto
En el siguiente procedimiento, agregará la persistencia de Session al controlador de eventos de clic del botón que
vuelve a mostrar el informe.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
335
Procedimiento
1.
En el controlador de eventos redisplay_Click(), asigne el elemento seleccionado en el control
DropDownList selectBackColor a Session.
Session("myBackColor") = selectBackColor.SelectedItem.Text
Session["backColor"] = selectBackColor.SelectedItem.Text;
2.
En el controlador de eventos drawBorder_Click(), asigne la propiedad Text del control TextBox
borderWidth a Session.
Session("myBorderWidth") = borderWidth.Text
Session["borderWidth"] = borderWidth.Text;
3.
Asigne el índice seleccionado del control DropDownList selectBorderStyle a Session.
Session("myBorderStyle") = selectBorderStyle.SelectedIndex
Session["borderStyle"] = selectBorderStyle.SelectedIndex;
4.
Asigne el elemento seleccionado del control DropDownList selectBorderColor a Session.
Session("myBorderColor") = selectBorderColor.SelectedItem.Text
Session["borderColor"] = selectBorderColor.SelectedItem.Text;
Resultados
Ahora ya podrá crear y ejecutar el proyecto, para verificar que los cambios realizados en el informe se han
conservado después de los eventos de clic de botón.
1.5.2
Tutoriales del modelo de objetos ReportDocument
En esta sección se presentan varios tutoriales del modelo de objetos ReportDocument.
En esta sección se presentan varios tutoriales del modelo de objetos ReportDocument.
336
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.2.1
Tutorial: Conservar el modelo de objetos
ReportDocument con Session
En este tutorial, usará el modelo de objetos ReportDocument y realizará cambios mediante programación en un
informe en tiempo de ejecución.
En este tutorial, usará el modelo de objetos ReportDocument y realizará cambios mediante programación en un
informe en tiempo de ejecución. También aprenderá a usar Session para conservar estos cambios aunque se
vuelva a cargar la página Web.
Puesto que sólo las aplicaciones Web requieren la persistencia de Session, este tutorial no se aplica a los
proyectos de Windows.
Introducción
El proyecto que creará en este tutorial usa un Web Forms que contiene un control CrystalReportViewer y dos
botones que cambian la dirección de ordenamiento del informe dentro del modelo de objetos ReportDocument.
En primer lugar, va a construir el proyecto sin la persistencia de Session. Sin ella, puede comprobar que el cambio
de la dirección de ordenamiento tan sólo dura un evento de clic de botón.
A continuación, va a agregar la persistencia de Session al proyecto. La instancia de ReportDocument se coloca
en Session en la fase de creación, así como en cualquier momento en el que se cambie el estado de esta instancia
de ReportDocument.
Siempre que se deba volver a mostrar el informe, la instancia de ReportDocument se obtiene de Session y se
enlaza al control CrystalReportViewer. De esta forma, se garantiza que siempre que se muestra el informe, el
usuario verá la versión más reciente de la instancia de ReportDocument.
Nota
En este tutorial usará Session, porque querrá conservar las modificaciones que realice en el modelo de objetos
ReportDocument. Si sólo pretende usar el modelo de objetos limitado que contiene el control
CrystalReportViewer, use ViewState exclusivamente.
Cuándo usar Session para conservar un objeto ReportDocument, ¿hay otros
modelos de persistencia involucrados?
Cuándo usar Session para conservar un objeto ReportDocument, ¿hay otros modelos de persistencia
involucrados?
Sí. En una aplicación Web ASP.NET, los objetos suelen utilizar Session para la persistencia, mientras que los
controles de servidor Web usan ViewState. Como una aplicación Web de SAP Crystal Reports, versión para
programadores de Microsoft Visual Studio usa objetos y controles de servidor Web para interactuar con informes,
Session y ViewState comparten la persistencia:
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
337
●
Session conserva el modelo de objetos ReportDocument, que interactúa con el informe mediante
programación en tiempo de ejecución.
●
ViewState conserva el control CrystalReportViewer, que muestra el informe. En particular, ViewState
conserva las propiedades de visualización, que se establecen en la barra de herramientas de
CrystalReportViewer. ViewState también conserva los eventos (como zoom, NextPage) que se activan
mediante botones de la barra de herramientas.
La persistencia de ViewState se administra automáticamente. Por ello, en este tutorial sólo codificará la
persistencia de Session.
Código de ejemplo
Este tutorial incluye código de ejemplo de C# y Visual Basic que muestra la versión finalizada del proyecto. Siga
las instrucciones de este tutorial para crear un nuevo proyecto o para abrir el proyecto de código de ejemplo y
trabajar con una versión finalizada.
El código de ejemplo se almacena en carpetas que están clasificadas por idioma y tipo de proyecto. Los nombres
de las carpetas de cada versión del código de ejemplo son los siguientes:
●
Sitio Web en C#: CS_Web_RDObjMod_Session
●
Sitio Web en Visual Basic: VB_Web_RDObjMod_Session
Información relacionada
¿Cuál es el enfoque de persistencia que se debe usar con SAP Crystal Reports? [página 52]
Directorio de informes de muestra [página 14]
1.5.2.1.1
Configurar botones en el Web Forms
Para empezar, agregará dos botones al Web Forms, les asignará un nombre y creará eventos de clic para cada
uno.
1.5.2.1.1.1
Para agregar dos botones al Web Forms
Procedimiento
1.
Abra la página Default.aspx.
2.
En el menú Ver, haga clic en Diseñador.
3.
Haga clic en el control CrystalReportViewer y presione la FLECHA IZQUIERDA del teclado para que aparezca
un cursor parpadeante y, a continuación, presione la tecla INTRO.
338
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
El control CrystalReportViewer bajará una línea.
4.
En el Cuadro de herramientas, arrastre un control de servidor Web Button sobre el control
CrystalReportViewer.
5.
Haga clic a la derecha del control Button, para que aparezca un cursor parpadeante y, a continuación,
presione la barra espaciadora dos veces.
6.
En el Cuadro de herramientas, arrastre un segundo control de servidor Web Button a la derecha del primer
control Button.
1.5.2.1.1.2
Para establecer las propiedades Text e ID de cada
control Button
Procedimiento
1.
Haga clic en primer control de servidor Web Button para seleccionarlo.
2.
En la ventana Propiedades:
○
Establezca el valor de ID en "sortOrderDescending".
○
Establezca Text como "Cambiar la dirección de ordenamiento a descendente".
3.
Haga clic en segundo control de servidor Web Button para seleccionarlo.
4.
En la ventana Propiedades:
○
Establezca el valor de ID en "sortOrderAscending".
○
Establezca Text como "Cambiar la dirección de ordenamiento a ascendente".
1.5.2.1.1.3
Crear eventos de clic para cada control Button
Procedimiento
1.
Haga doble clic en el primer control de servidor Web Button.
La clase de código subyacente se abrirá y se creará un nuevo método de evento,
sortOrderDescending_Click(), en la parte inferior de la clase.
2.
Regrese a la vista Diseño de la página Default.aspx.
3.
Haga doble clic en el segundo control de servidor Web Button.
La clase de código subyacente se abrirá y se creará un nuevo método de evento,
sortOrderAscending_Click(), en la parte inferior de la clase.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
339
1.5.2.1.2
Programar eventos de botón mediante direcciones
de ordenamiento
En este procedimiento programará el modelo de objetos ReportDocument del informe dentro del método de
evento, y establecerá la dirección de ordenamiento como ascendente en un método de evento y como
descendente en el otro.
1.5.2.1.2.1
Para programar el modelo de objetos
ReportDocument del informe en el método de evento
sortOrderDescending_Click
Procedimiento
1.
2.
Abra la clase de código subyacente y busque el método de evento sortOrderDescending_Click().
En el método de evento, obtenga la propiedad SortFields de la propiedad DataDefinition de la instancia del
informe y asígnele a una instancia de la clase indizada SortFields.
Dim mySortFields As SortFields =
hierarchicalGroupingReport.DataDefinition.SortFields
SortFields sortFields = hierarchicalGroupingReport.DataDefinition.SortFields;
3.
Obtenga la primera instancia SortField de la clase indizada SortFields y asígnele a una variable
denominada firstSortField.
Nota
La clase indizada SortFields se basa en 0.
Dim firstSortField As SortField = mySortFields(0)
SortField firstSortField = sortFields[0];
4.
Establezca la propiedad SortDirection de firstSortField al orden descendente mediante la selección
DescendingOrder de la enumeración SortDirection.
firstSortField.SortDirection = SortDirection.DescendingOrder
firstSortField.SortDirection = SortDirection.DescendingOrder;
340
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
5.
Ahora vuelva a asignar este informe (con su orden modificado en el modelo de objetos ReportDocument) a la
propiedad ReportSource del control CrystalReportViewer.
myCrystalReportViewer.ReportSource = hierarchicalGroupingReport
crystalReportViewer.ReportSource = hierarchicalGroupingReport;
Resultados
A continuación, escribirá el código del método de evento sortOrderAscending_Click(). El código es idéntico,
excepto por la configuración de la propiedad SortDirection.
1.5.2.1.2.2
Para programar el modelo de objetos
ReportDocument del informe en el método de evento
sortOrderAscending_Click
Procedimiento
1.
Abra la clase de código subyacente y busque el método de evento sortOrderAscending_Click().
2.
En el método de evento, obtenga la propiedad SortFields de la propiedad DataDefinition de la instancia del
informe y asígnele a una instancia de la clase indizada SortFields.
Dim mySortFields As SortFields =
hierarchicalGroupingReport.DataDefinition.SortFields
SortFields sortFields = hierarchicalGroupingReport.DataDefinition.SortFields;
3.
Obtenga la primera instancia SortField de la clase indizada SortFields y asígnele a una variable
denominada firstSortField.
Nota
La clase indizada SortFields se basa en 0.
Dim firstSortField As SortField = mySortFields(0)
SortField firstSortField = sortFields[0];
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
341
4.
Establezca la propiedad SortDirection de la instancia de firstSortField en orden ascendente mediante la
selección AscendingOrder de la enumeración SortDirection.
firstSortField.SortDirection = SortDirection.AscendingOrder
firstSortField.SortDirection = SortDirection.AscendingOrder;
5.
Ahora vuelva a asignar este informe (con su orden modificado en el modelo de objetos ReportDocument) a la
propiedad ReportSource del control CrystalReportViewer.
myCrystalReportViewer.ReportSource = hierarchicalGroupingReport
crystalReportViewer.ReportSource = hierarchicalGroupingReport;
Resultados
Así se completará la programación del modelo de objetos ReportDocument del informe incluido en cada método
de evento. En la siguiente sección, probará si funcionan estos cambios de orden, y si se conservan cuando no se
haya aplicado Session.
1.5.2.1.3
Probar y determinar los errores de persistencia
En esta sección, comprobará que, sin el uso de Session para la persistencia, los cambios de orden se perderán
cuando se vuelva a cargar la página para que refleje los cambios de la configuración de presentación.
1.5.2.1.3.1
Para probar los cambios de programación
efectuados en la dirección de ordenamiento codificada en el
proyecto
Procedimiento
1.
En el menú Generar, haga clic en Generar solución.
2.
Si existen errores de generación, corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
Si no aparecen errores de generación, se cargará la página Default.aspx en el explorador, con el informe de
agrupamiento jerárquico (Hierarchical Grouping) generado en el formulario.
4.
Observe la dirección de ordenamiento cuidadosamente. Conviene imprimir la página para comparar los
cambios de la dirección de ordenamiento.
342
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
5.
Haga clic en el botón Cambiar la dirección de ordenamiento a descendente.
Se invertirá la dirección de ordenamiento.
6.
Haga clic en el botón Cambiar la dirección de ordenamiento a ascendente.
La dirección de ordenamiento volverá a su orden original (ascendente).
1.5.2.1.3.2
Para probar si se conservan los cambios de orden
cuando cambia la configuración de presentación
Contexto
En el siguiente procedimiento, verificará si se conserva la dirección de ordenamiento al aplicar otros cambios a la
página (por ejemplo la configuración de presentación).
Procedimiento
1.
Haga clic en el botón Cambiar la dirección de ordenamiento a descendente.
Se invertirá la dirección de ordenamiento.
2.
En la barra de herramientas del informe, ajuste la ampliación de 100% a 125%.
La página recargará el informe al 125%, pero no se conservará la inversión de la dirección de ordenamiento.
3.
Haga clic de nuevo en el botón Cambiar la dirección de ordenamiento a descendente.
Se invertirá la dirección de ordenamiento.
4.
En la barra de herramientas del informe, ajuste la ampliación de 125% a 100%.
5.
La página recargará el informe al 100%, pero no se conservará la inversión de la dirección de ordenamiento.
6.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
Resultados
En esta prueba, comprobará que, en esta etapa del tutorial, la persistencia falla. La dirección de ordenamiento
sólo se aplica si se hace clic en uno de los botones de ordenación. La dirección de ordenamiento se descarta si el
usuario interactúa con la página para ajustar la ampliación o abrir otra página en un informe de varias páginas. Por
ello, deberá agregar código para conservar el cambio de la dirección de ordenamiento realizado en el modelo de
objetos ReportDocument mediante Session.
1.5.2.1.4
Agregar código de Session
En esta sección, aprenderá a usar Session para conservar el cambio de la dirección de ordenamiento del informe.
Al método ConfigureCrystalReports() creado al configurar el proyecto (vea Configuración de proyectos
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
343
[página 14]) le agregará código que busque Session y cargue de nuevo inmediatamente la instancia del informe
en Session cuando un usuario ajuste la dirección de ordenamiento.
1.5.2.1.4.1
Para agregar código de búsqueda de Session al
método ConfigureCrystalReports()
Procedimiento
1.
En el método ConfigureCrystalReports(), delante del código existente, cree un bloque condicional if/
else que compruebe si existe un objeto Session denominado hierarchicalGroupingReport.
Puede usar un nombre de identificador que elija para este objeto Session. Use un identificador exclusivo,
como el nombre de la copia del informe.
If (Session("hierarchicalGroupingReport") Is Nothing) Then
Else
End If
if(Session["hierarchicalGroupingReport"] == null)
{
}
else
{
}
2.
Si utiliza un informe incrustado, mueva la línea de código que declara y crea una copia del informe desde su
ubicación actual hasta el bloque If.
If (Session("hierarchicalGroupingReport") Is Nothing) Then
hierarchicalGroupingReport = New Hierarchical_Grouping()
Else
End If
if (Session["hierarchicalGroupingReport"] == null)
{
hierarchicalGroupingReport = new Hierarchical_Grouping();
}
else
{
}
3.
344
Si utiliza un informe no incrustado, mueva las dos líneas del código que declaran y crean una copia del
informe y que lo cargan desde la ruta de directorio hasta su ubicación actual en el bloque If.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Nota
Consulte Directorio de informes de muestra [página 14] para averiguar la ruta correcta de los informes de
muestra.
If (Session("hierarchicalGroupingReport") Is Nothing) Then
hierarchicalGroupingReport = New ReportDocument()
hierarchicalGroupingReport.Load("C:\Archivos de programa\Microsoft Visual
Studio 9.0\Crystal Reports\Samples\Es\Reports\Feature Examples\Hierarchical
Grouping.rpt")
Else
End If
if(Session["hierarchicalGroupingReport"] == null)
{
hierarchicalGroupingReport = new ReportDocument();
hierarchicalGroupingReport.Load("C:\Archivos de programa\Microsoft Visual
Studio 9.0\Crystal Reports\Samples\Es\Reports\Feature Examples\Hierarchical
Grouping.rpt");
}
else
{
}
4.
En el bloque If, asigne el informe a Session, utilizando el nombre de variable de informe como la cadena del
identificador Session.
Session("hierarchicalGroupingReport") = hierarchicalGroupingReport
Session["hierarchicalGroupingReport"] = hierarchicalGroupingReport;
Esto completa el bloque If. El bloque If se ejecuta si el informe no existe en Session. El bloque Else se ejecuta
si se encuentra el informe en Session; por lo tanto, la finalidad del bloque Else es obtener el informe de
Session en una instancia de informe.
5.
En el bloque Else, asigne el informe almacenado en Session a la copia del informe.
hierarchicalGroupingReport = CType(Session("hierarchicalGroupingReport"),
ReportDocument)
hierarchicalGroupingReport =
(ReportDocument)Session["hierarchicalGroupingReport"];
Nota
Como Session sólo devuelve objetos genéricos, debe proyectar el informe en un tipo de informe. Tanto si
utiliza informes incrustados como informes no incrustados, proyecte el objeto recuperado al tipo
ReportDocument.
Fuera y debajo del bloque condicional, el código restante enlaza la instancia del informe a la propiedad
ReportSource del control CrystalReportViewer.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
345
Resultados
Como recordará de Configuración de proyectos (vea Configuración de proyectos [página 14]), se llama al método
ConfigureCrystalReports() cada vez que se vuelve a cargar una página. Por lo tanto, la modificación de este
método garantiza que siempre se recupera y vuelve a cargar el informe más actual, ya sea nuevo o almacenado
en Session. Sin embargo, aún no se ha escrito nada para actualizar realmente la instancia del informe. En la
siguiente sección, actualizará la instancia del informe en Session cada vez que se modifique la dirección de
ordenamiento.
1.5.2.1.4.2
Para actualizar la instancia del informe en
Session para el método de evento sortOrderDescending_Click
Procedimiento
1.
En el método de evento sortOrderDescending_Click(), elimine la última línea de código que enlaza el
control CrystalReportViewer al informe.
Esto le debe dejar las tres líneas de código que cambian la dirección de ordenamiento.
2.
Bajo las tres líneas de código que cambian la dirección de ordenamiento, asigne la instancia de
hierarchicalGroupingReport (que se ha actualizado con una nueva dirección de ordenamiento) a Session
mediante el mismo identificador usado en el método ConfigureCrystalReports().
Nota
Para simplificar el proceso, copie y pegue esta línea de código del método
ConfigureCrystalReports().
Session("hierarchicalGroupingReport") = hierarchicalGroupingReport
Session["hierarchicalGroupingReport"] = hierarchicalGroupingReport;
3.
Finalmente, agregue una llamada al método ConfigureCrystalReports(), que obtiene la última instancia
de hierarchicalGroupingReport de Session (la misma que actualizó hace un momento) y enlácela al control
CrystalReportViewer.
ConfigureCrystalReports()
ConfigureCrystalReports();
Resultados
Ahora puede repetir los mismos pasos para el segundo método de evento.
346
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.2.1.4.3
Para actualizar la instancia del informe en
Session para el método de evento sortOrderAscending_Click
Procedimiento
1.
En el método de evento sortOrderAscending_Click(), elimine la última línea de código que enlaza el
control CrystalReportViewer al informe.
Esto le debe dejar las tres líneas de código que cambian la dirección de ordenamiento.
2.
Bajo las tres líneas de código que cambian la dirección de ordenamiento, asigne la instancia de
hierarchicalGroupingReport (que se ha actualizado con una nueva dirección de ordenamiento) a Session
mediante el mismo identificador usado en el método ConfigureCrystalReports().
Para simplificar el proceso, copie y pegue esta línea de código del método ConfigureCrystalReports().
Session("hierarchicalGroupingReport") = hierarchicalGroupingReport
Session["hierarchicalGroupingReport"] = hierarchicalGroupingReport;
3.
Finalmente, agregue una llamada al método ConfigureCrystalReports(), que obtiene la última instancia
de hierarchicalGroupingReport de Session (la misma que actualizó hace un momento) y enlácela al control
CrystalReportViewer.
ConfigureCrystalReports()
ConfigureCrystalReports();
Resultados
Ahora ya estará preparado para comprobar si los cambios de orden se han conservado correctamente.
1.5.2.1.5
Probar y determinar la persistencia correcta
En esta sección, comprobará si los cambios de orden se han conservado correctamente ahora que Session se
usa para la persistencia.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
347
1.5.2.1.5.1
Para probar si los cambios de orden se han
conservado correctamente
Procedimiento
1.
En el menú Generar, haga clic en Generar solución.
Si existen errores de generación, corríjalos ahora.
2.
En el menú Depurar, haga clic en Iniciar.
Si no aparecen errores de generación, se cargará la página Default.aspx en el explorador, con el informe de
agrupamiento jerárquico (Hierarchical Grouping) generado en el formulario.
3.
Observe la dirección de ordenamiento cuidadosamente. Conviene imprimir la página para comparar los
cambios de la dirección de ordenamiento.
4.
Haga clic en el botón Cambiar la dirección de ordenamiento a descendente.
Se invertirá la dirección de ordenamiento.
5.
En la barra de herramientas del informe, ajuste la ampliación de 100% a 125%.
La página recargará el informe al 125%. La inversión de la dirección de ordenamiento se ha conservado.
6.
Haga clic en el botón Cambiar la dirección de ordenamiento a ascendente.
Se restaurará la dirección de ordenamiento.
7.
En la barra de herramientas del informe, ajuste la ampliación de 125% a 100%.
La página recargará el informe al 100%. La dirección de ordenamiento conservará la configuración del paso
anterior.
Resultados
En esta prueba puede comprobar que ahora la persistencia es correcta.
1.5.2.2
Tutorial: Conectar con una base de datos segura de
SQL Server utilizando autenticación de SQL
En este tutorial, aprenderá a agregar código de conexión para mostrar un informe que contiene información de
una base de datos segura de SQL Server.
Introducción
Para conectar con una base de datos segura de SQL Server, va a utilizar clases del modelo de objetos
ReportDocument.
El objeto ReportDocument tiene una propiedad Database que devuelve una instancia de Database. Esta instancia
Database contiene la información de base de datos del informe, incluida una propiedad Tables que devuelve una
348
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
instancia de clase indizada de Tables. Las instancias de Table individuales se pueden obtener de la clase
indizada Tables.
La conexión ocurre en el nivel granular de cada instancia de Table, a la que se debe conceder acceso individual al
SQL Server seguro. Esto se realiza incorporando la información de conexión a una instancia de ConnectionInfo
y, a continuación, dentro de un ciclo For, aplicando dicha instancia de ConnectionInfo a la propiedad
ConnectionInfo de cada instancia de Table.
Las propiedades de la clase ConnectionInfo incluyen lo siguiente:
●
ServerName
●
DatabaseName
●
UserID
●
Password
●
IntegratedSecurity (no se utiliza en este tutorial)
Nota
Si desea trabajar con un tutorial que utilice autenticación de Windows (y que, por lo tanto, utilice la propiedad
IntegratedSecurity en lugar de las propiedades UserID y Password), vea Tutorial: Conectar con una base de
datos segura de SQL Server utilizando seguridad integrada [página 366].
Si decide establecer únicamente las propiedades DatabaseName, UserID y Password, tendrá que conectar con el
servidor predeterminado y la base de datos especificada en el informe. Sin embargo, si elige asignar una
propiedad ServerName alternativa, podrá redirigir el informe a un servidor diferente en tiempo de ejecución.
Para empezar a crear un informe que contenga datos de una base de datos segura de un servidor SQL.
Puede terminar este tutorial utilizando las clases del modelo de objetos CrystalReportViewer; sin embargo, se
recomienda el modelo de objetos ReportDocument.
Código de ejemplo
Este tutorial incluye código de ejemplo de C# y Visual Basic que muestra la versión finalizada del proyecto. Siga
las instrucciones de este tutorial para crear un nuevo proyecto o para abrir el proyecto de código de ejemplo y
trabajar con una versión finalizada.
El código de ejemplo se almacena en carpetas que están clasificadas por idioma y tipo de proyecto. Los nombres
de las carpetas de cada versión del código de ejemplo son los siguientes:
●
Sitio Web en C#: CS_Web_RDObjMod_DBLogon
●
Proyecto para Windows en C#: CS_Win_RDObjMod_DBLogon
●
Sitio Web en Visual Basic: VB_Web_RDObjMod_DBLogon
●
Proyecto para Windows en Visual Basic: VB_Win_RDObjMod_DBLogon
Información relacionada
Elegir el modelo de objetos correcto para el proyecto [página 31]
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
349
Tutorial: Conectar con una base de datos segura de SQL Server utilizando autenticación de SQL [página 241]
En este tutorial, aprenderá a agregar código de conexión para mostrar un informe que contiene información de
una base de datos segura de SQL Server.
Directorio de informes de muestra [página 14]
1.5.2.2.1
Crear un informe conectado a una base de datos
segura de SQL Server
Para comenzar, cree un informe que obtenga su información de la base de datos Northwind.
Nota
Northwind es una base de datos de muestra que se proporciona con SQL Server.
Este tutorial requiere que se configuren algunos parámetros como requisito previo.
Información relacionada
Tutorial: Conectar con una base de datos segura de SQL Server utilizando autenticación de SQL [página 348]
En este tutorial, aprenderá a agregar código de conexión para mostrar un informe que contiene información de
una base de datos segura de SQL Server.
1.5.2.2.1.1
datos
Requisitos previos de configuración de la base de
Procedimiento
1.
Configuración de SQL Server:
○
Si tiene instalado SQL Server (o la versión OEM, MSDE), debe configurarse de modo que requiera la
Autenticación de SQL Server para que funcione con este tutorial.
○
Si no tiene instalado SQL Server (ni la versión OEM, MSDE), debe instalar MSDE con la autenticación de
SQL Server establecida en "True" para que funcione con este tutorial.
2.
La base de datos Northwind incluida con SQL Server se debe instalar y verificar que acepta la Autenticación
de SQL Server.
3.
Se debe crear una cuenta de acceso limitado para utilizarla en el sitio Web.
350
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.2.2.1.2
Para crear un informe con datos seguros de la
base de datos Northwind
Contexto
Nota
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos [página 14].
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.
Procedimiento
1.
En el Explorador de soluciones, haga clic con el botón secundario en el nombre de proyecto en negrita, elija
Agregar y, a continuación, haga clic en Agregar nuevo elemento.
2.
En el cuadro de diálogo Agregar nuevo elemento, en la vista Plantillas, seleccione la plantilla Crystal Report.
3.
En el campo Nombre, escriba "NorthwindCustomers.rpt" y haga clic en Abrir.
4.
En el panel Crear un nuevo documento de Crystal Reports del cuadro de diálogo Galería de Crystal Reports,
seleccione Usar asistente de informes.
5.
En el panel Elegir un Asistente, seleccione Estándar y, a continuación, haga clic en Aceptar.
Aparecerá la ventana Asistente para la creación de informes estándar.
6.
En el panel Orígenes de datos disponibles, expanda la carpeta Crear nueva conexión.
7.
En la subcarpeta que se abre, expanda la carpeta OLE DB (ADO).
Aparecerá la ventana OLE DB (ADO).
8.
Seleccione Proveedor de Microsoft OLE DB para SQL Server y haga clic en Siguiente.
9.
Especifique los valores de su servidor de base de datos, ID de usuario y contraseña en los campos Servidor, ID
de usuario y Contraseña.
10. En la lista desplegable Base de datos, seleccione "Northwind".
Deje desactivada la casilla de verificación Seguridad integrada porque está usando la autenticación de SQL
Server en lugar de la autenticación de NT.
11. Haga clic en Finalizar.
Ahora se expandirá la carpeta OLE DB, mostrando el servidor de base de datos y dentro de él, la base de
datos Northwind.
12. Expanda los nodos Northwind, dbo y Tablas, y, a continuación, seleccione la tabla Customers.
13. Haga clic en el símbolo > para mover la tabla al panel Tablas seleccionadas y, a continuación, haga clic en
Siguiente.
14. Mantenga presionada la tecla Ctrl mientras hace clic en CompanyName, ContactName y City.
15. Haga clic en el símbolo > para mover estos campos al panel Campos a mostrar y, a continuación, haga clic en
Siguiente.
16. En el panel Campos disponibles, en Campos del informe, seleccione Cliente.Ciudad, haga clic en el símbolo >
para mover el campo al panel Agrupar por y, a continuación, haga clic en Finalizar.
Se creará el informe NorthwindCustomers y se cargará en la ventana principal de Visual Studio.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
351
Resultados
Ahora ya podrá enlazar el informe al control CrystalReportViewer y establecer la conexión con la base de
datos mediante programación.
1.5.2.2.2
Enlazar el informe
En Configuración de proyectos [página 14], va a colocar un control CrystalReportViewer en el formulario Web
Forms o Windows Forms. En el paso anterior, ha agregado un informe NorthwindCustomers al proyecto.
En esta sección, va a crear una copia del informe NorthwindCustomers y a enlazarla con el control
CrystalReportViewer. A continuación, probará si el informe se muestra correctamente cuando no se han
establecido valores actuales para su campo de parámetro.
Puede crear una copia del informe y enlazarla de dos formas:
●
Como informe incrustado.
●
Como informe no incrustado.
Elija uno de los procedimientos con pasos siguientes (pero no ambos).
●
Si utiliza informes incrustados, realice el siguiente procedimiento de pasos para crear una instancia del
informe como un informe incrustado.
●
Si utiliza informes no incrustados, siga el segundo procedimiento de pasos para crear una instancia del
informe como un informe no incrustado.
1.5.2.2.2.1
Para crear una copia del informe
NorthwindCustomers como informe incrustado y enlazarla al
control CrystalReportViewer
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
Agregue una nueva declaración de nivel de clase para la clase contenedora del informe NorthwindCustomers,
con el nombre de variable NorthwindCustomers. Establezca su modificador de acceso como private.
Private northwindCustomersReport As NorthwindCustomers
private NorthwindCustomers northwindCustomersReport;
4.
352
En el método ConfigureCrystalReports(), cree una instancia de la clase contenedora de informes.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Nota
Ha creado el método ConfigureCrystalReports() en Configuración de proyectos [página 14].
northwindCustomersReport = New NorthwindCustomers()
northwindCustomersReport = new NorthwindCustomers();
5.
En la línea siguiente, debajo de la creación de instancias del informe, enlace la propiedad ReportSource del
control CrystalReportViewer a la clase de informe de la que ha creado una instancia (nombre de variable:
northwindCustomersReport).
myCrystalReportViewer.ReportSource = northwindCustomersReport
crystalReportViewer.ReportSource = northwindCustomersReport;
Resultados
Ahora estará listo para crear y ejecutar el proyecto. Está previsto que falle la carga del informe, porque aún no se
ha escrito el código para conectarse con la base de datos.
1.5.2.2.2.2
Para crear una copia del informe
NorthwindCustomers como informe no incrustado y enlazarla
al control CrystalReportViewer
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
Agregue una nueva declaración de nivel de clase para la clase contenedora del informe NorthwindCustomers,
con el nombre de variable northwindCustomersReport. Establezca su modificador de acceso como private.
Private northwindCustomersReport As ReportDocument
private ReportDocument northwindCustomersReport;
Nota
La clase ReportDocument es miembro del espacio de nombres CrystalDecisions.CrystalReports.Engine.
Agregó una declaración "Imports" [Visual Basic] o "using" [C#] para este espacio de nombres
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
353
en Configuración de proyectos [página 14]. Cuando cree la instancia de ReportDocument y cargue un
informe en el espacio de nombres, tendrá acceso al informe a través del SDK, sin incrustar el informe.
4.
En el método ConfigureCrystalReports() (que ha creado en Configuración de proyectos [página 14]),
cree una instancia de la clase ReportDocument.
northwindCustomersReport = New ReportDocument()
northwindCustomersReport = new ReportDocument();
5.
Declare una variable de cadena, llámela reportPath y asígnele una ruta en tiempo de ejecución al informe
local. Esta ruta se determina de forma diferente para los sitios Web y los proyectos para Windows:
○
Para un sitio Web, pase el nombre del archivo de informe local como un parámetro de cadena al método
Server.MapPath(). Esto asigna el informe local a la ruta del directorio de archivos de la unidad de disco
duro en tiempo de ejecución.
Dim reportPath As String = Server.MapPath("NorthwindCustomers.rpt")
string reportPath = Server.MapPath("NorthwindCustomers.rpt");
○
Para un proyecto Windows, concatene la propiedad Application.StartupPath con una barra diagonal
inversa y el nombre del archivo de informe local. Esto asigna el informe al mismo directorio del archivo
ejecutable de Windows.
Nota
En la fase de compilación se copiará el informe al directorio que contiene el archivo ejecutable.
Dim reportPath As String = Application.StartupPath & "\" &
"NorthwindCustomers.rpt"
string reportPath = Application.StartupPath + "\\" + "NorthwindCustomers.rpt";
6.
Llame al método Load() de la instancia de ReportDocument y pásele la variable de cadena reportPath.
northwindCustomersReport.Load(reportPath)
northwindCustomersReport.Load(reportPath);
7.
Enlace la propiedad ReportSource de CrystalReportViewer a la instancia de ReportDocument.
myCrystalReportViewer.ReportSource = northwindCustomersReport
crystalReportViewer.ReportSource = northwindCustomersReport;
354
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.2.2.2.3
Para probar la carga del informe
NorthwindCustomers
Contexto
Tanto si ha elegido crear una instancia de clase de un informe incrustado como de un informe no incrustado
mediante la clase ReportDocument, el nombre de la variable utilizada es el mismo: northwindCustomersReport.
De esta forma, puede utilizar un conjunto de códigos común en los procedimientos que aparecen a continuación.
Ahora estará listo para crear y ejecutar el proyecto. Está previsto que falle la carga del informe, porque aún no se
ha escrito el código para conectarse con la base de datos.
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
Si usa un informe no incrustado en un proyecto Windows, busque el archivo ejecutable de Windows
compilado en el subdirectorio \bin\ [Visual Basic] o \bin\debug\ [C#] y, a continuación, copie el
informe en dicho subdirectorio.
Nota
Para que el archivo ejecutable de Windows cargue el informe no incrustado en tiempo de ejecución, el
informe deberá estar almacenado en el mismo directorio que el archivo ejecutable de Windows.
4.
En el menú Depurar, haga clic en Iniciar.
El informe NorthwindCustomers no se muestra, porque no se ha agregado el código de conexión con la base
de datos.
Nota
Los resultados pueden variar según la versión de SAP Crystal Reports que use. Por ejemplo, si tiene
instalado SAP Crystal Reports 10 o una versión superior, aparecerá un formulario y se le pedirá que indique
la información sobre conexión de base de datos para el informe. Esta es una nueva función de SAP Crystal
Reports Developer. Si ejecuta una versión anterior de SAP Crystal Reports, se produce una excepción. En
cualquier caso, debe seguir el siguiente procedimiento de pasos para crear una aplicación totalmente
funcional.
5.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.2.2.3
Agregar el código de conexión del informe
Ahora estará preparado para agregar el código de conexión del informe a la clase de código subyacente. Va a
empezar por crear un método auxiliar privado, SetDBLogonForReport().
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
355
1.5.2.2.3.1
Para crear y codificar el método
SetDBLogonForReport()
Procedimiento
1.
Regrese a la clase de código subyacente de este Web Forms o Windows Forms.
2.
En la parte inferior de la clase, cree un nuevo método privado denominado SetDBLogonForReport() con
dos parámetros, ConnectionInfo y ReportDocument.
Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo, ByVal
myReportDocument As ReportDocument)
End Sub
private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument
reportDocument)
{
}
3.
En este método, recupere la instancia de Tables de la propiedad Tables de la propiedad Database del
parámetro ReportDocument.
Nota
Tables es una clase indizada que contiene instancias de la clase Table.
Dim myTables As Tables = myReportDocument.Database.Tables
Tables tables = reportDocument.Database.Tables;
4.
Cree un bucle foreach que recorra todas las instancias de Table de la instancia de clase indizada Tables.
Nota
Debe incluir la ruta del espacio de nombres completa a la clase Table, para diferenciarla de la clase Table
del espacio de nombres System.Web.UI.WebControls.
For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables
Next
foreach(CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
}
356
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
5.
En el bucle foreach, obtenga la instancia de TableLogonInfo a partir de la propiedad LogOnInfo de la
instancia de Table.
Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
TableLogOnInfo tableLogonInfo = table.LogOnInfo;
6.
En el bucle foreach, establezca la propiedad ConnectionInfo de TableLogonInfo en el parámetro
ConnectionInfo.
myTableLogonInfo.ConnectionInfo = myConnectionInfo
tableLogonInfo.ConnectionInfo = connectionInfo;
7.
En el bucle foreach, pase la instancia de TableLogonInfo como parámetro al método ApplyLogonInfo de
la instancia de Table.
myTable.ApplyLogOnInfo(myTableLogonInfo)
table.ApplyLogOnInfo(tableLogonInfo);
Resultados
El procedimiento de este paso ha creado un método para establecer la conexión de la base de datos. Sin
embargo, debe modificar el método ConfigureCrystalReports() para direccionar este método, con el fin de
que el informe sepa que tiene información sobre conexión de base de datos.
La modificación del método ConfigureCrystalReports() requiere dos acciones:
●
Configurar la instancia de ConnectionInfo.
●
Llamar al método SetDBLogonForReport().
1.5.2.2.3.2
Para modificar el método
ConfigureCrystalReports() para direccionar el código de
conexión con la base de datos
Procedimiento
1.
En el método ConfigureCrystalReports(), agregue un par de saltos de línea al código encima de la línea
que enlaza el informe al control CrystalReportViewer.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
357
2.
En los saltos de línea, declare y cree una instancia de la clase ConnectionInfo.
Nota
Para que la clase ConnectionInfo sea accesible, incluya un enunciado "Imports" [Visual Basic] o
"using" [C#] en la parte superior de la clase de código subyacente del espacio de nombres
CrystalDecisions.Shared. (Esta declaración se ha agregado en Configuración de proyectos [página 14].)
Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
ConnectionInfo connectionInfo = new ConnectionInfo();
3.
Establezca las propiedades DatabaseName, UserID y Password de la instancia de ConnectionInfo.
Nota
Por razones de seguridad, es importante utilizar una cuenta de base de datos con permisos de acceso
limitado.
En el código que escriba, reemplace la contraseña de ejemplo 1234 (que se muestra más abajo) por su propia
contraseña.
myConnectionInfo.DatabaseName = "Northwind"
myConnectionInfo.UserID = "limitedPermissionAccount"
myConnectionInfo.Password = "
1234"
connectionInfo.DatabaseName = "Northwind";
connectionInfo.UserID = "limitedPermissionAccount";
connectionInfo.Password = "
1234";
4.
Especifique una llamada al método SetDBLogonForReport() y pase la instancia de ConnectionInfo y el
informe NorthwindCustomers.
SetDBLogonForReport(myConnectionInfo, northwindCustomersReport)
SetDBLogonForReport(connectionInfo, northwindCustomersReport);
Resultados
A continuación aparece el código original que enlaza el informe al control CrystalReportViewer.
Ahora estará listo para crear y ejecutar el proyecto. El informe se debe cargar correctamente, ya que ha agregado
código para conectar con la base de datos.
358
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.2.2.3.3
Para probar la carga del informe
NorthwindCustomers
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
El informe NorthwindCustomers se mostrará correctamente.
4.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
Resultados
El informe NorthwindCustomers se mostrará correctamente.
1.5.2.2.4
Agregar la posibilidad de cambiar la ubicación de la
base de datos en tiempo de ejecución
En esta sección, aprenderá a cambiar la ubicación de la base de datos en tiempo de ejecución. Sólo requiere una
pequeña modificación de la instancia de ConnectionInfo.
1.5.2.2.4.1
Para cambiar la ubicación de la base de datos en
tiempo de ejecución
Procedimiento
1.
En el método ConfigureCrystalReports(), agregue un par de saltos de línea al código detrás de la línea
que declara y crea una instancia de la clase ConnectionInfo.
2.
En los saltos de línea, establezca la propiedad ServerName de la instancia de ConnectionInfo.
Nota
En el código que escriba, reemplace el nombre del servidor de ejemplo DevDatabase (que aparece más
abajo) por el nombre de su servidor.
myConnectionInfo.ServerName = "DevDatabase"
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
359
connectionInfo.ServerName = "DevDatabase";
1.5.2.2.4.2
Para probar si el informe se puede restablecer a
un servidor de base de datos alternativo en tiempo de
ejecución
Contexto
Ahora estará listo para crear y ejecutar el proyecto. El informe se debe redirigir al servidor de base de datos
alternativo en tiempo de ejecución.
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
El informe NorthwindCustomers se mostrará correctamente.
4.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.2.2.5
de datos
Anexo: Mejoras en el código de conexión a la base
Ha configurado con éxito el código para cambiar la ubicación de la base de datos en tiempo de ejecución. En este
ejemplo, es el mismo servidor de base de datos, la única diferencia es que lo ha llamado explícitamente por el
nombre.
Sin embargo, ahora puede cambiar esta cadena de nombre servidor de base de datos a cualquier otro servidor de
base de datos que contiene la base de datos Northwind. Si usa SAP Crystal Reports con Visual Studio 2005 ó
2008, tiene acceso a la API mejorada para conectar con una base de datos segura de SQL Server. La API de SAP
Crystal Reports ayuda a reducir la cantidad de código necesario para conectar con la base de datos.
En los procedimientos previos, ha aprendido a crear el método auxiliar SetDBLogonForReport(), que utiliza un
bucle foreach para establecer la propiedad ConnectionInfo de cada tabla del informe de Crystal Reports.
En este tutorial, aprenderá a eliminar el método auxiliar y a agregar código para utilizar la clase
DataSourceConnections del espacio de nombres CrystalDecisions.Shared, o bien el método
SetDatabaseLogon() de la clase ReportDocument.
La clase DataSourceConnections es un ArrayList que contiene las instancias de ConnectionInfo de cada
conexión utilizada por el informe de Crystal Reports. Puede recuperar las instancias de ConnectionInfo de un
360
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
índice especificado y, a continuación, llamara a SetLogon() o SetConnection() para pasar la información de
conexión al informe.
El método SetLogon() le permite establecer el nombre de usuario y la contraseña. Este método utiliza el
servidor y la base de datos predeterminados especificados en el informe. El método SetConnection() permite
establecer los nombres del servidor, de la base de datos y de usuario, así como la contraseña.
Para utilizar el nuevo código de la API, debe seguir las instrucciones de Crear un informe conectado a una base de
datos segura de SQL Server [página 350] y Enlazar el informe [página 352].
Después, puede utilizar uno de los siguientes métodos de la API mejorada:
●
Utilizar la clase DataSourceConnections para la conexión de base de datos [página 362]
●
Utilizar el método SetDatabaseLogon() de la clase ReportDocument [página 365]
Si ha seguido todos los procedimientos de Tutorial: Conectar con una base de datos segura de SQL Server
utilizando autenticación de SQL [página 348], primero debe eliminar algunas líneas de código que se muestran en
Modificar el proyecto para la conexión con la base de datos [página 361], antes de poder utilizar uno de los
métodos de la API mejorada.
1.5.2.2.5.1
de datos
Modificar el proyecto para la conexión con la base
Si ha seguido todos los procedimientos de Tutorial: Conectar con una base de datos segura de SQL Server
utilizando autenticación de SQL [página 348], primero debe eliminar algunas líneas de código que se muestran en
el siguiente procedimiento.
1.5.2.2.5.1.1
Para modificar el proyecto con el fin de usar la
API mejorada de SAP Crystal Reports
Procedimiento
1.
Abra el proyecto terminado de este tutorial.
2.
Abra el formulario Web Forms o Windows Forms.
3.
En el menú Ver, haga clic en Código.
4.
Elimine el método auxiliar SetDBLogonForReport().
5.
En el método ConfigureCrystalReports(), elimine las siguientes líneas de código:
a) Elimine el código que declara una instancia de la clase ConnectionInfo.
b) Elimine el código que utiliza las propiedades ServerName, DatabaseName, UserID y Password desde la
clase ConnectionInfo.
c) Elimine la llamada al método SetDBLogonForReport().
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
361
Resultados
Ahora, el método ConfigureCrystalReports() tiene dos líneas de código.
Private Sub ConfigureCrystalReports()
northwindCustomersReport = new NorthwindCustomers()
myCrystalReportViewer.ReportSource = northwindCustomersReport
End Sub
private void ConfigureCrystalReports()
{
northwindCustomersReport = new NorthwindCustomers();
crystalReportViewer.ReportSource = northwindCustomersReport;
}
Ahora ya puede decidir si utiliza uno de los siguientes métodos de la API mejorada:
●
Utilizar la clase DataSourceConnections para la conexión de base de datos [página 362]
●
Utilizar el método SetDatabaseLogon() de la clase ReportDocument [página 365]
1.5.2.2.5.2
Utilizar la clase DataSourceConnections para la
conexión de base de datos
En esta sección, aprenderá a agregar dos líneas de código para la conexión con una base de datos de SQL Server.
Debe recuperar la instancia de DataSourceConnections y, a continuación, establecer la información sobre
conexión de base de datos mediante el uso de SetLogon() o SetConnection().
●
Debe crear un proyecto basado en las instrucciones de Crear un informe conectado a una base de datos
segura de SQL Server [página 350] y Enlazar el informe [página 352].
●
O bien, debe crear un proyecto basado en las instrucciones de Modificar el proyecto para la conexión con la
base de datos [página 361].
Si desea utilizar el servidor y la base de datos predeterminados, llame al método SetLogon() con su nombre de
usuario y contraseña.
De lo contrario, si desea cambiar el servidor o la base de datos, llame al método SetConnection() con los
nombres del servidor, de la base de datos y de usuario, así como su contraseña.
362
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.2.2.5.2.1
Para utilizar el método SetLogon() de la clase
DataSourceConnections
Procedimiento
1.
Entre las dos líneas de código de ConfigureCrystalReports(), recupere la instancia de
DataSourceConnections de la propiedad DataSourceConnections de la instancia de
NorthwindCustomers.
Dim myDataSourceConnections As DataSourceConnections =
northwindCustomersReport.DataSourceConnections
DataSourceConnections dataSourceConnections =
northwindCustomersReport.DataSourceConnections;
2.
Recupere IConnectionInfo en el índice 0 de la instancia de DataSourceConnections.
Dim myConnectInfo As IConnectionInfo = myDataSourceConnections(0)
IConnectionInfo connectInfo = dataSourceConnections[0];
3.
Llame al método SetLogon() con su nombre de usuario y contraseña.
Nota
Por razones de seguridad, es importante utilizar una cuenta de base de datos con permisos de acceso
limitado.
En el código que escriba, reemplace la contraseña de ejemplo 1234 (que se muestra más abajo) por su propia
contraseña.
myConnectInfo.SetLogon("limitedPermissionAccount", "1234")
connectInfo.SetLogon("limitedPermissionAccount", "1234");
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
363
1.5.2.2.5.2.2
Para utilizar el método SetConnection() de la
clase DataSourceConnections
Procedimiento
1.
Entre las dos líneas de código de ConfigureCrystalReports(), recupere la instancia de
DataSourceConnections de la propiedad DataSourceConnections de la instancia de NorthwindCustomers.
Dim myDataSourceConnections As DataSourceConnections =
northwindCustomersReport.DataSourceConnections
DataSourceConnections dataSourceConnections =
northwindCustomersReport.DataSourceConnections;
2.
Recupere IConnectionInfo en el índice 0 de la instancia de DataSourceConnections.
Dim myConnectInfo As IConnectionInfo = myDataSourceConnections(0)
IConnectionInfo connectInfo = dataSourceConnections[0];
3.
Llame al método SetConnection() con su nombre de servidor, de base de datos y de usuario, así como su
contraseña.
Nota
Por razones de seguridad, es importante utilizar una cuenta de base de datos con permisos de acceso
limitado.
En el código que escriba, reemplace la contraseña de ejemplo 1234 (que se muestra más abajo) por su propia
contraseña.
myConnectInfo.SetConnection("ServerName", "Northwind",
"limitedPermissionAccount", "1234")
connectInfo.SetConnection("ServerName", "Northwind", "limitedPermissionAccount",
"1234");
Resultados
Ya está preparado para generar y ejecutar el proyecto, para conectar con la base de datos segura de SQL Server.
364
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.2.2.5.3
Utilizar el método SetDatabaseLogon() de la
clase ReportDocument
Contexto
Entre las dos líneas de código en ConfigureCrystalReports(), llame al método SetDatabaseLogon() de la
instancia de NorthwindCustomers y pase uno de los siguientes conjuntos de parámetros:
Procedimiento
1.
Llame al método SetDatabaseLogon() con su nombre de usuario y contraseña.
Nota
Por razones de seguridad, es importante utilizar una cuenta de base de datos con permisos de acceso
limitado.
En el código que escriba, reemplace la contraseña de ejemplo 1234 (que se muestra más abajo) por su propia
contraseña.
northwindCustomersReport.SetDatabaseLogon("limitedPermissionAccount","1234")
northwindCustomersReport.SetDatabaseLogon("limitedPermissionAccount","1234");
2.
O bien, llame al método SetDatabaseLogon() con los nombres de servidor, de base de datos y de usuario,
así como su contraseña.
Nota
Este método no cambia el servidor ni la base de datos. Se ve restringido a sólo el servidor y la base de
datos predeterminados especificados en el informe.
En el código que escriba, reemplace la contraseña de ejemplo 1234 (que se muestra más abajo) por su propia
contraseña.
northwindCustomersReport.SetDatabaseLogon("limitedPermissionAccount","1234",
"ServerName", "Northwind")
northwindCustomersReport.SetDatabaseLogon("limitedPermissionAccount","1234",
"ServerName", "Northwind");
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
365
1.5.2.3
Tutorial: Conectar con una base de datos segura de
SQL Server utilizando seguridad integrada
En este tutorial, aprenderá a agregar código de conexión para mostrar un informe que contiene información de
una base de datos segura de SQL Server.
Introducción
Para conectar con una base de datos segura de SQL Server, va a utilizar clases del modelo de objetos
ReportDocument.
El objeto ReportDocument tiene una propiedad Database que devuelve una instancia de Database. Esta
instancia Database contiene la información de base de datos del informe, incluida una propiedad Tables que
devuelve una instancia de clase indizada de Tables. Las instancias de Table individuales se pueden obtener de
la clase indizada Tables.
La conexión ocurre en el nivel granular de cada instancia de Table, a la que se debe conceder acceso individual al
SQL Server seguro. Esto se realiza incorporando la información de conexión a una instancia de ConnectionInfo
y, a continuación, dentro de un ciclo For, aplicando dicha instancia de ConnectionInfo a la propiedad
ConnectionInfo de cada instancia de Table.
Las propiedades de la clase ConnectionInfo incluyen lo siguiente:
●
ServerName
●
DatabaseName
●
UserID (no se utiliza en este tutorial)
●
Password (no se utiliza en este tutorial)
●
IntegratedSecurity
Nota
Si desea trabajar con un tutorial que utilice autenticación de SQL (y, por lo tanto, utilice las propiedades UserID
y Password en lugar de la propiedad IntegratedSecurity), vea Tutorial: Conectar con una base de datos segura
de SQL Server utilizando autenticación de SQL [página 348].
Si decide establecer únicamente las propiedades DatabaseName y IntegratedSecurity, tendrá que conectar
con el servidor predeterminado y la base de datos especificada en el informe. Sin embargo, si elige asignar una
propiedad ServerName alternativa, podrá redirigir el informe a un servidor diferente en tiempo de ejecución.
Para empezar a crear un informe que contenga datos de una base de datos segura de un servidor SQL.
Puede terminar este tutorial utilizando las clases del modelo de objetos CrystalReportViewer; sin embargo, se
recomienda el modelo de objetos ReportDocument.
366
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Código de ejemplo
Este tutorial incluye código de ejemplo de C# y Visual Basic que muestra la versión finalizada del proyecto. Siga
las instrucciones de este tutorial para crear un nuevo proyecto o para abrir el proyecto de código de ejemplo y
trabajar con una versión finalizada.
El código de ejemplo se almacena en carpetas que están clasificadas por idioma y tipo de proyecto. Los nombres
de las carpetas de cada versión del código de ejemplo son los siguientes:
●
Sitio Web en C#: CS_Web_RDObjMod_DBLogonIntegratedSecurity
●
Proyecto para Windows en C#: CS_Win_RDObjMod_DBLogonIntegratedSecurity
●
Sitio Web en Visual Basic: VB_Web_RDObjMod_DBLogonIntegratedSecurity
●
Proyecto para Windows en Visual Basic: VB_Win_RDObjMod_DBLogonIntegratedSecurity
Información relacionada
Elegir el modelo de objetos correcto para el proyecto [página 31]
Directorio de informes de muestra [página 14]
1.5.2.3.1
Crear un informe conectado a una base de datos
segura de SQL Server utilizando Seguridad integrada
Para comenzar, cree un informe que obtenga su información de la base de datos Northwind.
Nota
Northwind es una base de datos de muestra que se proporciona con SQL Server.
Este tutorial requiere que se configuren algunos parámetros como requisito previo.
1.5.2.3.1.1
datos
Requisitos previos de configuración de la base de
Procedimiento
1.
Configuración de SQL Server:
○
Si tiene instalado SQL Server (o la versión OEM, MSDE), se debe configurar para que acepte la
Autenticación de Windows para este tutorial.
○
Si no tiene instalado SQL Server (ni la versión OEM, MSDE), deberá instalar MSDE con la Autenticación de
Windows (predeterminada) para trabajar con este tutorial.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
367
2.
La base de datos Northwind incluida con SQL Server se debe instalar y verificar que acepta la Autenticación
de Windows.
Una vez configurados SQL Server y la base de datos Northwind de acuerdo a las secciones anteriores, ya
podrá crear un informe que obtenga su información de la base de datos Northwind de forma segura.
Nota
Este procedimiento sólo funciona con un proyecto creado a partir de la Configuración de proyectos [página
14]. 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.
1.5.2.3.1.2
Para crear un informe con datos seguros de la
base de datos Northwind
Procedimiento
1.
En el Explorador de soluciones, haga clic con el botón secundario en el nombre de proyecto en negrita, elija
Agregar y, a continuación, haga clic en Agregar nuevo elemento.
2.
En el cuadro de diálogo Agregar nuevo elemento, en la vista Plantillas, seleccione la plantilla Crystal Report.
3.
En el campo Nombre, escriba "NorthwindCustomers.rpt" y haga clic en Abrir.
4.
En el panel Crear un nuevo documento de Crystal Reports del cuadro de diálogo Galería de Crystal Reports,
seleccione Usar asistente de informes.
5.
En el panel Elegir un Asistente, seleccione Estándar y, a continuación, haga clic en Aceptar.
Aparecerá la ventana Asistente para la creación de informes estándar.
6.
En el panel Orígenes de datos disponibles, expanda la carpeta Crear nueva conexión.
7.
En la subcarpeta que se abre, expanda la carpeta OLE DB (ADO).
Aparecerá la ventana OLE DB (ADO).
8.
Seleccione Proveedor de Microsoft OLE DB para SQL Server y haga clic en Siguiente.
9.
Escriba el nombre del servidor de base de datos en el campo Servidor.
10. Active la casilla de verificación Seguridad integrada.
11. En la lista desplegable Base de datos, seleccione "Northwind".
12. Haga clic en Finalizar.
Ahora se expandirá la carpeta OLE DB, mostrando el servidor de base de datos y dentro de él, la base de
datos Northwind.
13. Expanda los nodos Northwind, dbo y Tablas, y, a continuación, seleccione la tabla Customers.
14. Haga clic en el símbolo > para mover la tabla al panel Tablas seleccionadas y, a continuación, haga clic en
Siguiente.
15. Mantenga presionada la tecla Ctrl mientras hace clic en CompanyName, ContactName y City.
16. Haga clic en el símbolo > para mover estos campos al panel Campos a mostrar y, a continuación, haga clic en
Siguiente.
17. En el panel Campos disponibles, en Campos del informe, seleccione Cliente.Ciudad, haga clic en el símbolo >
para mover el campo al panel Agrupar por y, a continuación, haga clic en Finalizar.
368
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Se creará el informe NorthwindCustomers y se cargará en la ventana principal de Visual Studio.
Resultados
Ahora ya podrá enlazar el informe al control CrystalReportViewer y establecer la conexión con la base de datos
mediante programación.
1.5.2.3.2
Enlazar el informe
En Configuración de proyectos [página 14], colocó un control CrystalReportViewer en el formulario Web
Forms o Windows Forms. En el paso anterior, ha agregado un informe NorthwindCustomers al proyecto.
En esta sección, creará una instancia del informe NorthwindCustomers y la enlazará con el control
CrystalReportViewer. A continuación, probará si el informe se muestra correctamente cuando no se han
establecido valores actuales para su campo de parámetro.
Puede crear una copia del informe y enlazarla de dos formas:
●
Como informe incrustado.
●
Como informe no incrustado.
Elija uno de los procedimientos con pasos siguientes (pero no ambos).
●
Si utiliza informes incrustados, realice el siguiente procedimiento de pasos para crear una instancia del
informe como un informe incrustado.
●
Si utiliza informes no incrustados, siga el segundo procedimiento de pasos para crear una instancia del
informe como un informe no incrustado.
1.5.2.3.2.1
Para crear una copia del informe
NorthwindCustomers como informe incrustado y enlazarla al
control CrystalReportViewer
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
Agregue una nueva declaración de nivel de clase para la clase contenedora del informe NorthwindCustomers,
con el nombre de variable northwindCustomersReport. Establezca su modificador de acceso como
private.
Private northwindCustomersReport As NorthwindCustomers
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
369
private NorthwindCustomers northwindCustomersReport;
4.
En el método ConfigureCrystalReports(), cree una instancia de la clase contenedora de informes.
Nota
Ha creado el método ConfigureCrystalReports() en Configuración de proyectos [página 14].
northwindCustomersReport = New NorthwindCustomers()
northwindCustomersReport = new NorthwindCustomers();
5.
En la línea siguiente, debajo de la creación de instancias del informe, enlace la propiedad ReportSource del
control CrystalReportViewer a la clase de informe de la que ha creado una instancia (nombre de variable:
northwindCustomersReport).
myCrystalReportViewer.ReportSource = northwindCustomersReport
crystalReportViewer.ReportSource = northwindCustomersReport;
Resultados
Ahora estará listo para crear y ejecutar el proyecto. Está previsto que falle la carga del informe, porque aún no se
ha escrito el código para conectarse con la base de datos.
1.5.2.3.2.2
Para crear una copia del informe
NorthwindCustomers como informe no incrustado y enlazarla
al control CrystalReportViewer
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
Agregue una nueva declaración de nivel de clase para la clase contenedora del informe NorthwindCustomers,
con el nombre de variable northwindCustomersReport. Establezca su modificador de acceso como private.
Private northwindCustomersReport As ReportDocument
private ReportDocument northwindCustomersReport;
370
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Nota
La clase ReportDocument es miembro del espacio de nombres CrystalDecisions.CrystalReports.Engine.
Agregó una declaración "Imports" [Visual Basic] o "using" [C#] para este espacio de nombres
en Configuración de proyectos [página 14]. Cuando cree la instancia de ReportDocument y cargue un
informe en el espacio de nombres, tendrá acceso al informe a través del SDK, sin incrustar el informe.
4.
En el método ConfigureCrystalReports() (que ha creado en Configuración de proyectos [página 14]),
cree una instancia de la clase ReportDocument.
northwindCustomersReport = New ReportDocument()
northwindCustomersReport = new ReportDocument();
5.
Declare una variable de cadena, llámela reportPath y asígnele una ruta en tiempo de ejecución al informe
local. Esta ruta se determina de forma diferente para los sitios Web y los proyectos para Windows:
○
Para un sitio Web, pase el nombre del archivo de informe local como un parámetro de cadena al método
Server.MapPath(). Esto asigna el informe local a la ruta del directorio de archivos de la unidad de disco
duro en tiempo de ejecución.
Dim reportPath As String = Server.MapPath("NorthwindCustomers.rpt")
string reportPath = Server.MapPath("NorthwindCustomers.rpt");
○
Para un proyecto Windows, concatene la propiedad Application.StartupPath con una barra diagonal
inversa y el nombre del archivo de informe local. Esto asigna el informe al mismo directorio del archivo
ejecutable de Windows.
Nota
En la fase de compilación se copiará el informe al directorio que contiene el archivo ejecutable.
Dim reportPath As String = Application.StartupPath & "\" &
"NorthwindCustomers.rpt"
string reportPath = Application.StartupPath + "\\" + "NorthwindCustomers.rpt";
6.
Llame al método Load() de la instancia de ReportDocument y pásele la variable de cadena reportPath.
northwindCustomersReport.Load(reportPath)
northwindCustomersReport.Load(reportPath);
7.
Enlace la propiedad ReportSource de CrystalReportViewer a la instancia de ReportDocument.
myCrystalReportViewer.ReportSource = northwindCustomersReport
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
371
crystalReportViewer.ReportSource = northwindCustomersReport;
Resultados
Tanto si ha elegido crear una instancia de clase de un informe incrustado como de un informe no incrustado
mediante la clase ReportDocument, el nombre de la variable utilizada es el mismo: northwindCustomersReport.
De esta forma, puede utilizar un conjunto de códigos común en los procedimientos que aparecen a continuación.
Ahora estará listo para crear y ejecutar el proyecto. Está previsto que falle la carga del informe, porque aún no se
ha escrito el código para conectarse con la base de datos.
1.5.2.3.2.3
Para probar la carga del informe
NorthwindCustomers
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
Si usa un informe no incrustado en un proyecto Windows, busque el archivo ejecutable de Windows
compilado en el subdirectorio \bin\ [Visual Basic] o \bin\debug\ [C#] y, a continuación, copie el
informe en dicho subdirectorio.
Nota
Para que el archivo ejecutable de Windows cargue el informe no incrustado en tiempo de ejecución, el
informe deberá estar almacenado en el mismo directorio que el archivo ejecutable de Windows.
4.
En el menú Depurar, haga clic en Iniciar.
El informe NorthwindCustomers no se muestra, porque no se ha agregado el código de conexión con la base
de datos.
Nota
Los resultados pueden variar según la versión de SAP Crystal Reports que use. Por ejemplo, si tiene
instalado SAP Crystal Reports Developer, aparecerá un formulario y se le pedirá que indique la información
sobre conexión de base de datos para el informe. Esta es una nueva función de SAP Crystal Reports
Developer. Si ejecuta una versión anterior de SAP Crystal Reports, se produce una excepción. En cualquier
caso, debe seguir el siguiente procedimiento de pasos para crear una aplicación totalmente funcional.
5.
372
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.2.3.3
Agregar el código de conexión del informe
Ahora estará preparado para agregar el código de conexión del informe a la clase de código subyacente. Va a
empezar por crear un método auxiliar privado, SetDBLogonForReport().
1.5.2.3.3.1
Para crear y codificar el método
SetDBLogonForReport()
Procedimiento
1.
Regrese a la clase de código subyacente de este Web Forms o Windows Forms.
2.
En la parte inferior de la clase, cree un nuevo método privado denominado SetDBLogonForReport() con
dos parámetros, ConnectionInfo y ReportDocument.
Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo, ByVal
myReportDocument As ReportDocument)
End Sub
private void SetDBLogonForReport(ConnectionInfo connectionInfo, ReportDocument
reportDocument)
{
}
3.
En este método, recupere la instancia de Tables de la propiedad Tables de la propiedad Database del
parámetro ReportDocument.
Nota
Tables es una clase indizada que contiene instancias de la clase Table.
Dim myTables As Tables = myReportDocument.Database.Tables
Tables tables = reportDocument.Database.Tables;
4.
Cree un bucle foreach que recorra todas las instancias de Table de la instancia de clase indizada Tables.
Nota
Debe incluir la ruta del espacio de nombres completa a la clase Table, para diferenciarla de la clase Table
del espacio de nombres System.Web.UI.WebControls.
For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables
Next
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
373
foreach(CrystalDecisions.CrystalReports.Engine.Table table in tables)
{
}
5.
En el bucle foreach, obtenga la instancia de TableLogonInfo a partir de la propiedad LogOnInfo de la instancia
de Table.
Dim myTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
TableLogOnInfo tableLogonInfo = table.LogOnInfo;
6.
En el bucle foreach, establezca el valor de la propiedad ConnectionInfo de TableLogonInfo en el parámetro
ConnectionInfo.
myTableLogonInfo.ConnectionInfo = myConnectionInfo
tableLogonInfo.ConnectionInfo = connectionInfo;
7.
En el bucle foreach, pase la instancia de TableLogonInfo como parámetro al método ApplyLogonInfo de la
instancia de Table.
myTable.ApplyLogOnInfo(myTableLogonInfo)
table.ApplyLogOnInfo(tableLogonInfo);
Resultados
El procedimiento de este paso ha creado un método para establecer la conexión de la base de datos. Sin
embargo, debe modificar el método ConfigureCrystalReports() para direccionar este método, con el fin de
que el informe sepa que tiene información sobre conexión de base de datos.
La modificación del método ConfigureCrystalReports() requiere dos acciones:
●
Configurar la instancia de ConnectionInfo.
●
Llamar al método SetDBLogonForReport().
374
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.2.3.3.2
Para modificar el método
ConfigureCrystalReports() para direccionar el código de
conexión con la base de datos
Procedimiento
1.
En el método ConfigureCrystalReports(), agregue un par de saltos de línea al código encima de la línea
que enlaza el informe al control CrystalReportViewer.
2.
En los saltos de línea, declare y cree una instancia de la clase ConnectionInfo.
Nota
Para que la clase ConnectionInfo sea accesible, incluya un enunciado "Imports" [Visual Basic] o
"using" [C#] en la parte superior de la clase de código subyacente del espacio de nombres
CrystalDecisions.Shared. (Esta declaración se ha agregado en Configuración de proyectos [página 14].)
Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
ConnectionInfo connectionInfo = new ConnectionInfo();
3.
Establezca las propiedades DatabaseName y IntegratedSecurity de la instancia de ConnectionInfo.
myConnectionInfo.DatabaseName = "Northwind"
myConnectionInfo.IntegratedSecurity = True
connectionInfo.DatabaseName = "Northwind";
connectionInfo.IntegratedSecurity = true;
4.
Especifique una llamada al método SetDBLogonForReport() y pase la instancia de ConnectionInfo y el
informe NorthwindCustomers.
SetDBLogonForReport(myConnectionInfo, northwindCustomersReport)
SetDBLogonForReport(connectionInfo, northwindCustomersReport);
Resultados
A continuación aparece el código original que enlaza el informe al control CrystalReportViewer.
Ahora estará listo para crear y ejecutar el proyecto. El informe se debe cargar correctamente, ya que ha agregado
código para conectar con la base de datos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
375
1.5.2.3.3.3
Para probar la carga del informe
NorthwindCustomers
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
El informe NorthwindCustomers se mostrará correctamente.
4.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
Resultados
En la siguiente sección, aprenderá a cambiar la ubicación de la base de datos en tiempo de ejecución.
1.5.2.3.4
Agregar la posibilidad de cambiar la ubicación de la
base de datos en tiempo de ejecución
En esta sección, aprenderá a cambiar la ubicación de la base de datos en tiempo de ejecución. Sólo requiere una
pequeña modificación de la instancia de ConnectionInfo.
1.5.2.3.4.1
Para cambiar la ubicación de la base de datos en
tiempo de ejecución
Procedimiento
1.
En el método ConfigureCrystalReports(), agregue un par de saltos de línea al código detrás de la línea
que declara y crea una instancia de la clase ConnectionInfo.
2.
En los saltos de línea, establezca la propiedad ServerName de la instancia de ConnectionInfo.
Nota
En el código que escriba, reemplace el nombre del servidor de ejemplo DevDatabase (que aparece más
abajo) por el nombre de su servidor.
myConnectionInfo.ServerName = "DevDatabase"
376
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
connectionInfo.ServerName = "DevDatabase";
Resultados
Ahora estará listo para crear y ejecutar el proyecto. El informe se debe redirigir al servidor de base de datos
alternativo en tiempo de ejecución.
1.5.2.3.4.2
Para probar si el informe se puede restablecer a
un servidor de base de datos alternativo en tiempo de
ejecución
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
El informe NorthwindCustomers se mostrará correctamente.
4.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.2.3.5
Configuración mediante el método SetConnection
Contexto
En esta sección aprenderá cómo aplicar tres cambios (al nombre de servidor, de base de datos y de la
configuración de la seguridad integrada) mediante el método SetConnection(). Sólo requiere una pequeña
modificación de la instancia de ConnectionInfo.
Procedimiento
1.
En el método ConfigureCrystalReports(), después de la línea que declara y crea una instancia de la
clase ConnectionInfo, elimine las líneas de código que asignan las propiedades ServerName,
DatabaseName e IntegratedSecurity.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
377
2.
Escriba una nueva línea de código en la que se llame al método SetConnection() de la instancia de
ConnectionInfo y pase a dicho método el nombre del servidor, el nombre de la base de datos y la
configuración de seguridad integrada.
myConnectionInfo.SetConnection("DevDatabase", "Northwind", True)
connectionInfo.SetConnection("DevDatabase", "Northwind", true);
Resultados
Ahora estará listo para crear y ejecutar el proyecto.
1.5.2.4
Tutorial: Conectar con una base de datos segura de
SQL Server con un subinforme
En este tutorial se planteará una complicación adicional a la conexión con una base de datos de SQL Server
segura: ¿qué sucede si el informe que requiere una conexión con base de datos de SQL Server segura contiene un
subinforme?
Introducción
En este tutorial, aprenderá a cumplir los requisitos de conexión del subinforme.
Debe efectuar dos modificaciones en el proyecto creado en el tutorial anterior:
●
Agregará un subinforme al informe original.
Este subinforme direcciona la tabla Pedidos de la base de datos Northwind. La tabla Pedidos está relacionada
con la tabla Clientes utilizada por una clave externa CustomerID en el tutorial anterior.
●
Va a agregar un nuevo método.
El método recupera los subinformes del informe principal y, a continuación, pasa cada subinforme al método
auxiliar SetDBLogonForReport().
También puede realizar este tutorial con clases del modelo de objetos CrystalReportViewer, aunque se prefiere el
modelo de objetos ReportDocument.
Para seguir los pasos de este tutorial con el modelo de objetos CrystalReportViewer, vea Tutorial: Conectar con
una base de datos segura de SQL Server utilizando autenticación de SQL [página 241].
378
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Código de ejemplo
Este tutorial incluye código de ejemplo de C# y Visual Basic que muestra la versión finalizada del proyecto. Siga
las instrucciones de este tutorial para crear un nuevo proyecto o para abrir el proyecto de código de ejemplo y
trabajar con una versión finalizada.
El código de ejemplo se almacena en carpetas que están clasificadas por idioma y tipo de proyecto. Los nombres
de las carpetas de cada versión del código de ejemplo son los siguientes:
●
Sitio Web en C#: CS_Web_RDObjMod_DBLogonSubrpt
●
Proyecto para Windows en C#: CS_Win_RDObjMod_DBLogonSubrpt
●
Sitio Web en Visual Basic: VB_Web_RDObjMod_DBLogonSubrpt
●
Proyecto para Windows en Visual Basic: VB_Win_RDObjMod_DBLogonSubrpt
Información relacionada
Directorio de informes de muestra [página 14]
1.5.2.4.1
Agregar un subinforme al informe original
Va a empezar por agregar un subinforme al informe original.
1.5.2.4.1.1
Para agregar un subinforme
Procedimiento
1.
Abra el proyecto creado en el tutorial anterior, Tutorial: Conectar con una base de datos segura de SQL Server
utilizando seguridad integrada [página 366].
2.
En el Explorador de soluciones, haga doble clic en el informe NorthwindCustomers para abrirlo.
3.
Haga clic con el botón secundario en la barra gris Detalles y seleccione Insertar sección abajo.
4.
Haga clic con el botón secundario en la nueva sección Detalles b que ha creado, seleccione Insertar y, a
continuación, haga clic en Subinforme.
Aparece un cuadrado gris alrededor del cursor del mouse.
5.
Arrastre el rectángulo gris en la nueva sección Detalles b y, a continuación, haga clic para soltarlo.
6.
En el cuadro de diálogo Insertar subinforme, en la ficha Subinforme, seleccione Crear un subinforme con el
Asistente de informes.
Nota
El cuadro de diálogo Insertar un subinforme incluye otras opciones que permiten elegir un informe
existente y subinformes a petición. Para obtener más información sobre estas funciones, vea Ficha
Subinforme (cuadro de diálogo Insertar subinforme) [página 928].
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
379
7.
En el campo Nombre del informe nuevo, escriba "PedidosClientes".
8.
Haga clic en Asistente de informes....
9.
En el cuadro de diálogo Asistente para la creación de informes estándar, en el panel Orígenes de datos
disponibles, expanda la carpeta Crear nueva conexión.
10. Expanda la carpeta OLE DB (ADO).
La carpeta contiene el servidor de base de datos, configurado para el informe al crearlo.
Nota
Si no se muestra el servidor, siga las instrucciones del tutorial anterior para conectarse con la base de
datos de SQL Server.
11. Expanda los nodos Northwind, dbo y Tablas.
12. Seleccione la tabla Pedidos y haga clic en el símbolo > para moverla al panel Seleccionar tablas y, a
continuación, haga clic en Siguiente.
13. En el panel Campos disponibles, seleccione ID del pedido, Fecha del pedido, Fecha de envío y Nombre de envío.
14. Haga clic en el símbolo > para mover estos campos al panel Campos a mostrar y, a continuación, haga clic en
Finalizar.
15. En el cuadro de diálogo Insertar un subinforme, seleccione la ficha Vínculo.
16. En el panel Campo(s) del informe contenedor para vincular, en la lista Campos disponibles, expanda la tabla
Clientes, seleccione ID del cliente y, a continuación, haga clic en el símbolo >.
17. En el panel Vínculo de campo Clientes.ID del cliente que aparece, deje las selecciones predeterminadas
inalteradas.
Estas selecciones de parámetros y de datos generan automáticamente entre el informe principal y el
subinforme.
18. Haga clic en Aceptar.
El nuevo subinforme, PedidosClientes, se muestra en la sección Detalles b del informe principal.
Nota
Al agregar un subinforme a la sección Detalles, el subinforme se muestra por cada fila, lo que agrega un
costo de rendimiento al informe. Si no necesita información de subinforme a ese nivel de granularidad,
coloque el subinforme en una sección Grupo en vez de hacerlo en una sección Detalles.
Resultados
Ahora está listo para verificar la configuración del subinforme.
380
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.2.4.1.2
Para verificar la configuración del subinforme
Procedimiento
1.
En la sección Detalles, haga doble clic en el subinforme CustomerOrders para verlo.
En la parte inferior de la vista del diseñador, aparecen botones de desplazamiento para el informe principal y
el subinforme PedidosClientes.
2.
Si el Explorador de campos no está visible, en la barra de herramientas de Crystal Reports, haga clic en
Cambiar la vista del campo.
Nota
Otro modo de ver el Explorador de campos es ir al menú Crystal Reports y hacer clic en Explorador de
campos.
3.
En el Explorador de campos, expanda Campos de parámetro.
4.
Verifique que el campo de parámetro Pm-Clientes.ID del cliente se ha generado automáticamente al vincular
el subinforme.
5.
En la barra de herramientas, haga clic en Asistente de selección.
6.
En el cuadro de diálogo Asistente de selección, verifique que está establecido el criterio Orders.CustomerID es
igual a {?Pm-Customers.CustomerID} y, a continuación, haga clic en Aceptar.
7.
En el menú Archivo, seleccione Guardar todo.
Resultados
Ha agregado correctamente un subinforme CustomerOrders al informe NorthwindCustomers. En la próxima
sección, va a agregar código para establecer la información sobre conexión de la base de datos segura de SQL
Server para todos los subinformes encontrados en el informe principal.
1.5.2.4.2
Agregar el código de conexión del subinforme
Ahora ya está preparado para agregar el código de conexión para el subinforme a la clase de código subyacente.
Para empezar, cree un método auxiliar privado denominado SetDBLogonForSubreports().
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
381
1.5.2.4.2.1
Para crear y codificar el método
SetDBLogonForSubreports()
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte inferior de la clase, cree un nuevo método privado denominado SetDBLogonForSubreports()
con dos parámetros, ConnectionInfo y ReportDocument.
Private Sub SetDBLogonForSubreports(ByVal myConnectionInfo As ConnectionInfo,
ByVal myReportDocument As ReportDocument)
End Sub
private void SetDBLogonForSubreports(ConnectionInfo connectionInfo,
ReportDocument reportDocument)
{
}
4.
En este método, recupere la instancia de Sections de la propiedad Sections de la propiedad
ReportDefinition del parámetro ReportDocument.
Nota
Sections es una clase indizada que contiene instancias de la clase Section.
Dim mySections As Sections = myReportDocument.ReportDefinition.Sections
Sections sections = reportDocument.ReportDefinition.Sections;
5.
Cree un bucle foreach que recorra todas las instancias de Section de la instancia de clase indizada
Sections.
For Each mySection As Section In mySections
Next
foreach(Section section in sections)
{
}
6.
En el bucle foreach, recupere la instancia de ReportObjects a partir de la propiedad ReportObjects de la
instancia de Section.
Dim myReportObjects As ReportObjects = mySection.ReportObjects
382
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
ReportObjects reportObjects = section.ReportObjects;
7.
En el bucle foreach, cree un nuevo bucle foreach anidado que recorra cada instancia de ReportObject de la
instancia de clase indizada ReportObjects.
For Each myReportObject As ReportObject In myReportObjects
Next
foreach(ReportObject reportObject in reportObjects)
{
}
8.
En el bucle foreach anidado, cree un bloque condicional que pruebe si la propiedad Kind de la instancia de
ReportObject es igual a la selección SubreportObject de la enumeración ReportObjectKind.
If myReportObject.Kind = ReportObjectKind.SubreportObject Then
End If
if(reportObject.Kind == ReportObjectKind.SubreportObject)
{
}
9.
En el bloque condicional, proyecte la instancia de ReportObject en una instancia de SubreportObject.
Dim mySubreportObject As SubreportObject = CType(myReportObject, SubreportObject)
SubreportObject subreportObject = (SubreportObject)reportObject;
10. Aún en el bloque condicional, declare una nueva instancia de ReportDocument como variable
subReportDocument y llénela llamando al método OpenSubreport() de la instancia de
SubreportObject.
Dim subReportDocument As ReportDocument =
mySubreportObject.OpenSubreport(mySubreportObject.SubreportName)
ReportDocument subReportDocument =
subreportObject.OpenSubreport(subreportObject.SubreportName);
11. Finalmente, en el bloque condicional, llame al método SetDBLogonForReport() original y pásele el
parámetro ConnectionInfo y la nueva variable subReportDocument.
SetDBLogonForReport(myConnectionInfo, subReportDocument)
SetDBLogonForReport(connectionInfo, subReportDocument);
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
383
1.5.2.4.2.2
Para modificar el método
ConfigureCrystalReports() con el fin de direccionar el código
de conexión con la base de datos para los subinformes
Contexto
Este procedimiento de pasos ha creado un método para recuperar todos los subinformes posibles como
instancias de ReportDocument. Cada instancia de ReportDocument del subinforme se pasa, a continuación, al
método original para establecer la conexión a la base de datos segura de SQL Server.
Sin embargo, ahora debe modificar el método ConfigureCrystalReports() para direccionarlo, con el fin de
que se procese la información sobre conexión de base de datos de los subinformes.
Procedimiento
1.
En el método ConfigureCrystalReports(), agregue un par de saltos de línea al código encima de la línea
que enlaza el informe al control CrystalReportViewer.
2.
En los saltos de línea, especifique una llamada al método SetDBLogonForSubreports() y pásele la
instancia de ConnectionInfo y el informe NorthwindCustomers.
SetDBLogonForSubreports(myConnectionInfo, northwindCustomersReport)
SetDBLogonForSubreports(connectionInfo, northwindCustomersReport);
1.5.2.4.2.3
Para probar la carga del informe
NorthwindCustomers
Contexto
A continuación aparece el código original que enlaza el informe al control CrystalReportViewer.
Ahora estará listo para crear y ejecutar el proyecto. Se espera que el informe se cargue correctamente, incluido
su subinforme, ya que ahora ya existe código escrito para conectar con la base de datos en cualquier subinforme.
Procedimiento
1.
384
En el menú Generar, seleccione Generar solución.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
El informe NorthwindCustomers, incluido su nuevo subinforme CustomerOrders, se muestra correctamente.
4.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.2.5
Tutorial: Leer y configurar parámetros discretos
En este tutorial, aprenderá a crear un informe cuyos datos se puedan filtrar basándose en un parámetro discreto.
Introducción
Un parámetro discreto es un único valor, a diferencia de un parámetro de rango, que hace referencia a un rango
de valores. A los elementos de texto (como ciudades) se tiene acceso normalmente mediante parámetros
discretos. A los elementos numéricos(como sueldos de empleados) se suele acceder mediante parámetros de
rango.
En este tutorial establecerá un valor de un parámetro discreto para ver un informe de clientes basado en un solo
campo. El informe muestra únicamente los clientes que viven en las ciudades seleccionadas en una lista de
ciudades. La lista de ciudades proviene de los valores predeterminados del parámetro de ciudad. Dichos valores
predeterminados del parámetro de ciudad se encapsulan dentro del informe.
Para empezar, va a crear un informe de clientes con un parámetro de ciudad. Los datos del informe proceden de
la base de datos de ejemplo incluida en SAP Crystal Reports, versión para programadores de Microsoft Visual
Studio. Al crear una instancia del informe en el código, generará un ArrayList que contiene nombres de ciudades
(Paris, Tokyo) y pasará dicha instancia de ArrayList a un método auxiliar que establezca estos nombres como
valores actuales del parámetro Ciudad. A continuación, enlazará el informe al control CrystalReportViewer y verá
el informe que mostrará únicamente los clientes que vivan en París y Tokio.
En la siguiente parte del tutorial, realizará las siguientes acciones:
●
Crear un método que obtenga todos los valores predeterminados y los devuelva en un ArrayList.
●
Agregar un control ListBox al formulario y rellenarlo a partir de ArrayList.
●
Agregar un control Button para volver a mostrar el informe basado en las selecciones de ListBox.
En la parte final del tutorial, codificará el evento de clic de botón para obtener los elementos seleccionados en el
control ListBox y establecerlos para que sean los valores actuales del parámetro de ciudad. El informe se volverá
a mostrar incluyendo únicamente los clientes que vivan en las ciudades seleccionadas en el control ListBox.
Este tutorial también se puede realizar con clases del modelo de objetos CrystalReportViewer, aunque se prefiere
el modelo de objetos ReportDocument.
Para seguir los pasos de este tutorial con el modelo de objetos CrystalReportViewer, vea Tutorial: Conectar con
una base de datos segura de SQL Server utilizando autenticación de SQL [página 241].
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
385
Código de ejemplo
Este tutorial incluye código de ejemplo de C# y Visual Basic que muestra la versión finalizada del proyecto. Siga
las instrucciones de este tutorial para crear un nuevo proyecto o para abrir el proyecto de código de ejemplo y
trabajar con una versión finalizada.
El código de ejemplo se almacena en carpetas que están clasificadas por idioma y tipo de proyecto. Los nombres
de las carpetas de cada versión del código de ejemplo son los siguientes:
●
Sitio Web en C#: CS_Web_RDObjMod_Parameters
●
Proyecto para Windows en C#: CS_Win_RDObjMod_Parameters
●
Sitio Web en Visual Basic: VB_Web_RDObjMod_Parameters
●
Proyecto para Windows en Visual Basic: VB_Win_RDObjMod_Parameters
Base de datos Xtreme
Este tutorial utiliza una base de datos de muestra llamada Xtreme. El archivo de base de datos xtreme.mdb se
incluye en el paquete de código de muestra del SDK de SAP Crystal Reports .NET. Para usar la base de datos
Xtreme, deberá crear manualmente una conexión ODBC a ella.
Información relacionada
Elegir el modelo de objetos correcto para el proyecto [página 31]
Directorio de informes de muestra [página 14]
1.5.2.5.1
Crear un informe con parámetros
Para comenzar, cree un informe que obtenga su información de la base de datos Xtreme.
1.5.2.5.1.1
Para crear un informe con parámetros
Procedimiento
1.
En el Explorador de soluciones, haga clic con el botón secundario en el nombre de proyecto en negrita, elija
Agregar y, a continuación, haga clic en Agregar nuevo elemento.
2.
En el cuadro de diálogo Agregar nuevo elemento, en la vista Plantillas, seleccione la plantilla denominada
Crystal Report.
3.
En el campo Nombre, escriba el nombre CustomersByCity.rpt y haga clic en Agregar.
386
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
4.
En el panel Crear un nuevo documento de Crystal Reports del cuadro de diálogo Galería de Crystal Reports,
seleccione Usar asistente de informes.
5.
En el panel Elegir un Asistente, seleccione Estándar y, a continuación, haga clic en Aceptar.
6.
En el panel Orígenes de datos disponibles de la ventana Asistente para la creación de informes estándar,
expanda la carpeta Crear nueva conexión.
Nota
En Visual Studio .NET 2003, donde SAP Crystal Reports no se ha actualizado a la versión completa, no
existe la carpeta Crear nueva conexión; el contenido se mostrará en el nivel superior.
7.
En la subcarpeta que se abre, expanda la carpeta ODBC (RDO).
8.
En la ventana ODBC (RDO), seleccione la entrada ODBC DSN correcta para la base de datos Xtreme y haga
clic en Finalizar.
Se expandirá la carpeta ODBC (RDO) y mostrará la base de datos Xtreme.
9.
Expanda el nodo Tablas y seleccione la tabla Cliente.
10. Haga doble clic en la tabla Cliente para moverla al panel Tablas seleccionadas y, a continuación, haga clic en
Siguiente.
11. Expanda la tabla Cliente, mantenga presionada la tecla Ctrl y haga clic en Nombre del cliente, Título del
contacto, Dirección1, Apellido del cliente y Ciudad.
12. Haga clic en el símbolo > para mover estos campos al panel Campos a mostrar y, a continuación, haga clic en
el botón Siguiente.
13. En el panel Campos disponibles, en Campos del informe, seleccione Cliente.Ciudad, haga clic en el símbolo >
para mover el campo al panel Agrupar por y, a continuación, haga clic en el botón Finalizar.
Se creará el informe CustomersByCity y se cargará en la ventana principal de Visual Studio.
Resultados
Ahora ya podrá agregar un parámetro denominado Ciudad y ocuparlo con valores predeterminados.
1.5.2.5.1.2
Para agregar un parámetro Ciudad
Contexto
El Explorador de campos debe estar visible, porque proporciona acceso a las distintas funciones del informe,
incluidos los parámetros.
Procedimiento
1.
Si el Explorador de campos no está visible, en la barra de herramientas de Crystal Reports, haga clic en
Cambiar la vista del campo.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
387
Nota
Otro modo de ver el Explorador de campos es ir al menú Crystal Reports y hacer clic en Explorador de
campos.
2.
En el Explorador de campos, haga clic con el botón secundario en Campos de parámetro y seleccione Nuevo...
3.
En el cuadro de diálogo Crear campo de parámetro:
a) Establezca el Nombre como Ciudad.
b) Defina Tipo como Cadena. Establezca Texto de solicitud en Seleccione una o varias ciudades.
c) Defina Campo de valor como Ciudad.
d) Haga clic en Acciones y seleccione Anexar todos los valores de base de datos. De esta forma se agregará
la lista de ciudades completa al panel intermedio.
e) En el panel Opciones de valor, establezca Texto de petición en Seleccione una o varias ciudades.
f)
En el mismo panel, defina Permitir valores múltiples como Verdadero.
g) Establezca Permitir valores discretos como Verdadero.
4.
Haga clic en Aceptar para cerrar el cuadro de diálogo Crear campo de parámetro.
Resultados
Acaba de establecer los valores predeterminados para que contengan una amplia lista de ciudades.
Posteriormente, en este tutorial, va tener acceso a esta misma lista de valores predeterminados mediante
programación, a través de la propiedad DefaultValues de la clase ParameterFieldDefinition.
Ahora va a utilizar el Asistente de selección para establecer una fórmula que conecte la columna de base de datos
Ciudad con el campo de parámetro Ciudad creado recientemente.
1.5.2.5.1.3
Para conectar el parámetro Ciudad a la columna
de base de datos Ciudad
Procedimiento
1.
En la barra de herramientas de Crystal Reports, haga clic en Asistente de selección.
2.
En el cuadro de diálogo Elegir campo, en Campos del informe, seleccione Cliente.Ciudad y, a continuación,
haga clic en Aceptar.
3.
En el cuadro de diálogo Asistente de selección, en la ficha Customer.City, establezca la lista desplegable como
es igual a.
4.
En la nueva lista desplegable que aparece a la derecha, seleccione la primera opción de la lista, {?City} y, a
continuación, haga clic en Aceptar.
Nota
Esta selección, {?Ciudad}, es el parámetro Ciudad creado anteriormente.
388
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
5.
En el menú Archivo, seleccione Guardar todo.
Resultados
Ahora podrá enlazar el informe al control CrystalReportViewer y establecer el parámetro de ciudad con dos
valores iniciales, París y Tokio.
1.5.2.5.2
Enlazar el informe
Cuando siguió las instrucciones de la sección Configuración de proyectos [página 14] para preparase para este
tutorial, colocó un control CrystalReportViewer en el formulario Web Forms o Windows Forms. En los pasos
anteriores, agregó un informe CustomersByCity al proyecto.
En esta sección, va a crear una copia del informe CustomersByCity y a enlazarla con el control
CrystalReportViewer. A continuación, probará si el informe se muestra correctamente cuando no se han
establecido valores actuales para su campo de parámetro.
Puede crear una copia del informe y enlazarla de dos formas:
●
Como informe incrustado.
●
Como informe no incrustado.
Elija uno de los procedimientos con pasos siguientes (pero no ambos).
●
Si utiliza informes incrustados, realice el siguiente procedimiento de pasos para crear una instancia del
informe como un informe incrustado.
●
Si utiliza informes no incrustados, siga el segundo procedimiento de pasos para crear una instancia del
informe como un informe no incrustado.
1.5.2.5.2.1
Para crear una copia del informe
CustomersByCity como informe incrustado y enlazarla al
control CrystalReportViewer
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código para ver la clase de código subyacente de Web Forms o Windows Forms.
3.
Agregue una nueva declaración de nivel de clase para la clase contenedora del informe CustomersByCity, con
el nombre de variable customersByCityReport. Establezca su modificador de acceso como private.
Private customersByCityReport As CustomersByCity
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
389
private CustomersByCity customersByCityReport;
4.
En el método ConfigureCrystalReports(), cree una instancia de la clase contenedora de informes.
Nota
Ha creado el método ConfigureCrystalReports() en Configuración de proyectos [página 14].
customersByCityReport = New CustomersByCity()
customersByCityReport = new CustomersByCity();
5.
En la línea siguiente, debajo de la creación de instancias del informe, enlace la propiedad ReportSource del
control CrystalReportViewer a la clase de informe de la que ha creado una instancia (nombre de variable:
customersByCityReport).
myCrystalReportViewer.ReportSource = customersByCityReport
crystalReportViewer.ReportSource = customersByCityReport;
Nota
Se tiene acceso a la instancia del control CrystalReportViewer en el código porque agregó el control al
formulario Web Forms o Windows Forms. Si Intellisense no reconoce la instancia del control
CrystalReportViewer, verifique que se ha agregado este control como declaración de nivel de clase a esta
clase de código subyacente.
1.5.2.5.2.2
Para crear una copia del informe
CustomersByCity como informe no incrustado y enlazarla al
control CrystalReportViewer
Contexto
Ahora estará listo para crear y ejecutar el proyecto. Está previsto que falle la carga del informe, porque aún no se
ha escrito el código para establecer un valor para el campo de parámetro Ciudad.
Procedimiento
1.
390
Abra el formulario Web Forms o Windows Forms.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
2.
En el menú Ver, haga clic en Código.
3.
Agregue una nueva declaración de nivel de clase para la clase contenedora del informe ReportDocument, con
el nombre de variable customersByCityReport. Establezca su modificador de acceso como private.
Private customersByCityReport As ReportDocument
private ReportDocument customersByCityReport;
Nota
La clase ReportDocument es miembro del espacio de nombres CrystalDecisions.CrystalReports.Engine.
Agregó una declaración "Imports" [Visual Basic] o "using" [C#] para este espacio de nombres
en Configuración de proyectos [página 14]. Cuando cree la instancia de ReportDocument y cargue un
informe en el espacio de nombres, tendrá acceso al informe a través del SDK, sin incrustar el informe.
4.
En el método ConfigureCrystalReports() (agregado durante uno de los procedimientos de
Configuración de proyectos [página 14]), cree una instancia de la clase ReportDocument.
customersByCityReport = New ReportDocument()
customersByCityReport = new ReportDocument();
5.
Declare una variable de cadena, llámela reportPath y asígnele una ruta en tiempo de ejecución al informe
local. Esta ruta se determina de forma diferente para los sitios Web y los proyectos para Windows:
○
Para un sitio Web, pase el nombre del archivo de informe local como un parámetro de cadena al método
Server.MapPath(). Esto asigna el informe local a la ruta del directorio de archivos de la unidad de disco
duro en tiempo de ejecución.
Dim reportPath As String = Server.MapPath("CustomersByCity.rpt")
string reportPath = Server.MapPath("CustomersByCity.rpt");
○
Para un proyecto Windows, concatene la propiedad Application.StartupPath con una barra diagonal
inversa y el nombre del archivo de informe local. Esto asigna el informe al mismo directorio del archivo
ejecutable de Windows.
Nota
En la fase de compilación se copiará el informe al directorio que contiene el archivo ejecutable.
Dim reportPath As String = Application.StartupPath & "\" &
"CustomersByCity.rpt"
string reportPath = Application.StartupPath + "\\" + "CustomersByCity.rpt";
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
391
6.
Llame al método Load() de la instancia de ReportDocument y pásele la variable de cadena reportPath.
customersByCityReport.Load(reportPath)
customersByCityReport.Load(reportPath);
7.
En la línea siguiente, debajo la carga del informe, enlace la propiedad ReportSource de CrystalReportViewer a
la instancia de ReportDocument.
myCrystalReportViewer.ReportSource = customersByCityReport
crystalReportViewer.ReportSource = customersByCityReport;
Resultados
Tanto si ha elegido crear una instancia de clase de un informe incrustado como de un informe no incrustado
mediante la clase ReportDocument, el nombre de la variable utilizada es el mismo: customersByCityReport. De
esta forma, puede utilizar un conjunto de códigos común en los procedimientos que aparecen a continuación.
Ahora estará listo para crear y ejecutar el proyecto. Está previsto que falle la carga del informe, porque aún no se
ha escrito el código para establecer un valor para el campo de parámetro Ciudad. Agregará un valor para el
campo de parámetro Ciudad más adelante en este tutorial.
1.5.2.5.2.3
Para probar la carga del informe
CustomersByCity
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
Si usa un informe no incrustado en un proyecto Windows, busque el archivo ejecutable de Windows
compilado en el subdirectorio \bin\ [Visual Basic] o \bin\debug\ [C#] y, a continuación, copie el
informe en dicho subdirectorio.
Nota
Para que el archivo ejecutable de Windows cargue el informe no incrustado en tiempo de ejecución, el
informe deberá estar almacenado en el mismo directorio que el archivo ejecutable de Windows.
4.
En el menú Depurar, haga clic en Iniciar.
No se muestra el informe CustomersByCity. Se muestra después de agregar un valor para el parámetro
Ciudad más adelante en este tutorial.
392
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Nota
Los resultados pueden variar según la versión de SAP Crystal Reports que use. En versiones más
recientes, verá un formulario que le pedirá que indique valores de parámetro para dicho informe. En
versiones anteriores, se produce una excepción "Falta el valor actual del campo de parámetro". En
cualquiera caso, debe agregar código adicional para que la aplicación sea completamente funcional.
5.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.2.5.3
Configurar parámetros manualmente en el código
Ahora ya puede establecer dos valores ("París" y "Tokio") en el campo de parámetro Ciudad del informe
CustomersByCity.
Esto implica codificación, que puede separar en los siguientes procesos:
●
Necesita una constante PARAMETER_FIELD_NAME que incluya el nombre de campo de parámetro "Ciudad",
que se usa varias veces en el código.
●
El código para agregar los valores actuales al parámetro se utiliza en dos partes distintas de este tutorial; por
lo tanto, puede crear este código como método auxiliar independiente.
●
En el método ConfigureCrystalReports(), va a agregar los parámetros "Paris" y "Tokyo" a una instancia
de ArrayList y va a pasar el informe y la instancia de ArrayList al método auxiliar para que se procesen.
En la siguiente sección, aprenderá como obtener los valores predeterminados del campo de parámetro y
establecerá dichos valores en un control ListBox. Éstos se utilizan al final del tutorial para seleccionar nuevas
ciudades dinámicamente y filtrar el informe basándose en las ciudades seleccionadas recientemente.
Continúe con Crear un control ListBox que muestre los parámetros predeterminados [página 398].
1.5.2.5.3.1
Para crear una constante
PARAMETER_FIELD_NAME
Procedimiento
1.
Regrese a la clase de código subyacente de este Web Forms o Windows Forms.
2.
En el nivel de clase, cree una nueva constante de cadena, PARAMETER_FIELD_NAME, y establezca su valor
como "Ciudad".
Private Const PARAMETER_FIELD_NAME As String = "City"
private const string PARAMETER_FIELD_NAME = "City";
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
393
1.5.2.5.3.2
Para crear un método auxiliar que agregue los
valores actuales al parámetro en el informe
Contexto
Ahora ya puede crear el método auxiliar que agregue los valores actuales al parámetro en el informe.
Procedimiento
1.
Regrese a la clase de código subyacente de este Web Forms o Windows Forms.
2.
Sobre la firma de clase, agregue una declaración "Imports" [Visual Basic] o "using" [C#] en la parte
superior de la clase para el espacio de nombres System.Collections (si todavía no se ha declarado este
espacio de nombres).
Imports System.Collections
using System.Collections;
Nota
Esta declaración se necesita para tener acceso a la clase ArrayList.
3.
En la parte inferior de la clase, cree un nuevo método privado denominado
SetCurrentValuesForParameterField() con dos variables en la firma de método: ReportDocument y
ArrayList.
Nota
Más adelante en este tutorial, si ha utilizado un informe incrustado, va a pasar la clase de informe
incrustado al parámetro del método ReportDocument. ¿Cómo es esto posible? Todas las clases de
informes incrustados de SAP Crystal Reports heredan de la clase base ReportDocument.
Private Sub SetCurrentValuesForParameterField(ByVal myReportDocument As
ReportDocument, ByVal myArrayList As ArrayList)
End Sub
private void SetCurrentValuesForParameterField(ReportDocument reportDocument,
ArrayList arrayList)
{
}
4.
394
En este método, declare y cree una instancia de la clase indizada ParameterValues como la variable
currentParameterValues.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Nota
Para que se pueda tener acceso a la clase ParameterValues, debe haber incluido una declaración
"Imports" [Visual Basic] o "using" [C#] en la parte superior de la clase de código subyacente del
espacio de nombres CrystalDecisions.Shared. (Esta declaración se ha agregado en Configuración de
proyectos [página 14].)
Dim currentParameterValues As ParameterValues = New ParameterValues()
ParameterValues currentParameterValues = new ParameterValues();
5.
Cree un bucle foreach para obtener todos los valores enviados (como el tipo Objeto) de la instancia de
ArrayList.
Nota
En este método, recupera valores de ArrayList. Posteriormente, va a escribir código que agregue valores a
ArrayList.
For Each submittedValue As Object In myArrayList
Next
foreach(object submittedValue in arrayList)
{
}
6.
En el bucle foreach, declare y cree una instancia de la clase ParameterDiscreteValue.
Dim myParameterDiscreteValue As ParameterDiscreteValue = New
ParameterDiscreteValue()
ParameterDiscreteValue parameterDiscreteValue = new ParameterDiscreteValue();
7.
En el bucle foreach, convierta submittedValue en una cadena y pásela a la propiedad Value de la instancia de
ParameterDiscreteValue.
myParameterDiscreteValue.Value = submittedValue.ToString()
parameterDiscreteValue.Value = submittedValue.ToString();
8.
En el bucle foreach, agregue la instancia de ParameterDiscreteValue a la clase indizada
currentParameterValues.
currentParameterValues.Add(myParameterDiscreteValue)
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
395
currentParameterValues.Add(parameterDiscreteValue);
Esto completará el código en el bucle foreach. Coloque el código restante (a partir de los pasos siguientes)
después del bucle foreach.
9.
Fuera del bucle foreach, obtenga la clase indizada ParameterFieldDefinitions, que proviene de la propiedad
DataDefinition de la instancia ReportDocument.
Dim myParameterFieldDefinitions As ParameterFieldDefinitions =
myReportDocument.DataDefinition.ParameterFields
ParameterFieldDefinitions parameterFieldDefinitions =
reportDocument.DataDefinition.ParameterFields;
10. Recupere la instancia ParameterFieldDefinition de la clase indizada ParameterFieldDefinitions basada en la
entrada de índice de la constante PARAMETER_FIELD_NAME.
Dim myParameterFieldDefinition As ParameterFieldDefinition =
myParameterFieldDefinitions(PARAMETER_FIELD_NAME)
ParameterFieldDefinition parameterFieldDefinition =
parameterFieldDefinitions[PARAMETER_FIELD_NAME];
11. Pase la instancia currentParameterValues al método ApplyCurrentValues de la instancia de
ParameterFieldDefinition.
myParameterFieldDefinition.ApplyCurrentValues(currentParameterValues)
parameterFieldDefinition.ApplyCurrentValues(currentParameterValues);
1.5.2.5.3.3
Para llamar al método
SetCurrentValuesForParameterField () antes de enlazar el
informe al control CrystalReportViewer
Contexto
En este procedimiento de varios pasos se ha mostrado el modo de crear un método que recupera los valores
enviados desde una instancia de ArrayList y los coloca como valores actuales en una instancia de
ParameterFieldDefinition. Ahora, debe llamar a este método antes de enlazar el informe al control
CrystalReportViewer, para que el informe sepa que tiene configuración de parámetros.
396
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Procedimiento
1.
En el método ConfigureCrystalReports(), agregue un par de saltos de línea al código encima de la línea
que enlaza el informe al control CrystalReportViewer.
Dentro de estos saltos de línea, ahora puede escribir código adicional que modifique el informe antes de
enlazarlo al visor.
2.
En los saltos de línea, declare y cree una instancia de ArrayList.
Dim myArrayList As ArrayList = New ArrayList()
ArrayList arrayList = new ArrayList();
3.
Agregue los nombres de ciudad "París" y "Tokio" como cadenas a la instancia de ArrayList.
myArrayList.Add("Paris")
myArrayList.Add("Tokyo")
arrayList.Add("Paris");
arrayList.Add("Tokyo");
4.
Llame al método SetCurrentValuesForParameterField() y pásele las instancias de
CustomersByCityReport y ArrayList.
SetCurrentValuesForParameterField(customersByCityReport,
myArrayList)
SetCurrentValuesForParameterField(customersByCityReport,
arrayList);
1.5.2.5.3.4
Para probar la carga del informe
CustomersByCity
Contexto
La línea final del código del método es código que enlaza el informe al control CrystalReportViewer.
Ahora estará listo para crear y ejecutar el proyecto. Se espera que el informe se muestre correctamente, porque
ahora existe código escrito para establecer los valores actuales en el campo de parámetro.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
397
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
El informe CustomersByCity aparecerá correctamente, mostrando la lista de los clientes de París y Tokio.
4.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.2.5.4
Crear un control ListBox que muestre los
parámetros predeterminados
El resto del tutorial trata sobre la visualización de una lista completa de valores predeterminados del campo de
parámetro en un control ListBox, y basado en las selecciones que realice en dicho control ListBox, volviendo a
filtrar los contenidos del informe.
En esta sección aprenderá a rellenar el control ListBox con los valores predeterminados del campo de parámetro.
Nota
Recuerde que ya estableció los Valores predeterminados, una amplia lista de ciudades, al crear este informe al
principio del tutorial.
Para hacerlo, deberá agregar y configurar un control ListBox y, a continuación, crear un método auxiliar para
rellenar el control ListBox.
1.5.2.5.4.1
formulario
Para crear y configurar un control ListBox en el
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Diseñador.
3.
Si está desarrollando un sitio Web, realice las siguientes acciones:
○
Haga clic en el control CrystalReportViewer para seleccionarlo.
○
Presione la FLECHA IZQUIERDA del teclado de modo que aparezca un cursor parpadeante y, a
continuación, presione INTRO.
El control CrystalReportViewer bajará una línea.
4.
398
Si está desarrollando un proyecto de Windows, realice las siguientes acciones:
○
Haga clic en el control CrystalReportViewer para seleccionarlo.
○
En la ventana Propiedades, establezca el valor de Dock en "Bottom"
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Nota
En Visual Studio, cuando selecciona la propiedad Acoplar, se abre un marco en lugar de una lista de
opciones. Seleccione la parte del marco que corresponde a "Inferior".
5.
○
Ajuste el tamaño del formulario de Windows y el control CrystalReportViewer de forma que
CrystalReportViewer sea lo bastante grande como para mostrar un informe. Deje espacio encima del
control CrystalReportViewer para un control ListBox.
○
En la ventana Propiedades, establezca Anchor en "Top, Bottom, Left, Right".
○
Ajuste el tamaño del formulario de Windows y el control CrystalReportViewer de forma que
CrystalReportViewer sea lo bastante grande como para mostrar un informe. Deje espacio encima del
control CrystalReportViewer para un control ListBox.
En el Cuadro de herramientas, arrastre un control ListBox sobre el control CrystalReportViewer.
Nota
Si aparece una Tarea inteligente en ListBox (si se utiliza Visual Studio), presione Esc para cerrarla.
6.
Haga clic en el control ListBox para seleccionarlo.
7.
En la ventana Propiedades:
8.
○
Establezca ID o Name en "defaultParameterValuesList".
○
Establezca SelectionMode en "Multiple" (en un proyecto de Windows, "MultiExtended").
En el menú Archivo, seleccione Guardar todo.
Resultados
Ahora podrá crear un método auxiliar que obtenga los valores predeterminados del campo de parámetro.
1.5.2.5.4.2
Para crear un método auxiliar que obtenga los
valores predeterminados del campo de parámetro
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte inferior de la clase, cree un nuevo método privado denominado
GetDefaultValuesFromParameterField() que devuelva una instancia de ArrayList y pase
ReportDocument a la firma del método.
Private Function GetDefaultValuesFromParameterField(ByVal myReportDocument As
ReportDocument) As ArrayList
End Function
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
399
private ArrayList GetDefaultValuesFromParameterField(ReportDocument
reportDocument)
{
}
4.
En el método GetDefaultValuesFromParameterField(), recupere la clase indizada
ParameterFieldDefinitions, que proviene de la propiedad DataDefinition de la instancia de ReportDocument.
Dim myParameterFieldDefinitions As ParameterFieldDefinitions =
myReportDocument.DataDefinition.ParameterFields
ParameterFieldDefinitions parameterFieldDefinitions =
reportDocument.DataDefinition.ParameterFields;
5.
Recupere la instancia de ParameterFieldDefinition de la clase indizada ParameterFieldDefinitions basada en la
entrada de índice de la constante PARAMETER_FIELD_NAME.
Dim myParameterFieldDefinition As ParameterFieldDefinition =
myParameterFieldDefinitions(PARAMETER_FIELD_NAME)
ParameterFieldDefinition parameterFieldDefinition =
parameterFieldDefinitions[PARAMETER_FIELD_NAME];
6.
Obtenga una clase indizada ParameterValues (como la variable defaultParameterValues) a partir de la
propiedad DefaultValues de la instancia de ParameterFieldDefinition.
Dim defaultParameterValues As ParameterValues =
myParameterFieldDefinition.DefaultValues
ParameterValues defaultParameterValues = parameterFieldDefinition.DefaultValues;
7.
Declare y cree una instancia de ArrayList.
Dim myArrayList As ArrayList = New ArrayList()
ArrayList arrayList = new ArrayList();
8.
Cree un bucle foreach que obtenga cada instancia de ParameterValue a partir de defaultParameterValues.
For Each myParameterValue As ParameterValue In defaultParameterValues
Next
foreach(ParameterValue parameterValue in defaultParameterValues)
{
}
400
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
En el bucle foreach, cree ahora un bloque condicional anidado que busque valores de parámetros discretos
(en oposición a parámetros de rango). Existen dos versiones de este bloque condicional porque la API ha
cambiado ligeramente en las distintas versiones de SAP Crystal Reports, versión para programadores de
Microsoft Visual Studio. Compruebe su API (mediante IntelliSense) para ver qué propiedad está disponible en
ParameterValue:
9.
Si la propiedad disponible es IsRange, en el bucle foreach, escriba este código:
If (Not myParameterValue.IsRange) Then
End If
if(!parameterValue.IsRange)
{
}
10. O bien, si la propiedad disponible es (DiscreteOrRangeKind, una enumeración con tres valores: DiscreteValue,
RangeValue, DiscreteAndRangeValue), por cada bucle foreach escriba este código en su lugar:
If (myParameterValue.Kind = DiscreteOrRangeKind.DiscreteValue) Then
End If
if(parameterValue.Kind == DiscreteOrRangeKind.DiscreteValue)
{
}
11. En este bloque condicional anidado, proyecte la instancia de ParameterValue a su clase ampliada,
DiscreteParameterValue.
Dim myParameterDiscreteValue As ParameterDiscreteValue = CType(myParameterValue,
ParameterDiscreteValue)
ParameterDiscreteValue parameterDiscreteValue =
(ParameterDiscreteValue)parameterValue;
12. Además, en el bloque condicional anidado, agregue la propiedad Value de la instancia de
ParameterDiscreteValue (convertida en cadena) a la instancia de ArrayList.
myArrayList.Add(myParameterDiscreteValue.Value.ToString())
arrayList.Add(parameterDiscreteValue.Value.ToString());
13. Fuera del bloque condicional y del bucle foreach, al final del método, devuelva la instancia de ArrayList del
método.
Return myArrayList
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
401
return arrayList;
1.5.2.5.4.3
Para enlazar el ArrayList devuelto del método al
ListBox de un proyecto Web
Contexto
Ha obtenido los valores predeterminados del campo de parámetro y los ha devuelto del método como un
ArrayList. Ahora enlace este ArrayList al control ListBox defaultParameterValuesList.
El código varía ligeramente en función de si se utiliza un proyecto Web o un proyecto de Windows; por lo tanto,
asegúrese de que sólo realiza el procedimiento para Web o para Windows.
Procedimiento
1.
En el método ConfigureCrystalReports(), cree un par de saltos de línea en el código inmediatamente
después de la línea de código que agrega el valor de cadena Tokyo a la instancia de ArrayList.
En los saltos de línea, ahora puede escribir código adicional que establece el origen de datos para el control
ListBox defaultParameterValuesList ListBox cuando la página se carga por primera vez.
2.
En los saltos de línea, cree un bloque condicional Not IsPostBack.
If Not IsPostBack Then
End If
if(!IsPostBack)
{
}
Nota
El bloque condicional Not IsPostBack se usa para encapsular código que sólo se debe ejecutar la
primera vez que se carga la página. Los controles se suelen enlazar a los valores de datos en bloques
condicionales Not IsPostBack para que sus valores de datos (y los eventos de control subsiguientes) no
se restablezcan cuando se vuelva a cargar la página.
3.
En el bloque condicional Not IsPostBack, establezca el valor de la propiedad DataSource del ListBox
defaultParameterValuesList en el método auxiliar GetDefaultValuesFromParameterField() y pase la
instancia del informe CustomersByCity como parámetro de método.
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(customersByCityReport)
402
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(customersByCityReport);
4.
Aún en el bloque condicional Not IsPostBack, llame al método DataBind() del ListBox
defaultParameterValuesList.
defaultParameterValuesList.DataBind()
defaultParameterValuesList.DataBind();
1.5.2.5.4.4
Para enlazar el ArrayList devuelto del método al
ListBox de un proyecto de Windows
Procedimiento
1.
En el método ConfigureCrystalReports(), cree un par de saltos de línea en el código inmediatamente
después de la línea de código que agrega el valor de cadena Tokyo a la instancia de ArrayList.
En los saltos de línea, ahora puede escribir código adicional que establece el origen de datos para el control
ListBox defaultParameterValuesList ListBox cuando la página se carga por primera vez.
2.
En los saltos de línea, establezca el valor de la propiedad DataSource del ListBox defaultParameterValuesList
en el método auxiliar GetDefaultValuesFromParameterField() y pase la instancia del informe
CustomersByCity como parámetro de método.
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(customersByCityReport)
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(customersByCityReport);
1.5.2.5.4.5
Para probar si está relleno el control ListBox
defaultParameterValuesList
Contexto
Ahora estará listo para crear y ejecutar el proyecto para verificar si el ListBox defaultParameterValuesList está
relleno.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
403
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
El control ListBox defaultParameterValuesList mostrará una lista completa de valores predeterminados
(ciudades, en nuestro tutorial).
4.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
Resultados
En la siguiente sección, agregará un botón para volver a mostrar el informe basado en las selecciones del control
ListBox defaultParameterValuesList.
1.5.2.5.5
Configurar parámetros a partir de las selecciones
de ListBox
En esta sección, agregará un botón para volver a mostrar el informe basado en las selecciones del control ListBox
defaultParameterValuesList.
En el método de evento de este botón, llamará al mismo método que se llama al cargar la página por primera vez:
SetCurrentValuesForParameterField(). Pero esta vez, en lugar de pasar valores arbitrarios (Paris y
Tokyo), pase los valores seleccionados en el control ListBox defaultParameterValuesList.
1.5.2.5.5.1
Para crear y configurar un botón que vuelva a
mostrar el informe en el formulario
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Diseñador.
3.
En el Cuadro de herramientas, arrastre un control Button a la derecha del control ListBox.
4.
Haga clic en el control Button para seleccionarlo.
5.
En la ventana Propiedades:
404
○
Establezca el valor de ID (o Name) en "redisplay".
○
Establezca Text como "Volver a mostrar el informe".
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Resultados
Ahora podrá crear un método de evento de clic de botón que busque los elementos seleccionados en el control
ListBox y los pase al método SetCurrentValuesForParameterField().
El código varía ligeramente para un proyecto Web o un proyecto de Windows; por lo tanto, realice sólo el
procedimiento para Web o para Windows.
1.5.2.5.5.2
Para crear el método de evento de clic del botón
que vuelve a mostrar el informe en un proyecto Web
Procedimiento
1.
Haga doble clic en el control Button que vuelve a mostrar el informe.
Pasa a la clase de código subyacente en la que se ha generado automáticamente un método de evento
redisplay_Click().
2.
Sobre la firma de clase, agregue una declaración "Imports" [Visual Basic] o "using" [C#] en la parte
superior de la clase para el espacio de nombres System.Web.UI.WebControls (si todavía no se ha declarado
este espacio de nombres).
Imports System.Web.UI.WebControls
using System.Web.UI.WebControls;
Nota
Esta declaración se necesita para tener acceso a la clase ListItem.
3.
En el método de evento redisplay_Click() que se ha generado de manera automática, cree una nueva
instancia de un ArrayList.
Dim myArrayList As ArrayList = New ArrayList()
ArrayList arrayList = new ArrayList();
4.
Cree un bucle foreach para recuperar cada instancia de ListItem a partir de la propiedad Items de
defaultParameterValuesList.
For Each item As ListItem In defaultParameterValuesList.Items
Next
foreach(ListItem item in defaultParameterValuesList.Items)
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
405
{
}
5.
En el bucle foreach, cree un bloque condicional anidado que agregue la instancia de Item a la instancia de
Arraylist si la propiedad Selected de la instancia de Item actual está establecida como True.
If item.Selected Then
myArrayList.Add(item.Value)
End If
if(item.Selected)
{
arrayList.Add(item.Value);
}
6.
Fuera del bloque condicional y del bucle foreach, llame al método
SetCurrentValuesForParameterField() y pase la instancia del informe CustomersByCity y la
instancia de ArrayList.
SetCurrentValuesForParameterField(customersByCityReport, myArrayList)
SetCurrentValuesForParameterField(customersByCityReport, arrayList);
Ahora que se han aplicado los valores seleccionados del control ListBox como los valores actuales del
campo de parámetro, estará listo para volver a mostrar el informe.
7.
Vuelva a enlazar la instancia del informe CustomersByCity a la propiedad ReportSource del control
CrystalReportViewer.
myCrystalReportViewer.ReportSource = customersByCityReport
crystalReportViewer.ReportSource = customersByCityReport;
1.5.2.5.5.3
Para crear el método de evento de clic del botón
que vuelve a mostrar el informe en un proyecto de Windows
Procedimiento
1.
Haga doble clic en el control Button que vuelve a mostrar el informe.
Pasa a la clase de código subyacente en la que se ha generado automáticamente un método de evento
redisplay_Click().
2.
En el método de evento redisplay_Click() que se ha generado de manera automática, cree una nueva
instancia de un ArrayList.
Dim myArrayList As ArrayList = New ArrayList()
406
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
ArrayList arrayList = new ArrayList();
3.
Cree un bucle foreach para recuperar cada elemento (como String) de la propiedad SelectedItems de
defaultParameterValuesList.
For Each item As String In defaultParameterValuesList.SelectedItems
Next
foreach(string item in defaultParameterValuesList.SelectedItems)
{
}
4.
En el bloque condicional, agregue la instancia de String de elemento a la instancia de ArrayList.
myArrayList.Add(item)
arrayList.Add(item);
5.
Fuera del bloque condicional y del bucle foreach, llame al método
SetCurrentValuesForParameterField() y pase la instancia del informe CustomersByCity y la instancia
de ArrayList.
SetCurrentValuesForParameterField(customersByCityReport, myArrayList)
SetCurrentValuesForParameterField(customersByCityReport, arrayList);
Ahora que se ha aplicado los valores seleccionados del control ListBox como los valores actuales del campo
de parámetro, estará listo para volver a mostrar el informe.
6.
Vuelva a enlazar la instancia del informe CustomersByCity a la propiedad ReportSource del control
CrystalReportViewer.
myCrystalReportViewer.ReportSource = customersByCityReport
crystalReportViewer.ReportSource = customersByCityReport;
1.5.2.5.5.4
Para probar si está relleno el control ListBox
defaultParameterValuesList
Contexto
Ahora estará preparado para generar y ejecutar el proyecto para verificar que el campo de parámetro se ha
restablecido correctamente.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
407
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
4.
En el control ListBox, presione la tecla CTRL mientras hace clic para seleccionar al menos cuatro ciudades
diferentes en la lista.
5.
Haga clic en Volver a mostrar el informe.
La página se volverá a cargar y mostrará los registros de cliente para los clientes que vivan en la lista de
ciudades que ha seleccionado.
6.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
Resultados
Si está trabajando con una aplicación para Windows, ya ha terminado. Si está trabajando con un sitio Web,
continúe con Configurar la persistencia de parámetros [página 408].
1.5.2.5.6
Configurar la persistencia de parámetros
En esta sección configurará la persistencia (en un tutorial basado en Web) de las selecciones de campo de
parámetro que se han realizado en el control ListBox.
Como se ha mostrado en el tutorial Tutorial: Conservar el modelo de objetos ReportDocument con Session [página
337], los cambios efectuados en el modelo de objetos ReportDocument se pierden cuando se vuelve a cargar la
página Web, cada vez que los usuarios hagan clic en los botones de la barra de herramientas de
CrystalReportViewer (como Página siguiente y Zoom).
1.5.2.5.6.1
Para demostrar la falta de persistencia de las
selecciones de parámetro
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
4.
En el control ListBox, presione la tecla Mayús mientras hace clic para seleccionar todas las ciudades de la
lista.
5.
Haga clic en Volver a mostrar el informe.
La página se vuelve a cargar y, a continuación, muestra los registros de cliente de todos los clientes de todas
las ciudades. Es un informe extenso que contiene muchas páginas.
408
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
6.
En la barra de herramientas CrystalReportViewer, haga clic en Página siguiente.
No se conserva la lista de las ciudades seleccionadas. La página 2 del informe no se muestra. En su lugar,
vuelve a aparecer la configuración de parámetros de inicio (París y Tokio).
7.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
Resultados
Debe agregar código de persistencia a la aplicación para que se conserven los cambios efectuados en el modelo
de objetos ReportDocument cuando se vuelvan a cargar las páginas Web.
Para comenzar, va a agregar código de persistencia al método ConfigureCrystalReports() agregando un
bloque al bloque condicional Not IsPostBack. A continuación, va a establecer valores únicos para la instancia
de ArrayList por cada condición del bloque condicional. Al iniciarse la página, va a establecer los valores
predeterminados ("París" y "Tokio") en la instancia de ArrayList. Al volver a cargarse la página, va a recuperar la
instancia de ArrayList que está almacenada en Session.
1.5.2.5.6.2
Para agregar código de persistencia al método
ConfigureCrystalReports()
Procedimiento
1.
En el método ConfigureCrystalReports(), corte y pegue las dos líneas de código que agregan Paris y
Tokyo al ArrayList en la parte inferior del bloque condicional Not IsPostBack.
Cuando haya terminado, el aspecto del bloque condicional debe ser parecido al siguiente:
If Not IsPostBack Then
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(customersByCityReport)
defaultParameterValuesList.DataBind()
myArrayList.Add("Paris")
myArrayList.Add("Tokyo")
End If
if (!IsPostBack)
{
defaultParameterValuesList.DataSource =
GetDefaultValuesFromParameterField(customersByCityReport);
defaultParameterValuesList.DataBind();
arrayList.Add("Paris");
arrayList.Add("Tokyo");
}
2.
Agregue una línea final de código al bloque condicional que asigna la instancia ArrayList a Session.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
409
Nota
Puede agregar el nombre de variable como el identificador de cadena para el Session que agregue.
Session("myArrayList") = myArrayList
Session["arrayList"] = arrayList;
3.
Agregue una condición Else al bloque condicional Not IsPostBack.
4.
En el bloque Else, obtenga la instancia de ArrayList de Session y proyéctela en un objeto ArrayList.
myArrayList = Ctype(Session("myArrayList"), ArrayList)
arrayList = (ArrayList)Session["arrayList"];
Resultados
Cuando haya terminado, el aspecto del bloque condicional debe ser parecido al siguiente:
Estas modificaciones del método ConfigureCrystalReports() garantizan que la instancia actual de ArrayList
siempre está disponible para pasarla al método SetCurrentValuesForParameterField().
En la siguiente sección, realizará dos cambios en el código del evento de clic de botón:
●
Tomar el ArrayList que ha creado y asignarlo a Session.
●
Reemplazar las dos últimas líneas de código (que configuran y muestran el informe) con una llamada al
método ConfigureCrystalReports() para realizar esta función en un conjunto común de código.
1.5.2.5.6.3
Para modificar el código del método de evento de
clic de botón para que funcione con la persistencia de Session
Procedimiento
1.
Elimine las dos últimas líneas de código del método de evento de clic de botón.
La primera línea de código que se eliminará es la llamada al método
SetCurrentValuesForParameterField(). La segunda línea de código que se va a eliminar es el código
que enlaza la instancia de customersByCityReport de la propiedad ReportSource del control
CrystalReportViewer.
En el siguiente paso agregará dos nuevas líneas de código para reemplazar el código eliminado.
2.
410
En el método de evento de clic de botón, inmediatamente fura del bucle foreach, agregue una línea de código
que asigne la instancia de ArrayList a Session.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Nota
Puede agregar el nombre de variable como el identificador de cadena para el Session que agregue.
Session("myArrayList") = myArrayList
Session["arrayList"] = arrayList;
3.
Llamar al método ConfigureCrystalReports().
De este modo se obtiene la instancia de ArrayList, la aplica al informe y enlaza el informe al control
CrystalReportViewer.
ConfigureCrystalReports()
ConfigureCrystalReports();
Resultados
Ahora estará preparado para generar y ejecutar el proyecto para verificar que el campo de parámetro se ha
restablecido correctamente.
Nota
Un enfoque alternativo a la conservación es conservar la instancia de ReportDocument. Para obtener
información sobre cómo conservar la instancia de ReportDocument en Session, vea el tutorial Tutorial:
Conservar el modelo de objetos ReportDocument con Session [página 337].
1.5.2.5.6.4
Para probar si está relleno el control ListBox
defaultParameterValuesList
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
4.
En el control ListBox, presione la tecla Mayús mientras hace clic para seleccionar todas las ciudades de la
lista.
5.
Haga clic en Volver a mostrar el informe.
La página se vuelve a cargar y muestra los registros de cliente de todos los clientes de todas las ciudades. Es
un informe extenso que contiene muchas páginas.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
411
6.
En la barra de herramientas CrystalReportViewer, haga clic en Página siguiente.
7.
Ahora se conserva la lista de las ciudades seleccionadas. Se muestra la página 2 del informe.
8.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.2.5.7
discretos
Anexo: Mejoras en el código de parámetros
Ha creado correctamente un informe con un valor de parámetro discreto y un método auxiliar que puede aceptar
cualquier conjunto de valores en un formato común (un ArrayList), así mismo ha aplicado estos valores a un
informe basado en un nombre de campo de parámetro específico (la constante PARAMETER_FIELD_NAME).
Si ha instalado Visual Studio 2005 o posterior, o SAP Crystal Reports Developer, tiene acceso a la API mejorada
que establece los parámetros discretos en el informe Crystal. La API de SAP Crystal Reports Developer ayuda a
reducir la cantidad de código necesario para establecer parámetros discretos.
En los procedimientos anteriores, ha aprendido a crear el método auxiliar SetCurrentValuesForParameterField().
En este tutorial, puede eliminar el método auxiliar y, en su lugar, llamar al método SetParameterValue() de la
clase ReportDocument.
El método SetParameterValue() se incluye en los siguientes métodos sobrecargados:
●
SetParameterValue(int index, object value)
●
SetParameterValue(string parameterFieldName, object value)
●
SetParameterValue(string parameterFieldName, object value, string subreport)
Puede pasar cualquier tipo de objeto en el que el valor satisfaga los valores predeterminados del campo de
parámetro. El objeto puede ser una instancia de Array que almacene una lista de valores de parámetro.
Requisitos previos:
●
Debe crear un proyecto basado en las instrucciones de Configurar un proyecto para el método
ExportToStreamTutorial: Leer y configurar parámetros discretos [página 385].
Sin embargo, en Configurar parámetros manualmente en el código [página 393], sólo debe crear la constante
PARAMETER_FIELD_NAME. No necesita crear el método auxiliar SetCurrentValuesForParameterField().
●
Si ya tiene un proyecto basado en las instrucciones de Tutorial: Leer y configurar parámetros discretos
[página 385], elimine el método auxiliar SetCurrentValuesForParameterField() y la llamada del método
ConfigureCrystalReports().
1.5.2.5.7.1
Para utilizar el método SetParameterValue() para
parámetros discretos
Procedimiento
1.
Abra el proyecto terminado de este tutorial.
2.
Abra el formulario Web Forms o Windows Forms.
412
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
3.
En el menú Ver, haga clic en Código.
4.
En el método ConfigureCrystalReports(), sobre la línea que enlaza el informe a la propiedad ReportSource del
control CrystalReportViewer, llame al método SetParameterValue() de la claseCustomerByCity. Pase el
nombre de campo de parámetro y los valores del parámetro en una instancia de Array al método al método.
customersByCityReport.SetParameterValue(PARAMETER_FIELD_NAME,
arrayList.ToArray())
customersByCityReport.SetParameterValue(PARAMETER_FIELD_NAME,
arrayList.ToArray());
Resultados
Ahora ya está preparado para generar y ejecutar el proyecto con el fin de leer y configurar parámetros discretos.
1.5.2.6
Tutorial: Leer y configurar parámetros con un
subinforme
En este tutorial se planteará una complicación adicional: ¿qué sucede si el informe que requiere parámetros
contiene un subinforme que requiere parámetros distintos?
Nota
Para realizr los pasos de este tutorial, debe terminar el tutorial anterior, Tutorial: Leer y configurar parámetros
discretos [página 385].
Introducción
En el tutorial anterior, Tutorial: Leer y configurar parámetros discretos [página 385], obtuvo información sobre
cómo crear un informe con un parámetro y cómo escribir código que estableciera dicho parámetro en tiempo de
ejecución, tanto con valores de parámetro codificados como con valores de parámetros pasados desde un control
ListBox.
En este tutorial, aprenderá a agregar parámetros a un subinforme.
Necesita realizar cuatro modificaciones al proyecto que ha creado en Tutorial: Leer y configurar parámetros
discretos [página 385]:
●
Agregará un subinforme al informe original.
Este subinforme direcciona la tabla Pedidos de la base de datos Xtreme. La tabla Pedidos está relacionada
con la tabla Clientes que se ha utilizado en el tutorial anterior mediante una clave externa ID del cliente.
●
Agregará un parámetro de rango al subinforme que filtre por un rango de fechas de pedido.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
413
●
Agregue dos controles Text al formulario, orderStartDate y orderEndDate, para establecer el rango de fechas
de pedido en tiempo de ejecución.
●
Va a agregar un nuevo método.
Este método crea una instancia de ParameterRangeValue que contiene los valores startDate y endDate
values, y, a continuación, pasa dicha instancia de ParameterRangeValue al parámetro de rango en el
subinforme.
Cuando termine este tutorial, podrá filtrar los valores que se muestran en el informe en tiempo de ejecución. El
código que agregue limita el número de ciudades que se muestran en el informe principal, así como el rango de las
fechas de pedido que se muestran en el subinforme.
Este tutorial también se puede realizar con clases del modelo de objetos CrystalReportViewer, aunque se prefiere
el modelo de objetos ReportDocument.
Código de ejemplo
Este tutorial incluye código de ejemplo de C# y Visual Basic que muestra la versión finalizada del proyecto. Siga
las instrucciones de este tutorial para crear un nuevo proyecto o para abrir el proyecto de código de ejemplo y
trabajar con una versión finalizada.
El código de ejemplo se almacena en carpetas que están clasificadas por idioma y tipo de proyecto. Los nombres
de las carpetas de cada versión del código de ejemplo son los siguientes:
●
Sitio Web en C#: CS_Web_RDObjMod_ParametersSubrpt
●
Proyecto para Windows en C#: CS_Win_RDObjMod_ParametersSubrpt
●
Sitio Web en Visual Basic: VB_Web_RDObjMod_ParametersSubrpt
●
Proyecto para Windows en Visual Basic: VB_Win_RDObjMod_ParametersSubrpt
Base de datos Xtreme
Este tutorial utiliza una base de datos de muestra llamada Xtreme. El archivo de base de datos xtreme.mdb se
incluye en el paquete de código de muestra del SDK de SAP Crystal Reports .NET. Para usar la base de datos
Xtreme, deberá crear manualmente una conexión ODBC a ella.
Información relacionada
Elegir el modelo de objetos correcto para el proyecto [página 31]
Tutorial: Leer y configurar parámetros de rango para un subinforme [página 274]
En este tutorial se planteará una complicación adicional: ¿qué sucede si el informe contiene un subinforme que
requiere parámetros distintos?
Directorio de informes de muestra [página 14]
414
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.2.6.1
Agregar un subinforme al informe original
Para empezar, agregará un subinforme al informe original.
1.5.2.6.1.1
Para agregar un subinforme
Procedimiento
1.
Abra el proyecto creado en el tutorial anterior, Tutorial: Leer y configurar parámetros discretos [página 385].
2.
En el Explorador de soluciones, haga doble clic en el informe CustomersByCity para abrirlo.
3.
Haga clic con el botón secundario en la barra gris Detalles y seleccione Insertar sección abajo.
4.
Haga clic con el botón secundario en la nueva sección Detalles b que ha creado, seleccione Insertar y, a
continuación, haga clic en Subinforme.
Aparece un cuadrado gris alrededor del cursor del mouse.
5.
Arrastre el rectángulo gris en la nueva sección Detalles b y, a continuación, haga clic para soltarlo.
6.
En el cuadro de diálogo Insertar subinforme, en la ficha Subinforme, seleccione Crear un subinforme con el
Asistente de informes.
Nota
El cuadro de diálogo Insertar un subinforme incluye otras opciones que permiten elegir un informe
existente y subinformes a petición. Para obtener más información sobre estas funciones, vea Ficha
Subinforme (cuadro de diálogo Insertar subinforme) [página 928].
7.
En el campo Nombre del informe nuevo, escriba PedidosClientes.
8.
Haga clic en Asistente de informes....
9.
En el panel Orígenes de datos disponibles de la ventana Asistente para la creación de informes estándar,
expanda la carpeta Crear nueva conexión.
10. En la subcarpeta que se abre, expanda la carpeta ODBC (RDO).
La carpeta contiene el servidor de base de datos, que se ha configurado para el informe al crearlo.
Nota
Si no se muestra el servidor, siga las instrucciones del tutorial anterior para conectarse con la base de
datos Xtreme.
11. Seleccione la tabla Pedidos y haga clic en el símbolo > para moverla al panel Seleccionar tablas y, a
continuación, haga clic en Siguiente.
12. En el panel Campos disponibles, seleccione ID del pedido, Fecha del pedido, Fecha de envío y Enviar vía.
13. Haga clic en el símbolo > para mover estos campos al panel Campos a mostrar y, a continuación, haga clic en
Finalizar.
14. En el cuadro de diálogo Insertar un subinforme, seleccione la ficha Vínculo.
15. En el panel Campo(s) del informe contenedor para vincular, en la lista Campos disponibles, expanda la tabla
Clientes, seleccione ID del cliente y, a continuación, haga clic en el símbolo >.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
415
16. En el panel Vínculo de campo Clientes.ID del cliente que aparece, deje las selecciones predeterminadas
inalteradas.
Estas selecciones de parámetros y de datos generan automáticamente entre el informe principal y el
subinforme.
17. Haga clic en Aceptar.
El nuevo subinforme, PedidosClientes, se muestra en la sección Detalles b del informe principal.
Nota
Al agregar un subinforme a la sección Detalles, el subinforme se muestra por cada fila, lo que agrega un
costo de rendimiento al informe. Si no necesita información de subinforme a ese nivel de granularidad,
coloque el subinforme en una sección Grupo en vez de hacerlo en una sección Detalles.
Resultados
Ahora está listo para verificar la configuración del subinforme.
1.5.2.6.1.2
Para verificar la configuración del subinforme
Procedimiento
1.
En la sección Detalles, haga doble clic en el subinforme PedidosClientes para verlo.
En la parte inferior de la vista del diseñador, aparecen botones de desplazamiento para el informe principal y
el subinforme PedidosClientes.
2.
Si el Explorador de campos no está visible, en la barra de herramientas de Crystal Reports, haga clic en
Cambiar la vista del campo.
Nota
Otro modo de ver el Explorador de campos es ir al menú Crystal Reports y hacer clic en Explorador de
campos.
3.
En el Explorador de campos, expanda Campos de parámetro.
4.
Verifique que el campo de parámetro Pm-Clientes.ID del cliente se ha generado automáticamente al vincular
el subinforme.
5.
En la barra de herramientas, haga clic en Asistente de selección.
6.
En el cuadro de diálogo Asistente de selección, verifique que está establecido el criterio Pedidos.ID del cliente
es igual a {Pm-Clientes.ID del cliente} y, a continuación, haga clic en Aceptar.
7.
En el menú Archivo, seleccione Guardar todo.
416
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Resultados
Ha agregado correctamente un subinforme CustomerOrders al informe CustomersByCity. En la sección
siguiente agregará un parámetro OrderDateRange al subinforme.
1.5.2.6.1.3
Para agregar un parámetro OrderDateRange al
subinforme
Procedimiento
1.
En el Explorador de campos, haga clic con el botón secundario en Campos de parámetro y seleccione Nuevo...
2.
En el cuadro de diálogo Crear campo de parámetro:
○
Defina el Nombre como OrderDateRange.
○
Establezca el Tipo de valor como Fecha.
○
Defina Texto de solicitud como Especifique un rango de fechas de pedidos para mostrar.
○
Defina Opciones como una sola selección, Rango de valores.
3.
Haga clic en Aceptar.
4.
En la barra de herramientas, haga clic en Asistente de selección.
5.
Haga clic en la ficha Nuevo.
6.
En el cuadro de diálogo Elegir campo, expanda la tabla Pedidos, seleccione Fecha del pedido y, a continuación,
haga clic en Aceptar.
7.
En la nueva ficha Orders.OrderDate, en la lista desplegable de criterios, seleccione fórmula:.
8.
Escriba la siguiente fórmula: {Pedidos.Fecha del pedido} en {?OrderDateRange}.
9.
Haga clic en Aceptar.
10. En el menú Archivo, seleccione Guardar todo.
Resultados
Ha agregado correctamente un parámetro OrderDateRange al subinforme y lo ha vinculado a la columna
Pedidos.Fecha del pedido. En la sección siguiente agregará código para direccionar el parámetro
OrderDateRange en el subinforme.
1.5.2.6.2
Agregar el código de parámetro de subinforme
Ahora está listo para agregar el código de parámetro para el subinforme a la clase de código subyacente. Para
empezar, cree un método auxiliar privado, SetDateRangeForOrders().
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
417
1.5.2.6.2.1
Para crear y codificar el método
SetDateRangeForOrders()
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte superior de la clase, agregue dos nuevas constantes debajo de la constante
PARAMETER_FIELD_NAME agregada en el tutorial anterior.
Private Const SUBREPORT_PARAMETER_FIELD_NAME As String = "OrderDateRange"
Private Const SUBREPORT_NAME As String = "CustomerOrders"
private const string SUBREPORT_PARAMETER_FIELD_NAME = "OrderDateRange";
private const string SUBREPORT_NAME = "CustomerOrders";
4.
En la parte inferior de la clase, cree un nuevo método privado denominado SetDateRangeForOrders() con
tres parámetros: ParameterFields, una cadena startDate y una cadena endDate.
Private Sub SetDateRangeForOrders(ByVal myReportDocument As ReportDocument,
ByVal startDate As String, ByVal endDate As String)
End Sub
private void SetDateRangeForOrders(ReportDocument reportDocument, string
startDate, string endDate)
{
}
5.
En este método, declare y cree una instancia de la clase ParameterRangeValue.
Dim myParameterRangeValue As ParameterRangeValue = New
ParameterRangeValue()
ParameterRangeValue parameterRangeValue = new
ParameterRangeValue();
Nota
Para que la clase ParameterRangeValue sea accesible, deberá incluir un enunciado "Imports" [Visual
Basic] o "using" [C#] en la parte superior de la clase de código subyacente del espacio de nombres
CrystalDecisions.Shared. (Esta declaración se ha agregado en Configuración de proyectos [página 14].)
6.
Establezca la propiedad StartValue de la instancia de ParameterRangeValue en el parámetro de método
startDate.
myParameterRangeValue.StartValue = startDate
418
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
parameterRangeValue.StartValue = startDate;
Nota
Las propiedades StartValue y EndValue de la clase ParameterRangeValue aceptan valores de tipo Object.
Este tipo genérico permite que el valor de rango que se pasa sea de muchos valores, incluidos: texto,
número, fecha, moneda o tiempo.
7.
Establezca la propiedad EndValue de la instancia de ParameterRangeValue en el parámetro de método
endDate.
myParameterRangeValue.EndValue = endDate
parameterRangeValue.EndValue = endDate;
8.
Establezca los límites inferior y superior para que sean bound-inclusive.
myParameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusive
myParameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive
parameterRangeValue.LowerBoundType = RangeBoundType.BoundInclusive;
parameterRangeValue.UpperBoundType = RangeBoundType.BoundInclusive;
Nota
Para BoundInclusive, los valores de rango superior e inferior no se incluyen en el rango.
Ahora está preparado para asignar la instancia de ParameterRangeValue al parámetro del subinforme.
9.
Recupere el objeto ParameterFieldDefinitions, que proviene de la propiedad DataDefinition de la
instancia de ReportDocument.
Nota
ParameterFieldDefinitions es una clase indizada que contiene instancias de la clase
ParameterFieldDefinition.
Dim myParameterFieldDefinitions As ParameterFieldDefinitions =
myReportDocument.DataDefinition.ParameterFields
ParameterFieldDefinitions parameterFieldDefinitions =
reportDocument.DataDefinition.ParameterFields;
10. Recupere la instancia de ParameterFieldDefinition de la clase indizada ParameterFieldDefinitions
que se basa en dos valores indizados: el nombre de campo de parámetro de subinforme y el nombre de
subinforme. Pase los dos valores de constante que ha declarado al principio de la clase.
Dim myParameterFieldDefinition As ParameterFieldDefinition =
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
419
myParameterFieldDefinitions(SUBREPORT_PARAMETER_FIELD_NAME,
SUBREPORT_NAME)
ParameterFieldDefinition parameterFieldDefinition =
parameterFieldDefinitions[SUBREPORT_PARAMETER_FIELD_NAME,
SUBREPORT_NAME];
11. Llame al método Clear() de la propiedad CurrentValues de la instancia de
ParameterFieldDefinition para eliminar cualquier valor existente de la propiedad CurrentValues.
myParameterFieldDefinition.CurrentValues.Clear()
parameterFieldDefinition.CurrentValues.Clear();
12. Agregue la instancia de ParameterRangeValue, que ha creado anteriormente, a la propiedad
CurrentValues de la instancia de ParameterFieldDefinition.
myParameterFieldDefinition.CurrentValues.Add(myParameterRangeValue)
parameterFieldDefinition.CurrentValues.Add(parameterRangeValue);
13. Llame al método ApplyCurrentValues() y pásele la propiedad CurrentValues de la instancia de
ParameterFieldDefinition.
myParameterFieldDefinition.ApplyCurrentValues(myParameterFieldDefinition.CurrentV
alues)
parameterFieldDefinition.ApplyCurrentValues(parameterFieldDefinition.CurrentValue
s);
Resultados
Este procedimiento de varios pasos ha establecido los valores de fecha inicial y final en una instancia de
ParameterRangeValue y los ha pasado al parámetro OrderDateRange del subinforme PedidosClientes.
1.5.2.6.3
Agregar controles TextBox para contener valores
de parámetro de rango
En esta sección, agregará dos controles TextBox que proporcionan los valores de fecha inicial y final en tiempo de
ejecución al parámetro de rango OrderDateRange del informe PedidosClientes.
420
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Nota
Si implementa este tutorial en un sitio Web, la persistencia de los valores de fecha que el usuario escribe en los
cuadros de texto se mantiene mediante ViewState.
1.5.2.6.3.1
Para crear y configurar un botón que vuelva a
mostrar el informe en el formulario
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Diseñador.
3.
Si está desarrollando un sitio Web, realice las siguientes acciones:
a) Haga clic entre el control ListBox y el control Button.
b) Presione INTRO tres veces para crear dos líneas entre el control ListBox y el control Button.
c) En la primera línea creada debajo del control ListBox, escriba "Fecha inicial de pedidos".
d) En la segunda línea creada debajo del control ListBox, escriba "Fecha final de pedidos".
4.
Si está desarrollando un proyecto de Windows, realice las siguientes acciones:
a) En el Cuadro de herramientas, arrastre dos controles Label a la derecha del control ListBox. Coloque una
etiqueta encima de la otra y ambas encima del control Button.
b) Seleccione el primer control Label. En la ventana Propiedades, establezca la propiedad Text en "Fecha
inicial de pedidos".
c) Seleccione el segundo control Label. En la ventana Propiedades, establezca la propiedad Text en "Fecha
final de pedidos".
5.
En el Cuadro de herramientas, arrastre un control TextBox hasta la derecha de "Fecha inicial de pedidos".
6.
Haga clic en el control TextBox para seleccionarlo.
7.
En la ventana Propiedades, establezca ID (o Name) en "orderStartDate".
8.
En el Cuadro de herramientas, arrastre un control TextBox hasta la derecha de "Fecha final de pedidos".
9.
Haga clic en el control TextBox para seleccionarlo.
10. En la ventana Propiedades, establezca ID (o Name) en "orderEndDate".
11. En el menú Archivo, seleccione Guardar todo.
1.5.2.6.4
Modificar métodos para llamar al subinforme
Debe modificar el método ConfigureCrystalReports() y el método de evento redisplay_Click() para
recibir información de estos controles TextBox y aplicarlos al método SetDateRangeForOrders() con el fin de
que se procese la información de parámetros de los subinformes.
En el tutorial anterior, Tutorial: Leer y configurar parámetros discretos [página 385], ha diseñado estos métodos
de dos formas distintas, en función de si incluía la persistencia de Session.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
421
Nota
Los proyectos de Windows no requieren persistencia de Session. Los sitios Web normalmente requieren
persistencia de Session.
Elija uno de los procedimientos con pasos siguientes (pero no ambos). Modifique los métodos que excluyen la
persistencia de Session o los que la incluyen.
1.5.2.6.4.1
Modificar los métodos que excluyen la
persistencia de Session
Si ha terminado el tutorial anterior, Tutorial: Leer y configurar parámetros discretos [página 385], y ha excluido la
persistencia de Session, realice los siguientes procedimientos. Si desea incluir la persistencia de Session, vea
Modificar los métodos que incluyen la persistencia de Session [página 423].
1.5.2.6.4.1.1
Para modificar el método
ConfigureCrystalReports() que excluye la persistencia de
Session
Procedimiento
1.
En el método ConfigureCrystalReports(), agregue un par de saltos de línea al código después de las
líneas que asignan "Paris" y "Tokyo" como variables ArrayList.
2.
En los saltos de línea, declare y establezca valores codificados para dos variables de cadena, startDate y
endDate.
Dim startDate As String = "8/1/1997"
Dim endDate As String = "8/31/1997"
string startDate = "8/1/1997";
string endDate = "8/31/1997";
3.
Agregue un par de saltos de línea en el código encima de la línea que enlaza el informe al control
CrystalReportViewer.
4.
En los saltos de línea, escriba una llamada al método SetDateRangeForOrders() y pásele el informe
CustomersByCity así como las variables startDate y endDate.
SetDateRangeForOrders(customersByCityReport, startDate, endDate)
SetDateRangeForOrders(customersByCityReport, startDate, endDate);
422
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
A continuación aparece el código original que enlaza el informe al control CrystalReportViewer.
5.
En el menú Archivo, seleccione Guardar todo.
Resultados
A continuación, modificará el método de evento redisplay_Click.
1.5.2.6.4.1.2
Para modificar el método redisplay_Click() que
excluye la persistencia de Session
Procedimiento
1.
En el método de evento redisplay_Click(), agregue un par de saltos de línea al código encima de la línea
que enlaza el informe al control CrystalReportViewer.
2.
En los saltos de línea, declare y establezca valores para dos variables de cadena, startDate y endDate, de los
controles TextBox que ha agregado al formulario Web Forms o Windows Forms.
Dim startDate As String = orderStartDate.Text
Dim endDate As String = orderEndDate.Text
string startDate = orderStartDate.Text;
string endDate = orderEndDate.Text;
3.
Escriba una llamada al método SetDateRangeForOrders() y pásele el informe CustomersByCity así como
las variables startDate y endDate.
SetDateRangeForOrders(customersByCityReport, startDate, endDate)
SetDateRangeForOrders(customersByCityReport, startDate, endDate);
4.
En el menú Archivo, seleccione Guardar todo.
1.5.2.6.4.2
Modificar los métodos que incluyen la
persistencia de Session
Si ha terminado el tutorial anterior, Tutorial: Leer y configurar parámetros discretos [página 385], y ha incluido la
persistencia de Session, realice los siguientes procedimientos. En caso contrario, continúe con Modificar los
métodos que excluyen la persistencia de Session [página 422].
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
423
1.5.2.6.4.2.1
Para modificar el método
ConfigureCrystalReports() que incluye la persistencia de
Session
Procedimiento
1.
En el método ConfigureCrystalReports(), agregue un par de saltos de línea al código después de la línea
que declara y crea una instancia de ArrayList.
2.
En los saltos de línea, declare dos variables de cadena, startDate y endDate.
Dim startDate As String
Dim endDate As String
string startDate;
string endDate;
3.
En el bloque condicional Not IsPostBack, escriba los valores predeterminados para las variables startDate
y endDate.
startDate = "8/1/1997"
endDate = "8/31/1997"
startDate = "8/1/1997";
endDate = "8/31/1997";
4.
En el bloque condicional Not IsPostBack, asigne las variables startDate y endDate a Session.
Session("startDate") = startDate
Session("endDate") = endDate
Session["startDate"] = startDate;
Session["endDate"] = endDate;
5.
En el bloque Else, después de obtener la instancia de ArrayList de Session, obtenga las variables startDate y
endDate de Session.
startDate = Session("startDate").ToString()
endDate = Session("endDate").ToString()
startDate = Session["startDate"].ToString();
endDate = Session["endDate"].ToString();
Con este enfoque, se llega al final del bloque con las variables de fecha asignadas en cualquier caso. De este
modo se sigue la lógica paralela a la asignación de la variable ArrayList que ha configurado en el tutorial
anterior.
6.
424
Agregue un par de saltos de línea en el código encima de la línea que enlaza el informe al control
CrystalReportViewer.
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
7.
En los nuevos saltos de línea, escriba una llamada al método SetDateRangeForOrders() y pásele el
informe CustomersByCity así como las variables startDate y endDate.
SetDateRangeForOrders(customersByCityReport, startDate, endDate)
SetDateRangeForOrders(customersByCityReport, startDate, endDate);
A continuación aparece el código original que enlaza el informe al control CrystalReportViewer.
8.
En el menú Archivo, seleccione Guardar todo.
Resultados
A continuación, modificará el método de evento redisplay_Click.
1.5.2.6.4.2.2
Para modificar el método redisplay_Click() que
incluye la persistencia de Session
Procedimiento
1.
En el método de evento redisplay_Click(), agregue un par de saltos de línea al código después de la línea
que asigna la instancia de ArrayList a Session.
2.
En los saltos de línea, asigne la propiedad Text del TextBox orderStartDate y orderEndDate a variables de
Session.
Session("startDate") = orderStartDate.Text
Session("endDate") = orderEndDate.Text
Session["startDate"] = orderStartDate.Text;
Session["endDate"] = orderEndDate.Text;
3.
En el menú Archivo, seleccione Guardar todo.
Estos valores de Session startDate y endDate se recuperan y aplican cuando se llama al método
ConfigureCrystalReports().
Resultados
Ahora estará preparado para generar y ejecutar el proyecto para verificar que los valores TextBox restablecen el
parámetro de rango del subinforme. w
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
425
1.5.2.6.5
Probar la configuración del parámetro de
subinforme
Ya está preparado para probar la configuración del parámetro de subinforme desde los valores TextBox.
1.5.2.6.5.1
Para probar la configuración del parámetro de
subinforme
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
4.
En el control ListBox, presione la tecla CTRL mientras hace clic para seleccionar al menos cuatro ciudades
diferentes en la lista.
5.
En el control TextBox startDate, escriba "1/1/1997".
6.
En el control TextBox endDate, escriba "31/12/1997".
7.
Haga clic en el botón Volver a mostrar el informe.
La página se volverá a cargar y mostrará los registros de cliente para los clientes que vivan en las ciudades de
la lista que acaba de seleccionar, así como un subinforme que muestra los pedidos del rango de fechas
especificado anteriormente.
8.
En el control CrystalReportViewer, aumente el nivel de Zoom al 125%.
La página se recargará al 125% de zoom. Se conservan los valores que están seleccionados para ambas
ciudades y el rango de fechas de pedido.
9.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
1.5.2.6.6
Anexo: Mejoras del código de parámetros de rango
para subinformes
Ha modificado correctamente el proyecto del tutorial para utilizar un informe que contiene un subinforme y ha
establecido un rango de fechas de pedidos en el parámetro de rango que se crea en el subinforme. En este
apéndice aprenderá a leer y establecer parámetros en un subinforme con funciones de la API mejorada.
En los procedimientos anteriores ha aprendido a crear el método auxiliar SetDateRangeForOrders() que
utiliza las clases ParameterFieldDefinitions y ParameterFieldDefinition.
En este tutorial, debe eliminar las líneas de código que utilizan las clases ParameterFieldDefinitions y
ParameterFieldDefinition. A continuación, aprenderá a usar las clases ParameterFields y
ParameterField de la API mejorada de SAP Crystal Reports para codificar el método
SetDateRangeForOrders().
426
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Nota
La API mejorada incluye el método SetParameterValue(string parameterFieldName, object
value, string subreport) para los subinformes con campos de parámetro discretos. Por lo tanto,
SetParameterValue() no se puede utilizar en este tutorial porque el subinforme tiene un parámetro de
rango.
1.5.2.6.6.1
Para usar la API mejorada de SAP Crystal Reports
para subinformes con parámetros de rango
Requisitos previos
Debe crear un proyecto según las instrucciones de Tutorial: Leer y configurar parámetros con un subinforme
[página 413].
Procedimiento
1.
Abra el proyecto terminado de este tutorial.
2.
Abra el formulario Web Forms o Windows Forms.
3.
En el menú Ver, haga clic en Código.
4.
En el método SetDateRangeForOrders(), elimine las líneas de código que utilizan las clases
ParameterFieldDefinitions o ParameterFieldDefinition. Elimine las siguientes líneas de código:
Dim myParameterFieldDefinitions As ParameterFieldDefinitions =
myReportDocument.DataDefinition.ParameterFields
Dim myParameterFieldDefinition As ParameterFieldDefinition =
myParameterFieldDefinitions(SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME)
myParameterFieldDefinition.CurrentValues.Clear()
myParameterFieldDefinition.CurrentValues.Add(myParameterRangeValue)
myParameterFieldDefinition.ApplyCurrentValues(myParameterFieldDefinition.CurrentV
alues)
ParameterFieldDefinitions parameterFieldDefinitions =
reportDocument.DataDefinition.ParameterFields;
ParameterFieldDefinition parameterFieldDefinition =
parameterFieldDefinitions[SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME];
parameterFieldDefinition.CurrentValues.Clear();
parameterFieldDefinition.CurrentValues.Add(parameterRangeValue);
parameterFieldDefinition.ApplyCurrentValues(parameterFieldDefinition.CurrentValue
s);
En el siguiente paso, agregará los nuevos métodos de la API de SAP Crystal Reports al método
SetDateRangeForOrders(), después del código que establece el tipo de límite de rango.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
427
5.
En el método SetDateRangeForOrders(), recupere la instancia de ParameterFields que procede de la
propiedad ParameterFields de la instancia de ReportDocument.
Dim myParameterFields As ParameterFields = reportDocument.ParameterFields
ParameterFields parameterFields = reportDocument.ParameterFields;
6.
Recupere la instancia de ParameterField de la clase indizada ParameterFields que se basa en dos valores
indizados: el nombre de campo de parámetro de subinforme y el nombre de subinforme. Pase los dos valores
de constante que ha declarado al principio de la clase.
Dim myParameterField As ParameterField =
myParameterFields(SUBREPORT_PARAMETER_FIELD_NAME, SUBREPORT_NAME)
ParameterField parameterField = parameterFields[SUBREPORT_PARAMETER_FIELD_NAME,
SUBREPORT_NAME];
7.
Llame al método Clear() de la propiedad CurrentValues de la instancia de ParameterField para eliminar
cualquier valor existente de la propiedad CurrentValues.
myParameterField.CurrentValues.Clear()
parameterField.CurrentValues.Clear();
8.
Agregue la instancia de ParameterRangeValue, que ha creado anteriormente, a la propiedad CurrentValues
de la instancia de ParameterField.
myParameterField.CurrentValues.Add(myParameterRangeValue)
parameterField.CurrentValues.Add(parameterRangeValue);
Resultados
Ahora estará listo para generar y ejecutar el proyecto con el fin de leer y configurar parámetros de rango para un
subinforme.
1.5.2.7
Tutorial: Exportar a varios formatos
En este tutorial, aprenderá a exportar el informe mediante programación.
428
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Introducción
En este tutorial, aprenderá a exportar el informe mediante programación. SAP Crystal Reports puede exportar en
una amplia variedad de formatos. Las opciones disponibles dependen de la versión de SAP Crystal Reports que
tenga instalada.
Cada versión de SAP Crystal Reports, versión para programadores de Microsoft Visual Studio admite las
siguientes opciones de exportación:
●
SAP Crystal Reports (RPT)
●
Sólo lectura de SAP Crystal Reports (RPTR)
●
PDF
●
Formato de texto enriquecido (RTF)
●
Microsoft Word (97-2003)
●
Microsoft Excel (97-2003)
●
Microsoft Excel (97-2003), sólo datos
●
Microsoft Excel (2007), sólo datos
●
HTML 4.0
SAP Crystal Reports Developer admite estos formatos adicionales:
●
Valores separados (CSV)
●
Microsoft Word - Editable (RTF)
●
Texto separado por tabuladores (TTX)
●
Texto
Puede seleccionar cualquiera de estos formatos, haga clic en el botón Exportar del control CrystalReportViewer y
exporte un informe en el formato seleccionado al equipo local en el que ejecute SAP Crystal Reports en una
aplicación Web o para Windows.
Asimismo puede exportar informes mediante programación, a directorios específicos del servidor Web o al
equipo con Windows.
Para empezar este tutorial, va a agregar un control DropDownList al formulario Web Forms o Windows Forms y, a
continuación, a llenarlo con los valores de la enumeración ExportFormatType del espacio de nombres
CrystalDecisions.Shared.
Después, va a crear tres métodos auxiliares privados que tengan la funcionalidad de exportación y que realicen
una configuración específica para cada uno de los formatos exportados.
Finalmente, va a crear un método de evento de clic desde un control Button en el formulario Web Forms o
Windows Forms y va a llamar a los tres métodos auxiliares privados que realizan la exportación.
Código de ejemplo
Este tutorial incluye código de ejemplo de C# y Visual Basic que muestra la versión finalizada del proyecto. Siga
las instrucciones de este tutorial para crear un nuevo proyecto o para abrir el proyecto de código de ejemplo y
trabajar con una versión finalizada.
El código de ejemplo se almacena en carpetas que están clasificadas por idioma y tipo de proyecto. Los nombres
de las carpetas de cada versión del código de ejemplo son los siguientes:
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
429
●
Sitio Web en C#: CS_Web_RDObjMod_Export
●
Proyecto para Windows en C#: CS_Win_RDObjMod_Export
●
Sitio Web en Visual Basic: VB_Web_RDObjMod_Export
●
Proyecto para Windows en Visual Basic: VB_Win_RDObjMod_Export
Información relacionada
Directorio de informes de muestra [página 14]
1.5.2.7.1
Agregar controles a los formularios Web Forms o
Windows Forms
En esta sección, va a agregar controles DropDownList, Button y Label sobre el control CrystalReportViewer en el
formulario Web Forms o Windows Forms.
1.5.2.7.1.1
Para agregar controles a los formularios Web
Forms o Windows Forms
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Diseñador.
3.
Si está desarrollando un sitio Web, realice las siguientes acciones:
a) Haga clic en el control CrystalReportViewer para seleccionarlo.
b) Presione la FLECHA IZQUIERDA del teclado de modo que aparezca un cursor parpadeante y, a
continuación, presione INTRO.
El control CrystalReportViewer bajará una línea.
4.
Si está desarrollando un proyecto de Windows, realice las siguientes acciones:
a) Haga clic en el control CrystalReportViewer para seleccionarlo.
b) Ajuste el tamaño del control CrystalReportViewer, para que disponga del espacio necesario sobre él para
un control ComboBox.
c) En la ventana Propiedades, establezca el valor de Anchor en "Top, Bottom, Left, Right".
5.
En el Cuadro de herramientas, arrastre los controles DropDownList (en sitios Web) o ComboBox (en
proyectos Windows) sobre el control CrystalReportViewer.
Nota
Si aparece una tarea inteligente en DropDownList (ComboBox) cuando utilice Visual Studio 2005 o
posterior, presione Esc para cerrarla.
430
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
6.
Haga clic en el control DropDownList (ComboBox) para seleccionarlo.
7.
En la ventana Propiedades, establezca el valor de la propiedad ID en "exportTypesList".
8.
En el Cuadro de herramientas, arrastre un control Button hasta la derecha del control DropDownList
(ComboBox).
9.
Haga clic en el control Button para seleccionarlo.
10. Desde la ventana Propiedades siga estos pasos:
○
Establezca el valor de la propiedad ID en "exportByType".
○
Establezca el valor de la propiedad Text en "Export As Selected Type".
11. En el Cuadro de herramientas, arrastre un control Label hasta la derecha del control Button.
12. Haga clic en el control Label para seleccionarlo.
13. Desde la ventana Propiedades siga estos pasos:
○
Establezca el valor de la propiedad ID en "message".
○
Establezca el valor de la propiedad Text para que esté vacía.
○
Establezca el valor de la propiedad Visible en "False".
14. En el menú Archivo, seleccione Guardar todo.
Resultados
Ahora debe llenar el control DropDownList desde la enumeración ExportFormatType del espacio de nombres
CrystalDecisions.Shared.
1.5.2.7.1.2
Para llenar el control DropDownList desde la
enumeración ExportFormatType para un sitio Web
Procedimiento
1.
Abra el formulario Web Forms.
2.
En el menú Ver, haga clic en Código.
3.
En el método ConfigureCrystalReports(), elimine todas las líneas de código que van a continuación del
bloque condicional Not IsPostBack.
If Not IsPostBack Then
End If
if (!IsPostBack)
{
}
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
431
4.
En el bloque condicional, establezca el valor de la propiedad DataSource del control ComboBox de
exportTypesList en los valores de la enumeración ExportFormatType.
exportTypesList.DataSource = System.Enum.GetValues(GetType(ExportFormatType))
exportTypesList.DataSource = System.Enum.GetValues(typeof(ExportFormatType));
5.
Llame al método DataBind() del control DropDownList exportTypesList para enlazar los valores al control.
exportTypesList.DataBind()
exportTypesList.DataBind();
1.5.2.7.1.3
Para llenar el control DropDownList desde la
enumeración ExportFormatType para un proyecto de Windows
Procedimiento
1.
Abra el formulario Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En el método ConfigureCrystalReports(), en su parte inferior, establezca el valor de la propiedad
DataSource del control ComboBox exportTypesList en los valores de la enumeración ExportFormatType.
exportTypesList.DataSource = System.Enum.GetValues(GetType(ExportFormatType))
exportTypesList.DataSource = System.Enum.GetValues(typeof(ExportFormatType));
1.5.2.7.2
Crear métodos que realizan la exportación
En esta sección va a crear los siguientes métodos auxiliares privados que realizan la exportación.
●
ExportSetup()
●
ExportSelection()
●
ExportCompletion()
A estos métodos se llama más adelante en este tutorial desde un método de evento de clic de botón. Para
empezar, cree el método auxiliar ExportSetup().
432
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.2.7.2.1
Para crear el método ExportSetup()
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte superior de la clase, agregue tres declaraciones de clase.
Private exportPath As String
Private myDiskFileDestinationOptions As DiskFileDestinationOptions
Private myExportOptions As ExportOptions
private string exportPath;
private DiskFileDestinationOptions diskFileDestinationOptions;
private ExportOptions exportOptions;
Más tarde va a crear una instancia de esas clases auxiliares en el método ExportSetup().
4.
En la parte inferior de la clase, cree un método auxiliar privado denominado ExportSetup() sin valor de
devolución.
Public Sub ExportSetup()
End Sub
private void ExportSetup()
{
}
5.
En el método, establezca el valor de la variable de cadena exportPath en el directorio raíz del disco duro.
exportPath = "C:\Exported\"
exportPath = "C:\\Exported\\";
Nota
Si desea colocar la carpeta Exported en el directorio Web del servidor Web, agregue un prefijo al nombre
de la carpeta con la propiedad Request.PhysicalApplicationPath.
6.
Cree un bloque condicional que compruebe si ya existe el directorio de la cadena exportPath.
If Not System.IO.Directory.Exists(exportPath) Then
End If
if (!System.IO.Directory.Exists(exportPath))
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
433
{
}
7.
En el bloque condicional, llame al método CreateDirectory() de System.IO.Directory para crear el
directorio en la cadena exportPath.
System.IO.Directory.CreateDirectory(exportPath)
System.IO.Directory.CreateDirectory(exportPath);
8.
Fuera del bloque condicional, cree una instancia de la clase DiskFileDesintationOptions.
myDiskFileDestinationOptions = New DiskFileDestinationOptions()
diskFileDestinationOptions = new DiskFileDestinationOptions();
9.
Llene la instancia de ExportOptions con la propiedad ExportOptions de la instancia de
hierarchicalGroupingReport.
myExportOptions = hierarchicalGroupingReport.ExportOptions
exportOptions = hierarchicalGroupingReport.ExportOptions;
10. Establezca el valor de la propiedad ExportDestinationType de la instancia de ExportOptions en la selección de
la enumeración ExportDestinationType.DiskFile.
myExportOptions.ExportDestinationType = ExportDestinationType.DiskFile
exportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
11. Para el proyecto de Windows, borre los valores de la propiedad ExportFormatOptions de la instancia de
ExportOptions. (Esa línea de código no es necesaria para un sitio Web ya que la variable se borra
automáticamente en cada evento de clic).
myExportOptions.ExportFormatOptions = Nothing
exportOptions.ExportFormatOptions = null;
Resultados
Ahora va a crear el método auxiliar ExportSelection().
434
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.2.7.2.2
Para crear el método ExportSelection()
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte superior de la clase, agregue una declaración booleana que se utilice para comprobar si se ha
seleccionado un formato de exportación.
Private selectedNoFormat As Boolean = True
private bool selectedNoFormat = true;
4.
En la parte inferior de la clase, cree un método auxiliar privado denominado ExportSelection() sin valor
de devolución.
Public Sub ExportSelection()
End Sub
private void ExportSelection()
{
}
5.
En el método, cree un enunciado "Select Case" [Visual Basic] o "switch" [C#] que haga referencia
a los miembros de la enumeración ExportFormatType. La enumeración se basa en SelectedIndex del control
exportTypesList DropDownList creado en el procedimiento anterior.
Select Case exportTypesList.SelectedIndex
Case ExportFormatType.NoFormat
Case ExportFormatType.CrystalReport
Case ExportFormatType.RichText
Case ExportFormatType.WordForWindows
Case ExportFormatType.Excel
Case ExportFormatType.PortableDocFormat
Case ExportFormatType.HTML32
Case ExportFormatType.HTML40
Case Else
End Select
switch ((ExportFormatType)exportTypesList.SelectedIndex)
{
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
435
}
case ExportFormatType.NoFormat:
break;
case ExportFormatType.CrystalReport:
break;
case ExportFormatType.RichText:
break;
case ExportFormatType.WordForWindows:
break;
case ExportFormatType.Excel:
break;
case ExportFormatType.PortableDocFormat:
break;
case ExportFormatType.HTML32:
break;
case ExportFormatType.HTML40:
break;
default:
break;
Resultados
Ha finalizado el método ExportSelection(). Para empezar, cree el método auxiliar ExportCompletion().
1.5.2.7.2.3
Para crear el método ExportCompletion()
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte inferior de la clase, cree un método auxiliar privado denominado ExportCompletion() sin valor
de devolución.
Public Sub ExportCompletion()
End Sub
private void ExportCompletion()
{
}
4.
En el método, cree un bloque try/catch con la clase Exception a la que se hace referencia como variable
denominada "ex".
Try
Catch ex As Exception
End Try
436
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
try
{
}
catch (Exception ex)
{
}
5.
En el bloque try, cree un bloque condicional para probar la variable booleana selectedNoFormat.
If selectedNoFormat Then
Else
End If
if (selectedNoFormat)
{
}
else
{
}
6.
En el bloque If, establezca el valor de la propiedad Text del control Label del mensaje en la constante
FORMAT_NOT_SUPPORTED de la clase MessageConstants.
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED;
7.
En el bloque Else, llame al método Export() de la instancia de hierarchicalGroupingReport.
hierarchicalGroupingReport.Export()
hierarchicalGroupingReport.Export();
8.
Aún en este bloque Else, establezca el valor de la propiedad Text del control Label del mensaje en la constante
SUCCESS de la clase MessageConstants.
message.Text = MessageConstants.SUCCESS
message.Text = MessageConstants.SUCCESS;
9.
En el bloque catch, establezca el valor de la propiedad Text del control Label del mensaje en la constante
FAILURE de la clase MessagesConstants y, a continuación, agréguele la propiedad Message del parámetro
Exception.
message.Text = MessageConstants.FAILURE & ex.Message
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
437
message.Text = MessageConstants.FAILURE + ex.Message;
10. Fuera del bloque try/catch, establezca el valor de la propiedad Visible del control Label del mensaje en "True".
message.Visible = True
message.Visible = true;
Resultados
Ya ha terminado de crear los tres métodos auxiliares privados que realizan la exportación.
1.5.2.7.3
Crear métodos que configuran varios formatos de
exportación
En esta sección, va a crear los métodos auxiliares privados que configuran los diversos formatos de exportación.
Todos estos métodos se utilizan de forma similar, salvo ConfigureExportToHtml32() y
ConfigureExportToHtml40(), que proporcionan formas distintas de exportar al formato HTML.
●
ConfigureExportToRpt()
●
ConfigureExportToRtf()
●
ConfigureExportToDoc()
●
ConfigureExportToXls()
●
ConfigureExportToPdf()
●
ConfigureExportToHtml32()
●
ConfigureExportToHtml40()
1.5.2.7.3.1
Para crear el método auxiliar
ConfigureExportToRpt()
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte inferior de la clase, cree un método auxiliar privado denominado ConfigureExportToRpt() sin
valor de devolución.
Public Sub ConfigureExportToRpt()
438
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
End Sub
private void ConfigureExportToRpt()
{
}
4.
En el método, establezca el valor de la propiedad ExportFormatType de la instancia de ExportOptions en
la selección de enumeración ExportFormatType CrystalReport.
myExportOptions.ExportFormatType = ExportFormatType.CrystalReport
exportOptions.ExportFormatType = ExportFormatType.CrystalReport;
5.
Establezca el valor de la propiedad DiskFileName de la instancia de DiskFileDestinationOptions en la
cadena exportPath y, a continuación, agréguele el nombre de un documento con una extensión de
archivo .rpt.
myDiskFileDestinationOptions.DiskFileName = exportPath &
"Report.rpt"
diskFileDestinationOptions.DiskFileName = exportPath +
"Report.rpt";
6.
Finalmente, establezca el valor de la propiedad ExportDestinationOptions de la instancia de
ExportOptions en la instancia de DiskFileDestinationOptions configurada en el paso anterior.
myExportOptions.ExportDestinationOptions = myDiskFileDestinationOptions
exportOptions.ExportDestinationOptions = diskFileDestinationOptions;
1.5.2.7.3.2
Para crear el método auxiliar
ConfigureExportToRtf
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte inferior de la clase, cree un método auxiliar privado denominado ConfigureExportToRtf() sin
valor de devolución.
Public Sub ConfigureExportToRtf()
End Sub
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
439
private void
ConfigureExportToRtf()
{
}
4.
En el método, establezca el valor de la propiedad ExportFormatType de la instancia de ExportOptions en la
selección de enumeración ExportFormatType RichText.
myExportOptions.ExportFormatType = ExportFormatType.RichText
exportOptions.ExportFormatType = ExportFormatType.RichText;
5.
Establezca el valor de la propiedad DiskFileName de la instancia de DiskFileDestinationOptions en la cadena
exportPath y, a continuación, agréguele el nombre de un documento con una extensión de archivo .rtf.
myDiskFileDestinationOptions.DiskFileName = exportPath & "RichTextFormat.rtf"
diskFileDestinationOptions.DiskFileName = exportPath + "RichTextFormat.rtf";
6.
Finalmente, establezca el valor de la propiedad ExportDestinationOptions de la instancia de ExportOptions en
la instancia de DiskFileDestinationOptions configurada en el paso anterior.
myExportOptions.ExportDestinationOptions = myDiskFileDestinationOptions
exportOptions.ExportDestinationOptions = diskFileDestinationOptions;
1.5.2.7.3.3
Para crear el método auxiliar
ConfigureExportToDoc
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte inferior de la clase, cree un método auxiliar privado denominado ConfigureExportToDoc() sin
valor de devolución.
Public Sub ConfigureExportToDoc()
End Sub
private void
ConfigureExportToDoc()
440
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
{
}
4.
En el método, establezca el valor de la propiedad ExportFormatType de la instancia de ExportOptions en la
selección de enumeración ExportFormatType WordForWindows.
myExportOptions.ExportFormatType = ExportFormatType.WordForWindows
exportOptions.ExportFormatType = ExportFormatType.WordForWindows;
5.
Establezca el valor de la propiedad DiskFileName de la instancia de DiskFileDestinationOptions en la cadena
exportPath y, a continuación, agréguele el nombre de un documento con una extensión de archivo .doc.
myDiskFileDestinationOptions.DiskFileName = exportPath &
"Word.doc"
diskFileDestinationOptions.DiskFileName = exportPath + "Word.doc";
6.
Finalmente, establezca el valor de la propiedad ExportDestinationOptions de la instancia de ExportOptions en
la instancia de DiskFileDestinationOptions configurada en el paso anterior.
myExportOptions.ExportDestinationOptions = myDiskFileDestinationOptions
exportOptions.ExportDestinationOptions = diskFileDestinationOptions;
1.5.2.7.3.4
Para crear el método auxiliar
ConfigureExportToXls
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte inferior de la clase, cree un método auxiliar privado denominado ConfigureExportToXls() sin
valor de devolución.
Public Sub ConfigureExportToXls()
End Sub
private void
ConfigureExportToXls()
{
}
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
441
4.
En el método, establezca el valor de la propiedad ExportFormatType de la instancia de ExportOptions en la
selección de enumeración ExportFormatType Excel.
myExportOptions.ExportFormatType = ExportFormatType.Excel
exportOptions.ExportFormatType = ExportFormatType.Excel;
5.
Establezca el valor de la propiedad DiskFileName de la instancia de DiskFileDestinationOptions en la cadena
exportPath y, a continuación, agréguele el nombre de un documento con una extensión de archivo .xls.
myDiskFileDestinationOptions.DiskFileName = exportPath & "Excel.xls"
diskFileDestinationOptions.DiskFileName = exportPath + "Excel.xls";
6.
Finalmente, establezca el valor de la propiedad ExportDestinationOptions de la instancia de ExportOptions en
la instancia de DiskFileDestinationOptions configurada en el paso anterior.
myExportOptions.ExportDestinationOptions = myDiskFileDestinationOptions
exportOptions.ExportDestinationOptions = diskFileDestinationOptions;
1.5.2.7.3.5
Para crear el método auxiliar
ConfigureExportToPdf
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte inferior de la clase, cree un método auxiliar privado denominado ConfigureExportToPdf() sin
valor de devolución.
Public Sub ConfigureExportToPdf()
End Sub
private void
ConfigureExportToPdf()
{
}
442
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
4.
En el método, establezca el valor de la propiedad ExportFormatType de la instancia de ExportOptions en la
selección de enumeración ExportFormatType PortableDocFormat.
myExportOptions.ExportFormatType = ExportFormatType.PortableDocFormat
exportOptions.ExportFormatType = ExportFormatType.PortableDocFormat;
5.
Establezca el valor de la propiedad DiskFileName de la instancia de DiskFileDestinationOptions en la cadena
exportPath y, a continuación, agréguele el nombre de un documento con una extensión de archivo .pdf.
myDiskFileDestinationOptions.DiskFileName = exportPath & "PortableDoc.pdf"
diskFileDestinationOptions.DiskFileName = exportPath + "PortableDoc.pdf";
6.
Finalmente, establezca el valor de la propiedad ExportDestinationOptions de la instancia de ExportOptions en
la instancia de DiskFileDestinationOptions configurada en el paso anterior.
myExportOptions.ExportDestinationOptions = myDiskFileDestinationOptions
exportOptions.ExportDestinationOptions = diskFileDestinationOptions;
1.5.2.7.3.6
Para crear el método auxiliar
ConfigureExportToHtml32
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte inferior de la clase, cree un método auxiliar privado denominado ConfigureExportToHtml32()
sin valor de devolución.
Public Sub ConfigureExportToHtml32()
End Sub
private void
ConfigureExportToHtml32()
{
}
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
443
4.
En el método, establezca el valor de la propiedad ExportFormatType de la instancia de ExportOptions en la
selección de enumeración ExportFormatType HTML32.
myExportOptions.ExportFormatType = ExportFormatType.HTML32
exportOptions.ExportFormatType = ExportFormatType.HTML32;
5.
Declare y cree una instancia de la clase HTMLFormatOptions con el nombre de variable
"html32FormatOptions".
Dim html32FormatOptions As HTMLFormatOptions = New
HTMLFormatOptions()
HTMLFormatOptions html32FormatOptions = new HTMLFormatOptions();
6.
Establezca el valor de la propiedad HTMLBaseFolderName de la instancia de html32FormatOptions en la
cadena exportPath y el nombre "Html32Folder".
html32FormatOptions.HTMLBaseFolderName = exportPath &
"Html32Folder"
html32FormatOptions.HTMLBaseFolderName = exportPath +
"Html32Folder";
7.
Establezca el valor de la propiedad HTMLFileName de la instancia de html32FormatOptions en el nombre
"html32.html".
html32FormatOptions.HTMLFileName = "html32.html"
html32FormatOptions.HTMLFileName = "html32.html";
8.
Establezca el valor de la propiedad HTMLEnableSeparatedPage de la instancia de html32FormatOptions en
"False".
html32FormatOptions.HTMLEnableSeparatedPages = False
html32FormatOptions.HTMLEnableSeparatedPages = false;
9.
Establezca el valor de la propiedad HTMLHasPageNavigator de la instancia de html32FormatOptions en
"False".
html32FormatOptions.HTMLHasPageNavigator = False
html32FormatOptions.HTMLHasPageNavigator = false;
444
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
10. Finalmente, asigne la instancia de html32FormatOptions a la propiedad FormatOptions de la instancia
ExportOptions.
myExportOptions.ExportFormatOptions = html32FormatOptions
exportOptions.ExportFormatOptions = html32FormatOptions;
1.5.2.7.3.7
Para crear el método auxiliar
ConfigureExportToHtml40
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Código.
3.
En la parte inferior de la clase, cree un método auxiliar privado denominado ConfigureExportToHtml40()
sin valor de devolución.
Public Sub ConfigureExportToHtml40()
End Sub
private void
ConfigureExportToHtml40()
{
}
4.
En el método, establezca el valor de la propiedad ExportFormatType de la instancia de ExportOptions en la
selección de enumeración ExportFormatType HTML40.
myExportOptions.ExportFormatType = ExportFormatType.HTML40
exportOptions.ExportFormatType = ExportFormatType.HTML40;
5.
Declare y cree una instancia de la clase HTMLFormatOptions con el nombre de variable
"html40FormatOptions".
Dim html40FormatOptions As HTMLFormatOptions = New
HTMLFormatOptions()
HTMLFormatOptions html40FormatOptions = new HTMLFormatOptions();
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
445
6.
Establezca el valor de la propiedad HTMLBaseFolderName de la instancia de html40FormatOptions en la
cadena exportPath y el nombre "Html40Folder".
html40FormatOptions.HTMLBaseFolderName = exportPath &
"Html40Folder"
html40FormatOptions.HTMLBaseFolderName = exportPath +
"Html40Folder";
7.
Establezca el valor de la propiedad html40FormatOptions de la instancia de html32FormatOptions en el
nombre "html40.html".
html40FormatOptions.HTMLFileName = "html40.html"
html40FormatOptions.HTMLFileName = "html40.html";
8.
Establezca el valor de la propiedad HTMLEnableSeparatedPage de la instancia de html40FormatOptions en
"True".
html40FormatOptions.HTMLEnableSeparatedPages = True
html40FormatOptions.HTMLEnableSeparatedPages = true;
9.
Establezca el valor de la propiedad HTMLHasPageNavigator de la instancia de html40FormatOptions en
"True".
html40FormatOptions.HTMLHasPageNavigator = True
html40FormatOptions.HTMLHasPageNavigator = true;
10. Establezca el valor de la propiedad FirstPageNumber de la instancia de html40FormatOptions en 1.
html40FormatOptions.FirstPageNumber = 1
html40FormatOptions.FirstPageNumber = 1;
11. Establezca el valor de la propiedad LastPageNumber de la instancia de html40FormatOptions en 3.
html40FormatOptions.LastPageNumber = 3
html40FormatOptions.LastPageNumber = 3;
446
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
12. Finalmente, asigne la instancia de html40FormatOptions a la propiedad FormatOptions de la instancia de
ExportOptions.
myExportOptions.FormatOptions = html40FormatOptions
exportOptions.FormatOptions = html40FormatOptions;
Resultados
Ha creado los métodos auxiliares privados que configuran los diversos formatos de exportación.
1.5.2.7.4
Llamar a los métodos desde la instrucción Case
En la lección anterior ha creado una instrucción Case en el método ExportSelection() con varias
instrucciones Case. Cada una de ellas está vinculada a una selección de la enumeración ExportFormatType.
Llame ahora a cada método de configuración desde la instrucción Case correspondiente y defina el valor de la
variable booleana selectedNoFormat.
1.5.2.7.4.1
Case
Para llamar a los métodos desde la instrucción
Procedimiento
1.
2.
Localice el método ExportSelection() que ha creado en la versión anterior.
En la instrucción Case Select Case [Visual Basic] o switch [C#], en la que corresponda a
ExportFormatType.NoFormat, establezca el valor de la variable booleana selectedNoFormat en True.
selectedNoFormat = True
selectedNoFormat = true;
3.
En el enunciado Case Select Case [Visual Basic] o switch [C#], en el caso de
ExportFormatType.CrystalReport, llame al método ConfigureExportToRpt().
selectedNoFormat = False
ConfigureExportToRpt()
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
447
selectedNoFormat = false;
ConfigureExportToRpt();
4.
En el enunciado Case Select Case [Visual Basic] o switch [C#], en el caso de
ExportFormatType.RichText, llame al método ConfigureExportToRtf().
selectedNoFormat = False
ConfigureExportToRtf()
selectedNoFormat = false;
ConfigureExportToRtf();
5.
En el enunciado Case Select Case [Visual Basic] o switch [C#], en el caso de
ExportFormatType.WordForWindows, llame al método ConfigureExportToDoc().
selectedNoFormat = False
ConfigureExportToDoc()
selectedNoFormat = false;
ConfigureExportToDoc();
6.
En el enunciado Case Select Case [Visual Basic] o switch [C#], en el caso de
ExportFormatType.Excel, llame al método ConfigureExportToXls().
selectedNoFormat = False
ConfigureExportToXls()
selectedNoFormat = false;
ConfigureExportToXls();
7.
En el enunciado Case Select Case [Visual Basic] o switch [C#], en el caso de
ExportFormatType.PortableDocFormat, llame al método ConfigureExportToPdf().
selectedNoFormat = False
ConfigureExportToPdf()
selectedNoFormat = false;
ConfigureExportToPdf();
8.
En el enunciado Case Select Case [Visual Basic] o switch [C#], en el caso de
ExportFormatType.HTML32, llame al método ConfigureExportToHtml32().
selectedNoFormat = False
ConfigureExportToHtml32()
selectedNoFormat = false;
ConfigureExportToHtml32();
448
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
9.
En el enunciado Case Select Case [Visual Basic] o switch [C#], en el caso de
ExportFormatType.HTML40, llame al método ConfigureExportToHtml40().
selectedNoFormat = False
ConfigureExportToHtml40()
selectedNoFormat = false;
ConfigureExportToHtml40();
10. En la instrucción Case Select Case [Visual Basic] o switch [C#], en la que corresponda a Switch
Else [Visual Basic] o default: [C#], establezca la variable booleana selectedNoFormat en True.
selectedNoFormat = True
selectedNoFormat = true;
Resultados
Si va a crear un proyecto en Visual Studio 2005 o posterior, deberá realizar los procedimientos de Crear métodos
para los nuevos formatos de exportación [página 451] antes de seguir con Llamar a los métodos para realizar la
exportación [página 449].
1.5.2.7.5
Llamar a los métodos para realizar la exportación
Ya está preparado para crear el método de evento de clic de botón para el control exportByType Button y, a
continuación, llamar a los métodos para realizar la exportación desde dicho método de evento.
1.5.2.7.5.1
Para crear el método de evento
exportByType_Click
Procedimiento
1.
Abra el formulario Web Forms o Windows Forms.
2.
En el menú Ver, haga clic en Diseñador.
3.
Haga doble clic en el control exportByType Button.
Se crea el método de evento exportByType_Click() y se muestra en la vista Código.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
449
4.
En el método de evento exportByType_Click(), especifique llamadas a los tres métodos de evento
creados anteriormente para realizar la exportación.
ExportSetup()
ExportSelection()
ExportCompletion()
ExportSetup();
ExportSelection();
ExportCompletion();
Resultados
Ya está preparado para crear y ejecutar el proyecto y, a continuación, exportar el informe en varios formatos.
1.5.2.7.5.2
Para probar el proyecto
Procedimiento
1.
En el menú Generar, seleccione Generar solución.
2.
Si existen errores de generación, continúe y corríjalos ahora.
3.
En el menú Depurar, haga clic en Iniciar.
La aplicación Web o para Windows se compila y muestra el informe Hierarchical Grouping. Un control
DropDownList presenta varios formatos de exportación y se muestra un botón Exportar como el tipo
seleccionado para realizar la exportación.
4.
Seleccione uno de los formatos de exportación en el control DropDownList y, a continuación, haga clic en el
botón Exportar como el tipo seleccionado.
Aparece un mensaje junto al botón que indica si la exportación ha terminado correctamente. De lo contrario,
se muestra un mensaje de error.
5.
Pruebe a exportar en varios formatos distintos.
6.
Vuelva a Visual Studio y haga clic en Detener para salir del modo de depuración.
7.
Compruebe en el directorio de archivos exportados del servidor Web o del equipo con Windows si los archivos
exportados están en él.
1.5.2.7.6
Anexo: Mejoras del código de exportación
Si ha instalado Visual Studio 2005 o posterior, o SAP Crystal Reports, tiene acceso a la API mejorada para
exportar el informe de Crystal a varios formatos.
450
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
En la API mejorada de SAP Crystal Reports, la enumeración ExportFormatTypes tiene dos nuevos formatos de
exportación: registros de Microsoft Excel (un archivo .xls que sólo contiene los datos) y archivos de texto.
Además, ahora tiene los siguientes métodos mejorados de exportación en la clase ReportDocument:
●
ExportToDisk(CrystalDecisions.Shared.ExportFormatType formatType, string fileName):
exporta un informe a la unidad de disco del servidor Web o al equipo con Windows.
●
ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType formatType,
System.Web.HttpResponse response, bool asAttachment, string attachmentName): exporta
un informe en el tipo de formato especificado a una ventana de explorador o exporta el informe como datos
adjuntos.
●
ExportToHttpResponse(CrystalDecisions.Shared.ExportOptions options,
System.Web.HttpResponse response, bool asAttachment, string attachmentName): exporta
un informe en el tipo de formato especificado a una ventana de explorador o exporta el informe como datos
adjuntos.
●
ExportToStream(CrystalDecisions.Shared.ExportFormatType formatType): exporta los datos de
un informe en el formato especificado a una secuencia de entrada o salida.
1.5.2.7.6.1
Crear métodos para los nuevos formatos de
exportación
En esta sección, aprenderá a modificar el proyecto, el que creó anteriormente en este tutorial, para incluir los
nuevos formatos de exportación.
Antes de que modifique el código para incluir los nuevos formatos de exportación, lleve a cabo todos los
procedimientos de Tutorial: Exportar a varios formatos [página 428].
1.5.2.7.6.1.1
Para modificar el código con el fin de que
incluya los nuevos formatos de exportación
Procedimiento
1.
Abra el proyecto terminado de este tutorial.
2.
Abra el formulario Web Forms o Windows Forms.
3.
En el menú Ver, haga clic en Código.
4.
En la instrucción "Select Case" [Visual Basic] o "switch" [C#] del método ExportSelection(),
agregue una instrucción Case para el formato ExcelRecord.
Case ExportFormatType.ExcelRecord
case ExportFormatType.ExcelRecord:
break;
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
451
Cree los métodos auxiliares privados que configuran los diversos formatos de exportación. En primer lugar,
va a crear el método ConfigureExportToXlsRec() para establecer las opciones de exportación de
ExcelRecord.
5.
En la parte inferior de la clase, cree un método auxiliar privado denominado ConfigureExportToXlsRec()
sin valor devuelto.
Public Sub ConfigureExportToXlsRec()
End Sub
private void ConfigureExportToXlsRec()
{
}
6.
En el método, establezca el valor de la propiedad ExportFormatType de la instancia de ExportOptions en la
selección de enumeración ExportFormatType ExcelRecord.
myExportOptions.ExportFormatType = ExportFormatType.ExcelRecord
exportOptions.ExportFormatType = ExportFormatType.ExcelRecord;
7.
Establezca el valor de la propiedad DiskFileName de la instancia de DiskFileDestinationOptions en la cadena
exportPath y, a continuación, agréguele el nombre de un documento con una extensión de archivo .xls.
myDiskFileDestinationOptions.DiskFileName = exportPath & "ExcelRecord.xls"
diskFileDestinationOptions.DiskFileName = exportPath + "ExcelRecord.xls";
8.
Establezca el valor de la propiedad ExportDestinationOptions de la instancia de ExportOptions en la instancia
de DiskFileDestinationOptions configurada en el paso anterior.
myExportOptions.ExportDestinationOptions = myDiskFileDestinationOptions
exportOptions.ExportDestinationOptions = diskFileDestinationOptions;
Resultados
Ya ha agregado correctamente dos nuevos formatos de exportación al proyecto.
Para explorar aún más la API mejorada, elija uno de los siguientes métodos de exportación mejorados:
●
Para reducir el código y no tener que establecer el valor de ExportOptions, continúe con Utilizar el método
ExportToDisk() [página 453].
●
452
En un sitio Web, si desea exportar el informe a una ventana de explorador, o como archivo adjunto a una
ventana de explorador, continúe con Utilizar el método ExportToHttpResponse() [página 463].
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
●
Si desea pasar los datos del informe a una secuencia de entrada o salida, continúe con Utilizar el método
ExportToStream() [página 468].
1.5.2.7.6.2
Utilizar el método ExportToDisk()
El método ExportToDisk() toma ExportFormatType y un parámetro de nombre de archivo. Este método
simplifica la necesidad de utilizar los métodos de configuración de exportación creados en Crear métodos que
configuran varios formatos de exportación [página 438].
En esta sección, aprenderá a crear un nuevo proyecto, a modificar un proyecto existente y a agregar código al
proyecto para utilizar el método ExportToDisk().
Requisitos previos:
●
Debe crear un proyecto basado en las instrucciones de Configurar un proyecto para el método
ExportToStreamConfigurar un proyecto para el método ExportToDisk() [página 453].
●
O bien, debe crear un proyecto basado en las instrucciones de Crear métodos para los nuevos formatos de
exportación [página 451].
A continuación, debe modificar el proyecto como se describe en Preparar el proyecto para el método
ExportToStreamPreparar un proyecto para el método ExportToDisk() [página 455].
1.5.2.7.6.2.1
Configurar un proyecto para el método
ExportToDisk()
En esta sección, aprenderá a crear un nuevo proyecto para el método ExportToDisk().
1.5.2.7.6.2.1.1
Para configurar un nuevo proyecto para el
método ExportToDisk()
Procedimiento
1.
Lleve a cabo todas las instrucciones de Agregar controles a los formularios Web Forms o Windows Forms
[página 430].
2.
Cree el método ExportSetup() y el método ExportSelection() en Crear métodos que realizan la
exportación [página 432].
3.
En el enunciado "Select Case" [Visual Basic] o "switch" [C#] del método ExportSelection(),
agregue una instrucción Case para el formato ExcelRecord.
Case ExportFormatType.ExcelRecord
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
453
case ExportFormatType.ExcelRecord:
break;
4.
Cree un bloque condicional para probar la variable booleana, selectedNoFormat.
If selectedNoFormat Then
Else
End If
if (selectedNoFormat)
{
}
else
{
}
5.
En el bloque If, establezca el valor de la propiedad Text del control Label del mensaje en la constante
FORMAT_NOT_SUPPORTED de la clase MessageConstants.
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED;
6.
En este bloque Else, establezca el valor de la propiedad Text del control Label del mensaje en la constante
SUCCESS de la clase MessageConstants.
message.Text = MessageConstants.SUCCESS
message.Text = MessageConstants.SUCCESS;
7.
Cree un bloque try/catch con la clase Exception a la que se hace referencia como variable denominada "ex".
El bloque try incluye los enunciados "Select Case" [Visual Basic] o "switch" [C#], así como el
bloque condicional.
Try
Catch ex As Exception
End Try
try
{
}
catch (Exception ex)
{
}
454
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
8.
En el bloque catch, establezca el valor de la propiedad Text del control Label del mensaje en la constante
FAILURE de la clase MessagesConstants y, a continuación, agréguele la propiedad Message del parámetro
Exception.
message.Text = MessageConstants.FAILURE & ex.Message
message.Text = MessageConstants.FAILURE + ex.Message;
9.
Fuera del bloque try/catch, establezca el valor de la propiedad Visible del control Label del mensaje en "True".
message.Visible = True
message.Visible = true;
10. En el menú Ver, haga clic en Diseñador.
11. Haga doble clic en el control exportByType Button.
Se crea el método de evento exportByType_Click() y aparece la vista Código.
12. En el método de evento exportByType_Click(), especifique llamadas a los métodos ExportSetup() y
ExportSelection().
ExportSetup()
ExportSelection()
ExportSetup();
ExportSelection();
1.5.2.7.6.2.2
Preparar un proyecto para el método
ExportToDisk()
En esta sección, aprenderá a modificar el proyecto resultante del procedimiento descrito en Crear métodos para
los nuevos formatos de exportación [página 451].
Ahora, debe eliminar algunas líneas de código que no son necesarias para el método ExportToDisk().
1.5.2.7.6.2.2.1
Para modificar el proyecto con el fin de
utilizar el método ExportToDisk()
Procedimiento
1.
Abra el proyecto.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
455
2.
Abra el formulario Web Forms o Windows Forms.
3.
En el menú Ver, haga clic en Código.
4.
En la parte superior de la clase, elimine las siguientes declaraciones de clase:
Private myDiskFileDestinationOptions As DiskFileDestinationOptions
Private myExportOptions As ExportOptions
private DiskFileDestinationOptions diskFileDestinationOptions;
private ExportOptions exportOptions;
5.
En el método ExportSetup(), elimine todas las líneas de código que van a continuación del bloque
condicional. (La última línea de código que llama a la propiedad ExportFormatOptions sólo aparece en los
proyectos de Windows.)
myDiskFileDestinationOptions = New DiskFileDestinationOptions()
myExportOptions = hierarchicalGroupingReport.ExportOptions
myExportOptions.ExportDestinationType = ExportDestinationType.DiskFile
myExportOptions.ExportFormatOptions = Nothing
diskFileDestinationOptions = new DiskFileDestinationOptions();
exportOptions = hierarchicalGroupingReport.ExportOptions;
exportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
exportOptions.ExportFormatOptions = null;
6.
7.
Elimine los siguientes métodos de configuración de exportación:
○
ConfigureExportToRpt()
○
ConfigureExportToRtf()
○
ConfigureExportToDoc()
○
ConfigureExportToXls()
○
ConfigureExportToPdf()
○
ConfigureExportToHtml32()
○
ConfigureExportToHtml40()
○
ConfigureExportToXlsRec()
○
ConfigureExportToTxt()
En los enunciados Case Select Case [Visual Basic] o switch [C#] de ExportSelection(), elimine
las llamadas a los métodos de configuración de exportación.
8.
En el método ExportCompletion(), elimine la llamada al método Export().
9.
Copie y pegue todo el código del método ExportCompletion() en la parte superior del método
ExportSelection().
10. Elimine el método ExportCompletion(), así como la llamada a ExportCompletion() en el evento de clic
de botón exportByType.
11. En el método ExportSelection(), corte y pegue los enunciados Case Select Case [Visual Basic] o
switch [C#] antes del bloque If del bloque try.
El bloque try/catch ahora tiene un aspecto parecido al siguiente:
Try
456
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
Select Case exportTypesList.SelectedIndex
Case ExportFormatType.NoFormat
selectedNoFormat = True
Case ExportFormatType.CrystalReport
Case ExportFormatType.RichText
Case ExportFormatType.WordForWindows
Case ExportFormatType.Excel
Case ExportFormatType.PortableDocFormat
Case ExportFormatType.HTML32
Case ExportFormatType.HTML40
End Select
If selectedNoFormat Then
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED
Else
message.Text = MessageConstants.SUCCESS
End If
Catch ex As Exception
message.Text = MessageConstants.FAILURE & ex.Message
End Try
try
{
switch ((ExportFormatType)exportTypesList.SelectedIndex)
{
case ExportFormatType.NoFormat:
selectedNoFormat = true;
break;
case ExportFormatType.CrystalReport:
break;
case ExportFormatType.RichText:
break;
case ExportFormatType.WordForWindows:
break;
case ExportFormatType.Excel:
break;
case ExportFormatType.PortableDocFormat:
break;
case ExportFormatType.HTML32:
break;
case ExportFormatType.HTML40:
break;
case ExportFormatType.ExcelRecord:
break;
}
if (selectedNoFormat)
{
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED;
}
else
{
message.Text = MessageConstants.SUCCESS;
}
}
catch (Exception ex)
{
message.Text = MessageConstants.FAILURE + ex.Message;
}
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
457
1.5.2.7.6.2.3
Modificar el método ExportSetup()
En esta sección, aprenderá a modificar el método ExportSetup() con el fin de crear carpetas para los formatos
de exportación HTML32 y HTML40.
1.5.2.7.6.2.3.1
Para modificar el método ExportSetup()
Procedimiento
1.
En la parte superior de la clase, agregue las siguientes declaraciones de clase:
Private exportPathHTML32 As String
Private exportPathHTML40 As String
private string exportPathHTML32;
private string exportPathHTML40;
2.
En el método ExportSetup(), cree una instancia de las variables de cadena exportPathHTML32 y
exportPathHTML40 en el directorio raíz de la unidad de disco duro.
exportPathHTML32 = "C:\Exported\HTML32\"
exportPathHTML40 = "C:\Exported\HTML40\"
exportPathHTML32 = "C:\\Exported\\HTML32\\";
exportPathHTML40 = "C:\\Exported\\HTML40\\";
Nota
Si desea colocar las carpetas en el directorio Web del servidor Web, agregue un prefijo al nombre de la
carpeta con la propiedad Request.PhysicalApplicationPath.
3.
Cree un bloque condicional que compruebe si ya existe el directorio de la cadena exportPathHTML32.
If Not System.IO.Directory.Exists(exportPathHTML32) Then
End If
if (!System.IO.Directory.Exists(exportPathHTML32))
{
}
4.
En el bloque condicional, llame al método CreateDirectory() de System.IO.Directory para crear el
directorio en la cadena exportPathHTML32.
System.IO.Directory.CreateDirectory(exportPathHTML32)
458
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
System.IO.Directory.CreateDirectory(exportPathHTML32);
5.
Cree un bloque condicional que compruebe si ya existe el directorio de la cadena exportPathHTML40.
If Not System.IO.Directory.Exists(exportPathHTML40) Then
End If
if (!System.IO.Directory.Exists(exportPathHTML40))
{
}
6.
En el bloque condicional, llame al método CreateDirectory() de System.IO.Directory para crear el
directorio en la cadena exportPathHTML40.
System.IO.Directory.CreateDirectory(exportPathHTML40)
System.IO.Directory.CreateDirectory(exportPathHTML40);
1.5.2.7.6.2.4
Llamar al método ExportToDisk()
En esta sección, aprenderá a llamar al método ExportToDisk() de cada instrucción Case del método
ExportSelection().
1.5.2.7.6.2.4.1
Para llamar al método ExportToDisk() en el
método ExportSelection()
Procedimiento
1.
En el método ExportSelection(), declare una variable de cadena y cree una instancia de ésta como una
cadena vacía.
Dim myFileName As String = ""
string fileName = "";
2.
En la instrucción Case ExportFormatType.CrystalReport, siga estos pasos:
a) Establezca el valor de la cadena de nombre de archivo en la cadena exportPath y, a continuación,
agréguele el nombre de un documento con una extensión de archivo .rpt.
myFileName = exportPath & "Report.rpt"
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
459
fileName = exportPath + "Report.rpt";
b) Llame al método ExportToDisk() desde la instancia de hierarchicalGroupingReport y pase
ExportFormatType.CrystalReport y la cadena de nombre de archivo.
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.CrystalReport,
myFileName)
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.CrystalReport,
fileName);
3.
En la instrucción Case ExportFormatType.RichText, siga estos pasos:
a) Establezca el valor de la cadena de nombre de archivo en la cadena exportPath y, a continuación,
agréguele el nombre de un documento con una extensión de archivo .rtf.
myFileName = exportPath & "RichTextFormat.rtf"
fileName = exportPath + "RichTextFormat.rtf";
b) Llame al método ExportToDisk() desde la instancia de hierarchicalGroupingReport y pase
ExportFormatType.RichText y la cadena de nombre de archivo.
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.RichText,
myFileName)
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.RichText,
fileName);
4.
En la instrucción Case ExportFormatType.WordForWindows, siga estos pasos:
a) Establezca el valor de la cadena de nombre de archivo en la cadena exportPath y, a continuación,
agréguele el nombre de un documento con una extensión de archivo .doc.
myFileName = exportPath & "Word.doc"
fileName = exportPath + "Word.doc";
b) Llame al método ExportToDisk() desde la instancia de hierarchicalGroupingReport y pase
ExportFormatType.WordForWindows y la cadena de nombre de archivo.
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.WordForWindows,
myFileName)
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.WordForWindows,
fileName);
5.
460
En la instrucción Case ExportFormatType.Excel, siga estos pasos:
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
a) Establezca el valor de la cadena de nombre de archivo en la cadena exportPath y, a continuación,
agréguele el nombre de un documento con una extensión de archivo .xls.
myFileName = exportPath & "Excel.xls"
fileName = exportPath + "Excel.xls";
b) Llame al método ExportToDisk() desde la instancia de hierarchicalGroupingReport y pase
ExportFormatType.Excel y la cadena de nombre de archivo.
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.Excel,
myFileName)
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.Excel,
fileName);
6.
En la instrucción Case ExportFormatType.PortableDocFormat, siga estos pasos:
a) Establezca el valor de la cadena de nombre de archivo en la cadena exportPath y, a continuación,
agréguele el nombre de un documento con una extensión de archivo .pdf.
myFileName = exportPath & "PortableDoc.pdf"
fileName = exportPath + "PortableDoc.pdf";
b) Llame al método ExportToDisk() desde la instancia de hierarchicalGroupingReport y pase
ExportFormatType.PortableDocFormat y la cadena de nombre de archivo.
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.PortableDocFormat,
myFileName)
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.PortableDocFormat,
fileName);
7.
En la instrucción Case ExportFormatType.HTML32, siga estos pasos:
a) Establezca el valor de la cadena de nombre de archivo en la cadena exportPathHTML32 y, a
continuación, agréguele el nombre de un documento con una extensión de archivo .html.
myFileName = exportPathHTML32 & "HTML32.html"
fileName = exportPathHTML32 + "HTML32.html";
b) Llame al método ExportToDisk() desde la instancia de hierarchicalGroupingReport y pase
ExportFormatType.HTML32 y la cadena de nombre de archivo.
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.HTML32, myFileName)
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
461
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.HTML32, fileName);
8.
En la instrucción Case ExportFormatType.HTML40, siga estos pasos:
a) Establezca el valor de la cadena de nombre de archivo en la cadena exportPathHTML40 y, a
continuación, agréguele el nombre de un documento con una extensión de archivo .html.
myFileName = exportPathHTML40 & "HTML40.html"
fileName = exportPathHTML40 + "HTML40.html";
b) Llame al método ExportToDisk() desde la instancia de hierarchicalGroupingReport y pase
ExportFormatType.HTML40 y la cadena de nombre de archivo.
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.HTML40,
myFileName)
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.HTML40,
fileName);
9.
En la instrucción Case ExportFormatType.ExcelRecord, siga estos pasos:
a) Establezca el valor de la cadena de nombre de archivo en la cadena exportPath y, a continuación,
agréguele el nombre de un documento con una extensión de archivo .xls.
myFileName = exportPath & "ExcelRecord.xls"
fileName = exportPath + "ExcelRecord.xls";
b) Llame al método ExportToDisk() desde la instancia de hierarchicalGroupingReport y pase
ExportFormatType.ExcelRecord y la cadena de nombre de archivo.
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.ExcelRecord,
myFileName)
hierarchicalGroupingReport.ExportToDisk(ExportFormatType.ExcelRecord,
fileName);
Resultados
Ya está preparado para crear y ejecutar el proyecto, para exportar el informe de Crystal en formatos distintos.
Si desea utilizar el resto de los métodos de la API mejorada, haga clic en el vínculo adecuado para pasar a esa
sección:
●
462
Utilizar el método ExportToHttpResponse() [página 463]
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
●
Utilizar el método ExportToStream() [página 468]
1.5.2.7.6.3
Utilizar el método ExportToHttpResponse()
El método ExportToHttpResponse() le permite exportar el informe de Crystal a una ventana de explorador o
como archivo adjunto. Este método se utiliza sólo en sitios Web.
Los métodos sobrecargados disponibles para ExportToHttpResponse() incluyen los siguientes:
●
ExportToHttpResponse(CrystalDecisions.Shared.ExportFormatType formatType,
System.Web.HttpResponse response, bool asAttachment, string attachmentName)
●
ExportToHttpResponse(CrystalDecisions.Shared.ExportOptions options,
System.Web.HttpResponse response, bool asAttachment, string attachmentName)
El método ExportToHttpResponse() no es compatible con la exportación a la respuesta HTTP para los formatos
HTML32 y HTML40. Por consiguiente, cuando trate de exportar a HTML32 o HTML40, aparecerá un mensaje de
error.
Si el valor de la variable booleana asAttachment Boolean se establece en True, aparece un cuadro de diálogo
Descarga de archivos. Si el valor de la variable booleana asAttachment se establece en False, el informe
exportado se abre en la ventana del explorador.
Si desea guardar el archivo, su nombre se establece en la variable de cadena attachmentName. Si no especifica la
variable attachmentName, el nombre del archivo predeterminado es "Sin título" con la extensión de archivo
especificada. Este nombre se puede cambiar en el cuadro de diálogo Guardar como.
1.5.2.7.6.3.1
Utilizar el método ExportToHttpResponse() con
la enumeración ExportFormatType
Para utilizar el método ExportToHttpResponse() con el parámetro ExportFormatType, debe seguir el
procedimiento Agregar controles a los formularios Web Forms o Windows Forms [página 430] para un sitio Web.
No necesita los métodos ExportSetup(), ExportSelection() ni ExportCompletion(). El código requerido se coloca
en el método de evento de clic exportByType.
1.5.2.7.6.3.1.1
Para utilizar el método
ExportToHttpResponse() con el parámetro ExportFormatType
Procedimiento
1.
Abra el formulario Web Forms.
2.
En el menú Ver, haga clic en Diseñador.
3.
Haga doble clic en el control exportByType Button.
Se crea el método de evento exportByType_Click() y aparece la vista Código.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
463
4.
En la parte superior de la clase, agregue una declaración de clase ExportOptions.
Private myExportOptions As ExportOptions
private ExportOptions exportOptions;
5.
En el método de evento exportByType_Click(), cree una instancia de la instancia de ExportOptions.
myExportOptions = New ExportOptions()
exportOptions = new ExportOptions();
6.
Cree un bloque try/catch con la clase Exception a la que se hace referencia como variable denominada "ex".
Try
Catch ex As Exception
End Try
try
{
}
catch (Exception ex)
{
}
7.
En el bloque try, cree un bloque condicional para comprobar si el elemento seleccionado de exportTypesList
es igual a ExportFormatType.NoFormat.
If (exportTypesList.SelectedIndex = ExportFormatType.NoFormat) Then
Else
End If
if ((ExportFormatType)exportTypesList.SelectedIndex == ExportFormatType.NoFormat)
{
}
else
{
}
8.
En el bloque If, establezca el valor de la propiedad Text del control Label del mensaje en la constante
FORMAT_NOT_SUPPORTED de la clase MessageConstants.
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED;
464
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
9.
En el bloque Else, asigne la propiedad ExportFormatType seleccionada de exportTypesList a la propiedad
ExportFormatType de la instancia de ExportOptions.
myExportOptions.ExportFormatType = exportTypesList.SelectedIndex
exportOptions.ExportFormatType =
(ExportFormatType)exportTypesList.SelectedIndex;
10. En el bloque Else, llame al método ExportToHttpResponse() de la instancia de
hierarchicalGroupingReport. Pase la instancia de ExportOptions, el objeto de respuesta de ASP.NET, un valor
booleano True y una cadena de nombre de archivo como parámetros del método.
Nota
La cadena de nombre de archivo del archivo adjunto no necesita extensión ya que ésta se agrega
automáticamente al archivo exportado.
hierarchicalGroupingReport.ExportToHttpResponse(myExportOptions,
Response, True, "ExportedReport")
hierarchicalGroupingReport.ExportToHttpResponse(exportOptions,
Response, True, "ExportedReport");
11. En el bloque catch, establezca el valor de la propiedad Text del control Label del mensaje en la constante
FAILURE de la clase MessagesConstants y, a continuación, agréguele la propiedad Message del parámetro
Exception.
message.Text = MessageConstants.FAILURE & ex.Message
message.Text = MessageConstants.FAILURE + ex.Message;
12. Fuera del bloque try/catch, establezca el valor de la propiedad Visible del control Label del mensaje en "True".
message.Visible = True
message.Visible = true;
Resultados
Ya está preparado para crear y ejecutar el proyecto, para exportar el informe de Crystal en formatos distintos.
Si desea utilizar el método ExportToHttpResponse() con la clase ExportOptions, vea Utilizar el método
ExportToHttpResponse() con la clase ExportOptions [página 466].
Para utilizar el resto de los métodos de la API mejorada, haga clic en el vínculo adecuado para pasar a esa sección:
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
465
●
Utilizar el método ExportToDisk() [página 453]
●
Utilizar el método ExportToStream() [página 468]
1.5.2.7.6.3.2
Utilizar el método ExportToHttpResponse() con
la clase ExportOptions
Para utilizar el método ExportToHttpResponse() con el parámetro ExportOptions, debe seguir el procedimiento
Agregar controles a los formularios Web Forms o Windows Forms [página 430] para un sitio Web. No necesita los
métodos ExportSetup(), ExportSelection() ni ExportCompletion(). El código requerido se coloca en el método de
evento de clic exportByType.
1.5.2.7.6.3.2.1
Para utilizar el método
ExportToHttpResponse() con el parámetro ExportOptions
Procedimiento
1.
Abra el formulario Web Forms.
2.
En el menú Ver, haga clic en Diseñador.
3.
Haga doble clic en el control exportByType Button.
Se crea el método de evento exportByType_Click() y aparece la vista Código.
4.
En el método de evento exportByType_Click(), cree un bloque try/catch con la clase Exception a la que
se hace referencia como variable denominada "ex".
Try
Catch ex As Exception
End Try
try
{
}
catch (Exception ex)
{
}
5.
En el bloque try, cree un bloque condicional para comprobar si el elemento seleccionado de
exportTypesList es igual a ExportFormatType.NoFormat.
If (exportTypesList.SelectedIndex = ExportFormatType.NoFormat) Then
Else
End If
466
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
if ((ExportFormatType)exportTypesList.SelectedIndex ==
ExportFormatType.NoFormat)
{
}
else
{
}
6.
En el bloque If, establezca el valor de la propiedad Text del control Label del mensaje en la constante
FORMAT_NOT_SUPPORTED de la clase MessageConstants.
Nota
Se cumple la condición If cuando se selecciona el valor NoFormat de DropDownList.
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED;
7.
En el bloque Else, llame al método ExportToHttpResponse() de la instancia de
hierarchicalGroupingReport. Pase la ExportFormatType seleccionada, el objeto ASP.NET Response, un valor
booleano True y una cadena de nombre de archivo como parámetros del método.
Nota
La cadena de nombre de archivo del archivo adjunto no necesita extensión ya que ésta se agrega
automáticamente al archivo exportado.
hierarchicalGroupingReport.ExportToHttpResponse(exportTypesList.SelectedIndex,
Response, True, "ExportedReport")
hierarchicalGroupingReport.ExportToHttpResponse((ExportFormatType)exportTypesList
.SelectedIndex,
Response, True, "ExportedReport");
8.
En el bloque catch, establezca el valor de la propiedad Text del control Label del mensaje en la constante
FAILURE de la clase MessagesConstants y, a continuación, agréguele la propiedad Message del parámetro
Exception.
message.Text = MessageConstants.FAILURE & ex.Message
message.Text = MessageConstants.FAILURE + ex.Message;
9.
Fuera del bloque try/catch, establezca el valor de la propiedad Visible del control Label del mensaje en "True".
message.Visible = True
message.Visible = true;
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
467
Resultados
Ya está preparado para crear y ejecutar el proyecto, para exportar el informe de Crystal en formatos distintos.
Para utilizar el resto de los métodos de la API mejorada, haga clic en el vínculo adecuado para pasar a esa sección:
●
Utilizar el método ExportToDisk() [página 453]
●
Utilizar el método ExportToStream() [página 468]
1.5.2.7.6.4
Utilizar el método ExportToStream()
En esta sección, aprenderá a utilizar el método ExportToStream() para exportar el informe a la secuencia de
entrada o salida como secuencia de bytes. Después, aprenderá a escribir la secuencia de bytes en un archivo del
formato que especifique.
Al exportar el informe a los formatos HTML, las imágenes no se exportan. Se recomienda usar los métodos
ExportToHttpResponse() si se desea exportar a los formatos HTML.
Requisitos previos:
●
Debe crear un proyecto basado en las instrucciones de Configurar un proyecto para el método
ExportToStreamConfigurar un proyecto para el método ExportToStream() [página 468].
●
O bien, debe crear un proyecto basado en las instrucciones de Crear métodos para los nuevos formatos de
exportación [página 451].
A continuación, debe modificar el proyecto como se describe en Preparar el proyecto para el método
ExportToStreamPreparar el proyecto para el método ExportToStream() [página 470].
1.5.2.7.6.4.1
Configurar un proyecto para el método
ExportToStream()
En esta sección, aprenderá a crear un nuevo proyecto para el método ExportToStream().
1.5.2.7.6.4.1.1
Para configurar un nuevo proyecto para el
método ExportToStream()
Procedimiento
1.
Lleve a cabo todas las instrucciones de Agregar controles a los formularios Web Forms o Windows Forms
[página 430].
2.
Cree el método ExportSetup() y el método ExportSelection() en Crear métodos que realizan la
exportación [página 432].
468
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
3.
En el enunciado "Select Case" [Visual Basic] o "switch" [C#] del método ExportSelection(),
agregue una instrucción Case para el formato ExcelRecord.
Case ExportFormatType.ExcelRecord
case ExportFormatType.ExcelRecord:
break;
4.
Cree un bloque condicional para probar la variable booleana, selectedNoFormat.
If selectedNoFormat Then
Else
End If
if (selectedNoFormat)
{
}
else
{
}
5.
En el bloque If, establezca el valor de la propiedad Text del control Label del mensaje en la constante
FORMAT_NOT_SUPPORTED de la clase MessageConstants.
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED;
6.
En este bloque Else, establezca el valor de la propiedad Text del control Label del mensaje en la constante
SUCCESS de la clase MessageConstants.
message.Text = MessageConstants.SUCCESS
message.Text = MessageConstants.SUCCESS;
7.
Cree un bloque try/catch con la clase Exception a la que se hace referencia como variable denominada "ex".
El bloque try incluye los enunciados "Select Case" [Visual Basic] o "switch" [C#], así como el
bloque condicional.
Try
Catch ex As Exception
End Try
try
{
}
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
469
catch (Exception ex)
{
}
8.
En el bloque catch, establezca el valor de la propiedad Text del control Label del mensaje en la constante
FAILURE de la clase MessagesConstants y, a continuación, agréguele la propiedad Message del parámetro
Exception.
message.Text = MessageConstants.FAILURE & ex.Message
message.Text = MessageConstants.FAILURE + ex.Message;
9.
Fuera del bloque try/catch, establezca el valor de la propiedad Visible del control Label del mensaje en "True".
message.Visible = True
message.Visible = true;
10. En el menú Ver, haga clic en Diseñador.
11. Haga doble clic en el control exportByType Button.
Se crea el método de evento exportByType_Click() y aparece la vista Código.
12. En el método de evento exportByType_Click(), especifique llamadas a los métodos ExportSetup() y
ExportSelection().
ExportSetup()
ExportSelection()
ExportSetup();
ExportSelection();
1.5.2.7.6.4.2
Preparar el proyecto para el método
ExportToStream()
En esta sección, aprenderá a modificar el proyecto resultante del procedimiento descrito en Crear métodos para
los nuevos formatos de exportación [página 451].
Ahora, debe eliminar algunas líneas de código que no son necesarias para el método ExportToStream().
470
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.2.7.6.4.2.1
Para modificar el proyecto con el fin de
utilizar el método ExportToStream()
Procedimiento
1.
Abra el proyecto.
2.
Abra el formulario Web Forms o Windows Forms.
3.
En el menú Ver, haga clic en Código.
4.
En la parte superior de la clase, elimine las siguientes declaraciones de clase:
Private myDiskFileDestinationOptions As DiskFileDestinationOptions
Private myExportOptions As ExportOptions
private DiskFileDestinationOptions diskFileDestinationOptions;
private ExportOptions exportOptions;
5.
En el método ExportSetup(), elimine todas las líneas de código que van a continuación del bloque
condicional. (La última línea de código que llama a la propiedad ExportFormatOptions sólo aparece en los
proyectos de Windows.)
myDiskFileDestinationOptions = New DiskFileDestinationOptions()
myExportOptions = hierarchicalGroupingReport.ExportOptions
myExportOptions.ExportDestinationType = ExportDestinationType.DiskFile
myExportOptions.ExportFormatOptions = Nothing
diskFileDestinationOptions = new DiskFileDestinationOptions();
exportOptions = hierarchicalGroupingReport.ExportOptions;
exportOptions.ExportDestinationType = ExportDestinationType.DiskFile;
exportOptions.ExportFormatOptions = null;
6.
7.
Elimine los siguientes métodos de configuración de exportación:
○
ConfigureExportToRpt()
○
ConfigureExportToRtf()
○
ConfigureExportToDoc()
○
ConfigureExportToXls()
○
ConfigureExportToPdf()
○
ConfigureExportToHtml32()
○
ConfigureExportToHtml40()
○
ConfigureExportToXlsRec()
En los enunciados Case Select Case [Visual Basic] o switch [C#] de ExportSelection(), elimine
las llamadas a los métodos de configuración de exportación.
8.
En el método ExportCompletion(), elimine la llamada al método Export().
9.
Copie y pegue todo el código del método ExportCompletion() en la parte superior del método
ExportSelection().
10. Elimine el método ExportCompletion(), así como la llamada a ExportCompletion() en el evento de clic
de botón exportByType.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
471
11. En el método ExportSelection(), corte y pegue los enunciados Case Select Case [Visual Basic] o
switch [C#] antes del bloque If del bloque try.
El bloque try/catch ahora tiene un aspecto parecido al siguiente:
Try
Select Case exportTypesList.SelectedIndex
Case ExportFormatType.NoFormat
selectedNoFormat = True
Case ExportFormatType.CrystalReport
Case ExportFormatType.RichText
Case ExportFormatType.WordForWindows
Case ExportFormatType.Excel
Case ExportFormatType.PortableDocFormat
Case ExportFormatType.HTML32
Case ExportFormatType.HTML40
End Select
If selectedNoFormat Then
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED
Else
message.Text = MessageConstants.SUCCESS
End If
Catch ex As Exception
message.Text = MessageConstants.FAILURE & ex.Message
End Try
try
{
switch ((ExportFormatType)exportTypesList.SelectedIndex)
{
case ExportFormatType.NoFormat:
selectedNoFormat = true;
break;
case ExportFormatType.CrystalReport:
break;
case ExportFormatType.RichText:
break;
case ExportFormatType.WordForWindows:
break;
case ExportFormatType.Excel:
break;
case ExportFormatType.PortableDocFormat:
break;
case ExportFormatType.HTML32:
break;
case ExportFormatType.HTML40:
break;
case ExportFormatType.ExcelRecord:
break;
}
if (selectedNoFormat)
{
message.Text = MessageConstants.FORMAT_NOT_SUPPORTED;
}
else
{
message.Text = MessageConstants.SUCCESS;
}
472
© 2014 SAP AG o una filial de SAP. Reservados todos los derechos.
Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
Manual del desarrollador del SDK de SAP Crystal Reports .Net
}
catch (Exception ex)
{
message.Text = MessageConstants.FAILURE + ex.Message;
}
1.5.2.7.6.4.3
Modificar las instrucciones Case en el método
ExportSelection()
En esta sección, aprenderá a establecer una cadena de nombre de archivo para cada instrucción Case de
ExportFormatType.
1.5.2.7.6.4.3.1
Para modificar las instrucciones Case en el
método ExportSelection()
Procedimiento
1.
En el método ExportSelection(), declare una variable de cadena y cree una instancia de ésta como una
cadena vacía.
Dim myFileName As String = ""
string fileName = "";
2.
En la instrucción Case ExportFormatType.CrystalReport, establezca la cadena de nombre de archivo en la
cadena exportPath que va seguida de un nombre de documento reconocible con una extensión de
archivo .rpt.
myFileName = exportPath & &q