Como passar um JRBeanCollectionDataSource para o iReport?

Atualmente estou tentando usar o jasper para me ajudar a criar relatórios. Eu tenho as informações e dados que eu quero exibidos neste método:

private void writeToFile(final List 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 metricMap = new HashMap(); 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(); } 

Pelo que entendi, eu criei Beans e coloquei todos eles em uma fábrica de feijão, para criar meu object que estará pronto para ser passado para o iReport.

Como posso colocar toda essa informação em um bean? Eu essencialmente quero que o bean inclua o cenário / caso de teste e se ele passou ou não. (Isso é para automação de testes)

Eu tentei ler o seu código para fazer um melhor palpite em quais colunas você quer, mas sem contexto, eu não tenho idéia. Todo o bean é um pojo, com campos privados e getters e setters públicos.

Supondo que não haja agrupamento e, essencialmente, cada ScenarioLoadModel corresponderá a uma linha no relatório, você acabaria com um bean como este:

 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 + "]"; } } 

Então, basicamente, no código que você tem acima, você cria instâncias de ScenarioResults e as adiciona a uma lista. Depois de ter a lista, tudo o que você precisa fazer é criar um JRDataSource:

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

Agora, ao projetar o relatório no iReport, pode ser um pouco complicado conseguir que os campos sejam importados automaticamente. Basicamente, primeiro inclua seu projeto com o bean no caminho de class no iReports (poderia apenas apontá-lo para a pasta bin ou jar file`): Ferramentas -> opções -> guia classpath. Agora siga estas etapas para adicionar os campos.

  1. Clique no ícone a seguir: Criar fonte de dados
  2. Selecione a guia JavaBean Datasource .
  3. Digite o nome da class do seu bean. (ex. ScenarioResults )
  4. Clique em Read attributes
  5. Realce os campos que você deseja no relatório e clique em Add Selected Field(s) .
  6. Clique em OK

Agora, se você quiser testar como o relatório se parece com os dados, e não apenas com uma fonte de dados vazia, é aí que a Fábrica entra. É apenas para testes durante o uso do iReport. Você precisa criar uma class que essencialmente irá criar um dataset fictícios para você. Deve ser algo como:

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

Agora você precisa criar uma fonte de dados apontando para ela no iReport.

  1. Ao lado da lista suspensa Datasource na barra de ferramentas, clique no ícone com a dica de ferramenta `Report Datasources.
  2. Clique em New
  3. Selecione a origem de JavaBeans set datasource . Clique em Next .
  4. Para nome, insira ScenarioResultsFactory .
  5. Para a class Factory, você precisa colocar o nome da class incluindo o pacote. Então, se a class está no pacote com você deve ter com.ScenarioResultsFactory aqui.
  6. Para o método estático, coloque createBeanCollection se ainda não estiver lá.
  7. Marque a checkbox de seleção Use field description . Clique em Test para se certificar de que funcionou.
  8. Clique em Save .
Intereting Posts