AutoReport: mudanças entre as edições
Linha 50: | Linha 50: | ||
Utilizando a estrutura dos [[MetaObject]] para selecionar o campo SEMPRE a partir do objeto utilizado como raiz, o AutoReport utilizará o BISDAO para unir as tabelas e trazer os dados coerentemente. | Utilizando a estrutura dos [[MetaObject]] para selecionar o campo SEMPRE a partir do objeto utilizado como raiz, o AutoReport utilizará o BISDAO para unir as tabelas e trazer os dados coerentemente. Portanto, a parte do "FROM" do SQL é criada automaticamente pelo BISDAO.'' | ||
{{nota|Utilização do BISDAO|Note que apesar do AutoReport utilizar a estrutura de objetos do BISDAO o conteúdo da consulta é retornado uma lista de ''Object[]'' com os objetos retornados diretamente do banco de dados. Assim, é necessário solicitar cada campo do VO que se deseja no relatório (cada coluna da tabela). Diferentemente das consultas por objeto do BISDAO, em que solicitar um campo do VO já trás todo o objeto populado. | {{nota|Utilização do BISDAO|Note que apesar do AutoReport utilizar a estrutura de objetos do BISDAO o conteúdo da consulta é retornado uma lista de ''Object[]'' com os objetos retornados diretamente do banco de dados. Assim, é necessário solicitar cada campo do VO que se deseja no relatório (cada coluna da tabela). Diferentemente das consultas por objeto do BISDAO, em que solicitar um campo do VO já trás todo o objeto populado. | ||
Linha 59: | Linha 59: | ||
* Outro problema seriam colocar as colunas que foram manipuladas com as funções do [[BISField]], por exemplo: Imagine uma coluna do banco de dados "X" que é do tipo data. Mas recuperamos ela com a função BISField.month("X"). Essa função retornaria um valor inteiro com o número do mês da data, o que já não seria possível fazer um cast para o tipo do campo existente no objeto para a coluna X. | * Outro problema seriam colocar as colunas que foram manipuladas com as funções do [[BISField]], por exemplo: Imagine uma coluna do banco de dados "X" que é do tipo data. Mas recuperamos ela com a função BISField.month("X"). Essa função retornaria um valor inteiro com o número do mês da data, o que já não seria possível fazer um cast para o tipo do campo existente no objeto para a coluna X. | ||
}} | }} | ||
=== WHERE === | |||
Uma vez familiarizado com a estrutura do [[BISMO]], a parte de "WHERE" (filtro dos dados do relatório) não tem nenhum segredo. Basta criar o [[BISMO]] e associa-lo ao AutoReportDefinition para que ele seja utilizado. Exemplo: | |||
{{java|Filtrando os dados do AutoReport|<syntaxhighlight lang="java"> | |||
BISMO mo = new BISMO(); | |||
mo.greaterThanOrEqualTo(v_.date(), LocalDate.of(2019, 11, 1)); | |||
mo.lessThan(v_.date(), LocalDate.of(2019, 12, 1)); | |||
mo.equal(v_.accountVO().id(), 1); | |||
def.setBISMO(mo); | |||
</syntaxhighlight>}} | |||
=== ORDER BY === | |||
Assim como a parte do WHERE, a parte do ORDER BY no AutoReport não tem segredos em relação à estrutura já utilizada no BISDAO. | |||
{{java|Ordenando os dados do AutoReport|<syntaxhighlight lang="java"> | |||
BISOrderBy orderBy = BISOrderBy.createInstance(v_.date()); | |||
def.setOrderBy(orderBy); | |||
</syntaxhighlight>}} |
Edição das 21h00min de 23 de dezembro de 2019
O AutoReport é um serviço do BIS com a finalidade de criar relatórios e gráficos de forma automatizada utilizando a estrutura de dados do BIS.
Funcionamento e Objetivos
A finalidade desta ferramenta é permitir que o desenvolver simplesmente passe uma consulta, similar à um SQL mas utilizando a estrutura do BIS, para que a própria ferramente recupere os dados. E depois disso, a partir de algumas informações de estrutura a própria ferramente estrutura os dados retornados do banco de forma coerente e gera objetos que possam ser traduzidos em diversas interfaces para o usuário. Onde interface neste caso pode ser um Grid/Tabela/Tree na UI, um gráfico na UI com opções de iteração, ou mesmo as informações impressas em PDF, exportar para arquivos como Excel, CSV, etc..
Como utilizar o AutoReport
Para criar um relatório, o primeiro passo é criar um AutoReportDefinition. Esta classe de nome sugestivo, tem as definições do relatório. Nela montamos o que seria similar ao SELECT para ser utilizado no banco de dados e recuperar as informações para serem exibidas.
AutoReportDefinition
SELECT
Imagine que desejamos criar um relatório com os dados dos lançamentos financeiros das conta do BIS. Para isso precisamos definir com o AutoReport buscará os dados:
Exemplo de criação do Definition:
![]() |
Criando o AutoReportDefinition
final AccountBankStatementVO_ v_ = AccountBankStatementVO_.VO;
AutoReportDefinition<AccountBankStatementVO> def = new AutoReportDefinition<AccountBankStatementVO>(AccountBankStatementVO.class);
|
Note que o definition é instanciado com a classe que servirá de referência (tabela principal do Select) para que o BISDAO faça os joins e buscas no banco de dados.
Uma vez criado o definition, precisamos agora informar que colunas desejamos que sejam recuperadas. Similar ao SELECT do banco de dados, aqui selecionamos os campos dos VOs que queremos para que esses dados estejam disponíveis no relatório.
Note que é possível utilizar a estrutura do BISField para definir funções e outras operações para serem executadas diretamente no banco de dados.
![]() |
Seleção das Colunas
AutoReportColumn columnID = def.addSelect(BISField.field("id"));
AutoReportColumn columnDate = def.addSelect(BISField.field(v_.date()));
AutoReportColumn columnDisplayline = def.addSelect(BISField.field(v_.displayLine()));
AutoReportColumn columnOperation = def.addSelect(BISField.field(v_.operation()));
AutoReportColumn columnValue = def.addSelect(BISField.field(v_.value()));
AutoReportColumn columnDisplayline = def.addSelect(BISField.field(v_.accountStatementList().displayLine()));
AutoReportColumn columnCatMapID = def.addSelect(BISField.field(v_.accountStatementList().billPaymentVO().categoryMapList().id()));
AutoReportColumn columnCat = def.addSelect(
BISField.coalesce(
BISField.field(v_.accountStatementList().categoryMapList().categoryVO().name()),
BISField.field(v_.accountStatementList().billPaymentVO().categoryMapList().categoryVO().name())));
AutoReportColumn columnCatValue = def.addSelect(
BISField.coalesce(
BISField.field(v_.accountStatementList().categoryMapList().value()),
BISField.field(v_.accountStatementList().billPaymentVO().categoryMapList().value())));
|
Utilizando a estrutura dos MetaObject para selecionar o campo SEMPRE a partir do objeto utilizado como raiz, o AutoReport utilizará o BISDAO para unir as tabelas e trazer os dados coerentemente. Portanto, a parte do "FROM" do SQL é criada automaticamente pelo BISDAO.
![]() |
|
WHERE
Uma vez familiarizado com a estrutura do BISMO, a parte de "WHERE" (filtro dos dados do relatório) não tem nenhum segredo. Basta criar o BISMO e associa-lo ao AutoReportDefinition para que ele seja utilizado. Exemplo:
![]() |
Filtrando os dados do AutoReport
BISMO mo = new BISMO();
mo.greaterThanOrEqualTo(v_.date(), LocalDate.of(2019, 11, 1));
mo.lessThan(v_.date(), LocalDate.of(2019, 12, 1));
mo.equal(v_.accountVO().id(), 1);
def.setBISMO(mo);
|
ORDER BY
Assim como a parte do WHERE, a parte do ORDER BY no AutoReport não tem segredos em relação à estrutura já utilizada no BISDAO.
![]() |
Ordenando os dados do AutoReport
BISOrderBy orderBy = BISOrderBy.createInstance(v_.date());
def.setOrderBy(orderBy);
|