Menu

Reporte con JasperReport no recibe los parámetros

Mikel
2015-03-11
2015-03-13
  • Mikel

    Mikel - 2015-03-11

    Un saludo a todos

    Estoy haciendo mis primeras pruebas con JasperReport para crear mis propios PDFs y ahora mismo estoy bastante atascado porque el reporte no recibe mis parámetros y no sé por qué.

    Básicamente he colocado una acción que genera el PDF. La acción es la siguiente:

    public class ImprimirFactura extends JasperReportBaseAction{
    
        private Factura factura;
    
        @Override
        public void execute() throws Exception {
    
            super.execute();
            //addMessage("InvoiceReportAction.printOK");
        }
    
        @Override
        protected JRDataSource getDataSource() throws Exception {
            // TODO Auto-generated method stub
            return new JRBeanCollectionDataSource(getFactura().getAlbaranes());
            //return null;
    
        }
    
        @Override
        protected String getJRXML() throws Exception {
    
            return "C:\\Users\\Mikel\\Documents\\openxava-5.0.1\\workspace\\PruebaERP\\informes\\Factura.jrxml";
    
        }
    
        @Override
        protected Map getParameters() throws Exception {
            // TODO Auto-generated method stub
             Messages errors = MapFacade.validate("Factura", getView().getValues());
                if (errors.contains()) throw new ValidationException(errors);
                Map parameters = new HashMap();             
                parameters.put("nombreCliente", getFactura().getCliente().getNombre());
                //parameters.put("nombreCliente", "PATXI");
                return parameters;
    
        }
    
        public Factura getFactura() {
    
            if (factura == null) {
                factura= XPersistence.getManager().find(Factura.class, getView().getValue("oid"));
            }
            return factura;
        }
    
        public void setFactura(Factura factura) {
            this.factura = factura;
    
        }
    
    }
    

    Entonces:

    1º - Visualiza el jrxml que he diseñado, que sólo tiene un parámetro. Pero en lugar de visualizar el valor por pantalla, visualiza $P{nombreCliente}.

    2º - Como puede apreciarse, mi .jrxml está en una carpeta Informes dentro del propio proyecto, pero no consigo llegar a él mediante una ruta relativa. Con absoluta sí, pero no es algo que me haga muy feliz.

    Por si sirviera de algo, dejo también el report:

    <jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="Blank_A4" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="bbf05d8a-63ce-4eeb-b6db-dcc5b99a9ba1">
        <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
        <parameter name="nombreCliente" class="java.lang.String" isForPrompting="false"/>
        <background>
            <band splitType="Stretch"/>
        </background>
        <title>
            <band height="79" splitType="Stretch">
                <staticText>
                    <reportElement x="220" y="30" width="100" height="30" uuid="ac0da9dd-012d-4fdf-a7ba-3ebce0a477a8"/>
                    <text><![CDATA[$P{nombreCliente}]]></text>
                </staticText>
            </band>
        </title>
        <pageHeader>
            <band height="67" splitType="Stretch">
                <image>
                    <reportElement x="81" y="17" width="50" height="50" uuid="7e2ebdf1-432f-4a45-9a1a-79d68cce44d8"/>
                    <imageExpression><![CDATA[""]]></imageExpression>
                </image>
            </band>
        </pageHeader>
        <columnHeader>
            <band height="61" splitType="Stretch"/>
        </columnHeader>
        <detail>
            <band height="125" splitType="Stretch"/>
        </detail>
        <columnFooter>
            <band height="45" splitType="Stretch"/>
        </columnFooter>
        <pageFooter>
            <band splitType="Stretch"/>
        </pageFooter>
        <summary>
            <band height="42" splitType="Stretch"/>
        </summary>
    </jasperReport>
    

    Muchas gracias por cualquier ayuda.

     
  • Mikel

    Mikel - 2015-03-12

    Solucionado.

    El problema estaba en el reporte. Como no había hecho uno nunca... pues lo hacía mal. Pensaba que era cuestión de poner $P{} por el xml y listo. Ya he visto que tengo que crear una consulta SQL en la que incorporar los parámetros y ya funciona perfectamente.

    Aunque sigo con el problema de la ruta relativa...

     
  • Javier Paniza

    Javier Paniza - 2015-03-13

    Hola Mikel:

    El $P{} lo deberías utilizar dentro de un <textField> utilizando <textFieldExpression> y no en un <staticText>. Si utilizar iReport e insertas parámetros te debería generar el código correctamente.

    En cuanto a la ruta puedes poner directamente el nombre del archivo, así:

        protected String getJRXML() {
        return "Factura.jrxml";
    }
    

    En este caso Factura.jrxml tiene que estar en el classpath, es decir en WEB-INF/classes por ejemplo. Para eso lo mejor es crear una carpeta de código fuente en la raíz de tu proyecto y poner allí todos lo jrxml. La carpeta no ha de estar en web, ha de estar en la raíz de tu proyecto y ha de ser de código fuente para que al compilar los archivos se muevan automáticamente a WEB-INF/classes. Mira como está hecho en OpenXavaTest.


    Ayuda a otros en este foro como yo te ayudo a ti.

     

Log in to post a comment.