Java - Que esta pasando? - Informes

 
Vista:

Que esta pasando? - Informes

Publicado por Elio Gabriel (1 intervención) el 29/03/2020 23:09:37
Estoy desarrollando una aplicación en JAVA / SWING para el escritorio con un sistema gestor de base de datos PostgreSQL. Ya tengo implementados varios informes sin problemas. Los mencionados informes toman los campos comumes como parametros (Logo, titulo, nombre de compania, editor, etc). Todo esto esta gestionado desde una clase (EngineReport.class). Luego he comenzado a implementar informes con un parametro (String) para aplicar filtros al conjunto de datos. Ahora necesito implementar parametros para multiples filtros (String, Integer, etc). Esto lo realizo mediante un metodo generico de la clase EngineReport. A continuación presento el código completo de la clase:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package com.m3dsa.gci.controller;
 
import com.m3dsa.gci.app.Inicio;
import com.m3dsa.gci.model.PostgreSQL;
import com.m3dsa.gci.view.Application;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
 
/**
 *
 * @author Elio Gabriel Drovandini
 * @version 1.0
 */
public class EngineReports {
 
    /**
     * Constructor por defecto
     */
    public EngineReports() {
        datos = PostgreSQL.getInstancia();
        conn = datos.getConeccionOn();
        parametros = new HashMap<String, Object>();
    }
 
    /**
     * Constructor de clase
     *
     * @param recursoInforme Ruta relativa de recurso al informe de Jasper
     */
    public EngineReports(String recursoInforme, String titulo) {
        this();
        rutaRelativaRecurso = recursoInforme;
        this.titulo = titulo;
    }
 
    /**
     * Fija los parámetros de filtrado del informe
     *
     * @param <T> Parámetrización del método
     * @param nombreParametro Nombre de la variable en el informe Jasper
     * @param tipoParametro Tipo de datos de la variable de parámetro
     */
    public <T> void setParametros(String nombreParametro, T tipoParametro) {
        parametros.put(nombreParametro, tipoParametro);
    }
 
    private void setCampos() {
        rutaInforme = getClass().getResource(rutaRelativaRecurso).getPath().replaceFirst("/", "").replace("%20", " ");
        String app_denominacion = Inicio.appNombre + " V " + Inicio.versionApp;
        parametros.put("APP_DENOMINACION", app_denominacion);
        parametros.put("EMPRESA_LOGO", getClass().getResourceAsStream("/images/empresa_logo.png"));
        String paramDomicilio = Inicio.comDomicilio + ", " + Inicio.comLocalidad + " - " + Inicio.comProvincia + " (" + Inicio.comPais + ")";
        parametros.put("EMPRESA_DOMICILIO", paramDomicilio);
        parametros.put("EMPRESA_CUIT", Inicio.cuit);
        parametros.put("EMPRESA_CORREO", Inicio.correo);
        String telFax = Inicio.telefono + " / FAX | " + Inicio.fax;
        parametros.put("EMPRESA_TELEFONOS", telFax);
        parametros.put("INFORME_TITULO", titulo);
        parametros.put("INFORME_EMISOR", Application.getUsuario());
    }
 
    /**
     * Ejecuta el informe del cual se ha pasado su ruta relativa a los recursos
     */
    public void getInforme() {
        /* Se personaliza el informe con los campos privados de la empresa */
        setCampos();
        try {
            informe = (JasperReport) JRLoader.loadObjectFromFile(rutaInforme);
            JasperPrint impresora = JasperFillManager.fillReport(informe, parametros, conn);
            JasperViewer visor = new JasperViewer(impresora, false);
            visor.setDefaultCloseOperation(JasperViewer.DISPOSE_ON_CLOSE);
            visor.setTitle("GCI - Informe: " + titulo);
            visor.setVisible(true);
        } catch (JRException ex) {
            //Logger.getLogger(InformeSinFiltros.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, ex.getMessage(), Inicio.appNombre, JOptionPane.ERROR_MESSAGE);
        } finally {
            datos.setConeccionOff();
        }
    }
 
    /**
     * Ejecuta el informe incrustado en un JDialog para salvar el inconveniente
     * de la modalidad
     */
    public void getDlgInforme(JDialog base) {
        /* Se personaliza el informe con los campos privados de la empresa */
        setCampos();
        /* Se declara el dialogo contenedor del visor de informe */
        JDialog contenedor = new JDialog(base);
        try {
            informe = (JasperReport) JRLoader.loadObjectFromFile(rutaInforme);
            JasperPrint impresora = JasperFillManager.fillReport(informe, parametros, conn);
            JasperViewer visor = new JasperViewer(impresora, false);
            contenedor.setContentPane(visor.getContentPane());
            contenedor.setSize(visor.getSize());
            contenedor.setResizable(true);
            contenedor.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
            contenedor.setTitle("GCI - Informe: " + titulo);
            contenedor.setVisible(true);
        } catch (JRException ex) {
            //Logger.getLogger(InformeSinFiltros.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, ex.getMessage(), Inicio.appNombre, JOptionPane.ERROR_MESSAGE);
        } finally {
            datos.setConeccionOff();
        }
    }
 
    /**
     * Gestiona la re-conexión a la BBDD
     */
    private void setReconexion() {
        try {
            if (conn.isClosed()) {
                conn = datos.getConeccionOn();
            }
        } catch (SQLException ex) {
            //Logger.getLogger(CatalogoDAO.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, ex.getMessage(), Inicio.appNombre, JOptionPane.ERROR_MESSAGE);
        }
    }
 
    /* Declaración de campos de clase  de desarrollador */
    private PostgreSQL datos;
    private Connection conn;
    private String rutaRelativaRecurso, rutaInforme, titulo;
    private JasperReport informe;
    private JasperPrint impresora;
    private JasperViewer visor;
    private HashMap<String, Object> parametros;
    /* Fin de declaración de campos de clase de desarrollador */
}

He leido toda la documentación a cerca de este procedimiento pero obtengo unn error que muestro a continuación:

Captura-019


No logro entender que esta sucediento. He probado en cambiar el orden de los parametros, el tipo de datos de los parametros, etc. Como se puede ver en la excepcion los parametros no son tomados. Con el depurador de NetBeans se puede observar que el objeto parametro (HashMap<String, Object>) esta completo. No entiendo porque no funciona si en los informes anteriores lo hace sin problemas. Una observacion importante es: en el editor SQL de jasperSoft Studio cuando implemento la condición WHERE para el parametro Integer no aparece en la lista de parametros disponibles, solo lo hace si cambio el tipo de dato del parametro a String. Desde ya gracias por su atención y aguardo su respuesta
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Que esta pasando? - Informes

Publicado por Costero (148 intervenciones) el 30/03/2020 03:36:09
Pon el error completo:

1
ex.printStackTrace();
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar