segunda-feira, 31 de agosto de 2009

Problemas com relatório não encontrado

Normalmente colocamos os qrps e imagens na mesma pasta do executável para que, quando o aplicativo precisar usar esses arquivos, eles sejam encontrados facilmente por estarem na mesma pasta do executável. Fazemos isso devido a um comportamento do Windows que podemos denominar de Current Directory, ou Diretório Atual. Quando executamos um aplicativo, Current Directory aponta para a pasta em que o executável está, pois o Windows, por default, configura a propriedade “iniciar em” do atalho, para apontar para a mesma pasta onde o executável está. Para ver isso clique com o botão direito em qualquer atalho no seu Windows.

É graças a esse comportamento do Windows que encontramos os qrps e imagens quando estão na mesma pasta do executável. Mesmo que dentro das aplicações nós não informamos o path, apenas o nome do arquivo.

Porém, a execução de algumas ações podem fazer com que Current Directory seja modificado em run-time sem que percebamos isso. Por exemplo, qualquer aplicação que permitir que o usuário escolha uma pasta para salvar um arquivo gerado pela aplicação. Um exemplo muito prático disso é uma aplicação que salve algum arquivo txt ou pdf e abra a caixa de diálogo para o usuário escolher onde ele deseja salvar o arquivo gerado. Após escolher a pasta e salvar o arquivo, Current Directory passa a apontar para o local escolhido pelo usuário. Devido a isso, caso a aplicação necessite de algum qrp, ela passa a não encontrar mais nenhum qrp, imagem ou outro arquivo que esteja na pasta do executável. Alguns clientes implementaram uma rotina que verifica a existência do qrp e a própria SalReport*** informa que o qrp não foi encontrado. Porém, o qrp encontra-se no diretório do executável. Todo o problema é “resolvido” saindo do sistema e entrando novamente.

Para resolver de fato, sem que seja necessário fechar e entrar novamente o sistema, recomendo que coloquemos em nossas aplicações uma linha de código que determina o valor que desejarmos para Current Directory.

Call SalFileSetCurrentDirectory( sNewDirectory )

Minha sugestão é utilizarmos essa linha de código antes de fazer qualquer chamada a SalReportView(), SalReportPrint(), SalReportTableView() ou SalReportTableCreate() . Porém, sNewDirectory precisa conter o caminho correto do local onde o executável está localizado. (pois é lá que estão os qrps). Esta informação é uma das informações presentes numa variável global do SQLWindows chamada strArgArray. Como esta variável possui mais informações do que precisamos, precisamos excluir dela apenas o caminho e então setar CurrentDirectory corretamente. Para determinarmos o valor de Current Directory para o local onde o executável que está sendo executado está, devemos fazer o seguinte:



Dessa forma este problema não acontecerá novamente.

um abraço
Lairton N de Almeida Jr.

Nenhum comentário: