8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR ,QWHJUDQGR5HSRUW0DQDJHUH&ODULRQ De nada adiantaria gerar relatórios espetaculares no Report Manager, se não pudéssemos integrá-los aos nossos aplicativos de forma fácil e rápida. É aí que entra a Classe / Template, escrita pelo Johny Stein, a qual fizemos algumas modificações e utilizamos agora para gerenciar os nossos relatórios a partir de aplicativos Clarion. 5HJLVWUDQGRRWHPSODWH Baixe o pacote dos arquivos do Gescla ou do link do Fórum Clarion. O link do fórum Clarion é: http://www.newsclarionbrasil.com.br/forum/rmtemplate.zip O link acima baixa o zip diretamente do site da News Clarion Brasil, mas é interessante, se é que você não baixou ainda, que baixe todos os arquivos disponíveis em http://www.gescla.com.br/forum/viewtopic.php?t=128 pois contém diversos artigos úteis sobre o assunto, além do link para baixar o Report Manager. Descompacte o arquivo UPWHPSODWH]LS no seu disco rígido e copie o arquivo MV5HSRUWPDQWSO para a pasta WHPSODWH do seu Clarion. Copie os arquivos ABRM.CLW e ABRM.INC para a pasta libsrc do seu Clarion. Estes são os arquivos da classe Report Manager. Como você terá os fontes da classe e do template, poderá alterá-los de acordo com as suas necessidades. Agora abra a IDE do seu Clarion e acesse o menu 6HWXSe em seguida7HPSODWH5HJLVWU\. Se você nunca registrou um template no Clarion, saiba que esse é o procedimento padrão para registrar qualquer template de terceiro, ou mesmo um desenvolvido por você na IDE do Clarion. Após isto será aberta uma janela do Windows Explorer para que você escolha o template a ser registrado. Podem ser registrados quaisquer arquivos com a extensão .tpl. Localize o arquivo MV5HSRUWPDQWSO e clique no botão $EULU. O template será registrado e já poderá ser utilizado pela sua aplicação. As chamadas para os métodos da classe RM estão definidas dentro do template, mas se preferir, você pode instanciar diretamente a classe e fazer uso dos seus 21 8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR métodos diretamente. Para os efeitos da nossa documentação, estamos usando o template jsReportMan. &ULDQGRDDSOLFDomR&ODULRQ Vamos criar uma aplicação Clarion genérica, isto é, uma aplicação que possa chamar qualquer relatório do Report Manager. É claro que na vida real, possivelmente você vai colocar este procedimento dentro do seu APP, ou de uma DLL, se o seu aplicativo for multi DLL. &ULDQGRR'LFLRQiULRGH'DGRVGD$SOLFDomRGHH[HPSOR A partir do menu File do seu Clarion (estou usando Clarion 6.3), escolha a opção 1HZ e no menu que se abrirá à direita, escolha 'LFWLRQDU\. Será aberta a janela para a criação de dicionário. Vamos chamar o nosso dicionário de &20%52:6('&7, uma alusão de que vamos utilizar o Report Manager com um Browse do Clarion para gerenciá-los. Uma vez criado o Dicionário, vamos criar uma única tabela chamada 5(/$7Ï5,2. Vamos criá-la usando TPS, mas poderia perfeitamente ser uma tabela SQL. Na seqüência da nossa documentação, desenvolveremos um segundo aplicativo de exemplo, totalmente orientado para SQL, onde abordamos diversas técnicas: desde a criação do Banco de Dados, a partir da aplicação Clarion, até as tabelas SQL e as rotinas de manutenção, com acesso ao catálogo do PostgreSQL e muito mais. Por ora, crie uma tabela chamada RELATORIO com os seguintes campos: 1RPHB5HODWRULR do tipo cstring, com tamanho de 255 caracteres. 1RPH, do tio cstring, com tamanho de 255 caracteres. Se quiser pode definir uma chave primária por Nome, como única, para que não haja nenhum nome de relatório repetido. Meu objetivo aqui, não é falar sobre modelagem de dados, mas mostrar como interagir com o Report Manager a partir do Clarion. O que eu quero mostrar aqui é, como o usuário poderá cadastrar um relatório em um browse, e depois executá-lo. Tenho certeza de que o leitor sabe perfeitamente as regras para definição de tabelas, relacionamentos e integridade referencial. Salve o seu trabalho e volte a IDE do Clarion. Usando os recursos do Clarion que você já conhece, crie uma nova aplicação chamada &20%52:6($33 . Utilizei o Wizard apenas para ser 22 8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR mais rápido, mas poderia criar uma aplicação vazia, sem o wizard, cuja janela principal fosse o próprio Browse que cadastra imprime os relatórios. A figura acima mostra a janela de propriedades da aplicação &20%52:6($33 . O Wizard deve ter gerado um Browse e um Update para o seu Dicionário de Dados, conforme mostra a árvore de procedimentos. Agora, na sua aplicação, acesse as propriedades globais da aplicação, clicando no ícone do globinho (azul). Na janela que se abrirá, clique no botão ([WHQVLRQV. Em seguida, pelo botão ,QVHUW, insira o template de extensão global chamado MV5HSRUW0DQ*OREDOA janela deverá ficar parecida com o fragmento de tela abaixo: Pressione o botão OK e volte à árvore de procedimentos. Em seguida, entre no procedimento %52:6(5HODWyULR, que foi criado pelo wizard, e faça alguns ajustes no List Box, de maneira que seja visível em tela, apenas o nome do relatório, melhor dizendo, o nome que o usuário irá dar ao relatório, e não o seu nome em disco. Se quiser pode adicionar perfumarias como Greenbar, ícones frescos, etc, como em qualquer browse Clarion. A partir do menu 3RSXODWH, escolha &RQWURO 7HPSODWH, e na árvore de templates que se abrirá escolha MV5HSRUW0DQ3ULQW%XWWRQ. Poscione o botão 23 8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR abaixo do seu browse. Agora clique com o botão direito do mouse sobre o botão e vamos preencher os SURPSWV do control template. A figura ao lado mostra o browse no )RUPDWDGRU GH 5HODWyULRV do Clarion 6.3. Clique com o botão direito do mouse no botão ,PSULPLU, populado pelo control template, e acesse a aba $FWLRQV Preencha o campo $UTXLYR com a expressão: 5(/120(B5(/$725,2 Estamos informando ao template que o nome do relatório será variável (ponto de exclamação), e que o conteúdo virá do campo REL:NOME_RELATORIO Na seqüência, em $omR GH ,PSUHVVmR, escolha 9LVXDOL]DU, se desejar sempre escolher visualizar os relatórios antes de imprimir. É claro que isso pode ser mudado para que se adicionado mais um campo ao browse, se possa dizer se o relatório deverá ser visualizado ou não. Por ora deixamos o original do template do Johny. Existem ainda as opções ,PSULPLU, que imprime diretamente sem passar pelo Preview, e uma opção que exibe uma pergunta antes de abrir o relatório. No nosso caso, vamos optar por Visualizar. Em seguida, no campo 7tWXORGD-DQHOD, informe o título a ser exibido na janela de Visualização, que, se quiser, alterando o template, também pode ser variável. Optamos no momento por exibir ³5(/$Ï5,26´. Finalmente, informe a mensagem de erro que deverá ser exibida para o usuário se alguma coisa não sair de acordo com o previsto. Optamos por: “1mRIRLSRVVtYHODEULURUHODWyULR!” Pressione o botão 2.para salvar as suas configurações, Em seguida, vamos fazer algumas modificações no FORM de atualização do browse, modifique de maneira que fique semelhante à figura abaixo: Ao lado do campo que contém o nome do relatório em disco, vamos popular um controle do tipo 'RV )LOH /RRNXS, que será o responsável por buscar o nome do relatório em disco, e guardar a sua localização neste campo para que possa ser executado pelo nosso usuário final a partir do nosso aplicativo. 24 8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR A partir do menu 3RSXODWH, escolha &RQWURO 7HPSODWH, e na árvore de templates de controle que aparecerá, escolha 'RV)LOH/RRNXS. Na aba $FWLRQV, dos prompts do template defina os seguintes campos na aba *HQHUDO: )LOH'LDORJ+HDGHU, digite Escolha um relatório, ou se preferir, em branco. '26 )LOHQDPH 9DULDEOH, pelo controle ... escolha o campo 5(/120(B5(/$725,2, a partir da tabela do Dicionário de Dados. Marque o check Box 5HWXUQ WR RULJLQDO GLUHFWRU\ ZKHQ GRQH, para que o sistema volte ao diretório da aplicação depois de carregar o arquivo de relatório. Marque também o check Box /RQJ)LOHQDPHV. Marque ainda o check Box 5HWXUQ 'HIDXOWRQ&DQFHO. Clique na aba )LOH0DVNV e defina os arquivos com a extensão .rep no campo.)LOH0DVNV. E isto é tudo. É claro que podemos fazer tratamento para ajustar o path dos arquivos de maneira que fique sempre abaixo de nossa aplicação, e para que este processo seja ajustado sem passar o driver de disco, mas somente o nome da pasta e o nome do arquivo, coisa que faremos quando desenvolvermos o próximo aplicativo de exemplo. Este é apenas para ambientar o usuário ao Report Manager e ao Clarion. Compile e execute a sua aplicação. Se você fez tudo certinho, nenhum erro ocorrerá. No Browse, inclua os relatórios que você gerou, usando para isto o botão ,QFOXLU. A figura acima mostra o registro para o relatório de clientes no formulário do Clarion. Salve a digitação pressionando o botão OK. De volta ao browse este exibirá todos os relatórios cadastrados. Posicione a Barra apontadora do Browse sobre o relatório desejado e clique no botão ,PSULPLU. Em poucos segundos a query será executada e o seu relatório será gerado em tela, se você escolheu a opção 9LVXDOL]DU. 25 8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR Veja o nosso relatório Browse apresentando todos os relatórios cadastrados no sistema. . É claro que poderíamos montar um list box a partir de uma queue preenchida pela leitura de um diretório onde estão os relatórios, mas no caso dos nossos Sistemas, os menus são dinâmicos, ou seja, de acordo com o nível do usuário e da atividade do usuário, o sistema é parametrizado para ele, inclusive os menus do Sistema. A opção de carregar os relatórios, simplesmente incluindo-os em um menu oferece uma flexibilidade de disponibilizar o mesmo sistema para os mais variados ramos de atividade. Quando o usuário clica em imprimir, o relatório é impresso, mas no caso do nosso sistema, tratamos o clique de mouse para que o relatório seja impresso assim que o usuário clica sobre o seu nome no Menu Browse. Veja o nosso relatório impresso: A próxima figura, mostra outro relatório impresso pelo Clarion, usando outro DataSet. 26