Visualizando o conteúdo da Datawindow/Datastore durante o debug
Overview
Após explorar como fazer um controle do PowerBuilder piscar, percebi a necessidade de compartilhar algo ainda mais valioso. Neste post, você encontrará dicas práticas para simplificar o processo de debugging de Datawindows ou Datastores. Preparado para tornar sua vida de desenvolvedor um pouco mais fácil? Vamos mergulhar nesses métodos!
Depois do último post, fiquei com a sensação de que eu precisava criar algo mais útil. Então resolvi fazer este post com algumas formas de facilitar a visualização do conteúdo de uma Datawindow (ou Datastore) durante o processo de debug.
Existem duas formas de fazermos isso:
A primeira é adicionando um item para o Watch com a seguinte expressão:
dw_1.object.datawindow.data
Esta expressão no watch vai te mostrar o conteúdo da datawindow ou datastore, mas em um formato meio difícil de ler e nada amigável. Lembre-se de trocar dw_1 para o nome do seu controle datawindow/datastore.
A segunda forma também envolve incluir um item no watch, mas com uma expressão diferente:
dw_1.saveas("c:\caminho\completo\para\o_arquivo.txt", Text!, true)
Desta forma, a cada step, o arquivo será atualizado (sobrescrito) com os dados atuais. Vale lembrar que, se o volume de dados for muito grande, este procedimento vai deixar as coisas mais lentas.
Nesta expressão, o formato texto (Text!) foi escolhido por uma razão: facilidade de acompanhar as modificações. Se você utilizar o Notepad++, basta ativar a função tail (ou utilizar o script que fiz utilizando o PowerShell) e você conseguirá acompanhar o arquivo na medida em que ele é atualizado.
Se o volume de dados for muito grande, talvez seja mais produto incluir no fonte (apenas para debug) a expressão que utilizamos na segunda forma e mudar a saída para Excel (Excel!). Desta forma, nos pontos chave do fonte, você conseguirá extrair um espelho de como a dw/ds estava em determinado momento.
Você pode, inclusive, gerar vários destes “espelhos” com uma implementação simples, conforme exemplo abaixo:
- Crie as seguintes variáveis de instancia (ou globais, se for o caso):
string is_nomeArquivo = "c:\caminho\completo\para\dw_1_debug_"
string is_ext = ".xls"
long il_qtd = 0
- No ponto do sistema que você quiser gerar este “espelho”, utilize o fonte abaixo:
il_qtd ++
dw_1.saveas(is_nomeArquivo + string(il_qtd, "00") + is_ext, Excel!, true)
Desta forma, cada vez que você chamar esta função, vai gerar um arquivo diferente e poderá analisá-los separadamente para tentar localizar o problema. Inclusive, se preferir, pode encapsular esta chamada em uma função e deixar o código mais limpo.
Espero ter ajudado.