184646 Posted November 16, 2021 Share Posted November 16, 2021 I have trying to understand jasper reports. I am trying to generate sample report and we are using jruby not java. I will post my jrxml file here<?xml version="1.0" encoding="UTF-8"?><!-- Created with Jaspersoft Studio version 6.18.1.final using JasperReports Library version 6.18.1-9d75d1969e774d4f179fb3be8401e98a0e6d1611 --><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="report6" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="aed8b471-22e8-429b-a78c-3ac9a3dd82f1"> <style name="TableHeader" hTextAlign="Center" hImageAlign="Center" vTextAlign="Middle" vImageAlign="Middle" isBold="true"/> <style name="TableCell" hTextAlign="Center" hImageAlign="Center" vTextAlign="Middle" vImageAlign="Middle"/> <style name="TableFooter" hTextAlign="Right" hImageAlign="Right" vTextAlign="Middle" vImageAlign="Middle"/> <style name="Table"> <box> <pen lineWidth="0.5"/> </box> </style> <subDataset name="dataset1" uuid="ee147159-1399-4375-8b07-58f08133d443"> <field name="item" class="java.lang.String"> <fieldDescription><![CDATA[item]]></fieldDescription> </field> <field name="unitPrice" class="java.math.BigDecimal"/> <field name="quantity" class="java.lang.Integer"/> <variable name="UnitTotalPrice" class="java.math.BigDecimal"> <variableExpression><![CDATA[$F{unitPrice}.multiply(new BigDecimal($F{quantity}))]]></variableExpression> </variable> <variable name="TotalPrice" class="java.math.BigDecimal" calculation="Sum"> <variableExpression><![CDATA[$V{UnitTotalPrice}]]></variableExpression> </variable> </subDataset> <parameter name="datasource" class="net.sf.jasperreports.engine.data.JRBeanCollectionDataSource"/> <detail> <band height="250" splitType="Stretch"> <componentElement> <reportElement style="Table" mode="Transparent" x="0" y="10" width="555" height="150" uuid="f04aa8b1-942b-4911-8fc9-11c67d963b25"/> <c:table xmlns:c="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd"> <datasetRun subDataset="dataset1" uuid="14d48a6e-7738-4775-8ae5-90734885d5e5"> <dataSourceExpression><![CDATA[$P{datasource}]]></dataSourceExpression> </datasetRun> <c:column width="60" uuid="89ac7326-d885-49db-b76f-7ed969a23ef0"> <c:columnHeader height="30"> <box> <pen lineColor="#000000"/> <bottomPen lineWidth="0.5"/> </box> <staticText> <reportElement style="TableHeader" x="0" y="0" width="60" height="30" uuid="a975bb7a-e916-41bd-91dd-2feeeab600a9"/> <text><![CDATA[item]]></text> </staticText> </c:columnHeader> <c:detailCell height="15"> <box> <bottomPen lineWidth="0.5"/> </box> <textField textAdjust="StretchHeight"> <reportElement style="TableCell" x="0" y="0" width="60" height="15" uuid="1a50bed2-219f-488f-aebd-5b45d943f410"/> <textFieldExpression><![CDATA[$F{item}]]></textFieldExpression> </textField> </c:detailCell> </c:column> <c:column width="100" uuid="297910ec-7eac-490c-872f-a527c5323960"> <c:columnHeader height="30"> <box> <pen lineColor="#000000"/> <leftPen lineWidth="0.5"/> <bottomPen lineWidth="0.5"/> </box> <staticText> <reportElement style="TableHeader" x="0" y="0" width="90" height="30" uuid="c57b5913-ee7f-46cb-b298-5e255d96bc18"/> <text><![CDATA[unitPrice]]></text> </staticText> </c:columnHeader> <c:detailCell height="15"> <box> <leftPen lineWidth="0.5"/> <bottomPen lineWidth="0.5"/> </box> <textField> <reportElement style="TableCell" x="0" y="0" width="90" height="15" uuid="e369ddb3-7419-4114-ba8e-c390d1793a90"/> <textFieldExpression><![CDATA[$F{unitPrice}]]></textFieldExpression> </textField> </c:detailCell> </c:column> <c:column width="100" uuid="d908b879-3394-4696-8c27-4040a9520e02"> <c:columnHeader height="30"> <box> <pen lineColor="#000000"/> <leftPen lineWidth="0.5"/> <bottomPen lineWidth="0.5"/> </box> <staticText> <reportElement style="TableHeader" x="0" y="0" width="90" height="30" uuid="08a1b0ec-2b5e-4222-92a7-50ba0d970182"/> <text><![CDATA[Quantity]]></text> </staticText> </c:columnHeader> <c:detailCell height="15"> <box rightPadding="5"> <leftPen lineWidth="0.5"/> <bottomPen lineWidth="0.5"/> </box> <textField> <reportElement x="0" y="0" width="90" height="15" uuid="ae64fdfd-556c-4a71-9d4a-25749aa265e0"/> <textElement textAlignment="Right" verticalAlignment="Middle"/> <textFieldExpression><![CDATA[$F{quantity}]]></textFieldExpression> </textField> </c:detailCell> </c:column> <c:column width="100" uuid="addf7a39-d70d-4427-82a9-c8c10bc46325"> <c:columnHeader height="30"> <box> <pen lineColor="#000000"/> <leftPen lineWidth="0.5"/> <bottomPen lineWidth="0.5"/> </box> <staticText> <reportElement style="TableHeader" x="0" y="0" width="90" height="30" uuid="95b52320-9dc9-4f20-97a8-c719373ff3d2"/> <text><![CDATA[Total price]]></text> </staticText> </c:columnHeader> <c:columnFooter style="TableFooter" height="15"> <box> <pen lineColor="#000000"/> <topPen lineWidth="0.5"/> </box> <textField evaluationTime="Report"> <reportElement style="TableFooter" x="0" y="0" width="90" height="15" uuid="74359992-7797-45e9-ab63-31aeb2c7ed98"/> <textFieldExpression><![CDATA[$V{TotalPrice}]]></textFieldExpression> </textField> </c:columnFooter> <c:detailCell height="15"> <box rightPadding="5"> <leftPen lineWidth="0.5"/> <bottomPen lineWidth="0.5"/> </box> <textField> <reportElement x="0" y="0" width="90" height="15" uuid="8a208f1e-a7a6-411d-bd3e-af3937b17a92"/> <textElement textAlignment="Right" verticalAlignment="Middle"/> <textFieldExpression><![CDATA[$V{UnitTotalPrice}]]></textFieldExpression> </textField> </c:detailCell> </c:column> </c:table> </componentElement> </band> </detail></jasperReport> my ruby code is class Order attr_accessor :item,:unitPrice,:quantity def initialize(item, up, q) @item = item @unitPrice = up @quantity = q end def getItem @item endendclass JasperReport DIR = "#{Rails.root}/reports" def initialize(report, query, params = nil) @model = report @report_params = params @conn = ActiveRecord::Base.connection.jdbc_connection @query = query end def self.to_pdf(datasources) binding.pry orders = [ Order.new("Item 1", "5.4".to_f, 4), Order.new("Item 2", "2.3".to_f, 3), Order.new("Item 3", "1.5".to_f, 8) ] datasources = datasources.with_indifferent_access # stmt = @conn.create_statement # @result = JRResultSetDataSource.new(stmt.execute_query(@query)) # @result = JREmptyDataSource.new report_source = "#{DIR}/project.jasper" raise ArgumentError, "#@model does not exist." unless File.exist?(report_source) params = {} binding.pry ds = JRBeanCollectionDataSource.new(orders,false) params["datasource"] = ds # params.merge!(@report_params) if @report_params.present? fill = JasperFillManager.fill_report(report_source, params, ds) pdf = JasperExportManager.export_report_to_pdf(fill) return String.from_java_bytes(pdf) endend I am getting following error. 07:17:23,562 ERROR [JRFillSubreport] Fill 1: exceptionnet.sf.jasperreports.engine.JRException: Error retrieving field value from bean: item. at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:205) at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:170) at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:104) at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:1507) at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1408) at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1384) at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1201) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:117) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:622) at net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:433) at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:830) at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:61) at net.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:221) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834)Caused by: java.lang.NoSuchMethodException: Unknown property 'item' on class 'class org.jruby.gen.RubyObject4' Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now