{"id":1279,"date":"2013-07-19T16:01:28","date_gmt":"2013-07-19T21:01:28","guid":{"rendered":"http:\/\/alejandroayala.solmedia.ec\/?p=1279"},"modified":"2013-09-23T14:25:46","modified_gmt":"2013-09-23T19:25:46","slug":"algo-de-jasperreports-swt-y-eclipse-rcp","status":"publish","type":"post","link":"https:\/\/alejandroayala.solmedia.ec\/?p=1279","title":{"rendered":"Algo de JasperReports, SWT y Eclipse RCP"},"content":{"rendered":"<p style=\"text-align: justify;\"><a href=\"https:\/\/en.wikipedia.org\/wiki\/JasperReports\" target=\"_blank\">JasperReports<\/a>, el \u00abreporteador\u00bb de facto <strong>m\u00e1s usado en el mundo Java<\/strong>(mi apreciaci\u00f3n, favor decirme si estoy equivocado),\u00a0 y donde necesitas por cualquier raz\u00f3n incluirlo en alg\u00fan desarrollo <a href=\"https:\/\/en.wikipedia.org\/wiki\/Standard_Widget_Toolkit\" target=\"_blank\">SWT<\/a>(si, todav\u00eda existen desarrollos en SWT :D) o mejor dicho en mi caso usando <a href=\"http:\/\/wiki.eclipse.org\/index.php\/Rich_Client_Platform\" target=\"_blank\">Eclipse RCP<\/a> <strong>versi\u00f3n 3<\/strong>(efectivamente tiene que ser esta versi\u00f3n y no la 4), lograr que todo \u00abfluya\u00bb correctamente y en todos los sistemas operativos <strong>es una verdadera \u00abOdisea\u00bb<\/strong>.<\/p>\n<p style=\"text-align: justify;\"><!--more--><\/p>\n<p style=\"text-align: justify;\">La versi\u00f3n 3.3 exactamente de Eclipse RCP contiene <strong>un sin n\u00famero de <em>issues<\/em><\/strong> en Unix\/Linux y en Mac, entonces tener una aplicaci\u00f3n que no falle en estas tres plataformas(incluyendo Windows) <strong>se convierte en un trabajo laborioso<\/strong>. Lo mejor es saltar a la versi\u00f3n 4, pero cuando est\u00e1s atado a la versi\u00f3n en cuesti\u00f3n lo mejor es llenarte de abundante caf\u00e9 porque las horas de trabajo van a ser interminables.<\/p>\n<h2 style=\"text-align: justify;\">SWTJasperViewer<\/h2>\n<p style=\"text-align: justify;\">Un excelente <a href=\"http:\/\/sourceforge.net\/projects\/swtjasperviewer\/\" target=\"_blank\">proyecto<\/a> que nace de la necesidad de poder desplegar <strong>nuestros reportes dentro de un ambiente Eclipse RCP<\/strong>, un editor al cual le agregas el reporte y listo. Simple a primera vista, lamentablemente el proyecto recibi\u00f3 la \u00faltima actualizaci\u00f3n <strong>por el 2008<\/strong> y mucha agua a corrido debajo del puente. Las librer\u00edas de JasperReports usadas en los ejemplos de este desarrollo <strong>son extremadamente antiguas<\/strong>, incluso muchos de sus m\u00e9todos <strong>obsoletos al d\u00eda de hoy<\/strong>. Tendr\u00e1s que crear, compilar tu reporte con una versi\u00f3n de JasperReports mucho menor para poder integrarlo correctamente.<\/p>\n<p style=\"text-align: justify;\">Aqui tienes un excelente art\u00edculo sobre su uso y puesta en marcha. <a href=\"https:\/\/udayms.wordpress.com\/2005\/10\/27\/integrating-swtrcp-and-jasper-reports\/\" target=\"_blank\">Integrating SWT\/RCP and Jasper Reports<\/a><\/p>\n<p style=\"text-align: justify;\">Para mi uso personal, rescato un parde l\u00edneas del c\u00f3digo de ejemplo que me pueden servir a futuro.<\/p>\n<ul>\n<li>Generando un objeto JasperPrint<\/li>\n<\/ul>\n<p>[java]<br \/>\n\/\/public static JasperPrint generateReport<br \/>\n\/\/Loading my jasper file<br \/>\nJasperReport jasperReport = null;<br \/>\njasperReport = (JasperReport) net.sf.jasperreports.engine<br \/>\n       .util.JRLoader.loadObject(ReportGen.class.getClassLoader()<br \/>\n       .getResourceAsStream(&quot;CustomerReport.jasper&quot;));<\/p>\n<p>\/\/Passing parameters to the report<br \/>\nMap parameters = new HashMap();<br \/>\nparameters.put(&quot;p_CustomerId&quot;, custInfo);<\/p>\n<p>\/\/Filling the report with data from<br \/>\n\/\/the database based on the parameters passed.<br \/>\nmyJPrint = JasperFillManager.fillReport(jasperReport, parameters, conn);<\/p>\n<p>[\/java]<\/p>\n<ul>\n<li>Objeto SWT ViewerComposite que es el editor, el cual se agrega al shell de la aplicaci\u00f3n.<\/li>\n<\/ul>\n<p>[java]<br \/>\n\/\/Using the SWTJasperViewer<br \/>\nprivate ViewerComposite viewerComposite;<\/p>\n<p>public void createPartControl(Composite parent) {<br \/>\n     Composite container = new Composite(parent, SWT.NONE);<br \/>\n     GridLayout layout = new GridLayout();<br \/>\n     container.setLayout(layout);<\/p>\n<p>     viewerComposite = new ViewerComposite(container,SWT.BORDER);<br \/>\n     viewerComposite.setLayoutData(new GridData(<br \/>\n          GridData.FILL,GridData.FILL,true,true));<br \/>\n}<br \/>\n[\/java]<\/p>\n<ul>\n<li>El m\u00e9todo getReportViewer().setDocument agrega el objeto JasperPrint al visor.<\/li>\n<\/ul>\n<p>[java]<\/p>\n<p>\/\/Calling the generate report and<br \/>\n\/\/passing the customer id as parameter.<br \/>\nJasperPrint jprint = ReportGen.generateReport(cusInfo.getCustomerInfo());<\/p>\n<p>\/\/Loading the JasperPrint object in the viewer. ReportView<br \/>\nrv.getReportViewer().setDocument(jprint);<\/p>\n<p>[\/java]<\/p>\n<h2>JasperReports<\/h2>\n<p style=\"text-align: justify;\">Finalmente algo de c\u00f3digo necesario y que muchas veces no recuerdas y no quieres perder tiempo googleando(espiando :D) .<\/p>\n<ul>\n<li>Compilar un archivo jrxml<\/li>\n<\/ul>\n<p>[java]<br \/>\n\/\/private JasperDesign<br \/>\njasperDesign = JRXmlLoader.load(reportTemplateUrl);<br \/>\n\/\/compilar el jasperDesign<br \/>\n\/\/private JasperReport jasperReport<br \/>\njasperReport = JasperCompileManager.compileReport(jasperDesign);<br \/>\n[\/java]<\/p>\n<ul>\n<li>Cargar un archivo jasper<\/li>\n<\/ul>\n<p>[java]<br \/>\n\/\/private JasperReport jasperReport;<br \/>\n\/\/usar un archivo .jasper ya compilado<br \/>\njasperReport = (JasperReport)JRLoader.loadObject(<br \/>\n        MiCalse.class.getResourceAsStream(jasperUrl));<br \/>\n[\/java]<\/p>\n<ul>\n<li>Llenar el reporte y mostrar\/imprimir<\/li>\n<\/ul>\n<p>[java]<br \/>\n\/\/private JasperPrint jasperPrint;<br \/>\n\/\/llenar el reporte con una lista bean<br \/>\njasperPrint = JasperFillManager.fillReport(<br \/>\n    jasperReport, null, new JRBeanCollectionDataSource(miListaColeccion));<\/p>\n<p>\/\/usar el visor de Jasper<br \/>\nJasperViewer.viewReport(jasperPrint, false);<\/p>\n<p>\/\/mandar a imprimir directamente sin abrir el visor<br \/>\nJasperPrintManager.printReport(jasperPrint, true);<br \/>\n[\/java]<\/p>\n<p>Tambi\u00e9n al usar iReport como plugin de Netbeans o desde el IDE iReport, suele dar un error al probar el reporte, <strong>este suele fallar al localizar el <em>.class<\/em> de la clase que tiene la data(bean)<\/strong>. Su soluci\u00f3n es agregar el <em>path<\/em> del proyecto que se est\u00e1 probando en las configuraciones de <em>iReport<\/em>.<\/p>\n<p>En Nebeans esta configuraci\u00f3n se encuentra en:<\/p>\n<ul>\n<li>Tools-&gt;Options-&gt;iReport -&gt; Pesta\u00f1a CLASSPATH.<\/li>\n<\/ul>\n<p>Fuente:<a href=\"http:\/\/community.jaspersoft.com\/questions\/542136\/how-access-javabeans-datasource-ireports\" target=\"_blank\"> http:\/\/community.jaspersoft.com\/questions\/542136\/how-access-javabeans-datasource-ireports<\/a><\/p>\n<h2>Eclipse RCP<\/h2>\n<p style=\"text-align: justify;\">Como es mejor aprender lo nuevo aqu\u00ed les dejo un excelente tutorial muy completo de Eclipse RCP 4: <a href=\"http:\/\/www.vogella.com\/articles\/EclipseRCP\/article.html\" target=\"_blank\">Eclipse 4 RCP &#8211; Tutorial <\/a><\/p>\n<p style=\"text-align: justify;\">Ha seguir padeciendo con este enfermo \ud83d\ude42 Saludos.<\/p>\n<p style=\"text-align: justify;\">.<\/p>\n\n<div class=\"twitter-share\"><a href=\"https:\/\/twitter.com\/intent\/tweet?via=a1ejo_ayala\" class=\"twitter-share-button\" data-size=\"large\">Twittear<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>JasperReports, el \u00abreporteador\u00bb de facto m\u00e1s usado en el mundo Java(mi apreciaci\u00f3n, favor decirme si estoy equivocado),\u00a0 y donde necesitas por cualquier raz\u00f3n incluirlo en alg\u00fan desarrollo SWT(si, todav\u00eda existen desarrollos en SWT :D) o mejor dicho en mi caso usando Eclipse RCP versi\u00f3n 3(efectivamente tiene que ser esta versi\u00f3n y no la 4), lograr\u2026 <span class=\"read-more\"><a href=\"https:\/\/alejandroayala.solmedia.ec\/?p=1279\">Leer m\u00e1s &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":690,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[4],"tags":[186,265,361,506,360,362,363],"_links":{"self":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/1279"}],"collection":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1279"}],"version-history":[{"count":19,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/1279\/revisions"}],"predecessor-version":[{"id":1450,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/posts\/1279\/revisions\/1450"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=\/wp\/v2\/media\/690"}],"wp:attachment":[{"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1279"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1279"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alejandroayala.solmedia.ec\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1279"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}