SubReporte Referenciado de Usuario
Recordemos que el entity Usuario contiene un List<> referencia a Rol.
public class Usuario {
@Id
private String username;
private String password;
private String nombre;
private String cedula;
private String celular;
private String cargo;
private String email;
@Referenced(documment = "Rol",
field = "idrol", javatype = "String", lazy = false,
repository = "com.crudejb.repository.RolRepository")
private List<Rol> rol;
private String activo;
@Embedded
List<UserInfo> userInfo;
public Usuario() {
}
}
Necesitamos crear un subreporte para manejarlo, si no fuese un List<> lo manejamos de manera diferente como se indica en el manual de jmoordbreport.
En el reporte

En el subreporte colocamos Rol

y dar clic en en Generador de reportes,
Observe la notificación del reporte se han creado nuevos reportes:
all
details
rol_subreport
usuario_master

Observamos la lista de reportes

En el init() de UsuarioController.java agregamos para indicar el nombre de la empresa
parameters.put("P_EMPRESA","MI EMPRESA");
Ejecutamos el reporte

dar clic en el botón imprimir

Podemos ver que no se muestran los Roles ya que es un List<Rol> y estamos invocando el reporte all.jasper, ahora cambiaremos para invocar el reporte master con el subreporte.
Creamos un boton en el formulario list.xtml
antes del </b:panel> superior al datatable
<p:commandButton value="Subreporte" action="#{usuarioController.printSubreporte()}"
ajax="false"/>
</b:panel>
<b:panel id="dataTable" look="primary">
Creamos el método para imprimir en UsuarioController.java
Indicar la ruta del reporte principal:
String reportsDirPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/resources/reportes/usuario");
Indicar la ruta del subreporte
reportsDirPath += "/";
parameters.put("SUBREPORT_DIR", reportsDirPath + "rol_subreport.jasper");
Segmento de código:
public String printSubreporte() {
try {
List<Usuario> list = new ArrayList<>();
list = usuarioRepository.findAll(new Document("cedula", 1));
String ruta = "/resources/reportes/usuario/usuario_master.jasper";
// String ruta = "/resources/reportes/usuario/all.jasper";
HashMap parameters = new HashMap();
parameters.put("P_EMPRESA", "MI EMPRESA");
String reportsDirPath = FacesContext.getCurrentInstance().getExternalContext().getRealPath("/resources/reportes/usuario");
reportsDirPath += "/";
parameters.put("SUBREPORT_DIR", reportsDirPath + "rol_subreport.jasper");
printer.imprimir(list, ruta, parameters);
} catch (Exception e) {
errorServices.errorMessage(nameOfClass(),nameOfMethod(), e.getLocalizedMessage());
}
return null;
}
Al ejecutarlo

Al dar clic en el botón Subreporte

Haremos el ejercicio de crear un Rol llamador AUDITOR y se lo asigamos al usuario

Editamos el usuario y le agregamos el nuevo Rol

Regresamos al list.xhtm de Usuario

Observamos los dos roles

Last updated
Was this helpful?