24 de out. de 2008

O que fazer com os arquivos que sua aplicação Intraweb gera?

Durante o desenvolvimento de uma aplicação Intraweb, tive a necessidade de gerar algumas planilhas Excel para que o usuário pudesse ter localmente uma série de informações apresentadas em um Grid.

Para gerar as planilhas em Excel, usei o componente TmxDataSetExport, um freeware bem simples e que atendeu às minhas necessidades de apenas salvar o conteúdo do Grid em um arquivo XLS.

Bastava gerar um nome de arquivo, fazer algumas configurações no nosso amigo mxDataSetExport, incluindo passar o nome do arquivo a ser gerado e meter bronca.




AddSlash é apenas um alias para
IncludeTrailingPathDelimiter, e digamos de passagem, é um porre ter que ficar
digitando IncludeTrailingPathDelimiter toda hora, né?

Tudo beleza!!! Arquivo Excel gerado no servidor e enviado pro usuário!!!

Beleza? Beleza nada, tua batata tá assando meu filho...

Você acha que o administrador do seu site/aplicação vai ter a bondade de todo dia ir lá na pasta Files e verificar se alguém esqueceu algum arquivo lá e apagar pra você? Então tá...

Duas semanas depois lá estão 2 mil arquivos Excel boiando sem dono no seu diretório Files...

A solução então é ter uma lista de todos os arquivos gerados durante a sessão do usuário e apagá-los quando a sessão terminar.

Mãos a obra:
  • No IWUserSession, adicione uma proprieade de nome fFilesToDelete: TStringList para guardar os arquivos que a sua aplicação gerar. Uma propriedade privada é o ideal.

  • Adicione também um método público de nome AddFileToDelete para que você possa acioná-lo cada vez que gerar um arquivo em sua aplicação.
  • Adicione também um método privado de nome DeleteFiles, para que possamos deletar todos os arquivos guardados em fFilesToDelete.

Nossso IWUserSession resumido ficaria da seguinte forma:




DoDebug é uma rotina que uso para gerar um log de tudo que acontece
na minha aplicação. Note que a exceção gerada não é exibida para o usuário, pois
nesse caso não há necessida. Como bom desenvolvedor, sempre de praxe eu dou uma
conferida no arquivo de log pra ver se há algum problema na aplicação.

No evento OnDestroy de nosso IWUserSession, basta executar o método DeleteFiles. Ao fim da sessão do usuário, nossos arquivos serão então, deletados.

Durante o decorrer de sua aplicação, vá usando UserSession.AddFileToDelete(NomeDoArquivo) a medida que sua aplicação gerá-los.

Beleza? Agora sim...

5 comentários:

  1. Voce saber como fazer para terminar a sessão do usuário, ou seja, destrui-la quando o usuário fecha o browser?

    ResponderExcluir
  2. Hello Jack, Do you have the sources code of these example, if so please send an email with the sources thanks

    Ronny Encarnacion

    ResponderExcluir
  3. Hello Jackson, Do you know about some component that I can write to an Excel Sheet from Delphi or if you have some examples about that.
    tnanks

    ResponderExcluir
  4. Olá Jack, tudo bem? Estou tentando encontrar o componente "TmxDataSetExport", pois ele não está mais disponível na sua página. Vc poderia fazer a gentileza de me enviar? Obrigado.
    E-mail: marcus@femanet.com.br

    ResponderExcluir
  5. Existe Download para Delphi 10 Seatlle?

    ResponderExcluir