quarta-feira, setembro 21, 2005

PowerBuilder - Visão da Versão 11

No período de 21 a 25 de agosto de 2005, a Sybase apresentou em um congresso nos EUA a previsão de lançamento de produtos para os próximos anos.O que me chamou mais a atenção foi o PowerBuilder 11 e as características que ele terá. Baixo está uma cópia do slide que fala sobre o assunto :

* Early Alpha will start in September.
* Based entirely on .NET 2.0.
* Support Winforms and WebForms.
* Compiles PB code to C#
* Use refactored code from 10.5.
* Import PocketBuilder code line.
* proved Tablet PC support.
* ta Q1 – GA Q3 2006

É interessante chamar a atenção que o PowerBuilder 11 será totalmente DotNet. Quem quiser ver a PPT completa, acesse o site http://files.blog-city.com/files/M05/128508/b/techwave.pps

PowerBuilder - Recuperando a Data e versão de um arquivo

No site do Celso Côrtes tem dois artigos interessantes sobre como recuperar a data e versão de um arquivo.
Entre no site e faça uma pesquisa pela palavra data ou versão.

http://www.celso.cortes.nom.br/
Por : Celso Côrtes

sexta-feira, setembro 16, 2005

DotNet - DataWindow

Recentemente fiz uma avaliação da DataWindow .Net e fiquei muito satisfeito com a ferramenta.

Ela se compõe de dois módulos:

1) Designer
Este modulo é basicamente o PowerBuilder contendo apenas o Painter de DataWindow. Nele, você pode criar qualquer tipo de DataWindow e gravar em uma PBL ou utilizar qualquer datawindow que você possua nos seus sistemas (O impressionante, que funciona com qualquer DataWindow)
2) Viewer
Este modulo é utilizado pelo VisualStudio para exibir a DataWindow. Quando você instala o Software, ele cria uma pasta na barra de ferramentas do VisualStudio. Então, você deve arrastar o objeto para um formulário e utilizá-lo. Muito Fácil.

Bom, deixa-me contar o que achei de mais interessante:
· Utilização de DataWindow na Web : Você pode utilizar qualquer tipo de DataWindow em formulários Windows e Web, para cadastro e consulta. O interessante é que da DataWindow DotNet gera o código em JavaScript, não necessitando utilizar Plugin.
· Programação no DotNet: A Sybase fez um trabalho espetacular, utilizando os nomes das funções já existente no PowerBuilder para se trabalhar em DotNet. Por exemplo, para configurar o objeto transação de uma datawindow, você utiliza a função SetTrans, para buscar valor você utiliza GetItem, para enviar valor você utiliza SetItem. Dessa forma, eles conseguiram que o programador PowerBuilder utilize o VisualStudio sem precisar aprender como programar. Muito Bom.
· Um único fonte: Você pode continuar desenvolvendo a suas DataWindow junto a sua aplicação PowerBuilder e apenas atualizá-las no servidor Web, necessitando de apenas um fonte e manutenção em um ponto único.

O que achei mais interessante, que essa foi a melhor ferramenta que vi para gerar relatórios em Web, mesmo para quem nunca viu PowerBuilder, além de não ter problemas de licenciamento, como ocorre no CrystalReports.

Parabéns a Sybase por essa ferramenta.

PowerBuilder – Soluções que rodam 24 X 7

Em algumas situações, temos que criar aplicações que ficam executando o tempo todo, como monitores de rede, Call Center, Agendas de aplicativos e etc...
Recentemente, eu passei por duas situações (Transferência de arquivos entre sites e Call Center).
Vou pegar como exemplo a primeira aplicação. Deveríamos criar uma aplicação responsável por atualizar os aplicativos que são executados em todas as agências de uma empresa de Energia Elétrica, utilizando a arquitetura cliente/servidor (mais de 70 locais de transferência).
A partir da necessidade e de outras variáveis envolvidas (disponibilidade de Link, distância geográfica entre agencias, disponibilidade de servidores, horário de picos, atualizações urgentes de sistemas, etc...) resolvemos desenvolver um servidor de aplicação que ficariam rodando 24 horas e processando as requisições de cópias feitas pelo usuário.
O sistema foi desenvolvido em PowerBuilder e ficou da forma que desejávamos. Mas, após 24 horas em produção, começamos a deparar com um problema que colocou todo o trabalho de desenvolvimento em questionamento. A aplicação PowerBuilder alocava memória e não liberava a mesma.
Fazendo o monitoramento, percebi que quando instanciávamos os objetos e utilizava DataWindows, os mesmos não liberavam toda a memória alocada. Após 24 horas de processamento, a aplicação travava o servidor por falta de memória.
Após pensarmos em várias soluções e já pensando em outros projetos que teriam o mesmo problema, resolvemos criar um “Gerenciador de Serviços”.
Essa aplicação fica responsável por colocar a aplicação no ar. Após a aplicação no ar, ela faz o processamento necessário e fecha o sistema. Após X tempo que a aplicação fechou (no nosso caso, foi 1 minuto) o gerenciador coloca a aplicação no ar novamente.
Como o gerenciador não utiliza objetos e possui um código muito simples, ele não aloca memória desnecessária e não causa o problema que a aplicação teria.

Essa é uma solução simples, que foi essencial para o sucesso do nosso projeto.

sexta-feira, setembro 09, 2005

Observação sobre o método FIND da DataWindow

Recentemente passei por uma situação que pode afetar outras pessoas, por isso resolvi publicar essa informação.

O método FIND da DataWindow serve para localizarmos uma linha especifica a partir dos valores informados. A sintaxe do comando é

long dwcontrol.Find ( string expression, long start, long end )

Gostaria de chamar a atenção para a posição inicial da pesquisa. Se a posição inicial for maior que a posição final, o PowerBuilder ignora a posição inicial e faz a pesquisa a partir do inicio da datawindow (row = 1). Esta situação pode causar um loop infinito, se o você estiver procurando todas as ocorrências de um valor e existir uma ocorrência no último registro da datawindow.

Por exemplo:

Tenho a seguinte situação que procura a ocorrência de um string em todas as linhas da datawindow:

Do While VLLROW > 0
VLLROW = DW_1.FIND(VLSFIND,VLLROW + 1,DW_1.ROWCOUNT()
LOOP


Se a última linha da datawindow tiver o valor procurado, na próxima volta do LOOP, VLLROW +1 será maior que ROWCOUNT(). Nesta situação, o PowerBuilder irá ignorar VLLROW +1 e começar a pesquisa a partir da Linha 1, entrando em um LOOP infinito.

Para evitarmos essa situação, devemos alterar o código acima para que fique da seguinte forma:
Do While VLLROW > 0
VLLROW = DW_1.FIND(VLSFIND,VLLROW + 1,DW_1.ROWCOUNT()
IF VLLROW = DW_1.ROWCOUNT() THEN EXIT
LOOP



Estas características estão documentadas no HELP do PowerBuilder. Abaixo se encontra um trecho do Help com a informação sobre o procedimento acima

…When the start value becomes greater than end, the search reverses direction and Find would always succeed, resulting in an endless loop….

quinta-feira, setembro 08, 2005

PowerBuilder – Layout Corrompido

A partir da versão 7, o PowerBuilder permite ao desenvolvedor customizar o ambiente de desenvolvimento, podendo alterar o Layout. Com essa evolução, surgiu um novo problema que ocorre quando você não consegue abrir painter (janela de desenvolvimento) especifico (Window, DataWindow, Database, Menu, etc...).

Para resolver este problema, o usuário tem que voltar ao layout original do objeto. Como essa configuração é armazenada no registro, o usuário deve apagar a chave do registro que armazena essa configuração, voltando a configuração original.

A chave do registro que armazena a configuração encontra-se em HKEY_CURRENT_USER\Software\Sybase\PowerBuilder\\Layout

PowerBuilder - Dicas de intergração com o PowerDesigner

Abaixo está um artigo publicado por Ricardo Couto de Souza

Fiz algumas experiências com o objetivo de ganhar produtividade no design de datawindows para sistemas modelados no PowerDesigner e encaminho minhas conclusões para os que se interessarem:

Ao projetar as colunas no PowerDesigner procurem seguir as seguintes orientações:
preencher o campo "Name" com o título que se deseja que apareça na datawindow;
preencher o campo "Code" com o nome da coluna no banco de dados (óbvio);
preencher o campo "Label" com o conteúdo que se deseja que seja a Tag na datawindow;
Após a execução do Script de criação das tabelas no banco de dados executem no menu do PowerDesigner: Client > Generate PowerBuilder Attributes...

Com isso serão populadas as tabelas do PowerBuilder PBCATCOL,PBCATEDT, PBCATFMT, PBCATTBL e PBCATVLD, que assessoram a criação de datawindows com os dados de colunas, edições, formatos de exibição, tabelas e validações, respectivamente.

A coluna PBC_CMNT da PBCATCOL recebe o conteúdo do campo LABEL' do PD e será usada para "Tag" da coluna para qualquer DW´
A coluna PBC_LABL da PBCATCOL recebe o conteúdo do campo 'NAME' do PD acrescido de ":" e será usada para "Título" da coluna para DW´s FreeForma;
A coluna PBC_HDR da PBCATCOL recebe o conteúdo campo 'NAME' e é usada para "Título" da coluna para DW´s Tabulares
Para que os itens 2 e 3 funcionem é preciso garantir que nos Extenderd Attributes da tela de configuração de colunas do PowerDesigner o campo "Label " seja igual a "%ColumnName%:" e Header seja "%ColumnName%".

O objetivo do meu estudo se restringiu a ganhar produtividade na obtenção automática dos Títulos e Tag´s das colunas nas DW, que utilizam colunas da tabela PBCATCOL. Explorando-se um pouco mais podemos ganhar também nas máscaras, edições e validações.

Por Ricardo Couto de Souza

PowerBuilder - Versão 10.5

No site do Celso Cortes tem este artigo com informações sobre o PowerBuilder 10.5

Informática - O que é UNICODE?

Achei este artigo muito interessante no site do Celso Cortes. Vale a pena dar uma lida.