0

JavaBeansでJasperReports 3.7.6を使用しています。

ツリー階層を持つレポートがあります

レポートの最後に、ツリーのすべての要素の名前と要素が使用されているページを一覧表示する要約テーブルを追加する必要があります。

私の問題は、各要素のページ番号を取得する方法が わからないことです。

フォーラムを見回したところ、変数などを定義する必要があると思いますが、Jasper の経験があまりなく、どこから始めればよいかわかりません。

私が達成しようとしているのは、次のようなものです。

Name of person | pages used on  
John Smith     | 2,4,6  
Jane Doe       | 1,3  
4

1 に答える 1

0

問題の解決策を見つけました。それは最高のものではないかもしれませんが、うまくいきます。私が作成した Java クラスであるパラメーターを追加しました。これには、必要なフィールドの ID と jasper からのページ番号パラメーターを受け取るリストとメソッドが含まれています。それを使ってリストを作成します。Jasper レポートには、Bean でメソッドを呼び出すためだけに使用されるラベルがあります。次に、インデックス テーブルをサマリー バンドに配置し、作成したリストから値を取得するように指示するだけでした。

<textFieldExpression class="java.lang.String"><![CDATA[$P{indexData}.addByIndex($F{numberInList},$F{indexLabel},$V{PAGE_NUMBER} + "")]]></textFieldExpression>

Javaで

public class ReportIndexDataAction {

private List<ReportIndexData> reportIndexDataList;

public ReportIndexDataAction() {
    reportIndexDataList = new ArrayList<ReportIndexData>();
}

public List<ReportIndexData> getReportIndexDataList() {
    return reportIndexDataList;
}

public void setReportIndexDataList(List<ReportIndexData> reportIndexDataList) {
    this.reportIndexDataList = reportIndexDataList;
}

public String addByIndex(int index, String name, String page) {
    boolean found = false;
    for (Iterator iterator = reportIndexDataList.iterator(); iterator.hasNext();) {
        ReportIndexData type = (ReportIndexData) iterator.next();
        if(type.getIndex() == index) {
            if(!type.getUsages().contains(","+ page + ",")) {
                type.setUsages((type.getUsages().isEmpty() ? "," + page +"," : type.getUsages() + page + ","));
            }
            found = true;
            break;
        }
    }
    if(!found) {
        ReportIndexData data = new ReportIndexData();
        data.setIndex(index);
        data.setName(name);
        data.setUsages(","+ page + ",");
        reportIndexDataList.add(data);
    }
    return "";
}

public class ReportIndexData {

private int index;
private String name;
private String usages;

public int getIndex() {
    return index;
}
public void setIndex(int index) {
    this.index = index;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getUsages() {
    return usages;
}
public void setUsages(String usages) {
    this.usages = usages;
}

}

于 2013-03-20T11:08:44.847 に答える