>

Jaspersoft Studio에서 JavaBeans로 기본 보고서 (마스터/하위 보고서)를 생성하는 데 문제가 있습니다.

TestMainReport.jrxmlTestSubreport.jrxml을 만들었습니다.

TestMainReport.jrxml에는 "A Title" 라는 두 개의 정적 텍스트 필드가 있습니다.  타이틀 밴드와 "A Summary" 에서  요약 밴드에서.

TestSubreport.jrxml에는 두 개의 정적 텍스트 필드 "Subreport Title" 가 있습니다.  제목과 "Subreport Summary" 에서  요약 밴드에서.

JavaBeans Data Adapter를 할당하지 않았습니다. JavaBeans 필드는 마스터 보고서에 매핑되어 있지만 하위 보고서에는 매핑되지 않았습니다.

하위 보고서 요소가 요약 밴드의 마스터 보고서에 추가되었습니다.

각 보고서를 생성하려고 할 때 두 보고서 모두 개별적으로 생성됩니다. 그러나 하위 보고서 정적 텍스트는 마스터 보고서에 나타나지 않습니다.

하위 보고서의 정적 텍스트가 마스터 보고서에 나타날 것으로 기대했습니다.

내가 뭘 잘못하고 있니?

TestMainReport.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<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="TestMainReport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="0d969cfb-66d2-442f-b7a4-5a9e1a40c3ae">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="Customer Info Data Adapter"/>
    <field name="birthday" class="java.time.LocalDate">
        <fieldDescription><![CDATA[birthday]]></fieldDescription>
    </field>
    <field name="observacao" class="java.lang.String">
        <fieldDescription><![CDATA[observacao]]></fieldDescription>
    </field>
    <field name="orderNumber" class="java.lang.Integer">
        <fieldDescription><![CDATA[orderNumber]]></fieldDescription>
    </field>
    <field name="phone" class="java.lang.String">
        <fieldDescription><![CDATA[phone]]></fieldDescription>
    </field>
    <field name="name" class="java.lang.String">
        <fieldDescription><![CDATA[name]]></fieldDescription>
    </field>
    <field name="email" class="java.lang.String">
        <fieldDescription><![CDATA[email]]></fieldDescription>
    </field>
    <title>
        <band height="79" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="100" height="30" uuid="db07ac65-15f6-4190-b1db-9d445456f306"/>
                <text><![CDATA[A Title]]></text>
            </staticText>
        </band>
    </title>
    <summary>
        <band height="215" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="100" height="30" uuid="08c03e87-2b15-4eb1-b404-b7dce6dfb890"/>
                <text><![CDATA[A Summary]]></text>
            </staticText>
            <subreport>
                <reportElement x="0" y="30" width="560" height="150" uuid="c292246e-1ffa-4f08-a783-a0b05b28be76"/>
                <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                <subreportExpression><![CDATA["TestSubreport.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </summary>
</jasperReport>

TestSubreport.jrxml

<?xml version="1.0" encoding="UTF-8"?>
<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="TestSubreport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="d5dd9821-786d-4312-81c9-fd77f1abfb8a">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="Customer Addresses Data Adapter"/>
    <title>
        <band height="79" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="100" height="30" uuid="4c9fdc83-4039-4eed-b593-448898853071"/>
                <text><![CDATA[Subreport Title]]></text>
            </staticText>
        </band>
    </title>
    <summary>
        <band height="42" splitType="Stretch">
            <staticText>
                <reportElement x="0" y="0" width="100" height="30" uuid="4bb9ba45-548a-4e87-a543-472b0f960487"/>
                <text><![CDATA[Subreport Summary]]></text>
            </staticText>
        </band>
    </summary>
</jasperReport>

CustomerInfoDataSource.java

package testdatasource;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class CustomerInfoDataSource {
    public static Collection<CustomerInfo> getCustomerInfo() {
        List<CustomerInfo> info = new ArrayList<>();
        info.add(new CustomerInfo(1, "Mario", "mario@mario.com.br", LocalDate.now(), "14 912345678", "Observação Mario"));
        return info;
    }
}

CustomerInfo.java

package testdatasource;
import java.time.LocalDate;
public class CustomerInfo {
    private final int orderNumber;
    private final String name;
    private final String email;
    private final LocalDate birthday;
    private final String phone;
    private final String observacao;
    public CustomerInfo(int orderNumber, String name, String email, LocalDate birthday, String phone, String observacao) {
        this.orderNumber = orderNumber;
        this.name = name;
        this.email = email;
        this.birthday = birthday;
        this.phone = phone;
        this.observacao = observacao;
    }
    public int getOrderNumber() {
        return orderNumber;
    }
    public String getName() {
        return name;
    }
    public String getEmail() {
        return email;
    }
    public LocalDate getBirthday() {
        return birthday;
    }
    public String getPhone() {
        return phone;
    }
    public String getObservacao() {
        return observacao;
    }
}

CustomerAddressDataSource.java

package testdatasource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
public class CustomerAddressDataSource {
    public static Collection<CustomerAddress> getCustomerAddresses() {
        List<CustomerAddress> addresses = new ArrayList<>();
        addresses.add(new CustomerAddress("Casa 1", "Rua Tal", "123", null, "Jardim Márcia", "Agudos", "17400-000", "Perto da caixa d'água"));
        addresses.add(new CustomerAddress("Casa 2", "Rua Tal", "456", null, "Jardim Márcia", "Agudos", "17400-000", "Perto da caixa d'água"));
        return addresses;
    }
}

CustomerAddress.java

package testdatasource;
public class CustomerAddress {
    private final String title;
    private final String street;
    private final String number;
    private final String complement;
    private final String bairro;
    private final String city;
    private final String cep;
    private final String referencePoint;
    public CustomerAddress(String title, String street, String number, String complement, String bairro, String city,
            String cep, String referencePoint) {
        this.title = title;
        this.street = street;
        this.number = number;
        this.complement = complement;
        this.bairro = bairro;
        this.city = city;
        this.cep = cep;
        this.referencePoint = referencePoint;
    }
    public String getTitle() {
        return title;
    }
    public String getStreet() {
        return street;
    }
    public String getNumber() {
        return number;
    }
    public String getComplement() {
        return complement;
    }
    public String getBairro() {
        return bairro;
    }
    public String getCity() {
        return city;
    }
    public String getCep() {
        return cep;
    }
    public String getReferencePoint() {
        return referencePoint;
    }
}

TestMainReport.jrxml의 출력 :

TestSubreport.jrxml의 출력 :


  • 답변 # 1

    무엇입니까?

    하위 보고서에 대해 dataSource를 지정하지 않았습니다. 이 대신connectionExpression( <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression> )을 설정했습니다 ). 연결은jdbc기반 데이터 소스 (보고서)의 경우에는 도움이되지만 귀하의 경우에는 도움이되지 않습니다.

    솔루션 1-dataSourceExpression 사용

    하위 보고서에 대한 데이터 소스를 지정해야합니다. 다음과 같이 하위 보고서 요소를 선언 할 수 있습니다.

    <subreport>
        <reportElement x="0" y="30" width="560" height="150"/>
        <dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(testdatasource.CustomerAddressDataSource.getCustomerAddresses())]]></dataSourceExpression>
        <subreportExpression><![CDATA["TestSubreport.jasper"]]></subreportExpression>
    </subreport>
    
    

    이 경우CustomerAddressDataSource클래스가 하위 보고서를 작성하는 데 사용됩니다.

    솔루션 2-데이터 어댑터의 외부 정의 사용

    하위 보고서의데이터 어댑터를 파일로 내보내고 템플릿과 동일한 폴더에 저장할 수 있습니다 (데이터 어댑터 파일의 경로를 지정하지 않으려는 경우).

    JSS(Jaspersoft Studio)의 상황에 맞는 메뉴를 사용하여데이터 어댑터정의를 내보낼 수 있습니다.

    귀하의 경우-이 컨텐츠가있는CustomerAddressesDataAdapter.xml이됩니다 :

    <?xml version="1.0" encoding="UTF-8" ?>
    <beanDataAdapter class="net.sf.jasperreports.data.bean.BeanDataAdapterImpl"><name>Customer Addresses Data Adapter</name><factoryClass>testdatasource.CustomerAddressDataSource</factoryClass><methodName>getCustomerAddresses</methodName><useFieldDescription>false</useFieldDescription><classpath>C:\somepath\library_with_beans.jar</classpath></beanDataAdapter>
    
    

    net.sf.jasperreports.data.adapter속성을 ​​사용하여 하위 보고서에서이 어댑터를 지정해야합니다. 이 속성의 도움으로데이터 어댑터정의 (설명)를 사용하여 파일 이름을 지정해야하며 경로가있는 이름 일 수 있습니다. 내 경우에는 CustomerAddressesDataAdapter.xml 입니다. .

    하위 보고서 템플릿은 다음과 같습니다.

    <?xml version="1.0" encoding="UTF-8"?>
    <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="TestSubreport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
        <property name="net.sf.jasperreports.data.adapter" value="CustomerAddressesDataAdapter.xml"/>
        <title>
            <band height="79" splitType="Stretch">
                <staticText>
                    <reportElement x="0" y="0" width="100" height="30"/>
                    <text><![CDATA[Subreport Title]]></text>
                </staticText>
            </band>
        </title>
        <summary>
            <band height="42" splitType="Stretch">
                <staticText>
                    <reportElement x="0" y="0" width="100" height="30"/>
                    <text><![CDATA[Subreport Summary]]></text>
                </staticText>
            </band>
        </summary>
    </jasperReport>
    
    

    마스터 보고서에서 하위 보고서가있는 섹션은 다음과 같습니다.

    <subreport>
        <reportElement x="0" y="30" width="560" height="150"/>
        <subreportExpression><![CDATA["TestSubreport.jasper"]]></subreportExpression>
    </subreport>
    
    

    -이전과 마찬가지로 연결을 지정할 필요가 없습니다.

    첫 번째 솔루션의 경우JSS의 출력 결과는 다음과 같습니다.

    <시간> 추가 정보

    Excel 데이터 어댑터 샘플

    JSONQL 데이터 소스 샘플

    Excel 데이터 어댑터 샘플

    보고서 및 데이터 세트에서 데이터 어댑터 사용

    데이터 어댑터

  • 이전 permissions - `zshrc`를 다시로드하는 데 권장되는 방법은 무엇입니까? (`source` VS`exec`?)
  • 다음 텍스트 파일에서 열 데이터를 가져 오기 위해 파이썬 스크립트를 만드는 방법은 무엇입니까?