terça-feira, janeiro 31, 2006

PowerBuilder – Recuperando valor de uma coluna em um Report

Um Report é uma DataWindow que é inserida dentro de outra DataWindow.

Existem duas formas de trabalhar com Report, utilizando uma DataWindow comum e acrescentar um objeto Report, denominada de DataWindow Nested. A segunda opção é criar uma DataWindow Composite e adicionar os Reports.

No Primeiro caso, a DataWindow principal possui dados e para cada registro existente, ele executára as Reports.

No Segundo caso, a DataWindow principal não possui dados, recuperando os reports apenas uma vez.

A dúvida que existe entre muitos desenvolvedores é como devemos proceder para buscar valores (GetItem) em uma coluna que está dentro de um Report.

Abaixo está a solução para os dois casos:

1) Report em DataWindow Composite
Este é o caso mais simples e possui duas soluções.

A primeira solução é realizar um GetChild do Report e fazer um comando GetItem ou Object tradicional, por exemplo:

datawindowchild vldwc_aux
dw_1.getchild('dw_1',vldwc_aux)
messagebox('teste',vldwc_aux.getitemstring( 1, 'sistema'))
messagebox('teste',vldwc_aux.getitemstring( 2, 'sistema'))


A segunda solução é baseado na estrutura de objetos do PowerBuilder, ou seja, você pode utilizar o OBJECT para buscar o valor, como no exemplo abaixo:
string vlsteste
//Syntax : .object.[].object..[]
vlsteste = string(dw_1.object.dw_1[1].object.sistema.primary[1])
messagebox('teste2',vlsteste)


Existem alguns variações do comando acima, que também funcionam no PowerBuilder.

2) Report em DataWindow Nested
Neste caso, a única solução é usar o OBJECT para busca o valor, como no exemplo abaixo:

//Syntax : .object.[].object..[]
vlsteste = string(dw_1.object.dw_1[1].object.sistema.primary[1])
messagebox('teste2',vlsteste)

sexta-feira, janeiro 27, 2006

PowerBuilder - Retirando o X do menu das janelas

Achei interessante este artigo do site do Celso Cortes de como remover o X (Opção de fechar a janela). É interessante para algumas situação, principalmente para janelas Response.

http://www.celso.cortes.nom.br/seleciona/c_2.php?opc=7&it=2&gr=3&item=61&tit=Anulando%20o%20%22X%22%20na%20Window&cc=34

PowerBuilder – Salvando uma DataWindow como PDF

Obs: Solução existente para PowerBuilder 9 ou superior

Recentemente tive a necessidade de implementar um processo batch para gerar arquivos PDF e enviá-los por e-mail.

A funcionalidade de envio de arquivos por e-mail já tinha sido implementada através do blat ( http://thiagocpereira.blogspot.com/2005/01/powerbuilder-enviar-e-mail-via-smtp.html )

O grande problema era como gerar arquivo PDF. Procurei na Internet e vi vários artigos de como gerar o PDF, mas nenhum deles satisfez por completo as necessidades da minha aplicação.

Depois de muito trabalho de pesquisa e juntando informações de N sites, consegui definir uma forma de trabalho que funciona 100%.

Abaixo vai as informações sobre a solução e como consegui chegar até ela.

1) Problema
a) Processo Batch de geração de arquivos PDF em lote e envio por e-mail, sem nenhuma interação do usuário.
b) Permitir salvar os relatórios existentes em todos os sistemas em PDF, envolvendo uma média de 7000 estações de trabalho, incluindo sistemas operacionais Windows 98, 2000 e XP.

2) Pesquisa
Pesquisei vários SITES, NewsGroup e lista de discursão. Após um filtro nas opções existentes, resolvi estudar as seguintes ferramentas:
* PDF995
* PDF Reditector
* SaveAs PDF da DataWindow

PDF995
A primeira opção e a que me pareceu mais simples foi a utilização do PDF995 (www.pdf995.com). Como ele é FreeWare, não teria problema com licenças.
Os problemas surgiram na automação do processo e Deploy do Software. Teria que instalar o software em todas as máquinas o que não agrada muito a nossa equipe, devido a quantidade de estações e a localização das mesmas.
A geração automática do arquivo não teria problema, pois descobri que apenas teria que alterar uma chave no arquivo INI do PDF995.
Mas, o problema que a principio tornou inviável a solução foi a propaganda que é exibida no momento que você salva os arquivo como PDF. Para retirar essas propagandas você tem que comprar uma licença de uso. Baixei uma licença utilizando o e-mule é funcionou perfeitamente. O problema é que a empresa não permite nenhum tipo de pirataria. A solução de comprar a licença se tornou inviável. A licença para cada máquina custa 10$. Fazendo as contas, teríamos que gastar R$161.000,00 para licenciarmos todas as nossas estações o que tornou a relação custo / beneficio um empecilho para a implementação da funcionalidade.

PDF Redirector
A segunda opção seria a utilização do PDF Redirector. Como ele não exibe nenhuma propaganda e é FreeWare, não teríamos os problemas o PDF995.
Mas, continuamos tendo o empecilho de ter que instalar o Software em todas máquinas.
Além desse problema, a automatização do processo de geração de PDF é um pouco complexa, aumentando o tempo necessário para a implementação e gerando novos pontos de risco.

SaveAs PDF da DataWindow
Como é um recurso nativo do PowerBuilder, seria a solução melhor a ser adotado.
O problema inicial encontrado foi a falta de informações sobre o processo.
Também tivemos problema na versão do GNU GhostScript (FreeWare), adotando a versão 7.05 como a melhor que se adequar as nossas necessidades.
Após levantar informações de vários sites, conseguimos fazer a solução funcionar em uma máquina com todos os softwares instalados (PowerBuilder e GNU GhostScript).
Então esbarramos em outro problema, como fazer o Deploy dos softwares na rede. Após algumas pesquisas, descobri que seria necessário apenas adicionar duas novas chaves no registry, o que pode ser automatizado utilizando o Script de Login dos usuários.

Assim, resolvemos o problema utilizando a solução existente no próprio PowerBuilder 9 ou superior.

3) Solução
Todos os nossos sistemas e DLLs do PowerBuilder encontra-se na rede, por isso, a solução abaixo foi feita baseado nesse ambiente
Abaixo estão os passos necessários para a implementação da solução
a. Coloque os sistemas e DLLs do PowerBuilder na rede. No nosso exemplo vamos adotar que estes arquivos se encontram no Drive X:
b. Copie a pasta C:\......\Sybase\Shared\PowerBuilder\Drivers para o drive X: . Na verdade o diretório Drivers tem que estar na mesma pasta da dll PBDWEXX.DLL.
c. Baixe a versão 7.05 do GNU GhostScript (http://prdownloads.sourceforge.net/ghostscript/gs705w32.exe?download) e instale em um máquina usando o diretório padrão.
d. No Drive X:, crie uma pasta chamada GS e copie as pastas BIN, LIB e FONTS da pasta c:\GS\ para a pasta na rede.
e. Cria as seguintes chaves no Registry das máquinas (Essa etapa pode ser automatizada utilizando o Login Script)
[HKEY_LOCAL_MACHINE\Software\GNU GhostScript]

[HKEY_LOCAL_MACHINE\Software\GNU GhostScript\7.05]

"GS_DLL"="X:\gs\bin\gsdll32.dll"
"GS_LIB"="X:\gs\lib;X:\gs\fonts"

f. Para Salvar a DataWindow, você tem que observar se as seguintes propriedades estão configuradas
//Se o GhostScript tiver instalado, configura a DataWidnow para utiliza-lo
dw_dados.Object.DataWindow.Export.PDF.Distill.CustomPostScript='No'
dw_dados.Object.DataWindow.Export.PDF.Method = Distill!
dw_dados.Object.DataWindow.Export.PDF.XSLFOP.Print='No'

O próximo passo é salvar a DataWindow como PDF

//Salva a DataWindow como PDF
dw_dados.saveas(p_path,PDF!,True)


4) Conclusão
O objetivo deste artigo é esclarecer o procedimento de Salvar como PDF e compartilhá-lo com outros desenvolvedores.

Quem tiver dúvida ou sugestões, pode incluir um comentário para que possamos enriquecer o conteúdo deste artigo.



Boa sorte!

segunda-feira, janeiro 23, 2006

Microsoft Outlook - Como configurar o Outlook XP para abrir arquivos EXE em anexo

Essa informação é muito importante, principalmente se você recebe anexos dos seus clientes e precisa abri-los de qualquer forma.
Só tomem cuidado com vírus ou outros BAD PROGRAMS.

quarta-feira, janeiro 18, 2006

PowerBuider – Problema ao Formatar Valor em gráfico

No PowerBuilder 9, existe um Bug ao formatar o campo de Valor quando utilizamos uma DataWindow Gráfica.

Quando você informa o formata de exibição do campo, ele exibe o formato correto no Preview, mas após fechar e reabrir a DW, o formata é perdido.

O problema ocorre porque o PowerBuilder grava a informação de formata em um local errado, o que pode ser visto quando você visualiza o source da DW.

Para resolver o problema no source da DW (Edit Source), altera a propriedade values.dispattr.format="".