Criando datawindows dinamicamente

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.

The following two tabs change content below.
Arquiteto de Software e Desenvolvedor Backend (quase Fullstack), geralmente trabalho com C#, PowerShell, Python, Golang, bash e Unity (esse é mais por hobby). Estou sempre buscando algo novo para aprender, adicionando novas ferramentas ao meu cinto de utilidades.
Posted in Dev, PowerBuilder and tagged , , , , , , , .