Cuándo utilizar informes incrustados o no incrustados

Al planear la creación de una aplicación con el SDK de Crystal Reports, una de las consideraciones más importantes es si se utilizan informes incrustados o no incrustados. Conocer los aspectos fundamentales del SDK que afectan a la incrustación de informes le ayuda a elegir la mejor estructura del proyecto de Crystal Reports para Visual Studio.

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

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.

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.

Nota

En las versiones anteriores de esta documentación se hacía referencia a los informes incrustados como "con tipos declarados". El término que se usa ahora para hacer referencia a un informe que se agrega o importa a un proyecto de Visual Studio es "incrustado".

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:

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

    Este método sólo funciona para informes ubicados en una ruta de directorio de archivos.

  • El modelo de objetos CrystalReportViewer utiliza la propiedad CrystalReportViewer.ReportSource para enlazar el informe directamente al control.
    Nota

    Se prefiere el uso del modelo de objetos ReportDocument. Para obtener más información, vea ¿Cuál es el modelo de objetos que se debe utilizar?.

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.

Si está aprendiendo a desarrollar e implementar Crystal Reports con Visual Studio por primera vez, le resultará más fácil incrustar los informes. Una vez que los informes están incrustados, siempre existen como clase del proyecto, están disponibles desde IntelliSense y se verán en el Explorador de objetos. No tiene que preocuparse de si se mueven o eliminan en el directorio de archivos ni de escribir la ruta correctamente.

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. Un informe muy grande se compila como un recurso incrustado.

Además, los informes no incrustados tienen ventajas de escalabilidad.

Los sitios Web en Crystal Reports para Visual Studio 2005 y Crystal Reports Basic para Visual Studio 2009 sólo trabajan con informes no incrustados.

Los casos de enlace de informes le mostrarán muchas formas de enlazar informes incrustados y no incrustados (vea ¿Cuál es el caso de enlace de informes que se debe utilizar?). 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.