Gerar relatório jasper via controller
17/01/2014 17:48
0
Olá pessoal, blz? estou com uma questão que achei que seria simples mas que acabei agarrando um pouco...
Seguinte, gostaria de gerar um relatório jasper via controller, no final do save(), mas não sei exatamente como faze-lo.
Ia tentar chain(controller:'jasper', action:'index', model:[data:dados], params:params), mas pelo que entendi esse comando é usado para gerar um relatório passando os dados, eu preciso apenas chamar ele, o .jrxml já tem o sql completo para buscar os dados necessários.
Vi o render(view:"index", model:[jasperDTOList:jasperDTOList]) também, mas parece ser +- o mesmo caso do chain...

Em suma preciso apenas simular a chamada do clic do botão que o g:jasperReport gera...

Valeu.
Tags: jasper


2
Você pode fazer um redirect para um método gerar o relatório para você.
No meu caso eu passo um List de dados para ele.
Criei um serviço para ser usado por todos os controllers. Este serviço trabalha o .jasper e devolve um array de byte para ser encaminhado ao browser pelo controller.
Abaixo o service.

public byte[] toPDF(String relNome, ArrayList dados, Map parametros) throws JRException{
arquivo = Configuracao.findByNome("DIRETORIO_RELATORIOS").valor + relNome
logo = Configuracao.findByNome("LOGOMARCACLIENTE").valor
parametros.put("logoMarca", new File(logo))
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(dados, false)
println "Arquivo: ${arquivo}"

byte[] saida = JasperRunManager.runReportToPdf(arquivo, parametros, dataSource)
return saida
}


E o controller fica assim:

def parametros = new HashMap()
def dados = montaDadosRelatorio() // retorna um arrayList de dados
byte[] saida = relatorioService.toPDF('arquivo.jasper', dados, parametros)
response.setContentType("application/pdf")
response.setHeader("Content-disposition", "inline; filename=proposta.pdf")
response.outputStream << saida;

18/01/2014 13:01


0
Bacana Carlos,
Consegui fazer como você descreveu, só que assim o PDF está aparecendo na página, gostaria que aparecesse a janela para a pessoa selecionar se quer abrir ou salver o arquivo, sabe como fazer assim?
De qualquer maneira, obrigado pela ajuda.
23/01/2014 13:25


1
Onde está inline, coloque attachment.

"inline", envia o stream para o browser renderizar (precisa do plugin de pdf)
"attachment", força o browser a fazer o download.
24/01/2014 15:58


0
Valeu Carlos!
Funcionou certinho agora ;)
27/01/2014 16:01



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto