Criando datawindows dinamicamente

Criando datawindows dinamicamente

Overview

Alguma vez já se perguntou como criar um DataObject dinamicamente utilizando apenas uma query no PowerBuilder? Pois bem, neste post, vamos explorar um método simples e eficaz para conseguir exatamente isso. Prepare-se para mergulhar em um processo detalhado que não só é fácil de seguir, mas também capaz de melhorar significativamente a funcionalidade do seu sistema. Vamos lá!

Geralmente criamos os dataobjects com antecedência mas, por uma razão ou por outra, podemos precisar de criar um dataobject dinamicamente. Neste post, mostro como criar um a partir de uma query. O processo é todo bem simples e fácil de ser gerenciado mas, dependendo do tamanho da query, pode afetar a performance do sistema.

O que estou chamando de dataobject é o que chamamos comumente de DataWindow, mas ele é o objeto que atribuímos na propriedade dataobject (dw_1.dataobject = “dw_xxx”), ou seja, este procedimento funcionará tanto para Datawindows quanto para Datastores.

Para realizar esta implementação, você vai precisar das seguintes coisas: Objeto transaction valido e conectado, uma consulta (query) e um controle Datawindow. Neste exemplo, vamos utilizar o SQLCA e o dw_1.

Primeiro, vamos criar a query:

string ls_select
string ls_where
string ls_dwsyntax
string ls_err

ls_select = "select id, cli_nome, cli_email, cli_status from tbl_cliente"
ls_where  = " where cli_nome like '%guaxinim%'"

ls_select += ls_where

O próximo passo é criar a sintaxe da datawindow a partir desta consulta:

ls_dwsyntax = SQLCA.SyntaxFromSQL (ls_select, "Style(Type=grid)", ls_err)

O segundo argumento da função SyntaxFromSQL indica os estilos que serão aplicados na datawindow que vamos criar. Você pode utilizar a ferramenta Datawindow Syntax para criar algo mais personalizado ou copiar de uma datawindow existente. Outro ponto importante é o terceiro argumento, que indica qual erro ocorreu.

O último passo é criar a datawindow a partir desta sintaxe que geramos:

 dw_1.Create (ls_dwsyntax, ls_err)

Esta função cria o objeto datawindow em sí. Ele também possui um argumento que armazena a mensagem de erro, caso exista alguma. Se tudo deu certo, você ainda precisará associar um objeto transaction nesta datawindow.

Abaixo está o exemplo completo, incluindo os tratamentos de erro.

string ls_select
string ls_where
string ls_dwsyntax
string ls_err

ls_select = "select id, cli_nome, cli_email, cli_status from tbl_cliente"
ls_where  = " where cli_nome like '%guaxinim%'"

ls_select += ls_where

ls_dwsyntax = SQLCA.SyntaxFromSQL ( ls_select, "Style(Type=grid)", ls_err )

IF ls_err <> '' THEN
    MessageBox ("Deu ruim!", ls_err, StopSign!)
ELSE
    dw_1.Create ( ls_dwsyntax, ls_err )
    IF ls_err <> '' THEN
        MessageBox ("Deu ruim!", ls_err, StopSign!)
    ELSE
        dw_1.SetTrans(SQLCA)
        dw_1.Retrieve()
    END IF
END IF

Espero ter ajudado.