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.

sexta-feira, 28 de agosto de 2009

Menu ou RibbonBar ?

Um dos recursos novos do TD 5.1 e que continua firme e forte no TD 5.2 é a nova forma de mostrar os menus dos aplicativos. A Ribbon Bar é aquela forma nova introduzida aos usuários Windows através do MS Office 2007.

Como uma imagem vale mais que mil palavras, vou direto ao assunto:

Abaixo você pode ver uma estrutura de outline normal, com a definição de um menu típico de aplicativo. Um MDI com diversos pop-up menus e menu items.





Esta estrutura irá gerar um menu bem comum aos usuários de aplicativos feitos com o SQLWindows, porém, a partir da versão 5.1 esta história muda. Os menus podem ser mostrados como RibbonBar, conforme imagens abaixo:





O ideal é que seja feito no processo de migração uma análise de como você deseja que seus usuários visualizem o menu dos aplicativos, já que agora uma área maior da janela passará a ser utilizada. Você terá que buscar ícones (se já não usa) e estudar seriamente a possibilidade de retirar a barra de ferramentas da janela onde o RibbonBar ira aparecer (para manter-se no padrão de aplicações que usam este recurso). Explorar o uso de Windows Menu e modernizar o visual dos menus da sua aplicação.

As duas formas de visualização estão disponiveis. Você pode manter os menus como eles aparecem hoje, se desejar. Ou pode modernizar os menus das suas aplicações tornando-as similares ao Office2007, imagino que os usuários irão adorar a novidade.

Já ia me esquecendo um detalhe, para informar ao SQLWindows que é para mostrar os menus como Ribbon Bar, o esforço de programação necessário é o seguinte:

On SAM_AppStartup
Set bMenuBarAsRibbonBar = TRUE

É isso mesmo, você não terá que modificar nada no outline, onde seus menus são definidos. Imagino que não dará muito trabalho migrar este recurso não é mesmo !

:)

um abraço,
Lairton N de Almeida Jr.