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?