Relatórios Avançados
O
IW permite que sejam publicados relatórios avançados
desenvolvidos com tecnologia JRXML (Jasper Report). Esses relatórios
podem ser desenvolvidos a partir do ambiente gráfico “iReport”
e publicados naturalmente na relação de relatórios
acessíveis pelos usuários através do menu ou
painéis de navegação.
Nota:
Acesse o link :
http://sourceforge.net/projects/ireport/files/iReport/ para fazer
download gratuito do ambiente de desenvolvimento iReport Design. O
iReport Design é um software que possui versão free
(que pode ser baixada na url citada acima) desenvolvido pela Jasper
Soft. O Jasper Report é um dos ambientes de desenvolvimento de
relatórios mais utilizados no mundo todo. O iReport Design é
basicamente uma ferramenta gráfica que torna o trabalho de
edição dos fontes do relatório (arquivos xml)
mais amigável e simples. Existe ampla bibliografia disponível
sobre esse ambiente na internet. O IW está correntemente
preparado para receber relatórios gerados até a versão
4.02 do iReport.
Esse
manual descreve o processo de desenvolvimento de relatórios
usando o iReport Design com o objetivo de gerar relatórios que
sejam publicáveis no IW.
Através da criação
de relatórios avançados é possível
combinar diversos relatórios (uso de sub-reports) em uma mesma
impressão bem como é possível combinar diversos
modelos de gráficos, com dados tabulares em um único
relatório oferecendo grande eficiência e elegância
na apresentação das informações
gerenciais.
As figuras a seguir mostram exemplos de relatórios avançados :
Tanto
relatórios de gride quanto relatórios baseados em
comandos SQL poderão ser implementados através do uso
da arquitetura de processamento de relatórios avançados.
Método
de Desenvolvimento de Relatórios Avançados Publicáveis
no IW
(a)
Desenvolvendo Relatórios Avançados Baseados em Comandos
SQL
(b) Convertendo relatórios tradicionais para
Relatórios Avançados
(a)
Desenvolvendo Relatórios Avançados Baseados em Comandos
SQL
[01]
– Passo
1 :
Elaborando o comando SQL do
relatório
[02] – Passo
2 :
Gerando um “DataSource”
e um arquivo .jrxml de semente para elaboração do
relatório avançado
[03] – Passo
3 :
Preparação para
o Desenvolvimento do Relatório no iReport Designer
[04]
– Passo
4 :
Desenvolvimento
do Relatório no iReport
[05] – Passo
5 :
Publicação
do Relatório Avançado no IW
Passo
1: Elaborando o comando SQL do
relatório
Elabore o comando SQL que fará
a obtenção dos dados que serão trabalhados no
relatório. Usuários com status de “desenvolvedores”
no IW podem utilizar a interface “F00129 - Sql & Debug”
(menu: Ferramentas – Sql & Debug) para desenvolver/testar o
comando SQL para o relatório.
Notas
importantes:
(a) Basicamente vamos elaborar dois comandos
a saber: (a.1) Comando no qual os parâmetros de entrada para o
comando (ex.: datas de início e término de um período
de tempo que será utilizado como filtro no relatório)
estão substituídos por seus valores de exemplo e (a.2)
Comando no qual os parâmetros de entrada estão escritos
na sintaxe de parâmetros do IW.
Exemplo: Vamos supor um
comando que fará um cálculo de contagem de consultas
realizadas por especialidade e por paciente em um determinado período
de tempo:
Comando
(a.1)
Sintaxe para oracle:
Select
count(*) as qtde_consultas , b.codename as nome_especialidade ,
e.name as nome_paciente , e.gender as sexo_paciente , b.id as
nro_atendimento
from capevolution a , scccode b , capadmission c ,
glbpatient d , glbperson e
where
a.scspeciality = b.id
and
a.idadmission = c.id
and c.idpatient = d.id
and d.idperson =
e.id
and a.startdate >= to_date('01/01/2006',
'dd/mm/yyyy') and
a.startdate < (to_date('31/01/2006',
'dd/mm/yyyy') + 1 )
group
by b.codename , e.name , e.gender, b.id
order by b.codename asc ,
e.name asc
Sintaxe para SqlServer:
Select
count(*) as qtde_consultas , b.codename as nome_especialidade ,
e.name as nome_paciente , e.gender as sexo_paciente , b.id as
nro_atendimento
from capevolution a , scccode b , capadmission c
, glbpatient d , glbperson e
where
a.scspeciality = b.id
and
a.idadmission = c.id
and c.idpatient = d.id
and d.idperson =
e.id
and a.startdate >= Cast('01/01/2006'
as DateTime) and
a.startdate < (Cast('31/01/2006'
as DateTime) + 1 )
group
by b.codename , e.name , e.gender, b.id
order by b.codename asc ,
e.name asc
Nesse
comando foi utilizado como período de exemplo o mês de
janeiro de 2006 inteiro : Ou seja, de '01/01/2006' até
'31/01/2006' inclusive.
Esse
comando (a.1) é que
será utilizado para obtenção da massa de dados
(Data Source) para o desenvolvimento do relatório.
Comando
(a.2)
Sintaxe para oracle:
Select
count(*) as qtde_consultas ,
b.codename as nome_especialidade , e.name as nome_paciente , e.gender
as sexo_paciente , b.id as nro_atendimento
from capevolution a , scccode b , capadmission c , glbpatient d , glbperson e
where
a.scspeciality = b.id
and a.idadmission = c.id
and c.idpatient = d.id
and d.idperson = e.id
and a.startdate >= to_date('$P{Periodo_de}', 'dd/mm/yyyy') and a.startdate < (to_date('$P{Periodo_ate', 'dd/mm/yyyy') + 1 )
group by b.codename , e.name , e.gender, b.id
order by b.codename asc , e.name asc
Sintaxe
para SqlServer:
Select
count(*)
as qtde_consultas , b.codename as nome_especialidade , e.name as
nome_paciente , e.gender as sexo_paciente , b.id as nro_atendimento
from capevolution a , scccode b , capadmission c , glbpatient d , glbperson e
where
a.scspeciality = b.id
and a.idadmission = c.id
and c.idpatient = d.id
and d.idperson = e.id
and a.startdate >= Cast('$P{Periodo_de}' as DateTime) and a.startdate < (Cast('$P{Periodo_ate}' as DateTime) + 1 )
group by b.codename , e.name , e.gender, b.id
order by b.codename asc , e.name asc
Note
que nos comandos (a.2) ao invés de colocarmos valores de datas
fixos , o comando foi escrito com a sintaxe de substituição
de parâmetros do IW. O comando (a.2) será utilizado
na etapa final do desenvolvimento do relatório avançado.
Basicamente vamos editar diretamente o xml final inserindo na sintaxe
do data source o comando (a.2). Isso será visto em detalhes
mais adiante nesse manual.
A figura a seguir ilustra a execução desse comando através da interface “F00129 - Sql & Debug”:
Realizando
a Tradução de Campos associados a Constantes no
IW
Notem que a coluna denominada
“SEXO_PACIENTE” acima retornou valores inteiros (1,2) que
são os valores do padrão de codificação
das opções de valores para o atributo “sexo
(gênero)” dos pacientes. Dentro da interface desktop
(java) do IW a exibição desse tipo de coluna nos grides
da aplicação é configurada normalmente
relacionada a uma constante (K_GLB_GENDER) onde ficam gravadas as
“traduções” dos valores (ex.: 1=Masculino ,
2 = Feminino) e o IW no momento da exibição do gride
faz a “tradução automaticamente”. No caso
da exportação de um arquivo .csv de Data Source devemos
utilizar exatamente o mesmo recurso para termos a informação
traduzida no gride (ex.: Masculino , Feminino ao invés de 1 ,
2). Para isso basta “associar a constante à coluna
diretamente no gride na própria interface F00129”.
Para isso siga os seguintes passos:
I) Clique com botão
direito do mouse sobre o cabeçalho do gride e selecione a
opção “Configuração”. A
figura a seguir ilustra essa edição:
O
IW irá abrir a caixa de diálogo de configuração
do gride que ilustramos a seguir: Localize a coluna desejada
(SEXO_PACIENTE) e clique “Config → Local” conforme
ilustrado a seguir:
O IW irá abrir a caixa de diálogo de parametrização das características do campo selecionado que ilustramos a seguir:
Selecione
: Tipo = Const e selecione a constante K_GLB_GENDER conforme
ilustrado acima. Em seguida clique no botão “ok” e
em seguida clique no botão “Salvar” (na interface
F00138). Note que o IW irá re-exibir o gride com o resultado
do comando SQL já com as devidas traduções
(sexo: masculino ou femino). A figura a seguir ilustra o resultado
dessa edição :
IMPORTANTE
: Nessas colunas que são associadas a “constantes”
no IW, tipicamente será mais prático deixar o comando
retornar o nome nativo da coluna no IW. Por exemplo: Se ao invés
de renomearmos a coluna e.gender as sexo_paciente como
foi feito no nosso exemplo , deixássemos retornar no comando
simplesmente e.gender o
IW já irá trazer a coluna traduzidas automaticamente
com base na tradução “global” gravada no
dicionário do IW. A figura a seguir ilustra o resultado da
execução do comando modificado:
Notem
que a valoração da coluna “gender” já
vem traduzida.
Nota
Técnica: Ao
exportamos futuramente o data source (arquivo .csv) e a “semente
.jrxml” para o desenvolvimento do relatório avançado
, aqueles campos do gride que tenham sido associados a “constantes”
já serão associados a essas mesmas “constantes”
no xml do relatório avançado. Em tempo de execução
desses relatórios, o IW fará a tradução
dos valores dos KEYINDEX (ex.:1,2, etc) pelas suas devidas traduções
(ex.: feminino, masculino) automaticamente . Esse comportamento da
infra-estrutura do IW visa simplificar a construção dos
comandos SQL para relatórios avançados desobrigando os
desenvolvedores de envolver tabelas de tradução de
constantes nos comandos Sql.
Passo
2 :
Gerando um “DataSource” e arquivo .jrxml semente para
elaboração do relatório
(2.1)
Gerando o arquivo “Data Source” para elaboração
do relatório avançado
Para
gerar o DataSource a ser utilizado dentro do iReport vamos utilizar o
recurso de gerar um arquivo “.csv” contendo a massa de
dados de base para o desenvolvimento do relatório
(datasource). Para obter esse arquivo “.csv” vamos
basicamente acessar a interface “Sql&Debug” do
Incoway e vamos executar o comando SQL do relatório. A figura
a seguir ilustra essa interface F00129 (menu: Ferramentas – Sql
& Debug) :
Após
executar o comando sql na interface F00129 clique com o botão
direito do mouse sobre o cabeçalho do gride que apresenta o
resultado do comando sql e selecione a opção “Exportar
Arquivo CSV Completo” conforme ilustrado acima. O IW irá
abrir a caixa de diálogo tradicional para a salva de um
arquivo conforme ilustrado abaixo:
Selecione
um diretório destino para a salva do arquivo e informe um nome
para esse arquivo : Atenção : utilize extensão
.csv para o arquivo e clique no botão “Abrir”. O
IW irá gerar um arquivo .csv contendo as informações
que estavam no gride. Esse arquivo será utilizado no “iReport”
para definir um “DataSource” que será utilizado no
desenvolvimento e testes do relatório avançado.
IMPORTANTE:
Ao exportar os dados do gride para o arquivo .csv o IW irá
acrescentar colunas no data source, sempre que houver colunas no
gride associadas a “constantes do sistema de traduções
do IW”. No nosso exemplo associamos a coluna denominada
SEXO_PACIENTE à constante K_GLB_GENDER, isso fez com que fosse
exibido no gride as traduções do atributo sexo (ex.:
“masculino” ou “feminino” ao invés dos
valores do KEYINDEX da constante (1 ou 2)). Nesse caso o IW irá
acrescentar no data source (arquivo .csv) uma coluna denominada
SEXO_PACIENTE_#KEYINDEX. Essa coluna será valorada com
os valores do KEYINDEX da constante (ou seja, valores originais
obtidos da coluna sem passar pela tradução da
constante). Nesse exemplo a coluna SEXO_PACIENTE_#KEYINDEX receberá
o valor 1 quando se tratar de um paciente do sexo “masculino”
e 2 quando se tratar de um paciente do sexo “feminino”. O
objetivo desse comportamento do IW é permitir que sejam
realizados processamentos de (lógicas) no código fonte
do relatório baseadas nos valores dessas colunas associadas à
constantes no IW de forma mais “robusta”, ou seja, ao
invés de utilizarmos expressões baseadas na coluna
SEXO_PACIENTE onde teríamos que utilizar os termos traduzidos
nas expressões (“masculino, “feminino”),
como uma boa prática de programação, deveremos
utilizar em expressões a coluna SEXO_PACIENTE_#KEYINDEX sobre
os valores não traduzidos (1 ou 2). Se adotarmos essa prática
de programação teremos relatórios mais
“robustos” que continuarão funcionando normalmente
caso as traduções das constantes venham a ser alteradas
na base de dados do cliente.
(2.2)
Gerando o arquivo .jrxml de semente para elaboração do
relatório
O
arquivo de “semente” para elaboração de
relatórios avançados consiste em um arquivo com
extensão .jrxml que contem todas as definições
dos campos do “Data Source” que será utilizado no
processamento do relatório. Para gerar o arquivo de semente
basta utilizar a opção “Gerar Semente Relatorio
Avançado” que fica logo abaixo da opção
“Exportar arquivo CSV Completo” (conforme ilustração
já exibida acima). Ao acionar essa opção o IW
irá lançar a mesma caixa de diálogo solicitando
um nome para o arquivo .jrxml e o local (diretório) para salva
do mesmo.
Após a construção do comando
sql , exportação do Data Source (arquivo .csv) e da
semente (arquivo .jrxml) estamos prontos para iniciar o
desenvolvimento do relatório avançado propriamente dito
usando agora o iReport Designer.
Passo 3 : Preparação para o Desenvolvimento do Relatório no iReport Designer
Para
iniciamos as atividades de desenvolvimento do relatório
propriamente dito deveremos executar os seguintes passos:
3.1
– Lançar o
aplicativo iReport propriamente dito na sua estação de
trabalho
3.2 – Carregar o
modelo “semente” do relatório avançado
3.3
– Carregar o arquivo Datasource
(arquivo .csv)
3.1
- Lançar o aplicativo iReport propriamente dito na sua estação
de trabalho
Lance
o iReport na sua estação de trabalho. A figura a seguir
ilustra a tela de abertura do iReport Designer :
3.2
– Carregar o modelo “semente” do relatório
avançado no ambiente de desenvolvimento do iReport
Em
seguida acesse “menu-arquivo : Open” e carregue o arquivo
.jrxml “semente” gerado no passo 2.2 descrito
anteriormente.
A figura a seguir ilustra a interface do
iReport após esse passo: Essa é uma interface que
permite a edição dos arquivos .jrxml de maneira gráfica
de forma mais confortável e segura.
Lembre-se
que dissemos que o arquivo .jrxml “semente” gerado pelo
IW já possui a declaração dos campos “fields”
(obtidos do resultado do comando sql). Visualize esses “fieds”
clicando na opção “Fields” no lado esquerdo
da interface . A figura a seguir ilustra essa navegação:
3.3 – Carregar o arquivo Datasource (arquivo .csv)
Para proceder a carga do “Data Source” no iReport clique no botão destacado pelo círculo vermelho na ilustração abaixo:
Quando
clicamos nesse botão o iReport irá abrir a seguinte
caixa de diálogo:
Clique
no botão denominado “New” para proceder a carga do
arquivo .csv. O iReport irá abrir a seguinte caixa de diálogo
para seleção do “tipo de data source”:
Selecione,
conforme ilustrado acima a opção “File Csv Data
Source”. O iReport irá abrir então a caixa de
diálogo ilustrada abaixo:
No
campo “name” informe um nome para o Data Source e clique
no botão “Browse” para navegar na estrutura de
diretórios da sua estação de trabalho e
selecionar o arquivo .csv contendo o data source para desenvolvimento
do nosso relatório exemplo (vide tópico 2.1).
Em seguida clique na sub-aba denominada “Separators” que ilustramos abaixo:
Selecione
a opção “semi-colon” (ponto e vírgula)
como separador de colunas e “New line (windows)” como
separador de linhas. Em seguida retorne para a sub-aba denominada
“Columns” e clique no botão denominado “Get
columns names from the first row of the file”. Após esse
comando o iReport irá apresentar as os nomes das colunas que
ele extraiu do arquivo .csv (Data Source). A figura abaixo ilustra
essa situação:
IMPORTANTE:
O formato de datas a ser setado no data source deverá ser
“yyMMddHHmmssZ”.
Para setar esse formato de datas clique inicialmente ative a caixa de
checagem denominada “use custom date format” e em seguida
clique no botão denominado “Date format”.
Selecione
a opção ilustrada acima yyMMddHHmmssZ
e
clique no botão “Apply”. A caixa de diálogo
de configuração do Data Source ficará na
condição que ilustramos abaixo:
Para
finalizar a configuração do Data Source clique no botão
denominado “Test” ilustrado acima. O iReport irá
realizar um teste sobre o novo Data Source que acabamos de criar e
deverá emitir uma caixa de diálogo com a informação
“Connection test successful” conforme ilustramos a
seguir:
IMPORTANTE:
Após realizar o testes de conexão salve o novo “Data
Source” (clique no botão “Save” ilustrado na
caixa de diálogo de criação do Data Source).Ao
encerrar a caixa de diálogo de definição do novo
“Data Source” o iReport irá retornar para a caixa
de diálogo agora exibindo na listagem o novo Data Source que
acabamos de configurar na condição “default”
= ticado (indicando que esse é o data source que será
executado por default no desenvolvimento do relatório. A
figura a seguir ilustra o que acabamos de dizer: