gpt4 book ai didi

java - 如何将 JRBeanCollectionDataSource 传递给 iReport?

转载 作者:搜寻专家 更新时间:2023-11-01 01:54:39 25 4
gpt4 key购买 nike

我目前正在尝试使用 jasper 来帮助我创建报告。我有我想要在此方法中显示的信息和数据:

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 包含场景/测试用例以及它是否通过。 (这是为了测试自动化)

最佳答案

我试图阅读您的代码以最好地猜测您想要哪些列,但没有上下文,我没有任何线索。所有的 bean 都是一个 pojo,具有私有(private)字段和公共(public) getter 和 setter。

假设没有分组并且基本上每个 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. 单击以下图标:Create datasource
  2. 选择 JavaBean 数据源 选项卡。
  3. 输入您的 bean 的类名。 (例如 ScenarioResults)
  4. 点击读取属性
  5. 在报告中突出显示您想要的字段并单击添加选定字段
  6. 单击确定

现在如果你想用数据测试报告的样子,而不仅仅是一个空的数据源,这就是工厂的用武之地。它只用于在使用 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. 单击新建
  3. 选择 JavaBeans 设置数据源。点击下一步
  4. 对于名称,输入 ScenarioResultsFactory
  5. 对于工厂类,您需要将包含包的类名放入。因此,如果该类位于 com 包中,您应该在此处具有 com.ScenarioResultsFactory
  6. 对于静态方法,如果尚不存在,请放入 createBeanCollection
  7. 选中使用字段说明复选框。单击 Test 以确保它有效。
  8. 点击保存

关于java - 如何将 JRBeanCollectionDataSource 传递给 iReport?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13456114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com