Implementei suporte a relatórios JasperReports no JGnuteca para demonstrar tanto o suporte ao JasperReports quanto o suporte a relatórios criados pelo próprio usuário, ou seja: o usuário, não necessariamente o programador, cria o relatório no iReport (por exemplo) e o publica de modo que o relatório esteja disponível imediatamente e possa ser executado por qualquer pessoa.
Para ver em funcionamento, clique aqui e selecione a opção "Manter Relatórios".
A maior dificuldade que se tem nesse tipo de funcionalidade diz respeito à apresentação e entrada dinâmica dos parâmetros. Essa implementação foi feita de forma simples, mas suporta essa característica, apresentando e repassando ao JasperReports os parâmetros que o usuário acrescentou ao relatório. O Facelets teve um papel importante uma vez que com o seu uso a página JavaServer Faces pode ser alterada dinamicamente, permitindo a montagem da página de entrada de parâmetros em tempo de execução da aplicação.
Atualmente somente parâmetros simples (texto, números, datas, etc.) são suportados, mas em uma próxima iteração pretendo adicionar suporte a seleção de valores (select, radio) e pesquisas (lookups) em tabelas.
Uma outra funcionalidade que considero importante é o suporte a segurança de modo que o usuário ao criar ou registrar o relatório possa indicar que grupos de usuários podem visualizá-lo. Também pretendo implementar essa funcionalidade no futuro, mas primeiro preciso implementar a segurança no JGnuteca ;-) .
6 comentários:
Olá Walter,
Muito interessante esse esquema de relatório. É bom saber que mais pessoas se interessam pelo AndroMDA e por MDA em si. Você por um acaso ja conseguiu fazer dentro desta aplicação a exportação para HTML dos relatórios ?
Um abraço e continue com o ótimo trabalho.
Oi Bruno, gosto muito do AndroMDA e já o uso a um bom tempo (~4 anos). Especificamente no JGnuteca eu não coloquei a visualização em HTML disponível por questão de simplificação, pois é mais chato de lidar com as imagens, mas tenho um código pronto que roda em uma aplicação RichFaces. Se quiser é só me falar.
[],
er, obrigado pela resposta rápida, estive olhando seu código e vi um detalhezinho que acho que você não precisa e pode tornar a compilação mais rápida(do relatório, e em teoria).
No RelatorioControllerImpl acho que você não precisa dessa linha :
final JasperDesign design = JRXmlLoader.load(input);
Já que o JasperDesign serve para mudar a configuração do Relatório em runtime, coisa que não vi você fazer. Você pode compilar direto assim:
JasperReport jasperReport = JasperCompileManager.compileReport( reportPath );
final JasperPrint jasperPrint = JasperFillManager.fillReport( jasperReport, new HashMap(), connection );
QUanto ao AndroMDA, conheco a muitos anos também mas parei de praticar um pouco porque não vejo muito condições de aplicar no mercado, não pelo problema da tecnologia, mais pela escassez de mão de obra qualificada, já que já é difícil achar quem saiba JSF, EJB, etc, ainda mais com mais complexidade dependendo tanto de UML e um grau de "sagacidade" alto, já que ainda não é tão simples em situações um pouco mais complexas. Mas eu cheguei a fazer um projeto numa empresa principalmente com EJB e fui eu que indiquei a tecnologia. Na época tinha acabado de lançar o bpm4struts mas era muito precário, e como hoje fço muito ajax usar cartucho de JSF pode ficar complicado, mas de qualquer forma tenho certeza que este é o futuro(um pouco longínquo para a maior parte da população).
Quanto ao código que você comentou, se puder me enviar ficarei EXTREMAMENTE agradecido, estou fazendo um "frameworkzinho" para colocar numa aplicação richfaces + facelets e olhar o posicionamento dos outros é sempre muito interessante.
meu email é bruno.arruda @ gmail . com
Mais uma vez obrigado e um abraço!
Oi Bruno,
de fato o código poderia ser simplificado assim. No código original de onde copiei esse o "design" é usado para pegar o título do relatório e mostrar junto com uma barra de percentagem de conclusão da montagem do relatório.
Com relação aos projetos AndroMDA na "vida real", minha experiência é muito positiva, mesmo com equipes heterogêneas. Desde que comecei a usar o Andromda, usei-o em 3 projetos de grande porte (+ de 300 classes), 2 de médio porte (+ de 100 classes) e alguns pequenos. Os mais antigos usando Struts e os mais recentes com JSF. Todos com Ajax em maior ou menor grau. Exemplos:
http://www.arcadian.com.br (produtos/Previne)
http://www.pregao.net
Para manter o bom andamento dos projetos mantive sempre alguns elementos como "consultores" com a responsabilidade (principal) de apoiar os colegas nas tecnologias envolvidas e eventualmente adaptar os templates. Dessa forma foi possível incluir pessoas qualificadas somente no seu foco de trabalho (modelagem, programação ou testes), sem conhecimento profundo dos "detalhes" (MDA, JSF, Spring, etc.).
Sds,
Olá Walter,
Fico feliz de ter conhecimento destes casos de sucesso, acredito que, com uma equipe bem estruturada, um bom planejamento e uma boa política de manutenção de funcionários por parte da empresa(incluindo boas condições de trabalho, bons salários, etc) seja bem possível sim. O meu argumento era mais em relação que isso não é a normalidade infelizmente no mercado de TI brasileiro, o que restringe significativamente o nicho de aplicação. mas parabéns pelas vitórios pois sei como é difícil no atual cenário.
Um abraço,
Bruno Arruda
Olá Walter,
Fico feliz de ter conhecimento destes casos de sucesso, acredito que, com uma equipe bem estruturada, um bom planejamento e uma boa política de manutenção de funcionários por parte da empresa(incluindo boas condições de trabalho, bons salários, etc) seja bem possível sim. O meu argumento era mais em relação que isso não é a normalidade infelizmente no mercado de TI brasileiro, o que restringe significativamente o nicho de aplicação. mas parabéns pelas vitórias pois sei como é difícil no atual cenário.
Um abraço,
Bruno Arruda
Postar um comentário