Sunteți pe pagina 1din 54

1.

SUMÁRIO

2. LISTA DE FIGURAS ..............................................................................................................................................3


3. HISTÓRICO DE REVISÕES .................................................................................................................................5
4. ELABORADOR (ES) ............................................................................................. Erro! Indicador não definido.
5. REFERÊNCIAS .....................................................................................................................................................6
6. OBJETIVO .............................................................................................................................................................6
7. RESPONSABILIDADES ........................................................................................................................................6
8. CAMPO DE APLICAÇÃO ......................................................................................................................................6
9. GENERALIDADES ................................................................................................................................................6
10. DBO......................................................................................................................................................................6
10.1 CRIAR INCLUDE ............................................................................................................................................7
10.2 CRIAR O PROGRAMA ...................................................................................................................................9
10.2.1 Passos Iniciais ........................................................................................................................................9
10.2.2 Definitions .............................................................................................................................................10
10.2.3 Procedures ............................................................................................................................................12
11. THIN MAINTENANCE .........................................................................................................................................16
11.1 CRIAÇÃO DA TELA .....................................................................................................................................17
11.2 DEFINITIONS ................................................................................................................................................20
11.3 PROCEDURES ............................................................................................................................................21
11.4 OUTRAS IMPLEMENTAÇÕES ....................................................................................................................23
11.4.1 Botão “Pesquisa” ..................................................................................................................................23
11.4.2 Programa de Pesquisa de Chave Estrangeira .....................................................................................23
12. THIN MAINTENANCE NO NAVIGATION ...........................................................................................................25
12.1 CRIAÇÃO DA TELA .....................................................................................................................................25
12.2 DEFINITIONS ...............................................................................................................................................28
12.3 PROCEDURES ............................................................................................................................................29
12.4 OUTRAS IMPLEMENTAÇÕES ....................................................................................................................30
12.4.1 Programa de Pesquisa de Chave Estrangeira .....................................................................................30
13. THIN MASTERDETAIL........................................................................................................................................30
13.1 CRIAÇÃO DA TELA .....................................................................................................................................30
13.2 DEFINITIONS ...............................................................................................................................................36
13.3 PROCEDURES ............................................................................................................................................37
13.4 OUTRAS IMPLEMENTAÇÕES ....................................................................................................................39
13.4.1 Botão “Pesquisa” ..................................................................................................................................39
13.4.2 Programa de Pesquisa de Chave Estrangeira .....................................................................................39
13.4.3 Programa de Manutenção do Filho ......................................................................................................39
14. THIN ZOOM ........................................................................................................................................................39
14.1 CRIAÇÃO DA TELA .....................................................................................................................................39
14.2 DEFINITIONS ...............................................................................................................................................43
14.3 PROCEDURES ............................................................................................................................................45
15. THIN REPORT ....................................................................................................................................................47

1
15.1 CRIAÇÃO DA TELA .....................................................................................................................................47
15.2 DEFINITIONS ...............................................................................................................................................50
15.3 PROCEDURES ............................................................................................................................................52
15.4 OUTRAS IMPLEMENTAÇÕES ....................................................................................................................53
15.4.1 Programa de Pesquisa de Chave Estrangeira .....................................................................................53
2. LISTA DE FIGURAS

Figura 1: Utilização dos DBOs......................................................................................................................................6


Figura 2: Atalhos dos módulos disponíveis ..................................................................................................................7
Figura 3: Seleção do template DBO Temp-Table no AppBuilder .................................................................................7
Figura 4: Alteração da <TableName> no include .........................................................................................................8
Figura 5: Salvando e nomeando o ".i" no diretório de DBO .........................................................................................8
Figura 6: Seleção do template DBO Program no AppBuilder ......................................................................................9
Figura 7: DBO Wizard – Página Inicial .........................................................................................................................9
Figura 8: DBO Wizard – Seleção de banco e tabela ..................................................................................................10
Figura 9: DBO Wizard – Seleção de índice ................................................................................................................10
Figura 10: Definição dos preprocessadores padrão ..................................................................................................10
Figura 11: Chamada do include na sessão “Definitions” ............................................................................................11
Figura 12: Definições da query ...................................................................................................................................11
Figura 13: Definição do buffer da tabela para o método "goToKey" ..........................................................................11
Figura 14: Criação da procedure “setConstraintMain” ...............................................................................................12
Figura 15: Procedure “setConstraintMain” sem restrições .........................................................................................12
Figura 16: Criação da procedure “openQueryMain” ...................................................................................................12
Figura 17: Procedure “openQueryMain” sem ordenação ...........................................................................................13
Figura 18: Procedure “setConstraintFiltro” com filtro de usuário e limite de crédito ..................................................13
Figura 19: Procedure “openQueryFiltro” com filtro de usuário e limite de crédito ......................................................13
Figura 20: Definição das variáveis na sessão "Definitions" .......................................................................................14
Figura 21: Método "goToKey" .....................................................................................................................................14
Figura 22: Método “linkTo” para comunicação com DBO Pai ....................................................................................15
Figura 23: Método "getKey" ........................................................................................................................................15
Figura 24: Validações através do método validateRecord .........................................................................................16
Figura 25: Exemplo de tela ThinMaintenance ............................................................................................................16
Figura 26: Seleção do template thinMaintenance no AppBuilder ..............................................................................17
Figura 27: Botão "Temp-Table Definitions" na tela "Procedure Settings" ..................................................................17
Figura 28: Adicionar campos através do Temp-Table Maintenance ..........................................................................18
Figura 29: Tela temp-table Maintenance ....................................................................................................................18
Figura 30: DB Fields no Palette do AppBuilder ..........................................................................................................19
Figura 31: Seleção de banco de dados e tabela ........................................................................................................19
Figura 32: Seleção dos campos desejados ................................................................................................................19
Figura 33: Campos da temp-table visíveis no frame escolhido ..................................................................................20
Figura 34: Definitions na criação de um thinMaintenance .........................................................................................20
Figura 35: Definitions na criação do thinMaitenance..................................................................................................21
Figura 36: Procedure "initializeDBOs" para o thinMaintenance .................................................................................21
Figura 37: Procedure "goToRecord" do thinMaintenance ..........................................................................................22
Figura 38: Procedure "goToRecord" do thinMaintenance ..........................................................................................22
Figura 39: Abrir códigos do campo desejado .............................................................................................................23
Figura 40: Criar nova trigger ao clicar duas vezes sobre o campo ............................................................................23
Figura 41: Código para preencher o fill in da tela com o nome do transportador ......................................................24
Figura 42: Código para alterar o cursor quando posicionado sobre o campo ...........................................................25
Figura 43: Seleção do template thinMaintenanceNoNavigation no AppBuilder .........................................................25
Figura 44: Botão "Temp-Table Definitions" na tela "Procedure Settings" ..................................................................26
Figura 45: Adicionar campos através do Temp-Table Maintenance ..........................................................................26
Figura 46: Tela temp-table Maintenance ....................................................................................................................26
Figura 47: DB Fields no Palette do AppBuilder ..........................................................................................................27
Figura 48: Seleção de banco de dados e tabela ........................................................................................................27
Figura 49: Seleção dos campos desejados ................................................................................................................27
Figura 50: Campos da temp-table visíveis no frame escolhido ..................................................................................28
Figura 51: Definitions na criação de um thinMaintenanceNoNavigation ....................................................................28
Figura 52: Definitions na criação do thinMaintenanceNoNavigation ..........................................................................29
Figura 53: Procedure "saveParentFields" para o thinMaintenanceNoNavigation ......................................................29
Figura 54: Procedure "afterEnableFields" no thinMaintenanceNoNavigation ............................................................30
Figura 55: Template thinMaintenanceNoNavigation utilizado juntamente com thinMasterDetail ..............................30
Figura 56: Seleção do template thinMasterDetail no AppBuilder ...............................................................................31
Figura 57: Botão "Temp-Table Definitions" na tela "Procedure Settings" ..................................................................31
Figura 58: Adicionar campos através do Temp-Table Maintenance ..........................................................................32
Figura 59: Tela temp-table Maintenance ....................................................................................................................32
Figura 60: DB Fields no Palette do AppBuilder ..........................................................................................................33
Figura 61: Seleção de banco de dados e tabela ........................................................................................................33
Figura 62: Seleção dos campos desejados ................................................................................................................33
Figura 63: Campos da temp-table visíveis no frame escolhido ..................................................................................34
Figura 64: Botão “Query” na Property Sheet do browse ............................................................................................34
Figura 65: Seleção da temp-table desejada no Query Builder ...................................................................................35
Figura 66: Botão “Fields” na Property Sheet do browse ............................................................................................35
Figura 67: Adicionar campos ao browse através do Column Editor ..........................................................................36
Figura 68: Definitions na criação de um thinMasterDetail ..........................................................................................36
Figura 69: Definitions na criação do thinMasterDetail ................................................................................................37
Figura 70: Procedure "initializeDBOs" para o thinMaintenance .................................................................................37
Figura 71: Procedure "openQueriesSon" no thinMasterDetail ...................................................................................38
Figura 72: Procedure "goToRecord" do thinMasterDetail ..........................................................................................38
Figura 73: Procedure "goToRecord" do thinMasterDetail ..........................................................................................39
Figura 74: Seleção do template thinZoom no AppBuilder ..........................................................................................40
Figura 75: Botão "Temp-Table Definitions" na tela "Procedure Settings" ..................................................................40
Figura 76: Adicionar campos através do Temp-Table Maintenance ..........................................................................41
Figura 77: Tela temp-table Maintenance ....................................................................................................................41
Figura 78: Botão “Query” na Property Sheet do browse ............................................................................................42
Figura 79: Seleção da temp-table desejada no Query Builder ...................................................................................42
Figura 80: Botão “Fields” na Property Sheet do browse ............................................................................................43
Figura 81: Adicionar campos ao browse através do Column Editor ..........................................................................43
Figura 82: Definitions na criação de um thinZoom .....................................................................................................44
Figura 83: Definitions na criação de um thinZoom .....................................................................................................44
Figura 84: Procedure "initializeDBOs" para o thinZoom.............................................................................................45
Figura 85: Procedure "openQueries" para o thinZoom ..............................................................................................45
Figura 86: Procedure "setConstraints" para o thinZoom ............................................................................................46
Figura 87: Procedure "returnFieldsPage" para o thinZoom .......................................................................................47
Figura 88: Código comentado no botão "Implantar" no frame "fPage1" ....................................................................47
Figura 89: Seleção do template thinZoom no AppBuilder ..........................................................................................48
Figura 90: Selecionando o frame desejado ................................................................................................................49
Figura 91: Adicionar campos através do Temp-Table Maintenance ..........................................................................49
Figura 92: Tela temp-table Maintenance ....................................................................................................................50
Figura 93: Definitions na criação de um thinReport ...................................................................................................50
Figura 94: Definitions na criação de um thinReport ...................................................................................................51
Figura 95: Definitions na criação de um thinReport ...................................................................................................51
Figura 96: Definitions na criação de um thinReport ...................................................................................................52
Figura 97: Procedure "afterInitializeInterface" para o thinReport ...............................................................................52
Figura 98: Procedure "piExecute" para o thinReport..................................................................................................53
3. REFERÊNCIAS

Para elaboração deste manual foram empregados conhecimentos técnicos oriundos do Manual de Técnicas –
Construção de DBOs 2.0, Setembro/2006, Versão 2.0, do Manual de thinTemplates – Construção de Programas,
Novembro/2009, disponíveis em “O:\TI\Desenvolvimento\Documentação\Progress ThinThenplates”.

4. OBJETIVO

Instruir a equipe de TI no que diz respeito à criação de DBOs, emprega-los na construção de Thin Templates, a
facilitar a customização de programas e telas e aprimorar a performance dos processos.

5. RESPONSABILIDADES

Os responsáveis pelo monitoramento do documento serão o supervisor e a equipe de TI.

6. CAMPO DE APLICAÇÃO

Todo o sistema Datasul, sempre que for necessário criar regras de negócio que serão utilizadas em diversos
programas e na padronização de telas.

7. GENERALIDADES

Para efeitos deste documento, aplicam-se as seguintes definições:


DBO: Datasul Bussiness Object é um programa Progress que contém a lógica de negócio e acesso ao banco de
dados. Tem o objetivo de separar a camada de lógica de apresentação (interface com usuário) e a camada de lógica
de aplicação (regras de negócio) e é muito empregado na elaboração de programas através de Thin Templates.
Figura 1: Utilização dos DBOs

Constraints: são restrições do programa para limitar o acesso do client ao banco de dados. Podem depender do
usuário, de uma faixa específica de dados, do elemento pai ou chave estrangeira ou por diversos filtros que podem
ser criados pelo desenvolvedor.
Query: diz respeito ao método ou procedure que realiza a busca dos dados dentro do banco. Está diretamente
relacionada com as restrições de acesso (constraints).

8. DBO

A nomenclatura de um DBO pode ser DBOxxxxx.p ou BOxxxxx.p, onde xxxxx = DumpName da Tabela
relacionada. Além do programa do DBO, deve-se criar um include com o mesmo nome do programa, que conterá a
definição da temp-table de comunicação dos programas que utilizarão esta funcionalidade. É importante também
que haja um diretório específico para DBOs em cada aplicativo, como por exemplo “ADBO”, “INBO”, “UNBO” ou
“DIBO”, conforme ilustra a Figura 2 a seguir.
Figura 2: Atalhos dos módulos disponíveis

Inicia-se a criação do DBO através do aplicativo AppBuilder, criando um include e um programa a partir de
templates próprios, como mostram os itens a seguir.

8.1 CRIAR INCLUDE

a. Clicar em “Novo” e selecionar o template “DBO Temp-Table”.


Figura 3: Seleção do template DBO Temp-Table no AppBuilder

b. Na seção “Definitions”, alterar a tag <TableName> para a tabela desejada, definindo sua comunicação com a
temp-table.
Figura 4: Alteração da <TableName> no include

c. Salvar o include em um diretório específico para DBO, nomeando “dboNomeTabela.i”, neste exemplo:
“dboCustomer.i”.
Figura 5: Salvando e nomeando o ".i" no diretório de DBO
8.2 CRIAR O PROGRAMA

8.2.1 Passos Iniciais

a. Clicar em “Novo” e selecionar o template “DBO Program”.


Figura 6: Seleção do template DBO Program no AppBuilder

b. Clicar em “Próximo” na mensagem exibida pelo DBO Wizard.


Figura 7: DBO Wizard – Página Inicial
c. Selecionar o banco e a tabela do DBO e clicar em “Próximo”.
Figura 8: DBO Wizard – Seleção de banco e tabela

d. Escolher o índice que será empregado em métodos do programa.


Figura 9: DBO Wizard – Seleção de índice

8.2.2 Definitions

a. Na seção “Definitions”, alguns preprocessadores padrão já são definidos corretamente, porém deve-se alterar:
“DBOName”, “DBOVersion” e ”TableLabel”.
Figura 10: Definição dos preprocessadores padrão
b. Chamar o include com a definição da temp-table de comunicação, criado no item 10.1 anterior, mantendo o
mesmo nome.
Figura 11: Chamada do include na sessão “Definitions”

c. O padrão do programa já traz um include com a definição da query, porém pode-se alterá-la manualmente. A
Figura 12 a seguir mostra o include “method/dboqry.i” comentado e a definição manual de uma nova query,
utilizando o preprocessador “&QueryName”.
Figura 12: Definições da query

d. Ainda na sessão “Definitions”, o programa padrão traz a definição do buffer da tabela, o qual será utilizado no
método “goToKey”.
Figura 13: Definição do buffer da tabela para o método "goToKey"
8.2.3 Procedures

a. Já existem vários métodos (ou procedures) padrões no programa. Porém, deve-se criar as procedures que
definem as restrições e classificações (setConstraint e openQuery). Existe uma relação entre os métodos
“setConstraint<Description>” e “openQuery<Description>”, pois quem usará o DBO pode chamar “openQuery”
após “setConstraint”, podendo estar isolados para navegações e seleções específicas. A abertura da query será
realizada pelo método “openQueryStatic” no programa que utilizará o DBO, empregando como parâmetro a
descrição da query desejada. As Figuras 14 a 17 a seguir mostram o exemplo de criação das procedures
“setConstraintMain” e “openQueryMain”, que não possuem restrição e ordenação.
Figura 14: Criação da procedure “setConstraintMain”

Figura 15: Procedure “setConstraintMain” sem restrições

Figura 16: Criação da procedure “openQueryMain”


Figura 17: Procedure “openQueryMain” sem ordenação

b. As figuras a seguir mostram os passos para criar as procedures a fim de que só sejam acessados os dados de
um representante em particular e com limite de crédito superior ao estipulado. Neste exemplo, as procedures
foram chamadas “setConstraintFiltro” e “openQueryFiltro”. Na primeira delas, dois parâmetros serão exigidos
como entrada e as variáveis do programa armazenarão estes valores.
Figura 18: Procedure “setConstraintFiltro” com filtro de usuário e limite de crédito

Figura 19: Procedure “openQueryFiltro” com filtro de usuário e limite de crédito


c. Porém, para que essas procedures funcionem, se faz necessário declarar as variáveis que armazenam os valores
de representante e limite de crédito. A Figura 20 a seguir mostra a declaração realizada na sessão “Definitions”.
Figura 20: Definição das variáveis na sessão "Definitions"

d. Ao realizar a construção dos métodos de “openQuery” e “setConstraint”, normalmente, é mantido um


relacionamento 1 – 1. Então é aconselhado que ao alterar-se uma ou mais restrições de um “openQuery” seja
criado um novo método de abertura. Isso é devido ao fato de não impedir o correto funcionamento das interfaces
que fazem uso do antigo método de abertura.
e. Confirmar se o método “goToKey” foi criado corretamente pelo programa.
Figura 21: Método "goToKey"
f. Caso haja a necessidade de realizar a comunicação com um DBO Pai, criar a procedure chamada
“linkTo<Descrição que identifique o DBO Pai>”. Esse código deve receber o handle do DBO Pai e executar o
método “getKey”, a fim de receber os valores dos campos do índice único oriundos do DBO Pai. Então, o DBO
filho pode executar um método do tipo “setConstraint” para restringir a abertura da query. A Figura 22 a seguir
ilustra a criação do método “linkTo” que recebe o handle do DBO Item.
Figura 22: Método “linkTo” para comunicação com DBO Pai

g. Confirmar se o método “getKey” foi criado corretamente pelo programa.


Figura 23: Método "getKey"

h. Se for necessário, fazer validações através do método “validateRecord”. No exemplo da Figura 24 a seguir, a
validação é realizada para que o valor do limite de crédito não seja menor que zero ao criar ou atualizar um
registro (pType = “Create” ou “Update”). O número e tipo do erro criado são valores padrão e a descrição do erro
ao usuário deve ser digitada em “ErrorParameters”. O subtipo do erro pode ter três valores: “Error”, “Information”
ou “Warning”, mas nos dois últimos casos, o procedimento não é encerrado.
Figura 24: Validações através do método validateRecord

9. THIN MAINTENANCE

É um tipo de interface que permite ambos consulta e manutenção dos dados de uma tabela, conforme ilustra
o exemplo da Figura 25 a seguir, a qual possibilita visualizar e alterar os dados dos consumidores.
Figura 25: Exemplo de tela ThinMaintenance
9.1 CRIAÇÃO DA TELA

a. Abrir o AppBuilder, selecionar novo e escolher a opção “thinMaintenance”.


Figura 26: Seleção do template thinMaintenance no AppBuilder

b. Perceber que na tela aberta existem três frames: fPage0, fPage1 e fPage2 e o fPage0 é o pai dos outros dois.
c. Criar as temp-tables que serão utilizadas neste programa, através do menu “Tools”, opção “Procedure Settings”.
Na tela que será aberta, clicar sobre o botão “Temp-Table Definitions”.
Figura 27: Botão "Temp-Table Definitions" na tela "Procedure Settings"
d. Clicar em “Add” e, na tela “Table Selector”, selecionar o banco de dados e tabela desejados.

Figura 28: Adicionar campos através do Temp-Table Maintenance

e. Depois de selecionada a tabela, o campo “Table Name” será exatamente igual ao nome da tabela, por isso deve-
se adicionar “tt” antes do nome e também criar um campo adicional chamado “r-rowid” como rowid e checar a
sintaxe.
Figura 29: Tela temp-table Maintenance

f. Após criada a temp-table, pode-se inserir seus campos em tela, clicando em “DB Fields” no Palette do AppBuilder
e em seguida, sobre o frame desejado.
Figura 30: DB Fields no Palette do AppBuilder

g. Dentre os bancos de dados disponíveis, selecionar a última opção, que é “Temp-Tables” e escolher a tabela
temporária.
Figura 31: Seleção de banco de dados e tabela

h. Será aberta uma tela com todos os campos da tabela selecionada. Basta clicar nos campos almejados, escolher
a opção “Add”, observar que eles aparecem na coluna da direita “Selected Fields” e então selecionar “OK”.
Figura 32: Seleção dos campos desejados
i. Em seguida, os campos selecionados aparecerão na tela, no frame escolhido, conforme ilustra a Figura 33.
Figura 33: Campos da temp-table visíveis no frame escolhido

9.2 DEFINITIONS

Definir os preprocessadores padrão do programa, nome e versão, se haverá abas e os seus títulos, escolher
quais botões de navegação estarão disponíveis e quais opções de manipulação de dados poderão ser utilizadas,
especificar a tabela do banco e o DBO que realizará a comunicação e validação, além de listar os campos da temp-
table empregados na criação da tela.
Figura 34: Definitions na criação de um thinMaintenance
Figura 35: Definitions na criação do thinMaitenance

9.3 PROCEDURES

a. Criar a instância do DBO utilizando a procedure “initializeDBOs”. A procedure já vem como padrão no programa,
mas deve-se alterar a tag “<DBOProgram>” para empregar o DBO desejado, além de chamar os métodos
setConstraint e openQuery. O “setConstraint” realiza as restrições definidas na procedure do DBO, mas neste
caso, ao iniciar o programa, nenhuma restrição é necessária. Caso fosse, deveria inserir os parâmetros para seu
funcionamento. O método “openQuery” recebe como parâmetro de entrada o nome da query definida no DBO.
Figura 36: Procedure "initializeDBOs" para o thinMaintenance
b. Verificar o método “goToRecord”, utilizado pelo botão “Vá Para”. Alterar os parâmetros <c |d|i>, <campoN> e
<Tabela>, que definem o tipo de variável, os nomes dos campos usados e a tabela, cujo nome será o título do
frame “Vá Para”, respectivamente.
Figura 37: Procedure "goToRecord" do thinMaintenance

Figura 38: Procedure "goToRecord" do thinMaintenance


9.4 OUTRAS IMPLEMENTAÇÕES

9.4.1 Botão “Pesquisa”

Dentre os botões padrão da tela, o botão “Pesquisa” precisa chamar um programa no template “thinZoom”.
Algumas tabelas já possuem programas padrão de zoom, mas caso seja necessário criar um, basta seguir os passos
do item 14.

9.4.2 Programa de Pesquisa de Chave Estrangeira

Em muitas situações faz-se necessária a implementação de pesquisa de campos que representam chaves
estrangeiras. O exemplo a seguir ilustra o caso de um campo que precisa receber o valor do código de transportador,
então ao dar um duplo clique sobre o campo, é aberto um programa de zoom, o qual exibe o código e o nome do
transportador. Um fill in também aparece na tela para exibir o nome do transportador.
a. Depois de inserir os campos em tela, selecionar aquele que representa o código do transportador e clicar em
“Edit Code”.
Figura 39: Abrir códigos do campo desejado

b. Haverá apenas uma trigger para o campo, chamada “Leave”, que estará vazia. Então, criar uma nova,
selecionando a opção “New”, “Portable Mouse Events”, “Mouse-Select-DblClick” e “OK”.
Figura 40: Criar nova trigger ao clicar duas vezes sobre o campo
c. Em seguida, incluir o código para abrir o programa zoom, usando o include “include/zoomvar.i” ou
“method/ZoomFields.i”. Os Quadros 1 e 2 a seguir definem os parâmetros empregados nesses includes.
Quadro 1: Parâmetros do include "include/zoomvar.i"
Parâmetro Descrição
prog-zoom Nome do programa de pesquisa a ser executado.
Indica o nome do campo que deve ser retornado pelo programa de pesquisa. Caso seja utilizado para
campo
mais de um campo, deve-se informar a partir do segundo campo, um número sequencial.
Indica o nome do frame no qual está o campo que deve receber o valor retornado pelo programa de
frame pesquisa. Caso seja utilizado para mais de um campo, deve-se informar a partir do segundo campo, um
número sequencial.
Indica a linha de comando, que contém a chamada a um método do programa de pesquisa. A variável wh-
parâmetros
pesquisa contém o handle do programa de pesquisa. Não é um parâmetro obrigatório.

Quadro 2: Parâmetros do include "method/ZoomFields.i"


Parâmetro Descrição
ProgramZoom Nome do programa de pesquisa a ser executado.
Indica o nome do campo da tabela que deve ser retornado pelo programa de pesquisa. “N” indica o
FieldZoomN
número de campos, que pode variar de 1 a 10.
FieldScreenN Define o nome do campo da tela que deve receber o valor retornado pelo programa de pesquisa.
Exibe o nome do frame no qual está o campo que deve receber o valor retornado pelo programa de
FrameN
pesquisa.
Representa a variável handle que contém o handle do campo que deve receber o valor retornado pelo
FieldHandleN programa de pesquisa. Não deve ser utilizado com os parâmetros ”FieldZoomN”, ”FieldScreenN” e
”FrameN”.
Indica a linha de comando que contém a chamada a um método do programa de pesquisa. A variável
RunMethod
hProgramZoom contém o handle do programa de pesquisa.
EnableImplant Os valores YES e NO indicam se o botão “Implantar” será habilitado ou não.

d. Se apenas um dos campos da tela for usado no include, deve-se preencher o outro campo através da trigger
“Leave”, inserir o código que busca na tabela desejada a descrição que será inserida no fill in, com o nome do
transportador de acordo com o código escolhido, neste exemplo.
Figura 41: Código para preencher o fill in da tela com o nome do transportador

e. Para que o usuário saiba que pode escolher um código ao clicar duas vezes sobre o campo, é aconselhável
alterar o cursor para a imagem de uma lupa quando este encontrar-se sobre o campo. O código é adicionado à
sessão “Main Block” do programa, como ilustra a Figura 42.
Figura 42: Código para alterar o cursor quando posicionado sobre o campo

10. THIN MAINTENANCE NO NAVIGATION

Template usado para exibir e/ou alterar dados de um único registro, seja este passado como parâmetro ou
não e permite a manutenção de um registro de uma tabela filho associado à tabela pai. O exemplo a seguir possibilita
a alteração de ordens da tabela filha “Order” de acordo com o consumidor da tabela pai “Customer”.

10.1 CRIAÇÃO DA TELA

a. Abrir o AppBuilder, selecionar novo e escolher a opção “thinMaintenanceNoNavigation”.


Figura 43: Seleção do template thinMaintenanceNoNavigation no AppBuilder

b. Perceber que na tela aberta existem três frames: fPage0, fPage1 e fPage2 e o fPage0 é o pai dos outros dois.
c. Criar as temp-tables que serão utilizadas neste programa, através do menu “Tools”, opção “Procedure Settings”.
Na tela que será aberta, clicar sobre o botão “Temp-Table Definitions”.
Figura 44: Botão "Temp-Table Definitions" na tela "Procedure Settings"

d. Clicar em “Add” e, na tela “Table Selector”, selecionar o banco de dados e tabela desejados.
Figura 45: Adicionar campos através do Temp-Table Maintenance

e. Depois de selecionada a tabela, o campo “Table Name” será exatamente igual ao nome da tabela, por isso deve-
se adicionar “tt” antes do nome e também criar um campo adicional chamado “r-rowid” como rowid e checar a
sintaxe.
Figura 46: Tela temp-table Maintenance
f. Realizar os mesmos passos para a temp-table “ttOrder”.
g. Após criadas as temp-tables, pode-se inserir seus campos em tela, clicando em “DB Fields” no Palette do
AppBuilder e em seguida, sobre o frame desejado. No exemplo, os campos chave de número e nome do
consumidor e número da ordem serão visualizados no frame fPage0. O frame fPage2 não será utilizado por isso
pode ser excluído. Os campos da tabela Order que poderão ser alterados são incluídos no frame fPage1.
Figura 47: DB Fields no Palette do AppBuilder

h. Dentre os bancos de dados disponíveis, selecionar a última opção, que é “Temp-Tables” e escolher a tabela
temporária.
Figura 48: Seleção de banco de dados e tabela

i. Será aberta uma tela com todos os campos da tabela selecionada. Basta clicar nos campos almejados, escolher
a opção “Add”, observar que eles aparecem na coluna da direita “Selected Fields” e então selecionar “OK”.
Figura 49: Seleção dos campos desejados
j. Em seguida, os campos selecionados aparecerão na tela, nos frames escolhidos, conforme ilustra a Figura 50.
Figura 50: Campos da temp-table visíveis no frame escolhido

10.2 DEFINITIONS

Definir os preprocessadores padrão do programa, nome e versão, se haverá abas e os seus títulos, escolher
a tabela cujos registros podem ser alterados e a tabela pai, especificar os campos exibidos na tela e os parâmetros
utilizados na manutenção da tabela filho.
Figura 51: Definitions na criação de um thinMaintenanceNoNavigation
Figura 52: Definitions na criação do thinMaintenanceNoNavigation

10.3 PROCEDURES

a. Alterar o método “saveParentFields”, que salva os campos da tabela filho com base nos campos da tabela pai.
Neste exemplo, o campo do número do consumidor da tabela Order recebe o mesmo número do consumidor da
tabela Customer.
Figura 53: Procedure "saveParentFields" para o thinMaintenanceNoNavigation

b. Para que não seja possível alterar os campos chave na tela, criar uma procedure chamada “afterEnableFields”,
desabilitando os campos desejados da tabela temporária. A Figura 54 a seguir mostra o código utilizado para
esta finalidade, enquanto a Figura 55 exemplifica o uso de um thinMaintenanceNoNavigation na manutenção de
dados de uma tabela filho em um thinMasterDetail.
Figura 54: Procedure "afterEnableFields" no thinMaintenanceNoNavigation

Figura 55: Template thinMaintenanceNoNavigation utilizado juntamente com thinMasterDetail

10.4 OUTRAS IMPLEMENTAÇÕES

10.4.1 Programa de Pesquisa de Chave Estrangeira

Em muitas situações faz-se necessária a implementação de pesquisa de campos que representam chaves
estrangeiras. O exemplo de um campo que recebe o valor do código de transportador e precisa retornar o nome, ao
dar um duplo clique sobre o campo, foi descrito no item 11.4.2 anterior.

11. THIN MASTERDETAIL

Template usado para exibir e/ou alterar dados de uma ou mais tabelas filho, de acordo com uma tabela pai.
O exemplo a seguir apresenta as ordens da tabela filho “Order” de acordo com o consumidor da tabela pai
“Customer”.

11.1 CRIAÇÃO DA TELA

a. Abrir o AppBuilder, selecionar novo e escolher a opção “thinMasterDetail”.


Figura 56: Seleção do template thinMasterDetail no AppBuilder

b. Perceber que na tela aberta existem três frames: fPage0, fPage1 e fPage2. O fPage0 é o pai dos outros, os quais
contém um browse cada um.
c. Criar as temp-tables que serão utilizadas neste programa, através do menu “Tools”, opção “Procedure Settings”.
Na tela que será aberta, clicar sobre o botão “Temp-Table Definitions”.
Figura 57: Botão "Temp-Table Definitions" na tela "Procedure Settings"
d. Clicar em “Add” e, na tela “Table Selector”, selecionar o banco de dados e tabela desejados.
Figura 58: Adicionar campos através do Temp-Table Maintenance

e. Depois de selecionada a tabela, o campo “Table Name” será exatamente igual ao nome da tabela, por isso deve-
se adicionar “tt” antes do nome e também criar um campo adicional chamado “r-rowid” como rowid e checar a
sintaxe.
Figura 59: Tela temp-table Maintenance

f. Realizar os mesmos passos para a temp-table “ttOrder”.


g. Após criadas as temp-tables, pode-se inserir seus campos em tela, clicando em “DB Fields” no Palette do
AppBuilder e em seguida, sobre o frame desejado.
Figura 60: DB Fields no Palette do AppBuilder

h. Dentre os bancos de dados disponíveis, selecionar a última opção, que é “Temp-Tables” e escolher a tabela
temporária.
Figura 61: Seleção de banco de dados e tabela

i. Será aberta uma tela com todos os campos da tabela selecionada. Basta clicar nos campos almejados, escolher
a opção “Add”, observar que eles aparecem na coluna da direita “Selected Fields” e então selecionar “OK”.
Figura 62: Seleção dos campos desejados

j. Em seguida, os campos selecionados aparecerão na tela, no frame escolhido, conforme ilustra a Figura 63.
Figura 63: Campos da temp-table visíveis no frame escolhido

k. Em cada um dos frames fPage1 e fPage2 existe um browse, utilizado para mostrar os dados de acordo com o
registro escolhido da tabela pai. Neste exemplo, apenas um browse será utilizado, então deve-se excluir o frame
fPage2.
l. Dar duplo clique sobre o browse “brSon1” no frame “fPage1” e selecionar a opção “Query”.
Figura 64: Botão “Query” na Property Sheet do browse
m. Será aberta uma tela chamada “Query Builder”. Em “Database”, escolher a opção “Temp-Tables’, selecionar a
tabela temporária desejada e clicar em “Add” a fim de movê-la para o quadro da direita. A tag “Indexed-
Reposition” é marcada automaticamente, mas cabe ao desenvolvedor analisar seu impacto na navegação no
browse.
Figura 65: Seleção da temp-table desejada no Query Builder

n. Em seguida, definir os campos que serão utilizados ao clicar em “Fields” na Property Sheet do browse.
Figura 66: Botão “Fields” na Property Sheet do browse
o. Na tela “Column Editor”, clicar em “Add” e, em seguida, selecionar os campos que aparecerão no browse e
adicioná-los à coluna da direita, na tela “Multi-Field Selector”.
Figura 67: Adicionar campos ao browse através do Column Editor

11.2 DEFINITIONS

Definir os preprocessadores padrão do programa, nome e versão, se haverá abas e os seus títulos, escolher
quais botões de navegação estarão disponíveis e quais opções de manipulação de dados poderão ser utilizadas,
tanto para tabela pai quanto para filho, especificar a tabela do banco e o DBO que realizará a comunicação e
validação, além de listar os campos da temp-table empregados na criação da tela.
Figura 68: Definitions na criação de um thinMasterDetail
Figura 69: Definitions na criação do thinMasterDetail

Neste código existiam também os preprocessadores da tabela filho 2, mas foram deletados nas figuras
anteriores pois o frame fPage2 não é utilizado neste exemplo. Além disso, foi adicionado ao código padrão o
preprocessador “NumRowsReturned”, o qual define o número de registros que devem ser retornados no browse.

11.3 PROCEDURES

a. Criar a instância do DBO utilizando a procedure “initializeDBOs”. A procedure já vem como padrão no programa,
mas deve-se alterar a tag “<DBOProgram>” para empregar os DBOs desejados, para as tabelas pai e filho, além
de chamar os métodos setConstraint e openQuery. O “setConstraint” da tabela pai realiza a restrição de acordo
com o número do consumidor, recebendo como parâmetros de entrada a faixa de valores do filtro do DBO.
Figura 70: Procedure "initializeDBOs" para o thinMaintenance
c. O método “openQueriesSon” realiza a ligação entre o DBO da tabela pai e o DBO das tabelas filho. O parâmetro
“Parent” deve corresponder à descrição utilizada no método “linkTo<Parent>” do DBO da tabela filho.
Figura 71: Procedure "openQueriesSon" no thinMasterDetail

d. Verificar o método “goToRecord”, utilizado pelo botão “Vá Para”. Alterar os parâmetros <c |d|i>, <campoN> e
<Tabela>, que definem o tipo de variável, os nomes dos campos usados e a tabela, cujo nome será o título do
frame “Vá Para”, respectivamente.
Figura 72: Procedure "goToRecord" do thinMasterDetail
Figura 73: Procedure "goToRecord" do thinMasterDetail

11.4 OUTRAS IMPLEMENTAÇÕES

11.4.1 Botão “Pesquisa”

Dentre os botões padrão da tela, o botão “Pesquisa” precisa chamar um programa no template “thinZoom”.
Algumas tabelas já possuem programas padrão de zoom, mas caso seja necessário criar um, basta seguir os passos
do item 14.

11.4.2 Programa de Pesquisa de Chave Estrangeira

Em muitas situações faz-se necessária a implementação de pesquisa de campos que representam chaves
estrangeiras. O exemplo de um campo que recebe o valor do código de transportador e precisa retornar o nome, ao
dar um duplo clique sobre o campo, foi descrito no item 11.4.2 anterior.

11.4.3 Programa de Manutenção do Filho

Descrito no item 12 anterior, sobre o thinMaintenanceNoNavigation.

12. THIN ZOOM

É um template utilizado principalmente para pesquisa de chaves estrangeiras ou para reposicionamento.

12.1 CRIAÇÃO DA TELA

a. Abrir o AppBuilder, selecionar novo e escolher a opção “thinZoom”.


Figura 74: Seleção do template thinZoom no AppBuilder

c. Perceber que na tela aberta existem três frames: fPage0, fPage1 e fPage2. O fPage0 é o pai dos outros, os quais
contém um browse cada um. O frame chamado “fPage2” é o que se encontra no topo.
d. Criar as temp-tables que serão utilizadas neste programa, através do menu “Tools”, opção “Procedure Settings”.
Na tela que será aberta, clicar sobre o botão “Temp-Table Definitions”.
Figura 75: Botão "Temp-Table Definitions" na tela "Procedure Settings"

e. Clicar em “Add” e, na tela “Table Selector”, selecionar o banco de dados e tabela desejados.
Figura 76: Adicionar campos através do Temp-Table Maintenance

f. Depois de selecionada a tabela, o campo “Table Name” será exatamente igual ao nome da tabela, por isso deve-
se adicionar “tt” antes do nome e também criar um campo adicional chamado “r-rowid” como rowid e checar a
sintaxe.
Figura 77: Tela temp-table Maintenance

g. Como serão utilizados dois browses neste programa, repetir os passos anteriores para criar a temp-table
ttCustomer2.
h. As faixas para entrada de valores com as quais o usuário define os registros a serem exibidos nos browses será
feita de forma automática, através do preenchimento dos preprocessadores “Range”, “FieldsRangePageN” e
“FieldsAnyKeyPageN”, descritos no item 14.2 a seguir.
i. Em cada um dos frames fPage1 e fPage2 existe um browse, utilizado para mostrar os dados de acordo com o
filtro definido pelo usuário. No browse “brTable1” do frame “fPage1”, será realizado o filtro de acordo com o
campo “CustNum” da temp-table “ttCustomer1”. Dar duplo clique sobre o browse e selecionar a opção “Query”.
Figura 78: Botão “Query” na Property Sheet do browse

j. Será aberta uma tela chamada “Query Builder”. Em “Database”, escolher a opção “Temp-Tables”, selecionar a
tabela temporária desejada e clicar em “Add” a fim de movê-la para o quadro da direita.
Figura 79: Seleção da temp-table desejada no Query Builder
k. Em seguida, definir os campos que serão utilizados ao clicar em “Fields” na Property Sheet do browse.
Figura 80: Botão “Fields” na Property Sheet do browse

l. Na tela “Column Editor”, clicar em “Add” e, em seguida, selecionar os campos que aparecerão no browse e
adicioná-los à coluna da direita, na tela “Multi-Field Selector”.
Figura 81: Adicionar campos ao browse através do Column Editor

m. Fazer o mesmo para o browse “brTable2” do frame “fPage2”.

12.2 DEFINITIONS

Definir os preprocessadores padrão do programa, nome e versão, se haverá abas e os seus títulos,
especificar a tabela do banco e o DBO que realizará a comunicação e validação, além de listar os campos da temp-
table empregados na criação da tela. O preprocessador “FieldsRangePageN” define o nome dos campos que são
utilizados para a criação automática de faixas da página N, separados por vírgula e sem limitação de número de
campos. A letra N indica o número da página, podendo variar de 1 até 8. Neste caso, é necessário informar o nome
da base de dados + nome da tabela + nome do campo. Por sua vez, “FieldsAnyKeyPageN” indicará quais campos
conterão o evento “ANYKEY”.
Figura 82: Definitions na criação de um thinZoom

Figura 83: Definitions na criação de um thinZoom


12.3 PROCEDURES

a. Criar a instância do DBO utilizando a procedure “initializeDBOs”. A procedure já vem como padrão no programa,
mas deve-se alterar a tag “<DBOProgram>” para empregar o DBO desejado, além de chamar o método
setConstraint, que realiza as restrições definidas na procedure do DBO. Para cada frame do thinZoom é chamado
um setConstraint, que tem como parâmetros de entrada os valores iniciais e finais do filtro de número e nome do
consumidor, respectivamente.
Figura 84: Procedure "initializeDBOs" para o thinZoom

b. Informar os parâmetros no método “openQueries” de acordo com o método “openQuery” oriundo do DBO e da
página do thinZoom.
Figura 85: Procedure "openQueries" para o thinZoom
c. Alterar os parâmetros na procedure “setConstraints”, de acordo com o número da página no thinZoom. Para o
frame “fPage1”, o campo “CustNum” é utilizado como filtro, então como parâmetro de entrada para a função deve
receber o número da página e a sequência do campo utilizado no preprocessador “FieldsRangePageN” em
“Definitions”.
d. Por isso, o primeiro parâmetro de entrada nas funções “setConstraintCustNum” e “setConstraintName” é 1 e 2,
respectivamente, pois representa o número da página do thinZoom. Por sua vez, o segundo parâmetro de
entrada é 1 nos dois casos, pois tanto o preprocessador “FieldsRangePage1” quando o “FieldsRangePage2”
possuem apenas um campo.
e. Outra diferença nos métodos é o nome da função utilizada, de acordo com o tipo de variável empregada na
procedure. No primeiro caso, o número de cadastro do consumidor é inteiro (Int), enquanto no segundo, o nome
do consumidor é caractere (Char). Existem duas funções pois uma designa a faixa inicial (IniRange) e outra, a
faixa final (EndRange) para o filtro.
Figura 86: Procedure "setConstraints" para o thinZoom

f. Por fim, utilizar o método “returnFieldsPageN” para retornar os valores dos campos do registro selecionado pelo
usuário.
Figura 87: Procedure "returnFieldsPage" para o thinZoom

g. O botão “Implantar” tem como finalidade realizar a inclusão de novos registros na tabela. Essa função é pouco
utilizada, por isso seu código é geralmente comentado, no botão de cada frame.
Figura 88: Código comentado no botão "Implantar" no frame "fPage1"

13. THIN REPORT

É um template utilizado principalmente para geração de relatórios e modelos de importação e exportação.

13.1 CRIAÇÃO DA TELA

a. Abrir o AppBuilder, selecionar novo e escolher a opção “thinReport”.


Figura 89: Seleção do template thinZoom no AppBuilder

b. Perceber que na tela aberta existem oito frames: fPage0 a fPage7. O fPage0 é o pai dos outros, enquanto o
fPage6 é o que se encontra no topo em sua edição no AppBuilder. O Quadro 3 a seguir mostra a nomenclatura
e objetivo de cada frame.
Quadro 3: Nomenclatura e objetivo de cada frame do thinReport

Frames do thinReport
fPage0 - Frame pai onde os outros frames são inseridos
fPage1 Página de Layout Editar layout de programas de importação/exportação
fPage2 Página de Seleção Restringir dados (faixas)
fPage3 Página de Classificação Definir classificação de relatório ou dados, com utilização de radio sets
Especificar parâmetros de representação do relatório e arquivo de
fPage4 Página de Parâmetros
importação ou exportação
fPage5 Página de Digitação Restringir dados sem utilizar faixas
fPage6 Página de Impressão Configurar modo de impressão do relatório
fPage7 Página de Log Configurar modo de impressão dos arquivos de importação/exportação

c. Nos itens a seguir, são exibidos os passos para a construção dos frames de um thinReport para elaboração de
um relatório. Apenas os frames “Seleção” (fPage2), “Classificação” (fPage3) e “Impressão” (fPage6) são
utilizados.
d. Selecionar o primeiro frame desejado, neste caso o fPage2 através da opção “List Objects” no menu do
AppBuilder, clicando em seguida em “Move to Top”.
Figura 90: Selecionando o frame desejado

e. No frame de seleção já existem dois fill-ins para especificação de uma faixa. É possível criar outros, renomeá-
los de acordo com os campos de restrição e definir seus valores iniciais.
Figura 91: Adicionar campos através do Temp-Table Maintenance

f. Por sua vez, no frame fPage3, já consta um radio set para classificação dos dados do relatório. É possível alterá-
lo, mudando sua orientação (vertical ou horizontal), nomenclatura e a descrição e número de suas opções,
conforme ilustra a Figura 92 a seguir.
Figura 92: Tela temp-table Maintenance

g. No frame fPage6, neste exemplo foi apenas comentado o código do botão “btModelRtf” pois o relatório não será
gerado no formato RTF.

13.2 DEFINITIONS

a. Definir os preprocessadores padrão do programa, nome e versão, se haverá abas e qual será a aba inicial.
Deletar dos “FolderLabels” o nome das páginas que não serão utilizadas e mudar para “NO” o valor do
preprocessador referente a essas páginas, além de definir se haverá a opção de relatório em formato RTF.
Figura 93: Definitions na criação de um thinReport
b. Excluir os valores dos preprocessadores “PageNWidgets”, “PageNText” e “PageNField” dos frames
desnecessários e inserir aqueles adicionados ou renomeados nas páginas empregadas, além de deletar o que
diz respeito a RTF.
Figura 94: Definitions na criação de um thinReport

c. Em “Parameter Definitions”, na criação da tabela temporária “tt-param” pode-se deletar o campo “l-habilitaRtf” e
adicionar os campos de seleção e classificação utilizados nas páginas fPage 2 e fPage3, respectivamente.
Figura 95: Definitions na criação de um thinReport
d. Criar uma tabela temporária para armazenar os dados que serão exibidos no relatório.
Figura 96: Definitions na criação de um thinReport

13.3 PROCEDURES

a. A procedure “afterInitializeInterface” traz o código para inicializar os componentes do RTF. Como neste exemplo
essa implementação não é utilizada, o código foi comentado.
Figura 97: Procedure "afterInitializeInterface" para o thinReport

b. Na procedure “piExecute”, pode-se deletar a parte do código que tem relação com as páginas que não são
utilizadas. Dessa forma, o código cria a tabela temporária com os parâmetros que devem ser passados ao
programa RP.p, além de chamar os includes para construir o relatório, conforme ilustra a Figura 98 a seguir.
Figura 98: Procedure "piExecute" para o thinReport

c. O programa de execução do relatório (RP.p) é uma procedure sem qualquer tipo de interface com o usuário,
exceto pela própria impressão/visualização do relatório e pela caixa de acompanhamento de execução (ut-
acomp/ut-perc) quando necessário. Da mesma forma, nenhum programa chamado a partir de um rp.p deve
possuir qualquer tipo de interface. Todas as validações ou informações com necessidade de intervenção do
usuário devem ser tratadas pelo programa “.w” que o chama.

13.4 OUTRAS IMPLEMENTAÇÕES

13.4.1 Programa de Pesquisa de Chave Estrangeira

Em muitas situações faz-se necessária a implementação de pesquisa de campos que representam chaves
estrangeiras. O exemplo de um campo que recebe o valor do código de transportador e precisa retornar o nome, ao
dar um duplo clique sobre o campo, foi descrito no item 11.4.12 anterior.
"Este documento somente é válido para o SGM, se possuir o carimbo de cópia controlada em
todas as páginas”

___________________________________________________
Aprovado por

S-ar putea să vă placă și