Pergunta

Eu estou usando BIRT relatórios com uma fonte de dados POJO roteiro e estou tendo parâmetros de relatório problemas para acessar. Estou scripting tudo em Java, em vez de javascript. O código está abaixo:

public class StockDataSetHandler extends ScriptedDataSetEventAdapter {
 ...

 @Override
 public void open(IDataSetInstance dataSet) {
  count = 0;
  StockDaoMock mockStockDao = new StockDaoMock();
  //The code below works in javascript. How can I do the equivalent
  //in Java? Where do I get params from?
  String paramValue = params["myparameter"];
  stockData = mockStockDao.getStockValues(paramValue);
 }
}

documenation de BIRT refere-se à coleção parâmetros. Como faço para se apossar do que em Java?

Felicidades Tin

Foi útil?

Solução

É melhor trabalhar com fontes de dados scripts baseados em POJO através da camada de JavaScript no design do relatório. Isto dá-lhe o acesso a elementos relatório ao contexto como parâmetros e folhas seus objetos Java para permanecer provedores de dados agnósticos.

Aqui está como eu geralmente definir as coisas:

1) Camada Java:

1,1) Dados Classe Modelo: Uma classe de elementos de dados com setters e getters. Sem o trabalho é feito por esta classe

1,2) Controlador Classe: Constrói e mantém um conjunto de instâncias de uma classe modelo de dados. Esta é a classe que você irá acessar a partir da camada Report. Esta classe deve implementar um método de "ação" (como getRows(...)) que irá aceitar o seu parâmetro e retornar um ArrayList das "linhas".

2) Relatório da camada:

2.1) Criar uma nova fonte de dados baseado num guião.

2.1.1 ) Substituir o script "aberto" na fonte de dados para instanciar o objeto controlador. O código será parecido com este (Isto é como você começa o seu valor de parâmetro para a camada de Java) :

// This will track your current row later on
count = 0;

// Create instance of the Controller class
controller = new Packages.com.your.package.path.DataSetController(); 

//Load the rows (Note here is where you are able to pass your parameter into the Java layer)
rows = controller.getRows(params["myParameter"]);

2.2) Criar um novo conjunto de dados usando a fonte de dados no script.

2.2.1) Substituir o buscar roteiro para processar o ArrayList construído por sua classe de controlador. O código será parecido com este:

// Iterating over the ArrayList built by the Controller Class bound to the data source.
if(count < rows.size()){
       // Set the column values on the data set off the values store in the Data model class.
       row["product"] = rows.get(count).getProduct();
       row["date"] = rows.get(count).getDate();
       row["units"] = rows.get(count).getUnits();
       count++;
       return true;
}

return false;

Isso deve fazer o truque. Boa sorte!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top