Código
Puedes descargar el proyecto de esta lección.
También puedes copiar el código que se usa en el video por aquí:
En el archivo PrintCustomerInvoicesAction.java:
public class PrintCustomerInvoicesAction extends JasperReportBaseAction {
@Override
protected JRDataSource getDataSource() throws Exception {
return null;
}
@Override
protected String getJRXML() throws Exception {
return "CustomerInvoices.jrxml";
}
@Override
protected Map getParameters() throws Exception {
Messages errors = MapFacade.validate("Customer", getView().getValues());
if (errors.contains()) throw new ValidationException(errors);
Map parameters = new HashMap();
parameters.put("number", getView().getValueInt("number"));
parameters.put("name", getView().getValue("name"));
return parameters;
}
}
En el archivo
controllers.xml:
<controller name="Customer">
<extends controller="Invoicing"/>
<action name="printCustomerInvoices"
class="com.yourcompany.invoicing.actions.PrintCustomerInvoicesAction"
mode="detail"
icon="printer"/>
</controller>
Transcripción
Hola, soy Mónica. En esta lección aprenderás a diseñar reportes para
trabajar directamente con la base de datos, creando tu propia consulta
SQL en el reporte mismo.
Primero creamos un reporte nuevo llamado customer invoices. Luego vamos
al panel repository explorer. Clic derecho en data adapter y creamos uno
nuevo. Elegimos la conexión por JDBC y le damos un nombre para
diferenciarlo de otros: Invoicing. En JDBC driver, para nuestro caso
seleccionamos la opción de HSQLDB server. Pero puedes trabajar con
cualquier otra base de datos, como MySQL, Oracle, PostgreSQL, entre
otros. En cuanto al URL, usuario y contraseña podemos encontrarlo en el
archivo context.xml ubicado en la carpeta src/main/webapp/META-INF. Por
defecto, en HSQLDB no se diferencia entre mayúsculas y minúsculas para
el usuario. Recuerda iniciar el proyecto para que inicie la base de
datos HSQLDB. Ingresamos el URL y usuario que vimos en database manager
y hacemos clic en "Test" para probar la conexión. Perfecto. Ahora
creamos unos parámetros que se usarán en el reporte: number y name.
Luego hacemos clic en el icono para abrir la ventana de dataset and
query dialog. Aquí seleccionamos el data adapter que creamos recién.
Podemos ver todas las tablas de la aplicación. En la derecha podemos
ingresar nuestra consulta. Usaremos el parámetro number en la consulta,
que básicamente busca todas las facturas de ese cliente y muestra
información de esas facturas. Luego hacemos clic en "read fields" para
que se lean los campos; esto a la vez verifica que la consulta esté bien
escrita. Una vez leídos los campos, aquí abajo se cargan los nombres y
tipos. En caso de que sea necesario, podemos seleccionar alguno y
editarlo. Estos campos se cargan automáticamente en fields del reporte.
Vamos a probar la consulta. Cambiamos el parámetro por el número 1 y
vamos a data preview. Hacemos clic en "refresh preview data" y nos
mostrará los resultados de la consulta. Perfecto. Volvemos a poner el
parámetro en su lugar y hacemos clic en "OK". Aquí vemos que
efectivamente están todos los fields de la consulta. Vamos a agregarlos
al reporte. Otra manera de probar el reporte es en la vista de preview.
Ingresamos los parámetros. En nuestro caso, el número debe ser real, ya
que se usa para buscar en la base de datos. Al parecer, se cargan bien
los datos. Vamos a ordenar un poco la vista y cambiar el formato de
fecha. En el pattern expression de la fecha ingresamos el formato que
queremos. Probamos de nuevo. Perfecto, así lo deberíamos visualizar en
la aplicación.
Vamos a crear la acción para generar el reporte. Como siempre, primero
creamos el controlador si es necesario.
Luego creamos la acción que extienda de JasperReportBaseAction. En
dataSource podemos enviar null, porque el reporte ya tiene su dataset.
En parámetros vamos a enviar number y name, tomando los datos desde la
vista. En getView().getValue() debemos usar como parámetro el nombre de
las propiedades para obtener su valor desde la vista donde se está
ejecutando la acción. Copiamos el reporte e iniciamos la aplicación.
Perfecto. Vamos al módulo de invoice para ver si se han traído los
registros correctamente. Sí. Los datos del monto total están bien.
Hay muchas formas de trabajar con la base de datos. No necesariamente se
debe hacer desde el reporte; también puedes hacer una consulta JPA en la
acción de OpenXava y luego enviar los resultados al reporte para
trabajarlos allí. Si tienes alguna duda o problema, puedes preguntarnos
por el foro. También puedes descargar el código de esta lección por el
enlace del repositorio, ambos enlaces se encuentran en la descripción
del video. Chao.