4

現在、ジャスパーを使用してレポートを作成しようとしています。このメソッドで表示したい情報とデータがあります。

private void writeToFile(final List<ScenarioLoadModel> sceneLoadModel) throws Exception {
  final BufferedWriter bw = new BufferedWriter(new FileWriter("/Uma/nft/result.psv"));

  for (final ScenarioLoadModel slm : sceneLoadModel) {
    bw.write(slm.getScenarioId() + PSP + slm.getScenarioId() + PSP + slm.getScenarioConfig().getName() + PSP + slm.getLoad() + PSP + "" + EOL);
    if (!slm.getScenarios().isEmpty()) {
      final int tempCount = slm.getScenarios().get(0).getTemplates().size();
      final int sceneCount = slm.getScenarios().size();
      for (int tempIdx = 0; tempIdx < tempCount; tempIdx++) {
        String id = null;
        int pass = 0;
        int fail = 0;
        final Map<String, BigDecimal> metricMap = new HashMap<String, BigDecimal>();
        final DefaultStatisticalCategoryDataset dataset = new DefaultStatisticalCategoryDataset();
        for (int sceneIdx = 0; sceneIdx < sceneCount; sceneIdx++) {
          final Template temp = slm.getScenarios().get(sceneIdx).getTemplates().get(tempIdx);
          if (temp.isError()) {
            fail++;
          } else {
            pass++;
          }
          if (sceneIdx == 0) {
            id = temp.getId();
          }
          final MetricGroupModel mgm = slm.getScenarios().get(sceneIdx).getMetricGroupModel().get(tempIdx);
          if (mgm != null) {
            for (final MetricModel mm : mgm.getMetricModel()) {
              for (final MetricValue mv : mm.getMetricValue()) {
                dataset.add(mv.getValue(), new BigDecimal(0.0), mv.getType(), id);
              }
            }
          }
        }
        final TemplateConfig tc = TemplateManager.getTemplateConfig(id);

        bw.write(slm.getScenarioId() + PSP);
        bw.write(id + PSP + tc.getName() + PSP + 1 + PSP + pass + "/" + fail);
        for (final Object row : dataset.getRowKeys()) {
          final Number mean = dataset.getValue((String) row, id);
          bw.write(PSP + row + PSP + mean);
        }
        bw.write(EOL);
      }
    }
  }

  bw.close();
}

私の理解では、Bean を作成し、それらをすべて Bean ファクトリに配置して、iReport に渡す準備ができているオブジェクトを作成します。

このすべての情報を Bean に入れるにはどうすればよいですか? 私は基本的に、Bean にシナリオ/テスト ケースと、それが合格したかどうかを含めたいと考えています。(これはテスト自動化用です)

4

1 に答える 1

7

コードを読んで、必要な列を推測しようとしましたが、コンテキストがないため、手がかりがありません。すべての Bean は pojo であり、プライベート フィールドとパブリック ゲッターおよびセッターを備えています。

グループ化がなく、基本的にそれぞれがレポートの 1 つの行に対応すると仮定するScenarioLoadModelと、次のような Bean になります。

public class ScenariaResults {

    private String id;

    private String name;

    private String load;

    private int passCount;

    private int failCount;

    public ScenariaResults(String id, String name, String load, int passCount,
            int failCount) {
        super();
        this.id = id;
        this.name = name;
        this.load = load;
        this.passCount = passCount;
        this.failCount = failCount;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLoad() {
        return load;
    }

    public void setLoad(String load) {
        this.load = load;
    }

    public int getPassCount() {
        return passCount;
    }

    public void setPassCount(int passCount) {
        this.passCount = passCount;
    }

    public int getFailCount() {
        return failCount;
    }

    public void setFailCount(int failCount) {
        this.failCount = failCount;
    }

    @Override
    public String toString() {
        return "ScenariaResults [id=" + id + ", name=" + name + ", load="
                + load + ", passCount=" + passCount + ", failCount="
                + failCount + "]";
    }

}

したがって、基本的に上記のコードでは、インスタンスを作成ScenarioResultsしてリストに追加します。リストを取得したら、あとは JRDataSource を作成するだけです。

List<ScenarioResults> dataBeanList = ...call your method to get the list of results
//create the datasource
JRDataSource dataSource = new JRBeanCollectionDataSource(dataBeanList);

iReport でレポートをデザインする場合、フィールドを自動的にインポートするのは少し難しいかもしれません。基本的には、最初に Bean を含むプロジェクトを iReports のクラスパスに追加します (それを bin フォルダーまたは jar ファイルに指定することもできます): [ツール] -> [オプション] -> [クラスパス] タブ。次の手順に従って、フィールドを追加します。

  1. 次のアイコンをクリックします。データソースの作成
  2. タブを選択しJavaBean Datasourceます。
  3. Bean のクラス名を入力します。(例ScenarioResults)
  4. クリックRead attributes
  5. レポートで必要なフィールドを強調表示し、 をクリックしますAdd Selected Field(s)
  6. をクリックしOKます。

空のデータソースだけでなく、データを使用してレポートがどのように表示されるかをテストする場合は、ここで Factory を使用します。これは、iReport を使用してテストするためだけのものです。基本的にダミー データ セットを作成するクラスを作成する必要があります。次のようになります。

import java.util.ArrayList;
import java.util.List;

public class ScenarioResultsFactory {

    public static List<ScenarioResults> createBeanCollection() {
        List<ScenarioResults> list = new ArrayList<ScenarioResults>();       
        list.add(new ScenarioResults("1", "test", "load", 10, 5));
        //add as many as you want       
        return list;
    }

}

ここで、iReport でそれを指すデータソースを作成する必要があります。

  1. ツールバーの [データソース] ドロップダウンの横にあるツールチップの [レポート データソース] が付いたアイコンをクリックします。
  2. をクリックしNewます。
  3. を選択しJavaBeans set datasourceます。をクリックしNextます。
  4. 名前には を入力しScenarioResultsFactoryます。
  5. Factory クラスの場合、パッケージを含むクラス名を入力する必要があります。したがって、クラスがcomパッケージに含まれている場合は、ここにあるはずcom.ScenarioResultsFactoryです。
  6. createBeanCollectionまだそこにない場合は、静的メソッドを置きます。
  7. チェックUse field descriptionボックスをオンにします。クリックTestして、それが機能したことを確認します。
  8. をクリックしSaveます。
于 2012-11-19T18:35:47.417 に答える