terça-feira, 21 de maio de 2013

CSV 'Facinho'!

CSV é um mecanismo tão antigo para gerar um padrão estruturado de informações, que seria um desperdício perder tempo com ele, se o mesmo não fosse tão útil.  Muita gente prefere trabalhar
gerando arquivos XLS, mas o CSV tem também suas qualidades, porque? Todo programa do tipo planilha eletrônica que se preze lê esse tipo de arquivo (Google Drive Spreadsheet, Microsoft Excel, OpenOffice, ...), portanto, pode representar um excelente mecanismo de compatibilidade de sistemas.

Genexus, por outro lado não possui nativamente tratamento para esse tipo de arquivo, mas não fique triste nem nervoso, é possível com mínimo esforço gerar documentos nesse formato.  Para isso você somente precisa de uma procedure.

Para facilitar ainda mais optamos por gerar o arquivo como se fosse um relatório, ou seja, deixar para o Genexus criar o arquivo no disco e também facilitar a geração das linhas da nossa ‘planilha’. Para fazer isso você deve na aba Layout incluir uma variável do tipo character, que em nosso caso denominamos de &linha.



Assim, para gerar CSV, precisamos concatenar os textos com um caracter separador, que pode ser, por exemplo, o ponto-e-vírgula.  Uma forma de fazer isso com grande facilidade é utilizando a função Format.  Considere que para cada %n temos uma coluna na nossa ‘planilha’.

 for each
  &linha = Format('%1;%2;%3;%4',
   ClienteNome,
   CidadeNome,
   PaisId.ToString(),
   PaisNome
  )
  print Item
 endfor


Incluímos na string varias colunas separadas por um caracter que inclusive pode ser variável, basta por sua imaginação para funcionar, que dá pra fazer muita coisa com esse código simples.

Para o relatório Genexus, precisamos definir algumas propriedades:

Main program=true
Call protocol=internal


E a regra output_file('teste.csv', 'txt'), na aba Rules.

Ao executar o procedimento, temos como resultado, um arquivo chamado teste.csv, com o seguinte conteúdo, que pode ser aberto no Excel, por exemplo, com o seguinte formato.
 


Interessante e muito simples! Ou melhor, facinho, facinho...


Bibliografia