Ferramentas de Relatórios

Existem algumas diretrizes especiais para ferramentas de relatórios para garantir que elas sejam executadas em um modo compatível com o uniGUI. Algumas ferramentas de relatórios têm configurações específicas para aplicações multithread. Em muitos casos você precisa desabilitar diálogos visuais e outros formulários relacionados ao VCL de serem exibidos enquanto o mecanismo de relatórios está em execução. Como no uniGUI você não pode exibir formulários VCL, será necessário exportar o relatório para um arquivo. Um formato comumente usado é PDF, que pode ser incorporado em uma janela do navegador ou em um iframe.

No uniGUI, o método recomendado para criar um relatório é convertê-lo em um arquivo PDF e exibi‑lo dentro de um controle TUniUrlFrame. Para cada ferramenta de relatórios existem caminhos diferentes para alcançar isso. Nesta seção abordaremos brevemente algumas ferramentas de relatórios. Você também pode carregar e executar os demos relacionados para ver como isso é feito na prática.

circle-exclamation

Esteja ciente de que algumas ferramentas de relatórios renderizam seus relatórios usando o controle TRichEdit com todos os problemas descritos em outros locais. Esse tipo de ferramenta de relatórios não pode ser usado dentro da aplicação uniGUI, mas poderia ser usado por algum serviço web externo. Um serviço web “printing server” poderia gerar processos externos para exportar relatórios em PDF, mas essa solução requer algum banco de dados central onde as informações necessárias para o relatório estejam armazenadas (de forma que a aplicação uniGUI possa solicitar um relatório específico e receber o arquivo PDF como resultado).

Para testar completamente a compatibilidade de uma ferramenta de relatórios com sua aplicação, você deve executar um Stress Test e analisar totalmente o comportamento da sua aplicação: https://unigui.com/doc/online_help/stress-test-tool.htm. É importante garantir que tanto sua ferramenta de relatórios em particular quanto o design do seu relatório possam escalar quando o servidor estiver sob carga.

Outro ponto importante é garantir que a criação dos componentes do relatório e a geração do relatório aconteçam no mesmo evento. Alguns componentes de relatório internamente usam controles VCL que precisam criar handles de Janela. Esses handles devem ser criados e liberados na mesma thread, portanto é necessário criar e destruir os componentes do relatório em uma única chamada de evento. A melhor maneira de conseguir isso é colocar os componentes do relatório em um Free DataModule. O free data module será criado quando o relatório precisar ser gerado. Após o relatório ser criado, o data module deve ser liberado.

O código abaixo é retirado do nosso demo do FastReport:

TUniForm1.UniFormBeforeShow
procedure TUniForm1.UniFormBeforeShow(Sender: TObject);
var
  dm : TfrDM;
  RepUrl : string;
begin
  dm := TfrDM.Create(nil);
  try
    RepUrl := dm.GenReportPDF(InvNum);
  finally
    dm.Free;
  end;
  UniURLFrame1.URL := RepUrl; // exibe o PDF gerado dentro de um frame
end;

No código acima o data module é criado sob demanda, o link do relatório é gerado e o data module é destruído em seguida.

Abaixo está o free data module real que é usado para gerar o relatório:

Um Free DataModule para geração de relatórios

Um Free DataModule para geração de relatórios

Leitura adicional e tópicos relacionados:

  • Free DataModule: https://unigui.com/doc/online_help/free-datamodule.htm

  • Stress Test Tool: https://unigui.com/doc/online_help/stress-test-tool.htm