Files
apitdn/fluig_rag_docs/Plataforma Documentação técnica/Recurso de Documentos (ECM)/Desenvolvimento de relatórios.md
T
2026-05-06 13:35:47 -03:00

800 lines
37 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: Desenvolvimento de relatórios
source: https://tdn.totvs.com/pages/viewpage.action?pageId=74646056
path: \Plataforma Documentação técnica\Recurso de Documentos (ECM)\Desenvolvimento de relatórios.md
---
# Índice
- 1 [Objetivo](#Desenvolvimentoderelatórios-Objetivo)
- 2 [Introdução](#Desenvolvimentoderelatórios-Introdução)
- 3 [Exemplos de relatórios desenvolvidos](#Desenvolvimentoderelatórios-Exemplosderelatóriosdesenvolvidos)
- 4 [Ambiente de desenvolvimento](#Desenvolvimentoderelatórios-Ambientededesenvolvimento)
- 4.1 [Como instalar o plugin](#Desenvolvimentoderelatórios-Comoinstalaroplugin)
- 5 [Conexão direta com o banco de dados](#Desenvolvimentoderelatórios-Conexãodiretacomobancodedados)
- 6 [Desenvolvendo um relatório de Usuários](#Desenvolvimentoderelatórios-DesenvolvendoumrelatóriodeUsuários)
- 6.1 [Criando um novo projeto e um novo relatório](#Desenvolvimentoderelatórios-Criandoumnovoprojetoeumnovorelatório)
- 6.2 [Configurando o acesso aos dados](#Desenvolvimentoderelatórios-Configurandooacessoaosdados)
- 6.3 [Incluindo parâmetros no Relatório](#Desenvolvimentoderelatórios-IncluindoparâmetrosnoRelatório)
- 6.4 [TAG's](#Desenvolvimentoderelatórios-TAG's)
- 6.5 [Como utilizar as TAG's](#Desenvolvimentoderelatórios-ComoutilizarasTAG's)
- 6.6 [Populando o Data Set](#Desenvolvimentoderelatórios-PopulandooDataSet)
- 6.7 [Obtendo dados via conexão JDBC](#Desenvolvimentoderelatórios-ObtendodadosviaconexãoJDBC)
- 6.8 [Formatando a visualização do Relatório](#Desenvolvimentoderelatórios-FormatandoavisualizaçãodoRelatório)
- 6.9 [Renderizando dados do Data Set](#Desenvolvimentoderelatórios-RenderizandodadosdoDataSet)
- 7 [Publicando Relatórios](#Desenvolvimentoderelatórios-PublicandoRelatórios)
- 7.1 [Publicação através do Studio](#Desenvolvimentoderelatórios-PublicaçãoatravésdoStudio)
- 8 [Visualizador de Relatórios](#Desenvolvimentoderelatórios-VisualizadordeRelatórios)
- 9 [JPA - Funções de Agregação](#Desenvolvimentoderelatórios-JPA-FunçõesdeAgregação)
- 9.1 [Funções de Agregação](#Desenvolvimentoderelatórios-FunçõesdeAgregação)
- 9.2 [Tabela de entidades](#Desenvolvimentoderelatórios-Tabeladeentidades)
- 9.3 [Exemplo de Utilização](#Desenvolvimentoderelatórios-ExemplodeUtilização)
- 10 [Acessando dados de Formulários](#Desenvolvimentoderelatórios-AcessandodadosdeFormulários)
- 10.1 [Importando bibliotecas](#Desenvolvimentoderelatórios-Importandobibliotecas)
- 10.2 [Retornando dados do formulário](#Desenvolvimentoderelatórios-Retornandodadosdoformulário)
- 10.3 [Busca de dados de formulário com filtro por data](#Desenvolvimentoderelatórios-Buscadedadosdeformuláriocomfiltropordata)
- 11 [Acessando documentação do BIRT Report Designer](#Desenvolvimentoderelatórios-AcessandodocumentaçãodoBIRTReportDesigner)
# Objetivo
O objetivo deste guia é descrever o desenvolvimento, publicação e visualização de relatórios no TOTVS Fluig Plataforma. Para facilitar a compreensão será detalhado um exemplo de relatório de usuários.
# Introdução
O TOTVS Fluig Plataforma utiliza o BIRT - *Business Intelligence and Reporting Tools* - como motor de execução de relatórios, por esse motivo para o desenvolvimento de relatórios deve-se utilizar o padrão e a metodologia do BIRT. O BIRT é uma plataforma *open source* que facilita a modelagem de relatórios dentro do Fluig.
A partir da plataforma, é possível criar relatórios com:
- Listagem
- Agrupamento
- Cálculos
- Cartas e Documentos
- Gráficos
Compatibilidade no modo escuro
Este recurso ainda não é compatível com o modo escuro lançado na atualização [Voyager 2.0](https://tdn.totvs.com/x/6HxjN).
# Exemplos de relatórios desenvolvidos
Você pode fazer o download de [exemplos de relatórios](https://git.fluig.com/projects/SAMPLES/repos/relatorios/browse) desenvolvidos para a plataforma no [Repositório Git](https://git.fluig.com/projects/SAMPLES).
Mais detalhes na página [Modelos de relatório](Desenvolvimento de relatórios/Modelos de relatórios.md).
# Ambiente de desenvolvimento
Para o desenvolvimento de relatórios, é necessário instalar:
- Java™ JDK/JRE - versão superior a 1.6. Endereço para download: <http://java.sun.com/javase/downloads/index.jsp>.
- BIRT - Caso a plataforma esteja na atualização Lake (1.7.0) ou superior, a [versão 4.8](https://www.eclipse.org/birt/phoenix/project/notable4.3.php) do BIRT é compatível. Nas atualizações anteriores, utilize a versão 2.6.2 do BIRT.
Recomenda-se o uso do BIRT Report Designer para o desenvolvimento de relatórios. O BIRT pode ser integrado ao Studio ou Eclipse (já instalados para utilização do Fluig Studio, conforme [Guia de instalação Fluig Studio](../Instalação e Atualização/Guia de instalação Fluig Studio.md)), basta instalar o plugin do BIRT.
O BIRT Report Designer conta com várias funcionalidades que auxiliam no desenvolvimento de relatórios. Entre elas destacam-se: ajuste de *layout*, configuração de acesso a dados e formatação do relatório.
## Como instalar o plugin
Cada versão do Eclipse possui um repositório, e com ele uma versão homologada do BIRT. Confira abaixo os passos necessários para instalar o plugin do BIRT:
Plugin compatível até a versão **2019-03** do Eclipse. Caso não possua uma versão do Eclipse (se não estiver usando o TDS), é necessário baixar a versão igual ou inferior a 2019-03.
**01.** No Eclipse, acessar a opção**Help → Install New Software.**
**02**. Acionar o botão **Add** (localizado ao lado do campo **Work with)** e na tela apresentada preencher: **[![Veja a imagem.](..\..\images\photo-off.png)](https://tdn.totvs.com/pages/viewpage.action?pageId=334350197) [Veja a imagem](https://tdn.totvs.com/download/attachments/74646056/Birt%20-%204_13.png?version=1&modificationDate=1772828952327&api=v2)**
- Name: **birt - 4.13**
- Location: ****<https://download.eclipse.org/birt/updates/release/4.13.0/>****
**03**. Após listar as opções do BIRT, marcar as opções:
- BIRT Reporting SDK
- BIRT Charting SDK
- BIRT Engine Runtime
**04**. Em seguida, acionar **Next** até concluir a instalação.
![](..\..\images\Screenshot_2026-03-06_17-33-17.png)
Plugin compatível até a versão **2019-03** do Eclipse. Caso não possua uma versão do Eclipse (se não estiver usando o TDS), é necessário baixar a versão igual ou inferior a 2019-03.
**01.** No Eclipse, acessar a opção**Help → Install New Software.**
**02**. Acionar o botão **Add** (localizado ao lado do campo **Work with)** e na tela apresentada preencher: **[![Veja a imagem.](..\..\images\photo-off.png)](https://tdn.totvs.com/pages/viewpage.action?pageId=334350197) [Veja a imagem](https://tdn.totvs.com/download/attachments/74646056/URL.png?version=1&modificationDate=1603194851987&api=v2)**
- Name: **birt**
- Location: **http://download.eclipse.org/releases/2019-09/201909181001**.
**03**. Após listar as opções do BIRT, marcar a caixa de seleção de **Business Intelligence, Reporting and Charting**.
**04**. Em seguida, acionar **Next** até concluir a instalação.
![](..\..\images\BIRT%204.7.png)
**01.** No Eclipse, acessar a opção **Ajuda → Instalar Novo Software.**
**02**. No campo **Work with**: Selecionar **Indigo**.
**03**. Após listar as opções do BIRT, digitar **Birt** no campo de busca.
**04**. Marcar a caixa de seleção de **Business Intelligence, Reporting and Charting**.
**05**. Em seguida, acionar **Avançar** até concluir a instalação.
![](..\..\images\image2013-9-12%20102232.png)
# Conexão direta com o banco de dados
É possível publicar relatórios que se comunicam diretamente com o banco de dados.
Utilize em seu relatório as configurações abaixo atentando para os valores das propriedades *'odaDriveClass'* e *'odaURL'.*
Para fazer conexão direta com banco de dados **SQLServer** é preciso utilizar o seguinte padrão:
**SQLServer**
```
<property name="odaDriverClass">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="odaURL">jdbc:sqlserver://IP:1433;databaseName=DATABASE</property>
// Para a release 2.0.0, adicionar os seguintes parâmetros na URL:
<property name="odaURL">jdbc:sqlserver://IP:1433;databaseName=DATABASE;encrypt=true;trustServerCertificate=true</property>
```
Para fazer conexão direta com banco de dados **MySQL** é preciso utilizar o seguinte padrão:
**MySQL**
```
<property name="odaDriverClass">com.mysql.jdbc.Driver</property>
<property name="odaURL">jdbc:mysql://IP:3306/databaseName=DATABASE</property>
```
Para fazer conexão direta com banco de dados **Oracle**é preciso utilizar o seguinte padrão:
**Oracle**
```
<property name="odaDriverClass">oracle.jdbc.OracleDriver</property>
<property name="odaURL">jdbc:oracle:thin:@IP:1521:databaseName=DATABASE</property>
```
# Desenvolvendo um relatório de Usuários
**oculto**
Esse passo a passo está duplicado no artigo <https://centraldeatendimento.fluig.com/hc/pt-br/articles/360034289633> (Como desenvolver relatórios)
Caso tenha alguma alteração, lembrar de revisar esse artigo!
Através do BIRT Report Designer é possível criar vários relatórios para o TOTVS Fluig Plataforma, acessar dados do banco de dados do produto via consulta JPA, JDBC. É possível acessar os dados de outros produtos por conexão JDBC, Web Service ou arquivos XML.
Para facilitar a compreensão a respeito do desenvolvimento de relatórios, será demonstrado um exemplo de criação de relatórios. A seguir, os passos necessários para a criação do relatório de usuários, sendo este com dados providos da plataforma através da consulta via *dataset*. O fonte do exemplo citado pode ser baixado [clicando aqui](https://git.fluig.com/projects/SAMPLES/repos/relatorios/browse/ambient-reports).
### Criando um novo projeto e um novo relatório
Abra a ferramenta na qual instalou o plugin do BIRT Report Designer para acompanhar o passo a passo, no exemplo iremos utilizar o Fluig Studio.
- No projeto fluig previamente criado, clique com o botão direito do mouse na pasta *reports*, e em seguida em *Novo → Relatório fluig.*
- Em seguida basta informar o *Nome do Relatório* e clicar em *Concluir*.
![](..\..\images\novo_relatorio.png)
**Figura 1 - Criação de relatório no projeto fluig.**
### Configurando o acesso aos dados
Um *Data Source* é o mecanismo que guarda os dados de conexão com a fonte de dados, por exemplo, configurações JDBC, Web Service, entre outros. No caso desse relatório, será utilizado o acesso aos dados via linguagem JavaScript.
Acompanhe os passos a seguir:
- Ao criar o novo relatório, selecione a perspectiva *Report Design* e em seguida a aba *Data Explorer*, clique com o botão direito do mouse sobre o item *Data Source* em seguida selecione a opção *New Data Source*.
![](..\..\images\image2013-9-16%20103945.png)
**Figura 2 - Novo Data Source.**
- Ao abrir a janela *New Data Source,* selecione a opção *Scripted Data Source* e define o nome *dsColleague* como *Data Source Name* em seguida clique no botão *Concluir.*
![](..\..\images\image2013-9-16%20104152.png)
**Figura 3 - Tipo de Data Source.**
- Na aba *Data Explorer* clique com o botão direito do mouse sobre o item *Data Sets* em seguida clique na opção *New Data Set* conforme figura 4. Data Set é uma tabela temporária do BIRT no qual os dados são armazenados do Data Source e renderizados no relatório.
![](..\..\images\image2013-9-16%20104346.png)
**Figura 4 - Novo Data Set.**
- Ao abrir a janela *New Data Set* defina *colleagueDataSet* como *Data Set Name*, clique no botão *Next* em *Output Columns,* clique no botão *Add* e adicione todas os registros do Data Set. Em seguida clique no botão Concluir.
![](..\..\images\relat%C3%B3rios.png)
**Figura 5 - Colunas do Data Set.**
| | | | |
| --- | --- | --- | --- |
| **Column Name** | **Data Type** | **Column Alias** | **Display Name** |
| colleagueId | String | Vazio | Vazio |
| Login | String | Vazio | Vazio |
| colleagueName | String | Vazio | Vazio |
| mail | String | Vazio | Vazio |
| active | String | Vazio | Vazio |
| adminuser | String | Vazio | Vazio |
### Incluindo parâmetros no Relatório
É possível incluir parâmetros no relatório a serem solicitados para o usuário antes da sua renderização, auxiliando no filtro de consulta aos dados gerando um relatório específico. Siga os passos a seguir:
- Selecione a aba *Data Explorer*, em seguida clique com o botão direito do mouse no item *Report Parameters*, selecione a opção *New Parameter.*
![](..\..\images\image2013-9-16%20105617.png)
**Figura 6 - Parâmetros do Relatório.**
- A figura 7 ilustra a janela de inclusão de parâmetros.
![](..\..\images\image2013-9-16%20114131.png)
**Figura 7 - Configuração de parâmetros.**
Ao abrir a janela New Parameter inclua os seguintes parâmetros:
**Matrícula**
| Campo | Valor |
| --- | --- |
| Name | Matricula |
| Prompt text | Matrícula do Usuário ou "\*" para mostrar todos |
| Data type | String |
| Display type | Text Box |
| Is Required | true |
**Mostra Usuários**
| Campo | Valor |
| --- | --- |
| Name | paramEnable |
| Prompt text | Mostrar usuários |
| Data type | String |
| Display type | List Box |
| Is Required | true |
*Selection Values*
| Value | Display Text |
| --- | --- |
| \* | Todos |
| true | Ativos |
| false | Inativos |
**Ordenar Por**
| Campo | Valor |
| --- | --- |
| Name | paramSort |
| Prompt text | Ordenar por |
| Data type | String |
| Display type | List Box |
*Selection Values*
| Value | Display Text |
| --- | --- |
| c.colleaguePK.colleagueId | Matrícula |
| c.collegueName | Nome |
| c.login | Login |
### TAG's
Disponibilizamos TAGs de substituição que auxiliam no desenvolvimento e na segurança da geração das informações do relatório, são elas:
**${WKCompany}**: substitui a variável pelo código da empresa autenticada na plataforma TOTVS Fluig.
**${WKUser}**: substitui a variável pelo código do usuário autenticado na plataforma TOTVS Fluig.
As TAGs são úteis em casos de informações que só devem ser geradas a respeito da empresa em que o usuário está autenticado, ou em relatórios que mostrem somente informações a respeito do usuário autenticado.
### Como utilizar as TAG's
A *tag* utilizada deve estar entre aspas duplas, para que ocorra corretamente a substituição da *tag* pelo respectivo valor:
**Exemplo - Uso de TAG's**
```
var c1 = factory.createConstraint("colleagueGroupPK.colleagueId", "${WKUser}", "${WKUser}", ConstraintType.MUST);
var c2 = factory.createConstraint("colleagueGroupPK.companyId", "${WKCompany}", "${WKCompany}", ConstraintType.MUST);
```
### Populando o Data Set
No exemplo apresentado neste documento, será populado o relatório através de dados providos de consultas JPA acessando o banco de dados, porém é possível utilizar outros recursos para popular o *Data Set*: XML, Web Service e JDBC.
O BIRT renderiza o relatório através da execução de seus eventos, são muitos os eventos disponibilizados pelo BIRT, nesse exemplo serão utilizados:
- *initialize:* primeiro evento disparado pelo BIRT, é recomendado utilizar esse evento para importação de bibliotecas e inicialização de variáveis;
- *beforeOpen*: evento disparado antes do BIRT abrir a conexão com a fonte de dados (*Data Source*);
- *fetch*: evento disparado pelo BIRT depois da busca de cada registro no Data Set e antes de aplicar os filtros e campos calculados.
Através dos eventos é possível desenvolver a lógica de consulta e geração de dados através da linguagem de programação JavaScript , além disso é possível fazer uso de vários recursos e bibliotecas da linguagem Java™.
- Selecione a aba *Script* na pagina do relatório e em seguida selecione o evento *initialize*, inclua o seguinte código conforme figura 8:
```
importPackage(Packages.com.datasul.technology.webdesk.dataset.service);
importPackage(Packages.com.datasul.technology.webdesk.dataset);
importPackage(Packages.com.datasul.technology.webdesk.search.controller);
importPackage(Packages.java.util);
var count = 0;
var dataset = null;
```
![](..\..\images\image2013-9-16%20152539.png)
**Figura 8 - Evento initialize.**
O código a cima importa as bibliotecas Java™ e a biblioteca disponibilizada pelo fluig para consulta aos dados do produto, além de realizar a inicialização das variáveis utilizadas pelo relatório.
Detalhes sobre o código:
- - *importPackage*: comando responsável pela importação de bibliotecas Java™.
- *Package.java.util*: biblioteca responsável pelas Classes *utils* do Java™.
- *Packages.com.datasul.technology.webdesk.dataset.service*: biblioteca disponibilizada pelo fluig para consulta ao banco de dados do produto.
- Selecione a aba *Data Explorer*, expanda o item *Data Sets* e clique no *colleagueDataSet em seguida clique na aba Script* então selecione o evento *beforeOpen* e inclua o seguinte código conforme a figura 9.
```
try{
var factory = DatasetFactory.getInstance(${WKCompany});
var constraints = new Array();
var sortingFields = new Array();
var i = 0;
//Filtra somente pela matricula do colaborador informado
if(params["Matricula"].value != null && params["Matricula"].value != "*") {
constraints[i] = factory.createConstraint("colleaguePK.colleagueId", params["Matricula"].value, params["Matricula"].value, ConstraintType.MUST);
i++;
}
//Filtra ativos caso selecionado
if(params["paramEnable"].value != null && params["paramEnable"].value != "*"){
constraints[i] = factory.createConstraint("active", params["paramEnable"].value, params["paramEnable"].value, ConstraintType.MUST);
i++;
}
//Ordena conforme seleção
if(params["paramSort"].value != null && params["paramSort"].value != "*"){
sortingFields[0] = params["paramSort"].value;
}
//Dataset
dataset = factory.getDataset("colleague", null, constraints, sortingFields);
}catch (e) {
}finally {
}
```
![](..\..\images\image2013-9-16%20154210.png)
**Figura 9 - Evento BeforeOpen.**
O código acima monta a consulta do relatório através da consulta via dataset e inclui os filtros da solicitação de acordo com os parâmetros definidos pelo usuário.
Detalhes sobre o código:
- ${WKCompany}: TAG disponibilizada pelo fluig, retorna o código da empresa que o usuário está autenticado;
- params["Matricula"]: parâmetro de relatório, retorna o código da matricula definido pelo usuário;
- params["paramEnable "]: parâmetro de relatório, retorna o tipo de usuário;
- params["paramSort "]: parâmetro de relatório, retorna o modo de ordenação;
- Para incluir o resultado da consulta no *Data Set* e  formatar os dados do relatório, selecione o evento *fetch* na área de *Script* e inclua o seguinte códigoconforme figura 10.
```
if (dataset != null) {
if (count < dataset.rowsCount){
//monta o objeto da linha
row["colleagueId"] = dataset.getValue(count, "colleaguePK.colleagueId");
row["login"] = dataset.getValue(count, "login");
row["colleagueName"] = dataset.getValue(count, "colleagueName");
row["mail"] = dataset.getValue(count, "mail");
if(dataset.getValue(count, "active") == true){
row["active"] = "Sim";
}else{
row["active"] = "Não";
}
//Atualiza o contador
count++;
return true;
}
}
return false;
```
![](..\..\images\image2015-7-7%2017-31-17.png)
**Figura 10 - Evento fetch*.***
### Obtendo dados via conexão JDBC
Uma forma alternativa de obtenção de dados para criação de relatórios é a utilização de JDBC. É necessário criar um *Data* *Source* que se conecte com o banco de dados, nele serão armazenados os dados para conexão, via JDBC, ao banco de dados.
- Selecione a aba *Data Explorer*, clique com o botão direito do mouse sobre o item *Data Source* em seguida selecione a opção *New Data Source* conforme a figura 11.
![](..\..\images\image2013-9-18%2011532.png)
**Figura 11 Novo Data Source**
- Ao abrir a janela *New Data Source,* selecione a opção *JDBC DataSource* e define o nome *JDBC-DataSource* como *Data Source Name* em seguida clique no botão *Next*, conforme a figura 12.
![](..\..\images\image2013-9-18%2011658.png)
**Figura 12 Tipo Data Source**
- Na próxima janela a conexão com o banco de dados deve ser configurada.
No campo *Driver* *Class* selecione o driver de conexão com o banco de dados, neste caso, a conexão será feita com o banco MySQL®. Se o driver necessário não estiver listado, basta adiciona-lo clicando em *Managed* *Drivers*...
Informe também os valores para *Database URL, User Name*e *Password*de acordo com o banco de dados escolhido, conforme a figura 13.
![](..\..\images\image2013-9-18%2011833.png)
**Figura 13 Configurando conexão com banco de dados.**
- Na aba *Data Explorer* clique com o botão direito do mouse sobre o item *Data Sets* em seguida clique na opção *New Data Set*.
![](..\..\images\image2013-9-18%20111532.png)
**Figura 14 Criando Novo Data Set.**
- Selecione o *Data**Source* criado (*JDBC-DataSource*), no campo *Data Set Type* selecione SQL *Select Query*, informe um nome para o *Data Set*e clique em *Next, conforme a figura 15.*
![](..\..\images\image2013-9-18%2011110.png)
**Figura 15 Configurando Data Set.**
- Na próxima tela informe a SQL que busca os dados no banco de dados, neste exemplo, serão buscados os volumes da empresa autenticada no fluig.
![](..\..\images\image2013-9-18%2011268.png)
**Figura 16 Criação da Query SQL**
- A *Query* abaixo busca no banco de dados todos os volumes da empresa do usuário autenticado no fluig, este código é obtido através da TAG ${WKCompany}.
```
SELECT vol_fisic.CD_VOL_FISIC,
vol_fisic.COD_EMPRESA,
vol_fisic.NOM_DIR_FISIC,
vol_fisic.ID_TIP_VOL_FISIC
FROM vol_fisic
WHERE vol_fisic.COD_EMPRESA = ${WKCompany}
```
Nota
Poderá ocorrer um erro quando concluir a criação do *Data* *Set* pois a TAG  ${WKCompany} não existe no contexto do BIRT. A figura a seguir apresenta o erro devido à utilização da TAG, este é um erro de sintaxe no SQL e indica que ${WKCompany} não é um comando SQL. Porém quando o relatório for executado no fluig, ela retornará o código da empresa normalmente, com isso a TAG será substituída pelo código da empresa do usuário autenticado no fluig, corrigindo o erro de sintaxe.
![](..\..\images\image2013-9-18%20112955.png)
**Figura 17 Erro do Birt pelo uso da TAG ${WKCompany}**
- Após concluir a criação do Data Set, na seção Data Explorer da IDE, clique com o botão secundário do mouse sobre o Data Set criado e escolha a opção **Editar**.
- Selecione a opção **Query**, escreva a query desejada e coloque o coringa **?** no valor dos campos que estão na cláusula **WHERE**.
![](..\..\images\passo%208%20query%20prronta.png)
Importante
A sintaxe da **query** deve ser a mesma do **SGBD** utilizado pelo **Fluig**.
- - Ainda na tela de edição do DataSet, escolha o menu **Parâmetros.**
- Nesta tela, adicionar os parâmetros através do botão **Novo**, oueditar os parâmetros existentes através do botão **Editar**.
- Informar:
- nome
- tipo
- direção
- valor inicial
- parâmetro do relatório
![](..\..\images\passo%208%20c.png)
- Após o término da edição, o relatório deve ser exportado para o **Fluig**.
- Ao abrir o relatório no **Fluig**, será apresentada uma tela de filtro, na qual devem ser informados os parâmetros que foram configurados no **Fluig Studio**.
![](..\..\images\image2018-7-30_15-30-37.png)
Atenção
A criação de relatório no BIRT utilizando conexão JDBC exige atenção com relação à segurança da publicação do relatório no fluig, uma vez que o arquivo .rptdesign (XML do relatório Birt) deixa exposto os parâmetros de conexão com o banco de dados, porém o campo senha fica ofuscado com base64. Por este motivo e pela facilidade de busca das informações do fluig, sempre recomendamos a criação de relatórios com fontes de dados via Dataset do fluig ou query JPA.
Se a criação de relatórios utilizando JDBC for necessária, recomendamos que ao publicar um relatório no fluig as configurações de permissão sejam definidas apenas para leitura. Usuários que possuem permissão de manutenção podem fazer o download dos anexos e com isso terão acesso aos dados de conexão com o banco de dados.
### Formatando a visualização do Relatório
É necessária a inclusão dos componentes de renderização do relatório. Clique na aba *Layout* para visualizar a página do relatório que está em branco e em seguida selecione a aba *Palette* conforme a figura 18.
![](..\..\images\image2013-9-16%20171152.png)
**Figura 18 Relatório em branco.**
Na aba Pallets é possível incluir vários componentes de visualização e renderização de dados entre eles destacam-se:
- Label: Texto curto e estático.
- Text: Texto longo é possível formatá-lo com TAGs HTML.
- Dynamic Text: Texto dinâmico provido do Data Set.
- Image: Inclusão de imagens.
- Grid: Formatador de dados em Grid.
- Table: Tabela de dados.
- Chart: Gráficos de pizza, linha, tubo, etc.
- É possível incluir imagens da internet, incluir imagens de arquivo ou ainda embutir a imagem no XML do relatório. Neste exemplo será usada uma imagem em anexo para posteriormente mostrar como publicar relatórios com anexo.
Arraste um componente *Image* no relatório, ao abrir a janela *Edit Image*Item, selecione a opção *Image file in shared resources*, selecione o arquivo da imagem na opção *Enter resource file e*em seguida clique no botão *Insert*.
![](..\..\images\image2013-9-16%20172027.png)
**Figura 19 Componente Image.**
- Arraste um componente *Text* no relatório, ao abrir a janela *Edit Text Item* selecione a opção *HTML* e na área de texto inclua a seguinte informação formatada em HTML:
```
<br>
<a href="http://www.fluig.com/">http://www.fluig.com/</a>
<br><b>E-mail:</b> <a href="mailto:contato@fluig.com">contato@fluig.com</a>
<br><b>Telefone:</b> 0800 882 9191
<br>
```
- Em seguida clique no botão *OK* conforme figura 20.
![](..\..\images\image2013-9-16%20172822.png)
**Figura 20 - Componente Text.**
- Arraste um componente *Label* no relatório, clique duas vezes sobre o componente incluído  e digite *Relatório de Usuários,* na aba *Property Editor - Label -> G**eneral* defina a formatação da label, conforme figura 21.
![](..\..\images\image2013-9-16%2017349.png)
**Figura 21 - Título do relatório.**
- Arraste um componente *Table*, ao abrir a janela *Insert Table* defina 6 colunas e 1 detalhe e clique no botão *OK* conforme figura 22.
![](..\..\images\image2013-9-16%20173715.png)
**Figura 22 - Configuração da Tabela.**
Na tabela adicionada ao relatório inclua um componente *Label* para cada coluna da linha *Header Row* defina os seguintes valores*:*
- Matrícula.
- Nome.
- Login.
- E-mail.
- Ativo.
- Administrador.
Formate as *labels* incluídas definindo cor da fonte e cor de fundo conforme figura 23.
![](..\..\images\image2013-9-16%20174148.png)
**Figura 23 - Título das Colunas.**
### Renderizando dados do Data Set
Selecione a aba *Data Explorer* e expanda o *colleagueDataSet* criado anteriormente e em seguida arraste cada item do *Data Set* para a coluna *Detail Row* da tabela criada anteriormente conforme figura 24.
![](..\..\images\image2013-9-16%20174611.png)
**Figura 24 - Data Set.**
# Publicando Relatórios
Após a conclusão do desenvolvimento do relatório, é necessário realizar a publicação do relatório no fluig. Essa ação pode ser feita via navegação de Documentos ([consulte aqui o passo a passo](https://tdn.totvs.com/x/VpxyDg#Relatório-Novorelatório)) ou por meio do fluig Studio.
### Publicação através do Studio
**oculto**
Esse passo a passo está duplicado no artigo <https://centraldeatendimento.fluig.com/hc/pt-br/articles/360053078854> (Como publicar relatórios)
Caso tenha alguma alteração, lembrar de revisar esse artigo!
Após a conclusão do desenvolvimento do relatório, é necessário realizar a exportação do mesmo para a navegação de documentos fluig.
Para isso clique sobre o pasta do relatório com o botão direito do mouse e acione *Exportar*.
![](..\..\images\image2013-9-18%20985.png)
**Figura 25 Exportação de Relatório.**
Nota
Os anexos são exportados junto ao relatório. Na exportação, o arquivo .rptdesign é automaticamente identificado como arquivo principal, e os demais arquivos são classificados como anexo.
- Na tela de Exportação, clique sobre *Exportar para o servidor fluig* e em seguida acione *Avançar*.
![](..\..\images\image2013-9-18%209926.png)
**Figura 26 Exportação de relatório.**
- Na tela *Exportar Relatório*, é necessário informar o nome do *Servidor*, identificar se está será a publicação de um *Novo Relatório*, definir o nome do relatório, a Pasta Destino (conforme imagem foi informado o código da pasta destino) e em seguida mencionar o tipo de *Versionamento* (como estamos fazendo uma nova publicação, selecionamos *Manter Atual*).
![](..\..\images\image2013-9-18%209247.png)
**Figura 27 Exportação de relatório.**
- Na pasta*Relatório* da *Navegação de Documentos* será possível observar que o relatório foi publicado com sucesso.
![](..\..\images\image2013-9-18%2092732.png)
**Figura 28 Publicação de relatório.**
# Visualizador de Relatórios
Após concluir a publicação, para visualizá-lo, clique sobre o relatório na pasta onde foi feita a publicação no fluig.
Uma nova janela deverá abrir, para iniciar a execução do relatório de colaboradores desenvolvido anteriormente é necessária a inclusão de parâmetros, defina os seus valores e em seguida clique no botão *OK*.
![](..\..\images\image2013-9-18%2010121.png)
**Figura 29 Parâmetros do relatório.**
O relatório deverá mostrar todos os usuários cadastrados no fluig para a empresa em que o usuário está autenticado.
![](..\..\images\image2013-9-18%2010324.png)
**Figura 30 Relatório de Usuários Resultado**.
Opções do visualizador
A ferramenta de visualização de relatório do fluig possui várias funcionalidades:
- *Verificar Indice*: Caso o relatório desenvolvido possua índice é possível listá-lo.
- *Executar relatório*: Permite que o relatório seja executado novamente.
- *Exportar dados:* Exporta os dados gerados do relatório em arquivo, permitindo selecionar as colunas desejadas e o separador de dados.
- *Exportar relatório*: Converte os dados do relatório em diferentes formatos de arquivos: Microsoft® Excel®, PostScript®, PDF, Microsoft® Word e Microsoft® Power Point®, permite também a seleção de páginas que serão exportadas.
- *Imprimir relatório*: Imprime relatório selecionando as impressoras instaladas no computador do usuário autenticado e permite imprimir em formato PDF ou HTML.
- *Imprimir relatório no servidor:* Imprime relatório a partir das impressoras instaladas no servidor do fluig.
- Navegação de páginas: permite a navegação entre as páginas do relatório.
![](..\..\images\image2013-9-18%20102048.png)
**Figura 31 Funcionalidades do visualizador de relatórios.**
# JPA - Funções de Agregação
### Funções de Agregação
O fluig suporta através de consultas JPA e seu banco de dados, o uso de funções de agregação, tais como: AVG, SUM, COUNT, MAX e MIN. Permite também utilizar agrupamentos: GROUP BY e HAVING
### Tabela de entidades
A tabela abaixo referencia a relação entre o código de dataset, a entidade de persistência JPA utilizada nas consultas, e a respectiva tabela no banco de dados. As colunas das entidades de persistência são as mesmas apresentadas no dataset.
| | | |
| --- | --- | --- |
| **Código dataset** | **Entidade JPA** | **Tabela banco de dados** |
| **AccessLog** | AccessLog | HISTOR\_ACES |
| **ActivityDim** | ActivityDim | ACTIVITY\_DIM\_CAP |
| **advancedProcessProperties** | AdvancedProcessProperties | PROPRIED\_AVANCAD\_PROCES |
| **businessPeriod** | BusinessPeriod | PERIOD\_EXPED |
| **destinationArea** | DestinationArea | AREA\_DEST |
| **document** | Document | DOCUMENTO |
| **documentSecurityConfig** | DocumentSecurityConfig | CONFIGUR\_SEGUR\_DOCTO |
| **FactActivityCost** | FactActivityCost | FACT\_ACTIVITY\_COST\_CAP |
| **FactFlowVolume** | FactFlowVolume | FACT\_FLOW\_VOLUME\_CAP |
| **FactProcesCost** | FactProcesCost | FACT\_PROCES\_COST\_CAP |
| **FactProcesVolume** | FactProcesVolume | FACT\_PROCES\_VOLUME\_CAP |
| **FlowDim** | FlowDim | FLOW\_DIM\_CAP |
| **globalCalendar** | GlobalCalendar | CALEND\_GLOBAL |
| **knowledge** | Knowledge | CONHECIMENTO |
| **processAttachment** | ProcessAttachment | ANEXO\_PROCES |
| **processDefinition** | ProcessDefinition | DEF\_PROCES |
| **processDefinitionVersion** | ProcessDefinitionVersion | VERS\_DEF\_PROCES |
| **processHistory** | ProcessHistory | HISTOR\_PROCES |
| **processState** | ProcessState | ESTADO\_PROCES |
| **processTask** | ProcessTask | TAR\_PROCES |
| **ProcesVersionDim** | ProcesVersionDim | PROCES\_VERSION\_DIM\_CAP |
| **TimeDim** | TimeDim | TIME\_DIM\_CAP |
| **topic** | Topic | ASSUNTO |
| **UserDim** | UserDim | USER\_DIM\_CAP |
| **workflowProcess** | WorkflowProcess | PROCES\_WORKFLOW |
### Exemplo de Utilização
```
importPackage(Packages.com.datasul.technology.webdesk.dataset.service);
importPackage(Packages.java.util);
var qd = null;
var rs = null;
var rowMap = null;
var sqlJpa = "";
qd = new QueryDelegate();
sqlJpa = "SELECT count(d.documentPK.documentId), d.publisherId from Document d WHERE
d.documentPK.companyId = ${WKCompany} GROUP BY d.publisherId";
rs = qd.getResultQuery(sqlJpa);
var rowMap = rs.get(0);
//Busca o valor do Count
rowMap.get("d.publisherId");
//Busca o Código do documento
rowMap.get("count(d.documentPK.documentId)");
```
# Acessando dados de Formulários
### Importando bibliotecas
A partir da classe DatasetFactory é possível acessar dados de formulários publicados no fluig.
Para popular um relatório através de dados de formulários é necessário a importação das seguintes bibliotecas:
```
importPackage(Packages.com.datasul.technology.webdesk.dataset.service);
importPackage(Packages.com.datasul.technology.webdesk.dataset);
importPackage(Packages.com.datasul.technology.webdesk.search.controller);
```
### Retornando dados do formulário
Através da classe DatasetFactory é possível buscar dados de formulários, incluir filtros e ordenação. Exemplo de utilização:
```
//Monta as constraints para consulta
var factory = DatasetFactory.getInstance(${WKCompany});
//Filtra Clientes de 1 a 5
var c1 = factory.createConstraint("cod_cli", "1", "5",ConstraintType.MUST);
var constraints = new Array(c1);
//Ordena o resultado pelo nome do Cliente
var sortingFields = new Array("name_cli");
dataset = factory.getDataset("cad_cli", null, constraints, sortingFields);
```
O exemplo acima invoca o método getDataset passando alguns argumentos extras como parâmetros:
- **Nome do Dataset:** Nome do serviço de dados do formulário;
- **Campos:** Retorna apenas os campos recebidos no array informado. Caso null, retorna todos os campos.
- **Constraints**: Vetor com as condições de busca do Dataset. Em cada condição de busca (constraint) deve-se informar o nome do campo do formulário que será filtrado, a faixa de valores inicial e final, e o tipo de Constraint. Os tipos podem ser:
- - **MUST:** Indica que todos os registros do Dataset devem satisfazer a esta condição.
- **SHOULD:** Indica que os registros do Dataset podem ou não atender à condição. Este tipo é mais comum quando se necessita que um mesmo campo tenha valores A ou B (onde cada um será uma constraint SHOULD).
- **MUST\_NOT:** indica que nenhum dos registros pode satisfazer a condição.
- **Ordenação:** Vetor com a lista de campos que será utilizada para ordenação dos registros no Dataset.
Dica
O fonte do exemplo citado acima pode ser baixado a partir do seguinte link: [Customer CardIndex.zip](https://tdn.totvs.com/download/attachments/74646056/Customer%20CardIndex.zip?version=1&modificationDate=1379524070000&api=v2)
### Busca de dados de formulário com filtro por data
Para realizar consultas via Dataset com filtros do tipo Data, é necessário antes salvar o campo do formulário no formato **aaaa/mm/dd** (ano/mês/dia)  para que seja possível realizar a busca via Dataset.
Exemplo de consulta:
```
//Monta as constraints para consulta
var factory = DatasetFactory.getInstance(${WKCompany});
//Filtra Clientes de 1 a 5
var c1 = factory.createConstraint("campo_data", "2010/01/25", "2010/05/02", ConstraintType.MUST);
var constraints = new Array(c1);
//Ordena o resultado pelo nome do Cliente
var sortingFields = new Array("name_cli");
dataset = factory.getDataset("cad_cli", null, constraints, sortingFields);
```
# Acessando documentação do BIRT Report Designer
Dica
Acesse [aqui](https://help.eclipse.org/mars/index.jsp?nav=%2F9_0) a documentação oficial do BIRT - Business Intelligence and Reporting Tools e saiba mais sobre desenvolvimento e modelagem de relatórios .