Está en la página 1de 1000

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 Migrar la aplicación SAP Crystal Reports .Net. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Configurar el entorno de desarrollo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.1 Configuración del sistema. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2.2 Configuración de proyectos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3 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
1.4 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
1.5 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
1.6 Implementación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
1.6.1 Componentes de implementación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612
1.6.2 Implementación para Visual Studio. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 623
1.7 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
1.8 Glosario. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
2 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Puede agregar filas o columnas a un gráfico de tabla de
cruzadas
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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
4 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.
● Para mostrar el código de barras en un color diferente.

Ordenación de campos interactiva 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
6 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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).

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
8 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 13.0.2000.0
Microsoft Visual Studio (.NET 4.0 Framework)

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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
10 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Código de clave de producto de SAP Crystal


Reports

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]

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
12 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Ubicación predeterminada del directorio de


visores

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 Ruta de archivos

SAP Crystal Reports, 4.x Framework Directorio de archivos al usar ASP.NET Development Server:
versión para progra­
\Windows\Microsoft.NET\Framework
madores de Micro­
\v4.0.30319\ASP.NETClientFiles
soft Visual Studio
\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 Directorio de archivos al usar ASP.NET Development Server:
versión para progra­
\Windows\Microsoft.NET\Framework
madores de Micro­
\v2.0.50727\ASP.NETClientFiles
soft Visual Studio
\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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
14 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Preparar el formulario Web Form

1.2.2.1.2.1 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
16 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
18 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
20 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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>

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
22 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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>

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
24 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
26 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Configuración de proyectos de Windows en Visual


Studio

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 Crear un nuevo proyecto de Windows en Visual


Studio

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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
28 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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. En el menú Ver, haga clic en Diseñador.
3. 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:

○ CrystalDecisions.CrystalReports.Engine
○ CrystalDecisions.Shared

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
30 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Arquitectura

1.3.1.1 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
32 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 El control muestra información de resumen de informe en una pequeña


CrystalReportPartsViewer. 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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
34 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
36 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
38 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Esta clase incluye varias instancias de InfoObject. InfoStore la utiliza para mover instancias
InfoObjects 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
40 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
42 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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­ Un objeto de datos (DataSet, Data­ Ninguna
trol DataGrid) Reader, DataView, IDictionary, ICo­
llection, DataTable).

Control de visores de informes .NET Un objeto de informe (que encap­ EL archivo de informe de Crystal
(como control CrystalReportVie­ sula un archivo de informe Crystal). dispone de conectividad de datos
wer) 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).

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
44 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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";

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
46 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
48 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Tarea inteligente CrystalReportViewer para sitios


Web

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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
50 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
52 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Pasar los pares de nombre
URL 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
54 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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:

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
56 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
58 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
60 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
62 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 SAP Crystal Reports Ser­
sión para programadores ver o plataforma SAP Bu­
de Microsoft Visual Stu­ sinessObjects Business
dio Intelligence

Compatibilidad ASP.NET X X X

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
64 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. Manual del desarrollador del SDK de SAP Crystal Reports .Net
Función SAP Crystal Reports, ver­ SAP Crystal Reports SAP Crystal Reports Ser­
sión para programadores ver o plataforma SAP Bu­
de Microsoft Visual Stu­ sinessObjects Business
dio Intelligence

Vista interactiva de infor­ X X X


mes

Inicio de sesión único X X X

Compatibilidad con aplica­ X X X


ciones Windows

Diseñador de informes X X
mejorado

Compatibilidad con dispo­ X X


sitivos móviles

Controladores nativos de X X
bases de datos

Orígenes de datos OLAP X X

Comprobador de depen­ X X
dencias de informes

Plantillas X X

Parámetros dinámicos en X X
cascada

Despliegue multiplata­ X
forma

Sistema de administración X
de entrega de la informa­
ción

Seguridad integrada X

Equilibrio de carga X

Repositorio de objetos de X
informes

Programación de informes X

Creación y modificación X X
de informes mediante pro­
gramación

Modelo de objetos Crystal­ X X X


ReportViewer

Modelo de objetos Report­ X X X


Document

Modelo de objetos Report­ X X


ClientDocument

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 SAP Crystal Reports Ser­
sión para programadores ver o plataforma SAP Bu­
de Microsoft Visual Stu­ sinessObjects Business
dio Intelligence

Servidor RAS X

Modelo de objetos InfoOb­ X


ject

Escalabilidad Baja Baja Media-alta

Compatibilidad con varias X X


versiones de .Net Frame­
work

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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
66 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Optimizar el código

1.3.4.2.1 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:

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
68 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Configurar 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 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 Optimizar los informes

1.3.4.3.1 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
70 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
72 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
74 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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].

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
76 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
78 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
80 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
82 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
84 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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>

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
86 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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" %>

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
88 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
90 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Agregar autenticación NT al servicio Web de


informes

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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
92 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Editar la aplicación cliente para agregar acceso


seguro

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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
94 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
96 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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();

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
98 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
100 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
102 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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";

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
104 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Para agregar una etiqueta identity al archivo


Web.config

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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
106 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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)

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
108 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
110 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
112 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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();
}

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
114 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.1.1.3 Para habilitar la impresión con ActiveX en un sitio
web

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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
116 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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)

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
118 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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]

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
120 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
122 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 SDK de SAP Crystal SAP Crystal Reports


CrystalReportViewer Reports .NET Designer
SAP Crystal Reports (RPT) x x x

Sólo lectura de SAP Crystal x x x


Reports (RPTR)

HTML 4.0 x x

Microsoft Excel (97-2003) x x x

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
124 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. Manual del desarrollador del SDK de SAP Crystal Reports .Net
Formato Control SDK de SAP Crystal SAP Crystal Reports
CrystalReportViewer Reports .NET Designer
Microsoft Excel (97-2003), x x x
sólo datos

Microsoft Excel 2007(XLSX), x x x


sólo datos

Microsoft Word (97-2003) x x x

Microsoft Word (97-2003) - x x x


Editable

ODBC x

PDF x x x

Estilo de registro: columnas x


con espacios

Estilo de registro: columnas x


sin espacios

Definición de informe x

Formato de texto enriquecido x x x


(RTF)

Valores separados (CSV) x x

Texto separado por x x


tabuladores (TTX)

Texto x x

XML x x 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()

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
126 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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
DiskFileDestinationOptions del archivo de salida.

ExchangeFolder Un objeto ● El perfil del usuario y la contraseña


ExchangeFolderDestinationOp del servidor de Exchange.
tions ● La ruta a la carpeta de Exchange.

MicrosoftMail Un objeto ● El nombre de usuario y la


MicrosoftMailDestinationOpt contraseña de la cuenta de correo
ions electrónico.
● El asunto y el cuerpo del mensaje
de correo electrónico.
● Los destinatarios del mensaje de
correo electrónico.

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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
128 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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) ● Las páginas primera y última del
● Microsoft Excel (97-2003), sólo informe que se va a exportar.
datos ● El ancho de columna
predeterminado.
● Si se incluirán o no encabezados de
columna.

Un objeto HTMLFormatOptions ● HTML 4.0 ● 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.

Un objeto ● PDF ● Las páginas primera y última del


PdfRtfWordFormatOptions ● Formato de texto enriquecido informe que se va a exportar.
(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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
130 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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();

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
132 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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:

● Los valores del parámetro deben ser del mismo tipo que el parámetro.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
134 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
136 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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>

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
138 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Para establecer parámetros discretos en un
informe

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();

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
140 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
142 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
144 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Fórmula de selección de Fórmula de selección de


registros datos guardados 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 Fórmula de selección de Fórmula de selección de


registros datos guardados grupos

¿Puede referirse al resu­ No. Sí. Sí.


men?

¿Cuándo se evalúa la fór­ Durante la lectura de los Si se usa un resumen, en Al imprimir.


mula? registros. el momento de impresión;
de lo contrario, durante la
lectura de los registros.

¿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í.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
146 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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]

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
148 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
150 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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. Recupere IConnectionInfo en el índice 0 de la instancia de DataSourceConnections.
3. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
152 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
154 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. Manual del desarrollador del SDK de SAP Crystal Reports .Net
Ejemplo

Private Sub setDatabaseLogon(ByVal databaseName As String, ByVal userName As


String, ByVal password As String)
Dim myCconnectionInfo As New ConnectionInfo()
Dim logOnInfos As TableLogOnInfos = crystalReportViewer.LogOnInfo
For 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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
156 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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
{

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
158 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
160 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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]

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
162 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Ubicación del Intellisense Publicar para Copiar para


ce informe disponible implementar implementar

Verdadero App_Code/Global X X X

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
164 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. Manual del desarrollador del SDK de SAP Crystal Reports .Net
embedRptInResour Ubicación del Intellisense Publicar para Copiar para
ce informe disponible implementar implementar

Verdadero Fuera de App_Code/ X X


Global, pero en el
proyecto

Falso App_Code/Global X X X

Falso Fuera de App_Code/ 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";

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
166 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.
● Para optimizar el escenario anterior, haga copias de los informes incrustados en el servidor RAS e indique a
RAS que las use.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
168 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Enlazar a una ruta de directorio de archivos en el
código

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]

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
170 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
172 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
174 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
176 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Nombre del nodo si­ Versiones de SAP Descripción Requisitos para te­
expuesta mediante tuado debajo de Crystal Reports ner acceso a este
Crystal Services Crystal Services nodo

ServerFileReport Archivos de servidor SAP Crystal Reports Expone los informes Configurar permisos
para Visual Stu­ del directorio de ar­ para los usuarios
dio .NET 2003 chivos local me­ ASPNET. (Vea Enla­
diante un servicio zar a Archivos de
(el nodo se reem­
Web común, Server­ servidor (VS .NET
plaza al instalar SAP
FileReportService. 2003) [página
Crystal Reports 9 o
Para obtener más in­ 179].)
10)
formación, vea Enla­
zar a Archivos de
servidor (VS .NET
2003) [página 179].

EnterpriseReport Crystal Enterprise SAP Crystal Reports Accede a servicios Acceso a la instala­
para Visual Stu­ Web de informes ción de Crystal En­
dio .NET 2003 mostrados por el terprise, que expone
servidor WCS de los informes Enter­
(el nodo se reem­
Crystal Enterprise 8, prise mediante su
plaza al instalar SAP
8.5, 9 o 10 mediante servidor WCS.
Crystal Reports 9 o
un servicio Web co­
10)
mún, EnterpriseRe­
portService. Para
obtener más infor­
mación, vea Enlazar
a Crystal Enterprise
(VS .NET 2003) [pá­
gina 183].

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
178 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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. En el CD de instalación de Microsoft Visual Studio .NET, busque Crystal Reports.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
180 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Para codificar Archivos de servidor


manualmente

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();

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
182 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

● 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:

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
184 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
186 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Para codificar Archivos de servidor


manualmente

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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
188 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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

○ Server Reports

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
190 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
192 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
194 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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. Agregue las siguientes referencias de ensamblados al proyecto.

○ CrystalDecisions.Enterprise.Framework
○ CrystalDecisions.Enterprise.InfoStore
○ CrystalDecisions.Enterprise.Viewing.ReportSource
○ CrystalDecisions.ReportAppServer.Controllers
4. 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)

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
196 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
198 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
200 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
202 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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. Para ver el informe, cree y ejecute el proyecto.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
204 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
206 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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;

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
208 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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:

○ IsCacheable
○ ShareDBLogonInfo
○ CacheTimeOut
○ CreateReport()
○ GetCustomizedCacheKey(solicitud RequestContext)
6. 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;
}
set
{
}
}

8. 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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
210 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
212 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Nombre del nodo si­ Versiones de SAP Descripción Requisitos para te­
expuesta mediante tuado debajo de Crystal Reports ner acceso a este
Crystal Services Crystal Services nodo

ReportDocument Servidor de aplica­ SAP Crystal Reports Expone informes de Instale un servidor
ciones de informes 10 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 Expone informes Instalar Crystal En­
10 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
214 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
216 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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. Cree y ejecute el proyecto Web para ver el informe.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
218 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.4.5.4 Cuándo utilizar informes normales o almacenados en
caché

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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
220 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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]

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
222 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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">

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
224 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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>

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
226 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
228 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
230 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Relaciones entre puntos de código y unidades de


código

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:

● 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
232 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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]

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
234 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Personalizar el control CrystalReportViewer con


temas

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]

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
236 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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;
}

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
238 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
240 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
242 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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;

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
244 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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;

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
246 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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().

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
248 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 . Deberá crear manualmente una conexión
ODBC a la base de datos.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
250 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
252 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
254 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
256 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
258 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Para crear y configurar un control ListBox 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:

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
260 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
262 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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);

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
264 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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".

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
266 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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)

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
268 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
270 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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
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.

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"];
}

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
272 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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:

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
274 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
276 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 =

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
278 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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);

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
280 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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"

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
282 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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;

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
284 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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. 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
286 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
288 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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";

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
290 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Agregar controles para usarlos en la fórmula de


selección

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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
292 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. Manual del desarrollador del SDK de SAP Crystal Reports .Net
b) Establezca Text como Volver a mostrar el informe.

1.5.1.4.4 Establecer la fórmula de selección manualmente en


código

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".

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
294 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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();

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
296 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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().

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
298 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
300 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
302 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
304 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
306 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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();

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
308 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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;

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
310 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
312 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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));

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
314 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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));

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
316 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Para agregar controles para cambiar el color de


fondo

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();

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
318 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. Manual del desarrollador del SDK de SAP Crystal Reports .Net
1.5.1.5.6.3 Para asignar la selección de color de fondo en un
sitio Web

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);

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
320 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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 Agregar código para seleccionar una página del


informe

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));

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
322 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
324 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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;

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
326 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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.

Manual del desarrollador del SDK .Net de SAP Crystal Reports para Visual Studio
328 © 2014 SAP AG o una filial de SAP. Reservados todos los derechos. 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