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:
1string ls_select
2string ls_where
3string ls_dwsyntax
4string ls_err
5
6ls_select = "select id, cli_nome, cli_email, cli_status from tbl_cliente"
7ls_where = " where cli_nome like '%guaxinim%'"
8
9ls_select += ls_where
O próximo passo é criar a sintaxe da datawindow a partir desta consulta:
1ls_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:
1 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.
1string ls_select
2string ls_where
3string ls_dwsyntax
4string ls_err
5
6ls_select = "select id, cli_nome, cli_email, cli_status from tbl_cliente"
7ls_where = " where cli_nome like '%guaxinim%'"
8
9ls_select += ls_where
10
11ls_dwsyntax = SQLCA.SyntaxFromSQL ( ls_select, "Style(Type=grid)", ls_err )
12
13IF ls_err <> '' THEN
14 MessageBox ("Deu ruim!", ls_err, StopSign!)
15ELSE
16 dw_1.Create ( ls_dwsyntax, ls_err )
17 IF ls_err <> '' THEN
18 MessageBox ("Deu ruim!", ls_err, StopSign!)
19 ELSE
20 dw_1.SetTrans(SQLCA)
21 dw_1.Retrieve()
22 END IF
23END IF
Espero ter ajudado.