Abrindo arquivos com a aplicação padrão a partir do PowerBuilder

Abrindo arquivos com a aplicação padrão a partir do PowerBuilder

Overview

Você já quis abrir um arquivo .DOCX usando PowerBuilder e simplesmente não sabia por onde começar? Não se preocupe! Neste post, caminhamos juntos por um pequeno tutorial onde eu mostro como superar as limitações da função nativa ‘run’ do PowerBuilder, introduzindo uma maneira alternativa de executar comandos externos, incluindo a abertura desses arquivos complicados. Além disso, te presenteo com um user object mágico, disponível no meu GitHub, pronto para simplificar sua vida. Preparado para facilitar sua programação? Vamos nessa!

O PowerBuilder possui uma função nativa para executar comandos externos (run), mas nem sempre ela funciona conforme o esperado. Este comando funciona muito bem para rodar outros executaveis ou linhas de comando de outra aplicação, mas abrir um .DOCX pode não funcionar. Neste post, mostro uma alternativa.

Infelizmente, para fazer isso precisaremos de criar uma função externa, conforme o exemplo abaixo:

FUNCTION long ShellExecuteW( ulong hWnd, string Operation, string lpFile, string  lpParameters, string lpDirectory, int nShowCmd ) LIBRARY "shell32.dll"

Uma vez que isso foi feito, agora precisamos apenas chamar esta função, certo? Sim, mas vamos dar uma olhada nos argumentos da função ShellExecuteW

  • ulong hWnd: Handle da janela associada a operação. Em teoria, este valor pode ser nulo se a operação que será realizada não depender ou não estiver associada a janela;
  • string Operation: Qual operação será realizada. Valores válidos são: edit, explore, find, open, print e NULL. (Você deve ter adivinhado, vamos utilizar a opção open.);
  • string lpFile: Arquivo que será utilizado na operação;
  • string lpParameters: Parametros que serão passados para a aplicação;
  • string lpDirectory: Diretório atual/de trabalho. (working directory);
  • int nShowCmd: Flag que indica como o arquivo deve ser exibido após aberto. Como esta flag será interpretada é a responsabilidade da aplicação que está recebendo a requisição. Valores válidos: SW_HIDE, SW_MAXIMIZE, SW_MINIMIZE, SW_RESTORE, SW_SHOW, SW_SHOWDEFAULT, SW_SHOWMAXIMIZED, SW_SHOWMINIMIZED, SW_SHOWMINNOACTIVE, SW_SHOWNA, SW_SHOWNOACTIVATE e SW_SHOWNORMAL. Cada um possui um valor numérico correspondente;

Vamos precisar disso tudo? Não, mas eu queria fazer uma breve explicação mesmo assim.

Abaixo está um exemplo de como chamar este comando:

ShellExecuteW(handle(THIS), "open", ls_filename, ls_null, ls_null, 1)

De todos aqueles parâmetros, precisamos mesmo do segundo (operação a ser realizada), do terceiro (nome do arquivo) e do último (flag da ação).

Para facilitar a vida de vocês, disponibilizei um user object no meu github. Se você utilizar este user object, basta utilizar a função uf_open, conforme o exemplo abaixo:

uo_fileopen luo_fileopen
luo_fileopen = CREATE uo_fileopen

luo_fileopen.uf_open("c:\temp\relatorio.docx")

DESTROY luo_fileopen

Espero ter ajudado.