Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Programao
EMS 2.0
Novembro/2007
ndice
CAPTULO 1
Estrutura de Diretrios......................................................7
Datasul-EMS 2.0...........................................................................................7
Datasul-HR 1.0...........................................................................................12
CAPTULO 3
Nomenclatura....................................................................15
ii
Includes padres.....................................................................................26
Widgets.......................................................................................................27
Variveis.....................................................................................................27
Datasul-EMS 2.00...................................................................................27
Datasul-HR 1.00.....................................................................................27
Outros componentes da linguagem Progress...............................................28
Siglas de pases...........................................................................................28
Nomenclatura para Caixas de dilogos em programas de Zoom e
SmartBrowser.............................................................................................29
Adapters......................................................................................................29
CAPTULO 4
Layout de Telas.................................................................31
Estilos................................................................................35
Cadastro Simples........................................................................................35
Cadastro Complexo.....................................................................................37
Quando utilizar o Cadastro Complexo....................................................37
Cadastro Simples - Atualiza........................................................................38
Cadastro Complexo - Atualiza....................................................................39
Pai x Filhos - Atualiza Filho.......................................................................40
Quando utilizar Pai x Filhos - Atualiza Filho..........................................40
Manuteno de Filhos.................................................................................41
ndice
iii
UT-FIELD.I................................................................................................63
UT-RTLBL.I...............................................................................................64
UT-RUN.I...................................................................................................64
UT-MSGS.P................................................................................................69
IND01-10.I, IND11-50.I E IND51500.I......................................................70
UT-TABLE.I...............................................................................................71
UT-LITER.I................................................................................................72
UT-LIMIT.P................................................................................................73
UT-GLOB.I.................................................................................................73
I-FREEAC.I................................................................................................74
UT-DIR.P....................................................................................................74
BTB917ZX.P..............................................................................................75
BTB917ZY.P..............................................................................................76
BTB917ZZ.P..............................................................................................77
UT-VRBIN.P..............................................................................................78
UT-FINFO.P...............................................................................................79
UT-CMDLN.P............................................................................................80
UT-OSVER.P..............................................................................................80
I-COUNTDS.I............................................................................................81
UT-WIN.I....................................................................................................82
UT-TRACE.P..............................................................................................85
UT-LOCK.I.................................................................................................86
UT-ZIP.P.....................................................................................................87
UT-GENXML.P..........................................................................................89
UT-VALIDA-FACELIFT.P.........................................................................89
CAPTULO 7
Traduo........................................................................................................ 90
TRADUO MONO-IDIOMAS...............................................................90
Traduo de variveis com view-as nas telas..............................................90
Espao Extra para traduo em relatrios...................................................95
TRADUO MULTI-IDIOMAS...............................................................96
Nomenclatura Padro e Caractersticas do modelo.....................................96
Pontos de traduo......................................................................................98
Contextos de traduo.................................................................................98
Itens de Traduo........................................................................................99
Sequncia de busca...................................................................................101
UT-TRCAMPOS.P...................................................................................102
UT-TRFRRP.P..........................................................................................102
UT-LSTIT.P..............................................................................................103
UT-LITER.P.............................................................................................104
UT-MSGS.P..............................................................................................105
UT-FIELD.P.............................................................................................106
UT-TABLE.P............................................................................................107
UT-LTMNU.P...........................................................................................107
OBJETOS PROGRESS NO-INDEXADOS...........................................109
Traduo de variveis com view-as nas telas............................................109
Espao Extra para traduo em relatrios.................................................113
PRTICAS PARA IMPLEMENTAO MULTI-IDIOMAS..................114
Caso Prtico Diferenas LIST-ITEMS para LIST-ITEM-PAIRS..............114
Caso converso de List-items para LIST-ITEM-PAIRS............................117
Traduo automtica em frame de relatrio..............................................118
Traduzir valor armazenado em uma varivel............................................119
Tratando lista enorme de traduo em includes.........................................120
CAPTULO 8
Construo de Programas utilizando os Estilos e suas Tcnicas.........125
ndice
Validaes.......................................................................224
Validaes de Tela.....................................................................................224
Mensagens......................................................................227
Programas Reutilizveis................................................233
Procedures Internas...................................................................................233
CAPTULO 12
Ferramentas....................................................................235
Application Compiler................................................................................235
Selecionar arquivos a serem compilados...............................................236
Eliminar e Modificar a lista de arquivos a serem compilados...............237
Opes de Compilao.........................................................................237
Iniciar Compilao................................................................................238
Roundtable................................................................................................239
CAPTULO 13
APIs................................................................................243
ndice
vii
UTAPI019.P..............................................................................................265
UTAPI027.P..............................................................................................266
UTAPI028.P..............................................................................................266
UTAPI029.P..............................................................................................266
APAPI009.P..............................................................................................267
Parmetros de Entrada..........................................................................267
Parmetros de Sada..............................................................................268
Execuo...............................................................................................268
CAPTULO 14
Portabilidade de RCODES.............................................270
Tcnicas..........................................................................273
ndice
ix
Dicas de Desenvolvimento............................................398
Definio
CAPTULO 1
trocar os campos do tipo narrativa (exemplo: "x(76)" x10) nas tabelas por
campos view-as editor e formato "X(2000)";
PARA
Emitente.identific
Emitente.identific
"C"liente
"F"ornecedor
"A"mbos
a primeira letra de cada palavra, que compe o label ou col-label, deve ser
maiscula, as demais minsculas;
BANCO
AD
Administrativo
BH
Bancos Histricos
CL
Coletor de Dados
DI
Distribuio
ED
EDI
IN
Industrial
IV
Investimentos
MP
MultiPlanta
PE
Ponto Eletrnico
RH
Recursos Humanos
UN
Universal
alterar o campo "CEP" nico para formato x(12) com parmetro global
formato-cep;
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
3
Campos Livres
Em todas as tabelas dos bancos de dados do produto Datasul-EMS 2.0,
existem no mnimo 10 campos livres, sendo 2 de cada tipo de dado, conforme
tabela abaixo:
Campo Livre
char-1
Tipo de Dado
Caracter
char-2
data-1
Data
data-2
dec-1
Decimal
dec-2
int-1
Inteiro
int-2
log-1
Lgico
log-2
Os antigos campos livres so para uso do cliente, como por exemplo, u-char-1,
u-livre-1, no so mais implementados nas tabelas.
Validaes
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
5
Definio
CAPTULO 2
Estrutura de Diretrios
Este captulo relaciona e descreve os diretrios referentes ao Datasul-EMS 2.0
e o Datasul-HR 1.0.
Datasul-EMS 2.0
Diretrios
Contedo
\ADBRW
\ADGO
\ADINC
\ADQRY
\ADVWR
\ADZOOM\
\AEP
\APP
\BCP
\BHP
\BSP
\BTB
\CBP
\CCP
\CDP
\CEP
\CFP
\CLBRW
\CLGO
\CLINC
\CLQRY
\CLVWR
\CLZOOM
\CPP
\CQP
\CRP
\CSP
\DATABASE
\DMAD
\DMCL
\DMDI
\DMIN
\DMIV
\DMMP
\DMPE
\DMRH
\DMUN
\LDAD
\LDCL
\LDDI
\LDIN
\LDIV
\LDMP
\LDPE
\LDRH
\LDUN
\TGAD
\TGCL
\TAP
\TCP
\TDP
\TFP
\TWP
\TAP
\TCP
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
9
\TGDI
\TGIN
\TGIV
\TGPE
\TGRH
\TGUN
\TDP
\TFP
\TWP
\TAP
\TCP
\TDP
\TFP
\TWP
\TAP
\TCP
\TDP
\TFP
\TWP
\TAP
\TCP
\TDP
\TFP
\TWP
\TAP
\TCP
\TDP
\TFP
\TWP
\TAP
\TCP
\TDP
\TFP
\TWP
\TAP
\TCP
\TDP
\TFP
\TWP
\DIBRW
\DIGO
\DIINC
\DIQRY
\DIVWR
\DIZOOM
\DOC
Mdulo Documentao
\DOCAPI
Documentao de APIs
\DOCHLP
\DOCRTF
\DPP
\ENP
\FCP
\FPP
\FRP
\FTP
\GEP
\GRP
\IMAGE
Imagens
\IMGDIS
\IMGFIN
\IMGHUR
\IMGMAN
\IMGMAT
\IMGTEC
\INBRW
\INCLUDE
Includes Padres
\INGO
\ININC
\INP
\INQRY
\INTERFAC
\INVWR
\INZOOM
\IVBRW
\IVGO
\IVINC
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
11
Investimentos
\IVQRY
\IVVWR
\IVZOOM
\LAYOUT
Layouts de Importao
\MASTERS
Masters do SmartObjects
\MEN
Mdulo Menu
\MIP
\MPBRW
\MPGO
\MPINC
\MPP
\MPQRY
\MPVWR
\MPZOOM
\OFP
\PANEL
\PCP
\PDP
\PEBRW
\PEGO
\PEINC
\PEP
\PEQRY
\PEVWR
\PEZOOM
\PIP
\PLP
\PMP
\PTP
\PVP
\QOP
\REP
\RHBRW
\RHGO
\RHINC
\RHQRY
\RHVWR
\RHZOOM
\SCRIPTS
\SEC
Mdulo Segurana
\SPOOL
\SPP
\SRC
\SUPPORT
\UNBRW
\UNGO
\UNINC
\UNQRY
\UNVWR
\UNZOOM
\UTB
Mdulo Universal
\UTP
Programas Utilitrios
\VARINC
\LOCAL
Prefixo do Pas
\DATABASE
Datasul-HR 1.0
Diretrios
\DATABASE
Contedo
\INPM
\INPY
\INTM
\INUN
\TGPM
\TCP
\TDP
\TFP
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
13
\TGPY
\TGTM
\TGUN
\TWP
\TAP
\TCP
\TDP
\TFP
\TWP
\TAP
\TCP
\TDP
\TFP
\TWP
\TAP
\TCP
\TDP
\TFP
\TWP
\DOCAPI
Documentao de APIs
\DOCHLP
\DOCRTF
\IMAGE
Imagens
\IMGHUR
\INCLUDE
Includes Padres
\INTERFAC
\LAYOUT
Layouts de importao
\MASTERS
Masters do SmartObjects
\MEN
Mdulo Menu
\OBJECT
\SOPM
\SOPY
\BRW
DIALOG
\QRY
\GO
\VWR
\ZOOM
\BRW
DIALOG
\QRY
\SOTM
\SOUN
\GO
\VWR
\ZOOM
\BRW
DIALOG
\QRY
\GO
\VWR
\ZOOM
\BRW
DIALOG
\QRY
\GO
\VWR
\ZOOM
\PANEL
\PGHUR
*\PRGTEC
\BSP
\CAP
\DSP
\FPP
\FRP
\PEP
\BTB
Mdulo Bsico
\DOC
Mdulo Documentao
\MEN
Mdulo Menu
\SEC
Mdulo Segurana
\SCRIPTS
\SPOOL
\SRC
\SUPPORT
\UTB
Mdulo Universal
\UTP
Programas Utilitrios
\VARINC
* Diretrios em implementao
Definio
15
CAPTULO 3
Nomenclatura
O objetivo deste captulo descrever as regras de nomenclatura para os
objetos dentro do Datasul-EMS 2.00 e Datasul-HR 1.00.
Definio
16
Definio
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
17
Definio
tt
= td trigger de delete.
ddddd = ad098 dump-name da tabela do produto padro.
Observao O DWB do EMS5 usa o underline como separador entre cada uma das
abreviaturas e o DWB do EMS2 usa o hfen.
Definio
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
19
Descrio
Sigla
Nome lgico
Administrativo
AD
MGADM
Coletor de Dados
CL
MGCLD
Distribuio
DI
MGDIS
Industrial
IN
MGIND
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
21
Investimentos
IV
MGINV
MultiPlanta
MP
MGMP
Ponto Eletrnico
PE
MGPE
Recursos Humanos
RH
MGRH
Universal
UN
MGUNI
Sigla
Nome lgico
PM
DTHRPMG
PY
DTHRPYC
TA
DTHRTMA
Universal (Universal)
UN
MGUNI
Sigla
Aplicaes e Emprstimos
AE
Benefcios Sociais
BS
Caixas e Bancos
CB
Coleta de Dados
BC
Coletor de Dados
CL
Compras
CC
Configurador Produto
CF
Contabilidade
CT
Contas a Pagar
AP
Contas a Receber
CR
Controle Contratos
CN
Controle de Estoque
CE
Controle de Produo
CP
Controle de Qualidade
CQ
Cotao de Vendas
QO
Custos
CS
Desenvolvimento Produto
DP
EDI
ED
Engenharia
EN
FASB/CMI
FC
Faturamento
FT
Frias Rescises
FR
Folha de Pagamento
FP
Gerencial
GE
Investimentos
IN
Manuteno Industrial
MI
MultiPlanta
MP
Obrigaes Fiscais
OF
Patrimnio
PT
Pedidos
PD
Planejamento
PL
Planejamento Capacidade
PC
PM
Ponto Eletrnico
PE
Recebimento
RE
Recebimento Internacional
RI
Sigla
Administrao de Treinamento
AT
Benefcios
BS
Cargos e Salrios
CA
Desenvolvimento de Pessoal
DS
Frias e Rescises
FR
Folha de Pagamento
FP
Ponto Eletrnico
PE
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
23
Tipos de Atributos
Tipos de Atributos so classificadores para os tipos de informaes que so
gravadas. Segue abaixo, uma lista de todos os tipos de atributos, descries e
tipos de dados.
Tipo
Descrio
Tipo de Dado
Formato Default
cb1
Integer
>>>>>>>9
cb2
Integer
>>>>>>>>>>>9
cb3
Character
X(20)
cdd
Cdigo - Decimal
Decimal
>>>,>>>,>>9
cdn
Cdigo - Numrico
Integer
>>>,>>9
cod
Cdigo
Character
X(8)
dat
Data
Date
99/99/9999
des
Descrio
Character
X(40)
dsl
Descrio - Longa
Character
X(15000)
hra
Hora
Character
99:99:99
idi
Indicador - Inteiro
Integer
Img
Imagem
Character
X(08)
log
Lgico
Logical
Sim/No
mmp
Memory pointer
MenPtr
X(8)
nom
Nome
Character
X(30)
num
Nmero
Integer
>>>>,>>9
qtd
Quantidade
Decimal
->>>>,>>9.9999
qti
Quantidade - Inteira
Integer
>>>,>>9
raw
Raw
Character
X(15000)
rec
Recid
Recid
>>>>>>9
row
Rowid
Rowid
X(20)
som
Som
Character
X(40)
val
Valor
Decimal
->>,>>>,>>>,>>9.99
vid
Vdeo
Character
X(40)
vli
Valor-inteiro
Integer
>>>,>>9
wgh
Widget-Handle
Widget-Handle
>>>>>>9
Dump-name de tabelas
O Dump-name de uma tabela, tem o formato "xx999", onde "xx" a sigla do
banco de dados do produto, no qual, a tabela armazenada, e 999 um
nmero seqencial nico dentro do banco de dados, Assim, a tabela "item" que
est no banco de dados industrial tem o dump-name "in172". importante
utilizar letras minsculas para a sigla da base de dados.
No existe processo automtico para determinar o nmero seqencial para a
tabela no banco de dados. Basta acrescentar uma unidade ao ltimo nmero j
utilizado.
Nomenclatura
Create da tabela
tcxx999.p1
database/tgint/tcp/tcin172.p
Delete da tabela
tdxx999.p
database/tgin/tdp/tdin172.p
Find da tabela
tfxx999.p
database/tgin/tfin172.p
Write da tabela
twxx999.p
Assign de campo
TA999999.p
database/tgin/twin172.p
2
database/tgin/tap/ta002242.p
Programas
A nomenclatura de um programa determinada em funo do seu tipo/estilo, e
a sua extenso .w, se possuir interface e .p, quando no. Entretanto dois
programas, mesmo se tiverem extenses diferentes, no podem ter o mesmo
nome de arquivo, porque na gerao do executvel .r, ambos tem o mesmo
nome do arquivo com extenso .r.
Todos os arquivos - sejam programas com extenso .p, includes com
extenso .i*, imagens, nomes de diretrios, etc., devero obedecer a regra
imposta pelo DOS para o seu nome, isto , o tamanho mximo do arquivo
deve ter 8 caracteres e o tamanho mximo para a extenso deve ter 3
caracteres no mximo.
Tambm, todos os nomes de arquivo dos programas devem estar em letras
minsculas.
1
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
25
Diretrio destino
Browser
xxbrw
Dialog
Go (V para)
Nomenclatura
4
b99xx999.w
bo01in172.w
xxdialog
d99xx999.w
d01in172.w
xxgo
g99xx999.w
g01in172.w
Query
xxqry
q99xx999.w
q01in172.w
Viewer
xxvwr
v99xx999.w
v01in172.w
Zoom (Pesquisa)
xxzoom
z99xx999.p
z01in172.w
Nomenclatura
Exemplos
API
xxapi999.p
cep/ceapi001.p
Container
xx9999zz.w5
Subprograma de relatrio
xx9999rp.p
xx9999zz.p
cep/ce0401.w
cep/ce0401rp.p
cep/ce0401a.p
Tipo de Programas
0000 0099
Manutenes Cadastrais
0100 0199
Manutenes Gerais
0200 0299
Consultas Cadastrais
0300 0399
Consultas Complexas/Relacionamento
0400 0499
Listagens Cadastrais
0500 0699
Relatrios
0700 0799
Tarefas
0800 0899
Especiais/Grficos
0900 0999
Utilitrios
Includes
Da mesma maneira que os programas, os includes, tambm, devem ter seus
nomes de arquivo em letras minsculas, e tambm, obedecem a algumas regras
de nomenclatura, conforme o objetivo do include. As extenses dos includes
devem ser sempre .i, i1, .i2, ... e .i9.
Nomenclatura
var99999.i
Exemplos
varinc/var00002.i
Includes de programas
A nomenclatura destes includes dada em funo do seu grau de reutilizao:
Quando um include apenas utilizado por um mesmo programa/procedimento,
o nome deste include igual ao do programa, apenas com a extenso .i ou .i1 a
.i9. Exemplo: cdp/cd0206.i para cdp/cd0206.w ou advwr/v01ad102.i para
advwr/v01ad102.w.
Quando um include utilizado por vrios programas de um mesmo mdulo, o
nome deste include a sigla do mdulo mais um nmero seqencial,
geralmente acima de 9000. Exemplo: cep/ce9000.i.
Quando um include utilizado por vrios programas de vrios mdulos, o
nome deste include 'cd' mais um nmero seqencial. Exemplo:cdp/cd9500.i.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
27
Includes padres
Os includes padres dos Estilos devem ser depositados no diretrio include, e
o seu nome de arquivo iniciar por "i-" mais um nome significativo, que
indique o estilo ou a funo. Exemplo: include/i-rpini.i.
Widgets
O padro de nomenclatura adotado um prefixo que identifique o widget mais
um nome significativo. A tabela de prefixo apresentada a seguir:
Widget
Prefixo
Exemplo
Boto
bt-
bt-ok
Browse
br-
br-zoom
Combo-box
cb-
cb-tipo-conta
Fill-in
fi-
fi-texto
Radio-set
rs-
rs-modo-execucao
Retngulo
rt-
rt-moldura
Selection-list
ls
ls-estados
Slider
sl
sl-percentual
Toggle-box
tb
tb-ativo
Variveis
Datasul-EMS 2.00
Quando uma varivel no for um widget o seu tipo de dados determina o
prefixo que deve ser utilizado para nomear as variveis, conforme tabela a
seguir:
Tipo de dado
Prefixo
Exemplo
Caracter
c-
c-conta
Inteiro
i-
i-contador
Data
da-
da-atualizacao
Decimal
de-
de-total-geral
Handle
h-
h-acomp
Lgico
l-
l-ativo
Raw
raw-
raw-param
Rowid
rw-
rw-
Widget-handle
wh-
wh-botao
Datasul-HR 1.00
A nomenclatura de varivel formada de acordo com a seguinte regra:
v_tipo de atributo_qualificador
Tipo de Atributo
Qualificador
Exemplo
V_cod_fornec
Prefixo
Exemplo
Buffer de Tabela
b-
b-item
Frame
f-
f-cad
Parmetro
p-
p-rw-emitente
Stream
s-
s-import
Temporarytable
tt-
tt-param
Siglas de pases
Ser utiliza a norma ISO 3166-1 para definio das siglas dos pases. A norma
ISO 3166-1 pode ser consultada em http://pt.wikipedia.org/wiki/ISO_3166-1
Ser utilizada sempre a sigla de trs letras:
Num
Alfa-3
Alfa-2
Pais
32
44
68
76
124
152
170
188
192
222
218
ARG
BHS
BOL
BRA
CAN
CHL
COL
CRI
CUB
SLV
ECU
AR
BS
BO
BR
CA
CL
CO
CR
CU
SV
EC
840
USA
US
Argentina
Bahamas
Bolvia
Brasil
Canad
Chile
Colmbia
Costa Rica
Cuba
El Salvador
Equador
Estados Unidos da
Amrica
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
29
308
320
328
388
484
558
591
600
604
630
858
862
GRD
GTM
GUY
JAM
MEX
NIC
PAN
PRY
PER
PRI
URY
VEN
GD
GT
GY
JM
MX
NI
PA
PY
PE
PR
UY
VE
Grenada
Guatemala
Guiana
Jamaica
Mxico
Nicargua
Panam
Paraguai
Peru
Porto Rico
Uruguai
Venezuela
Adapters
A estrutura de diretrios e o nome dos adapters devem ser definidos com o
seguinte padro:
Diretrios: adapters/[nome do parceiro]/[cicla do mdulo 3 dgitos].
31
CAPTULO 4
Layout de Telas
Janela Detalhe
So consideradas janelas detalhe ou filhas aquelas que so chamadas a partir
de janelas mestre para realizao de funes de um programa. Estas janelas
no possuem menu de barra e a rgua de botes fica na parte de baixo da tela,
a idia simular a visualizao de um dialog-box.
Como diferenciao, no possuem moldura (resize = no).
Exemplo: Tela de um programa de zoom.
Caixas de Dilogo
Caixas de dilogo so utilizadas em funes onde imprescindvel que a
interface seja modal, normalmente em funes de grande risco aos sistemas.
Nestas caixas existe uma rgua de botes disposta na parte de baixo da caixa.
Exemplo: Programa de Clculo do Preo Mdio.
32
Observao No aconselhvel salvar uma Dialog com uma Window aberta. Quando isto
feito, possvel que o menu da Window seja copiado para a Dialog eliminando-o. Caso isto
acontea necessrio recriar a Dialog e o menu da Window.
Objetos
Combo-boxes
Ver captulo Como implementar campos indicadores com view-as combo-box
nas telas.
Retngulos
So utilizados para agrupar a chave de acesso das telas, agrupar campos de um
mesmo assunto, emoldurar itens de radio-set e emoldurar editores que
necessitem de label.
Botes
Fill-ins
Frames(Telas)
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
33
Radio-Sets
no podem possuir label, devido limitaes do UIB, por isso devem ser
emoldurados por um retngulo com uma literal para identific-lo, que o
prprio label. Ver captulo: Como implementar labels em retngulos
utilizando o dicionrio de dados; Exemplo:
Editores
Recomendaes
SmartViewer
SmartViewer uma procedure object, o qual, visualiza os campos da base de
dados. Um SmartViewer tipicamente preenche registros da base de dados
desde um SmartQuery ou SmartBrowser.
O SmartViewer deve ter um distanciamento de uma linha aps e uma linha
antes de outros objetos na sua localizao.
SmartQuery
SmartQuery uma procedure object que contm uma base de dados query. Um
SmartQuery preenche tipicamente registros para outro SmartObjects, tal como
um SmartViewer ou SmartBrowser. Um SmartQuery pode tambm responder
a pedido de navegao de um SmartPanel.
Na tela de caractersticas da "Query Builder", em "Options", o campo
"Returned" deve ser alterado de "All Fields" para "Fields Used".
Observao: O
Caractersticas
35
CAPTULO 5
Estilos
Cadastro Simples
a tabulao deve ser de cima para baixo nos campos, passando por todos
os campos de uma coluna para depois passar para a outra coluna;
36
Ajuda
Ctrl-Home
Contedo
Sobre
Anterior
Ctrl-Left
Prximo
Ctrl-Right
ltimo
Ctrl-End
V Para
Ctrl-T
Pesquisa
Ctrl-F5
Incluir
Ctrl-Ins
Copiar
Ctrl-C
Alterar
Ctrl-A
Eliminar
Ctrl-Del
Desfazer
Ctrl-U
Cancelar
Ctrl-F4
Salvar
Ctrl-S
Imprimir
Ctrl-P
Sair
Ctrl-X
Caractersticas
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
37
Cadastro Complexo
Caractersticas
Caractersticas
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
39
Caractersticas
a tabulao deve ser de cima para baixo nos campos, passando por todos
os campos de uma coluna para depois passar para a outra coluna;
Caractersticas
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
41
Manuteno de Filhos
o boto de 'Ok' tem funo igual tanto para chamada do programa, para
incluso, quanto para modificao;
Caratersticas
Caratersticas
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
43
Manuteno de Pais
o boto de 'Ok' tem funo igual tanto para chamada do programa, para
incluso, quanto para modificao;
Caractersticas
Caractersticas
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
45
Caractersticas
Consulta Relacionamento
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
47
Caractersticas
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
49
Caractersticas
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
51
Parmetros nicos
Parmetros Mltiplos
Seguir as mesmas regras dos Cadastros Simples ou Complexo, dependendo do
nmero de campos.
Exemplo: Parmetros por estabelecimento.
Caractersticas
Formao
o boto 'Incluir'
outras 2 tabelas;
o boto 'Deletar'
Caractersticas
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
53
boto de 'Incluir'
outras 2 tabelas;
boto de 'Deletar'
Caractersticas
Importao
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
55
Exportao
Caractersticas
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
57
Caractersticas
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
59
Zoom de Tabelas
o boto
responsvel pela aplicao do valor inicial e final definido
pelo usurio sobre a query apresentada no browse;
Caractersticas
...............
[valor final].
Observao Verificar se cada folder tem um browser diferente ou no, se isto for necessrio
inverter a ordem dos campos, conforme a classificao.
O Zoom no tem os botes de INCIO e de FIM (como no MAGNUS antigo), logo se utiliza o
teclado: "HOME" e "END", para substituir as caractersticas destas funes.
para acessar.
V Para
para acess-la.
Observao No aconselhvel salvar uma Dialog com uma Window aberta. Quando isto
feito, possvel que o menu da Window seja copiado para a Dialog eliminando-o. Caso isto
acontea necessrio recriar a Dialog e o menu da Window.
Caractersticas
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
61
Digitao Rpida
Painis
Caractersticas
Funes
Relatrios Relacionados
para acessar.
Consultas Relacionadas
para acessar.
Utilizao
Objetivo
63
CAPTULO 6
UT-FIELD.I
Retornar propriedades dos campos do dicionrio de dados, como label,
column-label, etc..
{utp/ut-field.i <banco> <tabela> <campo> <propriedade>}
Onde:
<banco>: nome lgico do banco de dados que contm o campo
<tabela>: nome da tabela que contm o campo
<campo>: nome do campo
<propriedade>: nmero que identifica a propriedade conforme tabela a seguir:
Nmero
Propriedade
Label
Column-Label
Help
Format
Initial
Description
Data Type
Formato
Utilizao
Objetivo
64
UT-RTLBL.I
Permitir a utilizao de literais para colar labels em retngulos na tela
minimizando os problemas de internacionalizao.
Onde:
<banco>: nome lgico do banco de dados que contm o campo
<tabela>: nome da tabela que contm o campo
<campo>: nome do campo
<widget fill-in>: fill-in view-as text colocado na tela
Exemplo:
{utp/ut-rtlbl.i mgadm conta natureza text-1}
UT-RUN.I
Seu objetivo executar programas que no possuam interface (.p), atravs do
recurso de RPC (Remote Procedure Call). Deve executar apenas programas
(.p), chamados a partir de programas (.w). No deve chamar um programa (.p),
a partir de um outro programa (.p), como por exemplo um programa de
impresso de relatrios xxp/xx9999rp.p, porque o programa chamador (.p), j
est rodando no servidor (Application Server) e no necessrio iniciar um
novo servidor.
Sempre que for chamado algum programa sem interface a partir de um .W e
que este programa seja candidato para ser executado via RPC.
Nota Para utilizar os includes necessrio relacionar ao programa os includes {utp/ut-glob.i} e
{btb/btb008za.io} no main-block, para definio de variveis e funes.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
65
Include
{utp/ut-run.i {1} {2} {3} {4}}
Onde:
{1}: nome externo do programa
{2}: parmetros do programa
{3}:mostra mensagem de acompanhamento [Opcional]
{4}: servidor de RPC determinado [Opcional]
Nota Para informar parmetros em branco ou literal, utilize aspas duplas ("") com aspas
simples (''). Exemplo: "" ' '.
No sendo informados os parmetros opcionais estes recebero "yes" e "" ' ' respectivamente.
Funes
Aplicaes
Quando o programa API ser disparado uma nica vez para realizar todo o
processo.
Exemplo: {utp/ut-run.i cep/ceapi001.p "input-output table ttmvto, input-output table tt-erro, input yes "" ' '}
Modelo Aberto
Includes
{btb/btb008za.i1 {1} {2} {3}}
Onde:
{1} = nome externo do programa
{2} = mostra mensagem de acompanhamento
{3} = servidor de RPC determinado
{btb/btb008za.i2 {1} {2} {3}}
Onde:
Consideraes
Exemplo
Gerais
Onde:
{1} = nome externo do programa
{2} = nome da varivel do tipo "handle" utilizada para eliminar a procedure
persistente [Opcional]
Funes
Idnticas ao Modelo Simplificado, porm distribudas em trs includes:
Aplicaes
Quando o programa API disparado n vezes dentro de um lao (repeat, for
each...).
def var h-handle as handle no-undo.
{btb/ btb008za.i1 cep/ceapi001.p yes "rpc-test"}
for each cta_ctbl no-lock:
/* Prepara tt_movto */
{btb/btb008za.i2 cep/ceapi001.p "input tt_movto, output
tt_erro" "h-handle"}
end.
{btb/btb008za.i3 cep/ceapi001.p "h-handle"}
Nota Existe a API BTAPI008 que possui funes que podem ser utilizadas no desenvolvimento.
Caso no seja informado nenhum servidor RPC, ser utilizado o servidor RPC
definido no aplicativo do programa;
Se o processo estiver sendo executado via RPW e o servidor RPC no foi
informado o programa ser executado On-line.
Parmetros X
Compor
tament
o
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
67
Quando informado valor parar servidor RPC, caso ocorra algum erro no ser
possvel a execuo On-line.
Ocorrendo erros na tentativa de execuo do programa (faltou passar
parmetros, por exemplo), estes sero retornados juntamente com a mensagem
16435 (*).
Quando for informada a varivel do tipo "handle" para a include
btb/btb008za.i2, deve-se tomar dois cuidados: Primeiro, esta varivel deve
estar previamente definida no programa. E segundo, ao final da execuo,
deve-se eliminar o programa persistent passando o nome da varivel para a
include btb008za.i3.
Existe a API que transporta o contedo das variveis de ambiente do
Datasul_EMS da sesso client para a sesso do application server (remota)
quando o programa solicita a execuo de determinado programa via RPC
(Remote Procedure Call). Logo, as informaes como usurio corrente, grupos
de segurana em que o usurio se encontra, empresa do usurio... estaro
disponveis na sesso remota.
Dados:
Nome Programa: btb/btb923za.p
Sintaxe: run btb/btb923za.p
(<verso_integrao>, <handle_application_server>)
Programa
Servidor RPC
Mensagem
Comportamento
Inexistente
Yes
Inexistente
No
Existe e Executa
RPC =no
Yes
Existe e Executa
RPC =no
Existe e Executa
RPC =no
Existe e Executa
RPC =yes
Informado
No
No Informado
No
Executa ON-LINE
Informado e
Inexistente
Yes
Existe e Executa
RPC =yes
Informado e
Inexistente
No
Existe e Executa
RPC =yes
No Informado e Yes
Inexistente
Existe e Executa
No Informado e No
Executa ON_LINE
RPC =yes
Inexistente
Existe e Executa
RPC =yes
Informado,
Existe e No
disponvel
No
Existe e Executa
RPC =yes
No Informado,
Existe e No
disponvel
Yes
Existe e Executa
RPC =yes
No Informado,
Existe e No
disponvel
No
Executa ON-LINE
Existe e Executa
RPC =yes
Informado,
Existe e
Disponvel
Yes
Existe e Executa
RPC =yes
Informado,
Existe e
Disponvel
No
Existe e Executa
RPC =yes
No Informado,
Existe e
Disponvel
Yes
Existe e Executa
RPC =yes
No Informado,
Existe e
Disponvel
No
(*) Mensagens:
3045 - Programa no cadastrado no menu !
6160 - No foi possvel executar o programa via RPC !
16431 - Programa no pode ser executado via RPC
16432 - No foi possvel encontrar servidor RPC para programa '&1' !
16433 - Servidor RPC no cadastrado
16434 - Servidor RPC no disponvel
164 35 - No foi possvel executar programa !
(**) Ocorrendo erros na conexo do servidor RPC, estes sero exibidos em
tela juntamente com a mensagem 6160.
(***) Ocorrendo erros na conexo do servidor RPC, estes sero retornados
juntamente com a mensagem 6160.
Formato
Utilizao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
69
UT-MSGS.P
Apresentar para o usurio uma mensagem previamente cadastrada, no Sistema
de Mensagens, ou ainda, retornar para o programa propriedades desta
mensagem.
Notas:
ao ser exibida uma mensagem, seu nmero vai ser exibido na barra de ttulo da caixa de
dilogo, juntamente com o tipo de mensagem. Ex.: Pergunta: (10);
antes da exibio de qualquer mensagem, ser verificado se ela possui uma substituta, se
houver, a mensagem substituta ser exibida ao invs da original. Da mesma forma, antes da
exibio da mensagem substituta, ser verificado se esta tambm, possui uma mensagem
substituta e assim por diante;
Onde:
<ao>: ao desejada, conforme a tabela a seguir:
Ao
Resultado
show
msg
help
type
codtype
Formato
Utilizao
Objetivo
Observaes
Exemplo
Onde:
{1}: indica a funo a ser realizada, conforme tabela abaixo:
Funo
Objetivo
01
02
03
04 n
05
Formato
Utilizao
Objetivo
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
71
06 item
07
UT-TABLE.I
Retornar propriedades das tabelas do dicionrio de dados.
para utilizao de literais ou textos nas telas com funo de label, como no
retngulo que envolve o radio-set.
Onde:
Formato
Utilizao
Objetivo
Propriedade
File-Label
Dump_Name
Desc
UT-LITER.I
Utilizar o cadastro de literais do Datasul-EMS, cadastrando automaticamente
as literais utilizadas no programa e retornando a traduo da literal no idioma
corrente do banco de dados.
Onde:
<literal>: Literal a ser utilizada na tela com os espaos substitudos por "_"
(undescore). OBS.: Se a literal passada terminar com :U a literal no ser
traduzida e a mesma ser retornada sem os dois ltimos caracteres.
<mdulo contexto>: parmetro opcional que define o contexto de traduo da
literal, este contexto um mdulo do Datasul-EMS, se omitido a literal deve
ter o contexto universal de traduo, que representado pelo valor *
(asterisco)
<alinhamento>: parmetro opcional que define onde incrementado o espao
extra para traduo, conforme tabela abaixo, se omitido deve reservar o espao
esquerda da literal:
Tipo
Alinhamento
A esquerda
Centralizado
A direita
Exemplo de
Formato
Utilizao
Objetivo
varivei
s
definida
s
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
73
UT-LIMIT.P
Determinar o valor inicial e final de campos caracter, cujo formato varivel,
como por exemplo a conta-contbil.
Na seleo de relatrios, clculos, atualizaes e zooms que tenham faixas de
seleo sobre campos caracter com formato varivel.
run utp/ut-limit.p (input <opo>,
<formato>).
Onde:
<opo>: indica o limite desejado, MIN = Mnimo e MAX = Mximo
<formato>: formato do campo caracter
O retorno obtido atravs do return-value.
def var c-conta-ini as char no-undo.
find first param-global no-lock no-error.
run utp/ut-limit.p (input "MIN",
input param-global. formato-conta-contabil).
Assign c-conta-ini = return-value.
UT-GLOB.I
Define as variveis globais.
J est definido dentro dos SmartObjects.
i-ep-codigo-usuario: contm a empresa corrente do usurio.
l-implanta: varivel lgica usada no Zoom, para habilitar o boto implanta.
c-seg-usuario: contm o nome do usurio corrente logado no menu.
Exemplo
Formato
Utilizao
Objetivo
I-FREEAC.I
Converter strings acentuadas e caracteres especiais para strings no acentuadas
e caracteres simples.
{include/i-freeac.i}
assign <varivel> = fn-free-accent("<string>").
display fn-free-accent("<string>").
Onde:
<varivel>: varivel que ir armazenar o valor do retorno da funo fn-freeaccent
<string>: string acentuada a ser convertida.
{include/i-freeac.i}
define var c-texto as char no-undo.
assign c-texto = fn-free-accent ("------").
message fn-free-accent("--~---yy--")
chr(10) c-texto view-as alert-box.
UT-DIR.P
Este utilitrio deve ser usado sempre que o usurio tiver que informar um
diretrio.
run utp/ut-dir.p (input <ttulo>,
output <pasta>,
output <cancelado>).
Onde:
<ttulo>: ttulo para a caixa de dilogo para selecionar diretrios
<pasta>: varivel do tipo caracter onde ser retornada a pasta selecionada
<cancelado>: uma varivel do tipo lgica onde deve ser retornado se a caixa
de dilogo foi cancelada ou no
Exemplo:
Instalao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
75
Onde:
<ttulo>: ttulo para a caixa de dilogo para selecionar diretrios
<pasta>: varivel do tipo caracter onde ser retornada a pasta selecionada
<cancelado>: uma varivel do tipo lgica onde deve retornado se a caixa de
dilogo foi cancelada ou no
Exemplo:
run utp/ut-dir.p (input "Escolha um diretrio,
output pasta,
output cancelado).
BTB917ZX.P
Permitir a execuo de sons do tipo MID e WAV.
Como este programa utiliza os recursos de OCX, preciso que este OCX
esteja registrado e instalado na mquina que deve ser utilizado. Para fazer esta
instalao proceda da seguinte forma:
Objetivo
Formato
clicar no boto
Onde:
<som>: caminho completo do arquivo de som a ser executado
Exemplo:
run btb/btb917zx.p (input "c:\windows\media\start.wav").
BTB917ZY.P
Permitir a visualizao dos seguintes tipos de imagens:
Instalao
Como este programa utiliza os recursos de OCX, preciso que este OCX
esteja registrado e instalado na mquina que deve ser utilizado. Para fazer esta
instalao proceda da seguinte forma:
clicar no boto:
Onde:
Formato
Instalao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
77
BTB917ZZ.P
Permitir a visualizao de vdeos do tipo AVI.
Como este programa utiliza os recursos de OCX, preciso que este OCX
esteja registrado e instalado na mquina que deve ser utilizado. Para fazer esta
instalao proceda da seguinte forma:
clicar no boto:
Observaes
Formato
Objetivo
Onde:
<vdeo>: caminho completo do vdeo a ser apresentado
Exemplo:
run btb/btb917zz.p (input "c:\windows\help\explorer.avi").
UT-VRBIN.P
Este utilitrio pode ser usado sempre que for necessrio saber a verso de um
programa compilado (.R).
run utp/ut-vrbin.p (input <arquivo>,
input <acomp>,
output <versao>).
Onde:
<arquivo>: varivel do tipo caracter que ir conter o nome do arquivo
compilado a ser analisado
<acomp>: varivel do tipo lgica que ir definir se a pesquisa deve apresentar
a tela de acompanhamento ou no
<versao>: varivel do tipo caracter que ir receber a verso do programa
passado como parmetro
Exemplo:
run utp/ut-vrbin.p (input "c:\tmp\cd0101.r",
input no,
output c-versao).
Observaes
Exemplo
Formato
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
79
UT-FINFO.P
Este utilitrio pode ser usado sempre que for necessrio saber a data, a hora ou
o tamanho de um arquivo no Windows.
run utp/ut-finfo.p (input <arquivo>,
output <data>,
output <hora>,
output <tamanho>).
Onde:
<arquivo>: varivel do tipo caracter que deve conter o nome do arquivo a ser
analisado
<data>: varivel do tipo data que deve receber a data do arquivo que est
sendo analisado
<hora>: varivel do tipo caracter que deve receber a hora do arquivo que est
sendo analisado
<tamanho>: varivel do tipo inteira que deve receber o tamanho do arquivo
que est sendo analisado
run utp/ut-finfo.p (input "c:\autoexec.bat",
output d-data,
output c-hora,
output i-tam).
Exemplo
Formato
Objetivo
UT-CMDLN.P
Este utilitrio pode ser usado sempre que for necessrio saber informaes
mais detalhadas sobre a linha de comando usada para abrir a sesso corrente.
Esta funo pode ser muito til quando se deseja obter os valores dos
parmetros da sesso (ini, inp, basekey, etc ...).
run utp/ut-cmdln.p (output <linha-comando>).
Onde:
<linha-comando>: varivel do tipo caracter que ir receber a linha de comando
usada para abrir a sesso corrente
Exemplo:
run utp/ut-cmdln.p (output c-linha-comando).
UT-OSVER.P
Esta tcnica pode ser usada sempre que for necessrio saber informaes mais
detalhadas sobre o Sistema Operacional (somente para Windows).
run utp/ut-osver.p (ouput <plataforma>,
output <versao>,
output <release>,
output <build>,
output <extrainfo>).
Onde:
<plataforma>: varivel do tipo caracter que ir receber o tipo plataforma
windows (Windows NT ou Windows 95/98)
<versao>: varivel do tipo inteira que ir receber, se houver, a verso do
Windows
<release>: varivel do tipo inteira que ir receber, se houver, a "release" do
Windows
<build>: varivel do tipo inteira que ir receber, se houver, o "build" do
Windows
<extrainfo>: varivel do tipo caracter que ir receber informaes extras sobre
o Windows (Verso do Service Pack, etc ...)
run utp/ut-osver.p (output c-plataforma,
output i-versao,
output i-release,
Observaes
Exemplo
Formato
Utilizao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
81
output i-build,
output c-extrainfo).
I-COUNTDS.I
Descobrir a quantidade de registros numa tabela de acordo a condio passada.
{include/i-countds.i &BANCO=mgadm
&TABELA=<tabela>
&COND=<condio>
&DEST=<varivel> }
Onde:
<varivel>: varivel que ir armazenar o resultado da consulta.
<condio>: clusa where que deve ser usada na consulta. Opcional.
<tabela>: tabela que deve ter o nmero de registros contados.
<banco>: banco de dados onde a tabela se encontra.
DEF VAR iCount AS INT NO-UNDO.
{include/i-countds.i &BANCO=mgadm
&TABELA="cheque-pend"
&COND="WHERE cod-banco > 20"
&DEST=iCount}
message iCount view-as alert-box.
Procedures
Objetivo
UT-WIN.I
A UT-WIN.I define procedures para acesso a funes externas de APIs do
Windows.
Abaixo segue algumas das procedures definidas na include:
CreateProcess{&A}
GetComputerName{&A}
GetEnvironmentVariable{&A}
GetLastError
GetProfileString{&A}
GetSystemDirectory{&A}
GetWindowsDirectory{&A}
LoadLibrary{&A}
SetEnvironmentVariable{&A}
WinExec
GetCurrentDirectory{&A}
FindExecutable{&A}
ShellExecute{&A}
AdjustWindowRect
ClientToScreen
CreateModal
DeleteMenu
DrawMenuBar
FlashWindow
GetClientRect
GetMenuItemCount
GetParent
GetSystemMenu
GetWindowLong{&A}
GetWindowRect
InvalidateRect
RemoveMenu
SetCursorPos
SetWindowContextHelpId
SetWindowLong{&A}
SetWindowPos
ShowScrollBar
ShowWindow
Exemplo 21
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
83
SystemParametersInfo{&A}
GetUserName{&A}
Exemplo 43
Exemplo
Formato
Utilizao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
85
UT-TRACE.P
Exibir em tela toda a lista de programas e procedures internas executadas at o
ponto de execuo deste aplicativo. semelhante ao stack trace do Progress,
disponvel nas mensagens de erro, com a vantagem que o desenvolvedor pode
escolher o ponto do programa para exibio da pilha de execuo.
Pode ser utilizado em qualquer template da datasul, independente do programa
ser Smart ou Thin Template. necessrio incluir no programa a include utp/uttrace.i e rodar o utilitrio de forma persistente. Lembrando que para isto
necessrio criar uma varivel do tipo handle (h-trace abaixo) e limpar o handle
do programa na varivel aps a execuo.
RUN utp/ut-trace.p PERSISTENT SET h-trace.
RUN pi-monta-trace IN h-trace (OUTPUT TABLE tt-trace).
RUN utp/trace.w (INPUT TABLE tt-trace).
Exemplo
Formato
Utilizao
Objetivo
UT-LOCK.I
Retornar se um registro j est locado na base, substituindo a funo LOCKED
do PROGRESS que no funciona corretamente em ambiente ORACLE.
Normalmente utiliza-se um FIND EXCLUSIVE-LOCK com a clusula NOWAIT para buscar um registro que pode estar locado. Dessa forma, o
programa no fica parado no EXCLUSIVE-LOCK esperando o registro ser
liberado. Neste caso utilizvamos a funo LOCKED pra confirmar se a
indisponibilidade de dados deve-se ao fato do registro desejado j estar locado
em outra sesso, mas conforme dito anteriormente, esta funo no funciona
no ambiente ORACLE. Este utilitrio verifica o estado de lock do registro
diretamente no banco ORACLE para garantir esta funcionalidade.
Pode ser utilizado em qualquer template da datasul, independente do programa
ser Smart ou Thin Template. Ou mesmo um fonte qualquer.
{utp/ut-lock.i <banco> <tabela> <tipo_busca> <where_clause>}
<tratamento de retorno com a varivel lRetorno>
Onde:
<banco>: nome lgico do banco de dados que contm a tabela.
<tabela>: nome da tabela na qual est se realizando a busca.
<tipo_busca >: a clausula de busca do registro, podendo ser: First Last, Next,
Prev ou Current.
<where_clause>: Opcional. Clausula where de condio de busca do registro.
Para o correto funcionamento do utilitrio, deve ser exatamente o mesmo
where clause do FIND realizado com EXCLUSIVE-LOCK e NO-WAIT.
Deve-se definir um pr-processador para armazenar a clusula do Where pois
em alguns casos a complexidade da consulta no permite que a mesma seja
transferida atravs da chamada da include.
Formato
Utilizao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
87
UT-ZIP.P
Este utilitrio faz o tratamento de arquivos zipados, compactando os arquivos
listados em um arquivo denominado zipFileName.
Uma outra aplicao alm da compactao dos arquivos listados a proteo
dos arquivos com uma senha.
Pode ser utilizado em qualquer template da Datasul, independente do
programa ser Smart ou Thin Template. Ou mesmo um fonte qualquer.
run utp\ut-zip.p persistent set h-zip.
run zipFiles in h-zip (input <zipFileName>,
input <tt-listFiles>,
input <logical>,
output <tabela erro>).
Onde:
<zipFileName>: receber o endereo completo do arquivo .ZIP a ser gerado
(Ex.: c:\tmp\teste.zip)
{utp/ut-zip.i}
NO-UNDO.
Exemplo
Utilizao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
89
UT-GENXML.P
Este utilitrio facilita a criao e manipulao de arquivos XML.
O programa que deve ser executado para manipulao de XML o xmlutp/utgenxml.p. A documentao do mesmo encontra-se no captulo 4 ( Utilizando
API XML ) do arquivo xmlmanual/ ManualConstrucaoAdapters.doc.
UT-VALIDA-FACELIFT.P
Este utilitrio verifica: verso, patch e fix do progress instalado na mquina,
ele retorna um campo lgico informando se a estao est apta para executar o
produto com facelift.
O utilitrio deve ser chamado por outro programa passando um campo lgico
como parmetro.
DEF VAR l-aplica-facelift AS LOGICAL NO-UNDO.
IF l-aplica-facelift THEN
MESSAGE "Ambiente apto para alicar facelift !" VIEW-AS ALERT-BOX.
ELSE
MESSAGE "Ambiente no apto para alicar facelift !" VIEW-AS ALERT-BOX.
Observaes
Se o ambiente estiver apto para ser aplicado o facelift a varivel l-aplicafacelift ter valor True, caso contrrio ter valor False.
View-as Radio-Set
CAPTULO 7
Traduo
TRADUO MONO-IDIOMAS
Este modelo utilizado at as verses EMS 2.04 e HR 2.07. Acima destas
releases deve ser utilizada a tcnica multi-idiomas especificada no prximo
item neste documento.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
91
&glob val2
&ENDIF
&IF "{&LANGUAGE-CODE}" = "ING" &THEN
&glob val1
&glob val2
&ENDIF
{include/ind01-10.i} {1} {2}}
/* fim */
Observao Foi incorporada uma chamada para um include i-lgcode.i, cujo objetivo
determinar qual o idioma da instalao do Datasul-EMS 2.0.
Exemplo
**
*****************************************************/
{include/i-lgcode.i}
&IF "{&LANGUAGE-CODE}" =
&glob val1 Devedora
&glob val2 Credora
&ENDIF
&IF "{&LANGUAGE-CODE}" =
&glob val1
&glob val2
&ENDIF
&IF "{&LANGUAGE-CODE}" =
&glob val1
&glob val2
&ENDIF
{include/ind01-10.i} {1}
"POR" &THEN
"ESP" &THEN
"ING" &THEN
{2}}
/* fim */
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
93
&glob val1
&glob val2
&ENDIF
&IF "{&LANGUAGE-CODE}" = "ING" &THEN
&glob val1
&glob val2
&ENDIF
{include/ind01-10.i} {1} {2}}
/* fim */
/****************************************************
**
** var99999.i Varivel: cb-xxx Programa:xxp/xx9999.w
**
*****************************************************/
{include/i-lgcode.i}
&IF "{&LANGUAGE-CODE}" =
&glob val1 Devedora
&glob val2 Credora
&ENDIF
&IF "{&LANGUAGE-CODE}" =
&glob val1
&glob val2
&ENDIF
&IF "{&LANGUAGE-CODE}" =
&glob val1
&glob val2
&ENDIF
{include/ind01-10.i} {1}
"POR" &THEN
"ESP" &THEN
"ING" &THEN
{2}}
/* fim */
5. Toda codificao que precisar referenciar o valor de um item do combobox, deve ser realizada atravs do include var99999.i, isto , no podem
existir referncias diretas na forma de string ("") aos itens do combo-box
no fonte. Exemplo:
ERRADO:
if cb-tipo:screen-value in frame {&frame-name} = "Passivo"
then...
CERTO:
if cb-tipo:screen-value in frame {&frame-name} =
{varinc\var99999.i 04 2} then ...
Em ambas as utilizaes, ainda resta a traduo do label, ento no 'MainBlock', ou 'Local-initialize', ou ainda, qualquer ponto onde o programa
View-as Toggle-Box
Exemplo:
Column-Labels
Help
e Viewas Fill-in
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
95
Utilizando utp/ut-liter.i:
{utp/ut-liter.i <literal> <modulo> <alinhamento>}
assign <varivel>:label in frame {&frame-name} = returnvalue.
Sempre que estas variveis possuam 'help', este deve ter a preparao para
traduo atravs do include utp/liter.i, conforme o exemplo:
{utp/ut-liter.i <literal> <modulo> <alinhamento>}
assign <variavel>:help in frame {&frame-name} = returnvalue.
{utp/ut-liter Total_Pedidos}
assign de-total-pedidos:label in frame f-relat = trim{returnvalue}.
Side-Labels
Cliente Descrio
Total Pedidos
------------------------------------->>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
>>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
>>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
deve existir o tratamento do espao extra para traduo, que deve ser
reservado sempre esquerda do label.
{utp/ut-liter ____Total_Geral}
assign de-total-geral:label in frame f-total = return-value.
Cliente Descrio
Total Pedidos
------------------------------------->>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
>>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
>>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
____Total Geral: >>.>>>.>>9,99
TRADUO MULTI-IDIOMAS
Este modelo utilizado a partir das verses EMS 2.05 e HR 2.08 ou
superiores.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
97
Dialeto
en-US
es-AR
pt-BR
Nome idioma/Dialeto
Pontos de traduo
No modelo de traduo Multi-Idiomas, para os programas que possuem telas,
sejam estes SmartObjects ou ThinTemplates, foram criados o que chamamos
de pontos de traduo. Estes pontos de traduo nada mais so do que os locais
onde foram realizadas as chamadas aos tradutores automticos de telas, ou
seja, nestes pontos, um utilitrio chamado e este identifica todos os objetos
dispostos em tela, identifica todos as propriedades destes objetos que so
passveis de traduo, como labels, tooltip's, help's, etc, e realiza uma chamada
automtica ao ut-liter para sua posterior atribuio ao valor retornado. Tudo o
que est em tela e que est antes deste ponto de traduo, no necessrio que
seja realizado nenhum tipo de interveno manual. Caso tenha-se alguma
atribuio em tela para atributos de objetos passveis de traduo aps estes
pontos, este dever ser trabalhado para que se inclua uma chamada ao utilitrio
ut-liter.p e posterior atribuio ao atributo em questo pelo valor retornado
atravs do return-value.
Os pontos de traduo so:
Contextos de traduo
No modelo de traduo Multi-Idiomas, foi adicionado um conceito de contexto
de traduo. Este contexto pode ser usado de forma idntica ao utilizado na
verso anterior do ut-liter, atravs da sigla do mdulo, mas no fica
necessariamente limitado a esta contextualizao, podendo ser definido
qualquer tipo de semntica que se julgue necessrio para o mdulo/programa
do produto que se est trabalhando. Caso, durante a anlise para a construo
do programa, seja verificado que no existe a necessidade da criao de uma
nova contextualizao de Strings, mesmo passando-se o caracter "*" para o
utilitrio de traduo ut-liter em tempo de desenvolvimento, este programa ir
disponibilizar um contexto automtico para o cliente/usurio em tempo de
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
99
Itens de Traduo
Para a tcnica de traduo Multi-Idiomas, foi criado um conceito de itens de
traduo, onde cada um destes itens possui uma caracterstica que deve ser
levada em considerao no momento da incluso de novas strings, bem como
no momento da customizao dos termos em telas do produto.
Hoje existem 9 itens de traduo, sendo que estes itens, suas caractersticas, e
codificao dentro da tabela de strings externas esto descritos a seguir neste
documento. Estes itens esto todos armazenados dentro de uma tabela
chamada string_ext_produt, sendo sua chave composta pelo dialeto, contexto,
seu ID e a Origem String, sendo estes dois ltimos campos definidos como
segue:
ID
Item de Traduo
Origem String
aplicat_dtsul
des_aplicat_dtsul
modul_dtsul
des_modul_dtsul
Descrio
mdulos
Datasul
Tabela que armazena os
procedimentos Datasul
procedimento
des_proced
produt_dtsul
des_produt_dtsul
rot_dtsul
des_rot_dtsul
sist_dtsul
des_sist_dtsul
sub_rot_dtsul
des_sub_rot_dtsul
cad-msgs
cd-msg
cad-literal
cod-literal
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
101
tabela cad-literal no banco mguni. Esta chave utilizada pelo utilitrio utfield.p, que ser abordado ainda neste documento.
Sequncia de busca
Aps verificarmos alguns conceitos sobre o modelo de traduo MultiIdiomas, desde sua nomenclatura, os pontos de traduo dentro dos programas,
o que so contextos dentro deste novo processo, e os itens de traduo que
esto englobados por esta tcnica, necessrio que se consiga visualizar como
isto ir funcionar de forma prtica dentro dos programas, dentro dos mdulos
dos produtos Datasul. Para isto, foi definida uma sequncia de busca que visa
disponibilizar uma hierarquia de Dialetos, contextos e strings no intuito de
facilitar a customizao e o entendimento por parte dos usurios e
desenvolvedores da funcionalidade. Com isso, quando se passa uma
Literal/Mensagem/String/Item de Menu para qualquer um dos utilitrios que
realizam a busca na tabela de strings Externas (ut-liter, ut-msgs, ut-ltmnu), a
sequncia de busca utilizada a que segue:
Seqncia
1
Dialeto
Padro
X
Dialeto
Usurio
Contexto
Contexto
informado/mdulo
Contexto Genrico
(*)
Contexto
informado/mdulo
Contexto Genrico
(*)
Utilizao
Objetivo
processo realizam bem como algumas situaes em programas que devem ser
analisadas para que sejam evitadas incluses de novos problemas em relao
traduo nos produtos Datasul. A seguir neste documento descrio destes
programas/situaes com o objetivo de facilitar/tornar sua implementao o
mais simples possvel.
UT-TRCAMPOS.P
Realizar traduo automtica de telas. Este programa tem a funo de
pesquisar todos os objetos de uma tela Progress baseado em sua Window,
atravs da hierarquia existente, e realizar a chamada ao utilitrio ut-liter.p para
que sejam feitas as devidas tradues da interface. Este utilitrio reconhece
todas as frames que so filhas da window, e traduz todas os objetos presentes
nestas frames automaticamente.
utilizado nos dois pontos de traduo dentro das templates:
Caso exista uma window que no seja de uma template padro Datasul, este
utilitrio poder ser chamado antes do view principal da frame do programa
para que a traduo automtica passe a ser realizada.
Este programa no espera nenhum parmetro de entrada, e deve ser chamado
diretamente atravs do fonte.
Ex: run utp/ut-trcampos.p.
UT-TRFRRP.P
Difere do anterior porque realiza traduo automtica de uma nica frame,
apenas. Busca os itens de traduo apenas na hierarquia da frame que foi
passada como parmetro, buscando os objetos passveis de traduo e
realizando ento a chamada ao ut-liter.p e posterior atribuio do valor
traduzido retornado estes objetos, de forma automtica.
Pode ser utilizado para traduzir Dialog-frames, frames de relatrio, ou
qualquer outra frame que se julgue necessrio.
Utilizao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
103
Deve ser altamente utilizado para evitar alto nvel de trabalho quando da
necessidade de traduo de frames de relatrios devido a no existncia de
uma window que seja o pai destas frames nestes tipos de programas, no
podendo nestes casos ser utilizado o utilitrio anterior (ut-trcampos.p).
Ex: run utp/ut-trfrrp.p (input frame f-parametros:handle).
Obs: Quando o programa for um relatrio, existe um filtro no RTB que caso o
programa no possua nenhuma chamada a este utilitrio, esta ser feita de
forma automtica para todas as frames do relatrio antes do ponto padro de
leitura de registros desta template ou da definio do cabealho do mesmo, ou
seja, antes da include i-rpout.i ou i-rpcab.i respectivamente, dependendo da
estrutura do programa.
UT-LSTIT.P
Converter uma String no indexada proveniente de um objeto Progress e
retorna seu contedo indexado e j traduzido no dialeto do usurio, para que
possa ser utilizado no programa chamador. Tem o objetivo de facilitar a
programao dentro da tcnica de traduo Multi-Idiomas minimizando a
necessidade de realizar tal tarefa diretamente no fonte do programa em
questo.
Dever ser utilizado sempre quando da necessidade de uma converso de
valores de um objeto Progress no indexado para valores indexados, ou ainda,
converter valor de LIST-ITEMS para LIST-ITEM-PAIRS.
Sua utilizao deve ser da seguinte forma:
Sintaxe:
Onde cLista deve ser uma lista separada por "," provinda de uma das seguintes
situaes:
Include de domnio;
Sub-programa;
Utilizao
Objetivo
Qualquer fonte que gere uma lista separada por vrgula e que este ser
utilizada em algum objeto Progress no-indexado (Combo-Box, SelectionList).
cLista.
/*
para
Importante Com a tcnica de traduo Multi-Idiomas, tudo o que antes era LIST-ITEMS,
automaticamente convertido para LIST-ITEM-PAIRS nos pontos de traduo pelos programas j
mencionados, com isso, qualquer referncia a LIST-ITEMS destes campos aps os pontos de
traduo, devero ser retrabalhados para tratar a partir de agora, LIST-ITEM-PAIRS, tendo este
utilitrio como facilitador para esta implementao. Qualquer dvida adicional, verificar o item
abaixo que trata sobre LIST-ITEMS.
UT-LITER.P
Utilitrio j existente em releases anteriores dos produtos EMS 2 e HR. Este
sofreu alteraes para contemplar as novas funcionalidades do modelo de
traduo Multi-Idiomas, como novo conceito de contextualizao, hierarquia
de busca e dialetos das Strings.
Para que no fosse gerado nenhum tipo de impacto sobre todo o legado de
programas com o antigo modelo do ut-liter, seu forma de chamada e
parmetros no foram alterados, mantendo o padro j conhecido e definido
neste manual.
Sintaxe: {utp/ut-liter.i <Literal> <Contexto> <Alinhamento>}
Utilizao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
105
UT-MSGS.P
Utilitrio j existente em releases anteriores dos produtos EMS 2 e HR,
utilizado para apresentar as mensagens dos produtos Datasul. Este utilitrio
tambm sofreu alteraes para contemplar as novas funcionalidades descritas e
possui a caracterstica da busca por mensagens baseando-se no dialeto e no
contexto cadastrado para a mensagem.
Para manter compatilidade com o legado existente nos produtos, sua sintaxe
foi mantida inalterada, conforme segue abaixo:
Sintaxe: run utp/ut-msgs.p (input <ao>
input <nmero da mensagem>
input <parmetros>).
Onde:
<ao> a ao que ser tomada pelo programa, podendo ser "show" para
mostrar, "msg" para retornar a mensagem, e "help" para retornar o help da
mensagem.
<nmero da mensagem> o nmero da mensagem
<parmetros> So os parmetros a serem substitudos na mensagem
Utilizao
Objetivo
UT-FIELD.P
Utilitrio j existente em releases anteriores dos produtos EMS 2 e HR.
Utilizado para retornar valores das propriedades dos campos do dicionrio de
dados, como label, description, etc. O que difere esta verso do modelo de
traduo Multi-Idiomas para a verso anterior que a busca no mais
realizada sobre o prprio dicionrio, e sim diretamente na tabela de strings
externas do produto, baseando-se na chave banco.tabela.campo.propriedade,
conforme mencionado em itens de traduo neste documento.
Foi mantido basicamente para no gerar incompatibilidade com o legado
existente nos produtos, mas pode ser totalmente substitudo pelo ut-liter,
devido sua maior facilidade de identificao e customizao futura pelo
usurio.
Sua sintaxe no foi alteradada, sendo ainda:
{utp/ut-field.i banco tabela campo propriedade}
Descrio
1
2
3
4
Label
ColumnLabel
Help
Format
Initial
Description
Observa
o
Continua
buscando
do banco
Continua
buscando
do banco
Utilizao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
107
UT-TABLE.P
Utilitrio j existente em releases anteriores dos produtos EMS 2 e HR.
Utilizado para retornar valores de propridades das tabelas do dicionrio de
dados, como desc, label, etc. O que difere esta verso do modelo de traduo
Multi-Idiomas para a verso anterior que a busca no mais realizada sobre
o prprio dicionrio, e sim diretamente na tabela de strings externas do
produto, baseando-se na chave banco.tabela.propriedade, conforme citado em
itens de traduo neste documento.
Foi mantido basicamente para no gerar incompatibilidade com o legado
existente nos produtos, mas pode ser totalmente substitudo pelo ut-liter,
devido sua maior facilidade de identificao e customizao futura pelo
usurio.
Sua sintaxe no foi alteradada, sendo ainda:
{utp/ut-table.i <banco> <tabela> <propriedade>}
onde propriedade :
Propriedade
Descrio
1
2
File-Label
Dump_nam
e
Desc
Observa
o
Continua
buscando
do banco
Utilizao
Objetivo
UT-LTMNU.P
Novo utilitrio criado para a traduo de todos os itens de menu (Itens de
traduo de 1 a 7). Este utilitrio realiza a busca na tabela de strings externas,
dos respectivos itens de menu, e retorna sua traduo para o programa
chamador.
Para este programa passado como parmetro 4 valores, sendo estes:
Retorno
View-as Radio-Set
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
109
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
111
.
var19999.i
3. Este include tem o seguinte contedo:
/****************************************************
**
** var99999.i Varivel: cb-xxx Programa:xxp/xx9999.w
**
*****************************************************/
&glob val1 Devedora
&glob val2 Credora
{include/ind01-10.i} {1} {2}}
/* fim */
4. No 'local-initialize' antes do dispatch da ADM deve-se carregar o 'radiobuttons' deste radio-set, bem como seu valor inicial (screen-value):
assign rs-xxx:radio-buttons in frame {&frame-name} =
{varinc/var99999.i 07}
rs-xxx:screen-value in frame {&frame-name} =
View-as Combo-box
"1":U.
Column-Labels
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
113
5. Toda codificao que precisar referenciar o valor de um item do combobox, deve ser realizada atravs do include var99999.i, isto , no podem
haver referncias diretas na forma de string ("") aos itens do combo-box
no fonte. Exemplo:
ERRADO:
if cb-tipo:screen-value in frame {&frame-name} = "Passivo"
then...
CERTO:
if cb-tipo:screen-value in frame {&frame-name} =
{varinc\var99999.i 04 2} then ...
Side-Labels
Exemplo:
{utp/ut-liter Total_Pedidos}
assign de-total-pedidos:label in frame f-relat = trim{returnvalue}.
Cliente Descrio
Total Pedidos
------------------------------------->>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
>>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
>>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
deve existir o tratamento do espao extra para traduo, que deve ser
reservado sempre esquerda do label.
{utp/ut-liter.i Total_Geral}
assign de-total-geral:label in frame f-total = return-value.
Cliente Descrio
Total Pedidos
------------------------------------->>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
>>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
>>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
____Total Geral: >>.>>>.>>9,99
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
115
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
117
Depois:
&if "{&FNC_MULTI_IDIOMA}" = "Yes" &then
assign cLista = {varinc/var00002.i 04 02}.
run utp/ut-lstit.p (input-output cLista).
assign cb-combo:list-item-pairs = cLista.
&else
assign cb-combo:list-items = {varinc/var00002.i 04 02}
&endif
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
119
form
skip(2)
c-lit-selecao
no-label colon 55
skip(1)
tt-param.tp-etiq-ini
tt-param.tp-etiq-fim
>|"
skip(1)
c-lit-impressao
no-label colon 55
skip(1)
c-destino
colon 60 "-"
tt-param.arquivo
Objetivo
Importante Sempre passar valores fixos e de variveis substituindo-se o " " (Branco) por "_"
(underline).
Esta a situao na qual ocorre o erro 135 quando a lista de valores enorme
e ultrapassa o limite de caracteres para uma atribuio. Para evitar isso foi
desenvolvida esta tcnica que modifica a forma de chamada das includes
varinc, alm de mudar a estrutura das includes responsveis pelo retorno.
Todas as includes da nomenclatura varinc/var99999.i so utilizadas para
definio da lista de valores e utilizam outra include para realizar o tratamento
do tipo de retorno escolhido pelo usurio, que pode ser um list-items de
COMBO-BOX, valores para RADIO-BUTTON, um nico elemento da lista,
entre outros. O retorno dos valores montado atravs de pr-processadores e o
valor destes so retornados todos de uma nica vez para uma varivel no
programa que incorpora a include. Sendo assim necessrio alterar a include
de retorno para gravar na varivel desejada os valores um por vez. Para tal,
necessrio gravar os valores dos pr-processadores da lista em uma temp-table
e realizar um FOR EACH nesta temp-table para gravar os valores um por vez,
a cada iterao do FOR EACH ou fazer um FIND diretamente no item
desejado.
As alteraes desta tcnica exigem um grande trabalho para adequar a include
de retorno na proposta das temp-table, porque necessrio popular a tabela
com os valores, sendo necessrio inclu-los um a um. Em compensao, o
trabalho de manipulao dos valores para retorno diminui, porque ao invs de
Implementao
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
121
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
123
03})).
Implementao
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
125
CAPTULO 8
Nome Fsico
Cadastro Simples
Masters/w-cadsim.w
Masters/w-cadsi2.w
Masters/w-cadsi3.w
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
Implementao
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
127
Lista de Links:
Source
Link Type
target
h_p-cadsim
STATE
h_p-exihel
h_p-cadsim
TABLEIO
h_viewer
h_p-navega
NAVIGATION
h_query
h_p-navega
STATE
h_query
h_query
RECORD
h_viewer
h_p-exihel
STATE
h_query
Nome Fsico
Cadastro Complexo
Masters/w-cadcom.w
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
129
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
Lista de Links:
Source
Link Type
Target
h_folder
PAGE
THIS-PROCEDURE
h_p-cadsim
STATE
h_p-exihel
h_p-cadsim
TABLEIO
h_viewer-l
h_p-navega
NAVIGATION
h_query
h_query
RECORD
h_viewer-1
h_query
RECORD
h_viewer-2
h_query
RECORD
h_viewer-3
h_query
RECORD
h_viewer-4
Implementao
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
131
h_viewer-1
GROUP-ASSIGN
h_viewer-2
h_viewer-1
GROUP-ASSIGN
h_viewer-3
h_viewer-1
GROUP-ASSIGN
h_viewer-4
h_p-exihel
STATE
h_query
h_p-navega
STATE
h_query
Nome Fsico
Masters/w-adf.w
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
133
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
135
Lista de Links
Source
Link Type
Target
h_folder
PAGE
THIS-PROCEDURE
h_p-exihel
STATE
THIS-PROCEDURE
h_p-navega
NAVIGATION
h_query
h_p-navega
STATE
h_query
h_query
RECORD
h_viewer
h_query
RECORD
h_browser1
h_query
RECORD
h_browser2
Implementao
h_p-exihel
STATE
h_query
Nome Fsico
Masters/w-incmo3.w
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
137
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
criar um SmartLink de TABLEIO, tendo como Source: THISPROCEDURE e como Target: SmartViewer recm instanciada;
Exemplo:
run pi-atualiza-parent in h_v06pd001 (input v-row-parent).
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
139
Exemplo:
{include/okfil.i h_v06pd001}
na procedure pi-reposiciona da window, substituir a ocorrncia "<queryname>" pelo nome da query utilizada no cadastro.
Exemplo:
RUN pi-reposiciona-query IN h_q06pd001 (input v-rowtable).
na SmartViewer que possuir a chave da tabela, deve ser criada uma localcreate-record e aps o run dispatch deve ser inserida a seguinte lgica:
find <tabela pai> where rowid (<tabela pai>) = v-rowparent no-lock no-error.
if available <tabela pai> then do:
assign <tabela filho>.<chave pai> = <tabela pai>.<chave
pai>.
end.
Onde:
<tabela pai>: deve ser substitudo pelo nome da tabela pai da tabela que se
est utilizando no cadastro. A tabela pai deve ser a mesma utilizada na query
do Cadastro PaiXFilho que deve chamar este programa.
<tabela filho>: deve ser substitudo pelo nome da tabela que deve estar sendo
utilizada no cadastro.
<chave pai>: deve ser substitudo pelo nome do campo chave da tabela pai que
estabelece relacionamento com a tabela que deve estar sendo utilizada no
cadastro.
/* Code placed here will execute PRIOR to standard behavior.
*/
*/
*/
Exemplo
Onde:
<nome buffer>: deve ser substitudo pelo nome que se deseja dar ao buffer da
tabela pai.
<tabela pai>: deve ser substitudo pelo nome da tabela pai da tabela que se
est utilizando no cadastro. A tabela pai deve ser a mesma utilizada na query
do Cadastro PaiXFilho que deve chamar este programa.
<tabela filho>: deve ser substitudo pelo nome da tabela que est sendo
utilizada no cadastro.
<chave pai>: deve ser substitudo pelo nome do campo chave da tabela pai que
estabelece relacionamento com a tabela que deve estar sendo utilizada no
cadastro.
/* Code placed here will execute PRIOR to standard behavior.
*/
*/
*/
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
141
Onde:
<nome buffer>: deve ser substitudo pelo nome que se deseja dar ao buffer da
tabela filho.
<tabela pai>: deve ser substitudo pelo nome da tabela pai da tabela que se
est utilizando no cadastro. A tabela pai deve ser a mesma utilizada na query
do Cadastro PaiXFilho que deve chamar este programa.
<tabela filho>: deve ser substitudo pelo nome da tabela que est sendo
utilizada no cadastro.
<chave pai>: deve ser substitudo pelo nome do campo chave da tabela pai que
estabelece relacionamento com a tabela que deve estar sendo utilizada no
cadastro.
/* Code placed here will execute PRIOR to standard behavior.
*/
*/
*/
Implementao
Link Type
Target
THIS-PROCEDURE
TABLEIO
h_viewer
h_query
RECORD
h_viewer
Link Type
Target
h_query
RECORD
h_viewer1
THIS-PROCEDURE
TABLEIO
h_viewer1
h_viewer1
GROUP-ASSIGN
h_viewer2
h_viewer1
GROUP-ASSIGN
h_viewer3
h_query
RECORD
h_viewer2
h_query
RECORD
h_browser3
Nome Fsico
Masters/w-paiamb.w
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
143
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
145
Lista de Links:
Source
Link Type
Target
h_folder
PAGE
THIS-PROCEDURE
p-cadpai
TABLEIO
h_viewer
p-cadpai
STATE
h_query
h_p_exihel
STATE
h_query
h_p-navega
NAVIGATION
h_query
h_p-navega
STATE
h_query
h_query
RECORD
h_viewer
h_query
RECORD
h_browse1
h_query
RECORD
h_browse2
Implementao
Nome Fsico
Master/w-incmo3.w
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
147
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
criar um SmartLink de TABLEIO, tendo como Source: THISPROCEDURE e como Target: SmartViewer recm instanciada;
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
149
na procedure pi-reposiciona da window, substituir a ocorrncia "<queryname>" pelo nome da query utilizada no cadastro;
Exemplo:
RUN pi-reposiciona-query IN h-q06pd001 (input v-rowtable).
na SmartViewer que possuir a chave da tabela, deve ser criada uma localcreate-record e aps o run dispatch deve ser inserida a seguinte lgica:
find <tabela pai> where rowid (<tabela pai>) = v-row-parent
no-lock no-error.
if available <tabela pai> then do:
assign <tabela filho>.<chave pai> = <tabela pai>.<chave
pai>.
end.
Onde:
<tabela pai>: deve ser substitudo pelo nome da tabela pai da tabela que se
esta utilizando no cadastro. A tabela pai deve ser a mesma utilizada na query
do Cadastro PaiXFilho que deve chamar este programa
<tabela filho>: deve ser substitudo pelo nome da tabela que deve estar sendo
utilizada no cadastro
<chave pai>: deve ser substitudo pelo nome do campo chave da tabela pai que
estabelece relacionamento com a tabela que deve estar sendo utilizada no
cadastro
/* Code placed here will execute PRIOR to standard behavior.
*/
*/
Implementao
Link Type
Target
THIS-PROCEDURE
TABLEIO
h_viewer
h_query
RECORD
h_viewer
Link Type
Target
h_query
RECORD
h_viewer1
THIS-PROCEDURE
TABLEIO
h_viewer1
h_viewer1
GROUP-ASSIGN
h_viewer2
h_viewer1
GROUP-ASSIGN
h_viewer3
h_query
RECORD
h_viewer2
h_query
RECORD
h_viewer3
Nome Fsico
Master/w-incmdp.w
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
151
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
criar um SmartLink de TABLEIO, tendo como Source: THISPROCEDURE e como Target: SmartViewer recm instanciada;
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
153
na procedure pi-reposiciona da window, substituir a ocorrncia "<queryname>" pelo nome da query utilizada no cadastro;
Exemplo:
RUN pi-reposiciona-query IN h_q07pd001 (input v-rowtable).
Link Type
Target
THIS-PROCEDURE
TABLEIO
h_viewer
h_query
RECORD
h_viewer
Link Type
Target
h_query
RECORD
h_viewer1
THIS-PROCEDURE
TABLEIO
h_viewer1
h_viewer1
GROUP-ASSIGN
h_viewer2
Implementao
h_viewer1
GROUP-ASSIGN
h_viewer3
h_query
RECORD
h_viewer2
h_query
RECORD
h_viewer3
Nome Fsico
Window Inclui/Modifica
Pai
Master/w-incmdp.w
deve-se indicar uma tabela externa, essa tabela deve ser a mesma
tabela utilizada na query do Cadastro PaiXFilho em que o browser
deve ser utilizado;
a query deve conter a tabela dos registros filhos que iro ser exibidos no
Cadastro PaiXFilho. Exemplo de query do browser:
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
155
Implementao
Nome Fsico
Masters/wbrwzoo.w
Onde:
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
157
Obs.: A condio pode obedecer a valores de mais campos bastando adicionla. Exemplo:
<Tabela>.<Campo1>
<Tabela>.<Campo1>
<Tabela>.<Campo2>
<Tabela>.<Campo2>
>=
>=
>=
>=
fi-ini-<campo1>
fi-ini-<campo1>
fi-ini-<campo2>
fi-ini-<campo2>
and
and
and
...
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
159
Implementao
Para:
assign input frame {&frame-name} fi-ini-cust-num fi-fin-custnum.
Estilo Utilizado
Nome Fsico
Masters/w-consim.w
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
161
Implementao
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
Lista de Links
Source
Link Type
Target
h_p-navega
NAVIGATION
h_query
h_p-navega
STATE
h_query
h_query
RECORD
h_viewer
h_p-exihel
STATE
h_query
Nome Fsico
Masters/w-concom.w
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
163
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
165
Source
'
Link Type
Target
h_folder
PAGE
THIS-PROCEDURE
h_p-navega
NAVIGATION
h_query
h_query
RECORD
h_viewer1
h_query
RECORD
h_viewer2
h_query
RECORD
h_viewer3
h_query
RECORD
h_viewer4
h_viewer-1
GROUP-ASSIGN
h_viewer-2
h_viewer-1
GROUP-ASSIGN
h_viewer-3
h_viewer-1
GROUP-ASSIGN
h_viewer-4
h_p-exihel
STATE
h_query
h_p-navega
STATE
h_query
Implementao
Nome Fsico
Masters/w-conrel.w
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
167
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
169
Lista de Links:
'Source
Link Type
Target
h_folder
PAGE
THIS-PROCEDURE
h_p-exihel
STATE
THIS-PROCEDURE
h_p-navega
NAVIGATION
h_query
h_p-navega
STATE
h_query
h_query
RECORD
h_viewer
h_query
RECORD
h_browse1
h_query
RECORD
h_browse2
h_p-exihel
STATE
h_query
Frame
Imagem
Preprocessador
Seleo
f-pg-sel
im-pg-sel
PGSEL
Classificao
f-pg-cla
im-pg-cla
PGCLA
Parmetros
f-pg-par
im-pg-par
PGPAR
Digitao
f-pg-dig
im-pg-dig
PGDIG
Impresso
f-pg-imp
im-pg-imp
PGIMP
PGSEL
PGCLA
PGPAR
PGDIG
PGIMP
f-pg-sel
f-pg-cla
f-pg-par
f-pg-imp
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
171
Pgina de Seleo
1. Colocar os fill-ins de inicial e final, para cada campo que precisa de faixa.
A sugesto criar como 'Database Fields' e aps convert-los para
variveis para obter automaticamente os labels, formatos e tamanhos do
dicionrio de dados.
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
2. Caso seja necessrio implementar retngulos com label, estes labels devem
ser fill-ins view-as text, e o seu valor deve ser informado no seu initial e
private-data. As propriedades 'Display' e 'Enable' devem ser retiradas.
Pgina de Digitao
1. Em 'Definitions', corrigir a definio da temp-table de digitao tt-digita
inserindo os campos necessrios;
2. Em 'Section Editor', para o objeto browse br-digita adaptar os seguintes
gatilhos para a nova definio da temp-table tt-digita e outras
necessidades:
'Display': define os campos da temp-table a serem apresentados e quais
devem ficar habilitados;
'Row-entry': determina valores iniciais para os campos da temp-table na
incluso de novas linhas, exceto quando se trata da primeira linha do
browse;
'Row-leave': salva as alteraes feitas pelo usurio.
3. Ainda em 'Section Editor', mas para os botes bt-inserir e bt-alterar,
adaptar os seus gatilhos de 'Choose', na linha que aplica um evento 'Entry',
sobre o primeiro campo habilitado no browse;
4. Todas as validaes do browse br-digita devem ser feitas na procedure piexecutar no local indicado pelo comentrio;
5. Opcionalmente, os gatilhos de 'leave' (para atributos de referncia), 'f5' e
'mouse-select-dblclick' (para acionamento do zoom), para as colunas do
browse podem ser necessrios. Neste caso, tais gatilhos devem ser
codificados " mo", no incio do 'Main Block' do programa. Exemplo:
ON F5, MOUSE-SELECT-DBLCLICK OF tt-digita.<campo> in
browse br-digita do:
{include/zoomvar.i ...}
END.
Observao Para mais detalhes sobre esta tcnica, ver captulo Como implementar Zoom e
campos de referncia para campos de chave estrangeira.
Pgina de Impresso
Na pgina de impresso no necessrio que se tenha qualquer funo
adicional para o seu correto funcionamento. Porm, se necessrio, seguir a
tcnica Como implementar Parmetros de Impresso em Relatrios.
Gravao e validao dos parmetros
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
173
para column 2,00 e row 4,46, e rs-execucao para column 2,86 e row
4,83.
Tambm possvel passar durante a inicializao do programa um arquivo de
modelo padro para o relatrio, neste caso o usurio no ser obrigado a
informar um modelo manualmente. Para isto basta incluir no Main Block do
programa, antes da chamada a procedure enable_UI, a linha abaixo:
ASSIGN c-modelo-default = SEARCH("<pasta>\<modelo.rtf>").
onde:
<pasta> = sub-pasta aonde se encontra o arquivo de modelo no propath
<modelo.rtf> = arquivo que contm o modelo no formato rtf
Include Novo
Cdp\cd9500.i
Include\i-rpvar.i
Cdp\cd9500.fl
Include\i-rpcab.i
Cdp\cd9520.i
Include\i-rpout.i
Cdp\cd9540.i
Include\i-rpclo.i
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
175
4. Nas selees, ao invs de utilizar a palavra "", para dar idia de faixa,
substitu-la pelos caracteres "|< >|" semelhantes as imagens utilizadas na
tela de seleo, e que no necessitam ser traduzidos.
5. Todos os labels que no forem do dicionrio de dados e que apaream no
relatrio devem ser tratados atravs dos includes {utp/ut-liter.i}, {utp/utfield.i} ou ainda {utp/ut-table.i}.
6. Em todos os forms/frames de impresso deve-se colocar a clusula streamio.
7. Para utilizar a funcionalidade de impresso para arquivo RTF:
7.1. definir o prprocessador conforme abaixo:
&GLOBAL-DEFINE RTF YES
7.2. definir o prprocessador abaixo setando o tamanho da pgina:
&SCOPED-DEFINE pagesize N
N o nmero de linhas por pgina e por default seu valor 42.
Este nmero deve ser ajustado para cada relatrio conforme o tamanho
do modelo RTF que vai ser utilizado. Caso este tamanho no esteja
correto ocorrer problema na quebra da pgina.
7.3. a definio da temp-table tt-param deve ser idntica a definio da
mesma no programa de interface.
7.4. condicionar o VIEW das frames de cabealho/rodap no incio do
programa, para que quando o destino for para RTF as mesmas no
sejam apresentadas. Segue exemplo abaixo:
IF tt-param.l-habilitaRTF <> YES THEN DO:
VIEW STREAM str-rp FRAME f-cabec.
Exemplo de um
progra
ma
RP.P de
Relatri
o
AS INTEGER
FIELD arquivo
FIELD usuario
FIELD data-exec
AS DATE
FIELD hora-exec
AS INTEGER
FIELD classifica
AS INTEGER
FIELD desc-classifica
FIELD modelo-rtf
AS CHARACTER FORMAT "x(35)" /*
arquivo modelo para RTF */
FIELD l-habilitaRtf
AS LOG
FIELD ini-cust-num
pgina seleo */
LIKE customer.cust-num
/* campo
FIELD fim-cust-num
pgina seleo */
LIKE customer.cust-num
/* campo
FIELD sales-rep
pgina parmetros */
LIKE salesrep.sales-rep
/* campo
.
DEFINE TEMP-TABLE tt-raw-digita NO-UNDO
FIELD raw-digita
AS RAW.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
177
/* recebimento de parmetros */
DEFINE INPUT PARAMETER raw-param AS RAW NO-UNDO.
DEFINE INPUT PARAMETER TABLE FOR tt-raw-digita.
CREATE tt-param.
RAW-TRANSFER raw-param TO tt-param.
/* include padro para variveis de relatrio
*/
{include/i-rpvar.i}
/* definio de variveis
DEFINE VARIABLE h-acomp
*/
AS HANDLE
NO-UNDO.
c-programa
= "SP0014RP"
c-versao
= "1.00"
c-revisao
= ".00.000"
c-empresa
= "Empresa Teste"
c-sistema
= "Sports"
c-titulo-relat
= "Listagem Order".
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
179
Cadastro de
Parme
tros e
Digita
es
(JE0101
)
Order.Order-Date
Order.Promise-Date
Order.Sales-Rep
Order.Ship-Date
Order.Carrier WITH FRAME f-customer.
DOWN STREAM str-rp WITH FRAME f-customer.
END.
END.
/*fechamento do output do relatrio*/
{include/i-rpclo.i &STREAM="stream str-rp"}
RUN pi-finalizar IN h-acomp.
RETURN "OK":U.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
181
Parmetros
Cadastrando os
Parme
tros
Digitaes
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
183
Seqncia:
Campo:
Tipo:
Extent:
Tamanho:
Formato:
Label:
Ajuda:
Val Default
Consideraes
Exportao
JOB
sobre o
Executi
cadastr
on
amento
(JE0104
)de
campos
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
185
Implementao
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
187
Nome Fsico
Masters/w-paruni.w
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
else
run new-state('update-begin':U).
run dispatch in this procedure ('enable-fields').
Implementao
criar um SmartLink de TABLEIO, tendo como Source THISPROCEDURE e como Target a SmartViewer da pgina1;
Nome Fsico
Window Formao
Masters/w-forma.w
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
189
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
191
Lista de Links:
Source
Link Type
Target
Implementao
'
h_browse-formao
STATE
THIS-PROCEDURE
h_p-exihel
STATE
h_query
h_p-navega
NAVIGATION
h_query
h_p-navega
STATE
h_query
h_query
RECORD
h_viewer
h_query
RECORD
h_browse-formao
THIS PROCEDURE
STATE
h_browse-fonte
Nome Fsico
Masters/w-form2.w
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
193
Seqncia
1. Criar browse origem:
definir query;
Implementao
Estilo
Utilizado
'
Nome Fsico
Masters/wbrwfrm.w
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
195
Dicas Gerais
Frame
Imagem
Preprocessador
Layout
f-pg-lay
im-pg-lay
PGLAY
Seleo
f-pg-sel
im-pg-sel
PGSEL
Parmetros
f-pg-par
im-pg-par
PGPAR
Log
f-pg-log
im-pg-log
PGLOG
tambm, neste estilo, todo trabalho de traduo de labels, helps, screenvalues deve ser feito automaticamente por um include padro do estilo.
Excees: list-items do widget combo-box;
Preparao do programa
1. Verificar quantas pginas so necessrias, as pginas de layout, parmetros
e log so obrigatrias, somente a pgina de seleo opcional, caso haja
seleo desconsiderar as tarefas 2, 3 e 4.
2. Eliminar a frame f-pg-sel.
3. Eliminar a imagens im-pg-log e renomear as imagens:
im-pg-par > im-pg-log
im-pg-sel > im-pg-par
4. Em 'Definitions' limpar o contedo dos preprocessadores PGSEL
&GLOBAL-DEFINE
&GLOBAL-DEFINE
&GLOBAL-DEFINE
&GLOBAL-DEFINE
PGLAY f-pg-lay
PGSEL
PGPAR f-pg-par
PGLOG f-pg-log
Pgina de Layout
1. No 'Main Block', existe a chamada para um include denominado
{include/i-imvrf.i}, que possue dois parmetros, informar neste o nome do
programa no formato XX9999 e a verso do layout no formato 999 (o
valor inicial da verso 001). Exemplo:
{ include/i-imvrf.i &programa=CP0406 &versolayout=001 }
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
197
Exemplo
Include Novo
Cdp\cd9500.i
Include\i-rpvar.i
Cdp\cd9500.fl
Include\i-rpcab.i
Cdp\cd9520.i
Include\i-rpout.i
Cdp\cd9540.i
Include\i-rpclo.i
Exemplo de um
progra
ma
RP.P de
Importa
o
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
199
integer
char
char
integer
char
date
integer
integer
integer
stream s-imp.
var h-acomp as handle no-undo.
var c-linha as char no-undo.
var i-cust as int no-undo.
*/
"XX0006RP"
"1.00"
".00.000"
"Empresa Teste"
'Sports'
= "Listagem de Erros da Importao de
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
201
Dicas Gerais
Frame
Imagem
Preprocessador
Layout
f-pg-lay
im-pg-lay
PGLAY
Seleo
f-pg-sel
im-pg-sel
PGSEL
Parmetros
f-pg-par
im-pg-par
PGPAR
Log
f-pg-log
im-pg-log
PGLOG
tambm, neste estilo, todo trabalho de traduo de labels, helps, screenvalues deve ser feito automaticamente por um include padro do estilo.
Excees: list-items do widget combo-box;
Preparao do programa
1. Verificar quantas pginas so necessrias, as pginas de layout, parmetros
e log so obrigatrias, somente a pgina de seleo opcional, caso haja
seleo desconsiderar as tarefas 2, 3 e 4.
2. Eliminar a frame f-pg-sel.
3. Eliminar a imagens im-pg-log e renomear as imagens:
im-pg-par > im-pg-log
im-pg-sel > im-pg-par
4. Em 'Definitions' limpar o contedo dos preprocessadores PGSEL
&GLOBAL-DEFINE
&GLOBAL-DEFINE
&GLOBAL-DEFINE
&GLOBAL-DEFINE
PGLAY f-pg-lay
PGSEL
PGPAR f-pg-par
PGLOG f-pg-log
Pgina de Layout
1. No 'Main Block', existe a chamada para um include denominado
{include/i-imvrf.i}, que possue dois parmetros, informar neste o nome do
programa no formato XX9999 e a verso do layout no formato 999 (o
valor inicial da verso 001). Exemplo:
{ include/i-imvrf.i &programa=CP0406 &versolayout=001 }
Pgina de Seleo
1. Colocar os fill-ins de inicial e final, para cada campo que precisar de
faixa. A sugesto cri-los como 'Database Fields' e aps convert-los
para variveis para obter automaticamente os labels, formatos e tamanhos
do dicionrio de dados.
2. Corrigir os 'initial values' das variveis de inicial e final.
3. Retirar possveis queries que o UIB automaticamente queira associar a
frame.
Pgina de Parmetros
1. Colocar as variveis necessrias na representao desejada (radio-set,
toggle-box, fill-in), definindo label, formato, initial e help para as mesmas.
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
203
2. Caso seja necessrio implementar retngulos com label, estes labels devem
ser fill-ins view-as text, e o seu valor deve ser informado no seu initial e
private-data. As propriedades 'Display' e 'Enable' devem ser retiradas.
3. Mudar o private-data e o initial do label "Arquivo de Entrada" do
retngulo para "Arquivo de Sada".
4. No on choose do bt-arquivo-entrada, pode ser adicionado um terceiro
parmetro na include i-imarq.i , onde possvel passar como parmetro os
filtros que sero utilizados na sistem dialog, se no for passado nada neste
parmetro a include assumira como padro o tipo de arquivo *.lst e todos
os tipos de arquivos.
DO:
{include/i-imarq.i c-arquivo-entrada f-pg-par "'*.XLS' '*.xls' , 'todos' '*.*'" }
END.
Pgina de Log
1. Remover o retngulo, o label e o radio-set com as opes "Todos" e
"Rejeitados".
2. Mover todos os outros objetos desta frame para cima. No esquecer do
boto "Configurar Impressora".
Gravao e validao dos parmetros
1. Em 'Definitions', implementar os campos de parmetros e seleo na
definio da temp-table tt-param.
2. Eliminar o campo todos da temp-table tt-param.
3. Na procedure 'pi-executar', colocar as validaes das pginas de
parmetros e seleo, lembrando que elas devem apresentar uma
mensagem de erro cadastrada, posicionar na pgina com problemas,
colocando o focus no campo com problemas.
if input frame f-pg-par i-nr-nivel > 19 then do:
run utp/ut-msgs.p (input "show",
input 73,
por:
run utp/ut-vlarq.p (input frame f-pg-par c-arquivo-entrada).
if return-value = "nok" then do:
run utp/ut-msgs.p (input "show",
input 73,
input "").
apply 'mouse-select-click' to im-pg-log in frame f-import.
apply 'entry' to c-arquivo-destino in frame f-pg-log.
return error.
end.
Exemplo de um
progra
ma
RP.P de
Exporta
o
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
205
Include Novo
Cdp\cd9500.i
Include\i-rpvar.i
Cdp\cd9500.fl
Include\i-rpcab.i
Cdp\cd9520.i
Include\i-rpout.i
Cdp\cd9540.i
Include\i-rpclo.i
integer
char
char
char
date
integer
*/
{include/i-rpvar.i}
/* definio de variveis e streams */
def stream s-exp.
def var h-acomp as handle no-undo.
/* definio de frames do log */
/* include padro para output de log */
{include/i-rpout.i &STREAM="stream str-rp" &TOFILE=tt-param.arqdestino}
/* include com a definio da frame de cabealho e rodap */
{include/i-rpcab.i &STREAM="str-rp"}
/* bloco principal do programa */
assign c-programa
=
c-versao
=
c-revisao
=
c-empresa
=
c-sistema
=
c-titulo-relat
Clientes".
"XX0006RP"
"1.00"
".00.000"
"Empresa Teste"
'Sports'
= "Listagem de Erros da Exportao de
Implementao
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
207
Nome Fsico
Window Pesquisa
Masters/w-pesqui.w
Link Type
Target
h_browse
STATE
THIS-PROCEDURE
h_folder
PATE
THIS-PROCEDURE
Implementao
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
209
Nome Fsico
Dialog VaPara
Masters/d-vapara.w
Implementao
Sugesto Para que os campos sejam exibidos no tamanho adequado (altura 0.88) voc deve
alterar as seguintes propriedades:
1. No AppBuilder Acessar Options - Preferences
2. Selecionar o folder Grid Units
3. Alterar a opo Layout Units para Pixel
4. Preencher os campos com valor 1
Ou alterar o tamanho dos campos manualmente.
Nome Fsico
Masters/w-digit.w
Estilo
Utilizado
'
Nome Fsico
CustomBrowserDigita
Masters/b-digit.w
Implementao
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
211
'Estilo Utilizado
Nome Fsico
Masters/wquery.w
Implementao
Nome Fsico
Masters/vieweraf.w
Padro;
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
213
Exemplo
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
215
*/
*/
Tipo de Objetos
Preprocessador
Finalidade
Adm-create-fields
Habilitados somente na
criao de um novo registro.
Outras variveis
Adm-modify-fields
Adm-assign-fields
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
217
*/
{utp/ut-liter.i Quantidade * R}
assign fill-in_Qty:label in frame {&frame-name} = return- Comenta
r
value.
chamada
{utp/ut-liter.i Preo * R}
padro
assign fill-in_Price:Label in frame {&frame-name} = returnvalue.
{utp/ut-liter.i Pas * L}
assign cb-country:label in frame {&frame-name} = return-value
cb-country:list-items in frame {&frame-name} =
{pdinc/i01pd001.i 03}.
/* Dispatch standard ADM method.
*/
RUN dispatch IN THIS-PROCEDURE (INPUT 'initialize':U).
/* Code placed here will execute AFTER standard behavior. */
Exemplo
@
@
@
@
@
@
fill-in_Qty
fill-in_Price
fill-in_order-num
fill-in_line-num
fill-in_item-num
fill-in_Discount
*/
Comenta
/* Dispatch standard ADM method.
*/
r
/* RUN dispatch IN THIS-PROCEDURE (INPUT 'initialize':U). */
chamada
/* Code placed here will execute AFTER standard behavior. */
padro
/* if adm-new-record = yes then
*/
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
219
*/
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
221
Exemplo
Preprocessador
Finalidade
Adm-create-fields
Adm-assign-fields
Adm-modify-fields
*/
*/
*/
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
223
= fill-in_Qty
= fill-in_Price
*/
*/
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
225
Observao Para os campos do tipo fill-ins, deve ser observado se o mesmo possue trigger
de "LEAVE"/"VALUE-CHANGED" e no tenha lupa como cursor do mouse ou um boto de
zoom na sua direita; ou possua trigger de "ENTRY". Caso o fill-in se encaixe em uma das
opes acima, deve ser efetuado o registro para o WebEnabler, conforme tcnica Como registrar
campo do tipo Fill-in para o WebEnabler.
O WebEnabler j registra automaticamente o evento de "LEAVE" para TODOS os fill-ins que
possurem a lupa como cursor do mouse, ou que possurem um boto de zoom na sua direita.
Portanto no necessrio efetuar o registro para esses fill-ins.
CAPTULO 9
Validaes
Validaes de Tela
As validaes tm o objetivo de conferir as entradas de dados fornecidas pelo
usurio a um programa, de modo que estejam condizentes com o que o
programa pede e que no sejam passadas informaes errneas de modo a
prejudicar o andamento correto das operaes.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
227
Para evitar que a validao acabe afetando a performance do programa, devese fazer a validao apenas quando houver a tentativa de alterao, incluindo o
cdigo a seguir antes do dispatch padro da procedure Local-Enable-Fields:
define variable c-p-cadsim as character no-undo.
if not adm-new-record and available <tabela> then do:
if <condio> then do:
RUN get-link-handle IN adm-broker-hdl
(INPUT THIS-PROCEDURE,
INPUT "TableIO-Source",
OUTPUT c-p-cadsim).
if valid-handle(widget-handle(c-p-cadsim)) then do:
RUN pi-cancelar IN widget-handle(c-pcadsim).
<mensagem>.
return "ADM-ERROR":U.
end.
end.
end.
Onde:
<tabela>: a tabela que est sendo utilizada na manuteno
<condio>: uma condio qualquer que indica que o registro no pode ser
alterado
<mensagem>: uma mensagem a ser apresentada ao usurio informando
impossibilidade da alterao para o registro.
Observao Essa tcnica deve ser evitada, pois o usurio ver o boto de alterao habilitado
e ao tentar alterar o registro a mensagem ir interromp-lo, contradizendo a funo do boto.
Browse de Digitao
Os valores do browse de digitao devem ser validados no momento que o usurio sai do
registro, no evento Row-Leave do browse.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
229
Para que isso no ocorra, as validaes de dicionrio devem ser replicadas nos
programas, nos locais indicados conforme o Template utilizado, fazendo com
que seja possvel o tratamento dos problemas que possam ocorrer no
andamento das validaes.
Observaes
Importante
231
CAPTULO 10
Mensagens
Este captulo apresenta mensagens padres para algumas situaes comuns no
Datasul-EMS 2.00. As mensagens j cadastradas e utilizadas que se encaixem
nas situaes abaixo devem ser alteradas, mas no necessrio realizar esta
alterao agora, somente quando o programa for aberto para outras
manutenes. Para auxiliar o cadastro e manuteno de mensagens, existe o
Sistema de Mensagens. Para acessar o Sistema de Mensagens, voc deve
primeiro entrar em contato com a equipe de ADF e solicitar a criao de um
usurio no Sistema de Mensagens. Em seguida voc pode acessar o Sistema
pelo endereo: X:\Atalhos\SistTec\Mensagem.
1. Os novos programas devem utilizar estas mensagens;
2. Quando o parmetro solicitar o label da tabela, deve-se utilizar o returnvalue do include utp/ut-table.i.
A manuteno do cadastro das mensagens, assim como a incluso de novas
mensagens s pode ser realizada pela Datasul. Para clientes e parceiros
autorizada somente a utilizao das mensagens j cadastradas.
Mensagem: &1 j existente !
Nmero: 1
Help: J existe ocorrncia em &1 com a chave informada.
Parmetros: &1 = label da tabela
Mensagens substitudas: &1 j cadastrado.
&1 j cadastrada.
Registro &1 j cadastrado.
Agncia j cadastrada.
232
&1 j informado !
Observaes:
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
233
Eliminao invlida !
no utilizar letras maisculas no meio da frase sem que seja nome prprio.
Exemplos:
Linha Possui Ordens Valorizadas !
Ordem de Produo No Possui &1.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
235
Nomenclatura
237
CAPTULO 11
Programas Reutilizveis
Procedures Internas
Procedures Internas reutilizveis so definidas em includes que devem ser
incorporados aos programas. Se forem incorporadas a programas .w, no
devem fazer acesso muito grande a dados pois se isto acontecer devem ser
transformadas em API(s). As procedures tratadas neste tpico diferem de
outras ou mesmo de outros includes pelo fato de serem documentadas
(posteriormente) em Manual Tcnico do Mdulo, e disponibilizadas para
clientes e parceiros da DATASUL.
Exemplo :
Clculo do valor presente de uma cotao de preos;
Converso de valores entre moedas;
Rotinas de Extenso.
A nomenclatura dos includes que contm este tipo de procedure interna deve
ser a seguinte:
XXINC999.i, onde:
XX - Sigla do Mdulo
INC - Fixo
999 - Seqencial.
239
CAPTULO 12
Ferramentas
Application Compiler
O Application Compiler uma ferramenta Progress utilizada para compilar
arquivos.
Para iniciar o Application Compiler, deve-se estar com qualquer uma das
ferramentas Progress abertas (Data Dictionary, Procedure Editor, UIB ... ),
pressionar o menu Tools e em seguida o item Application Compiler. Sendo
ento, exibida a janela a seguir, na qual se deve informar os arquivos que se
deseja compilar e as opes de compilao.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
241
Opes de Compilao
O Application Compiler disponibiliza algumas opes de compilao,
descritas abaixo:
Iniciar Compilao
Para iniciar a compilao dos arquivos deve-se pressionar o boto 'Start
Compile'.
Caso o item de menu Show Status esteja marcado, ser exibida uma caixa de
dilogo com informaes sobre o status da compilao (arquivos compilados
com sucesso, erros encontrados, ... ); caso este item de menu no esteja
marcado, ser exibida a mesma caixa de dilogo mas, somente ao final da
compilao dos arquivos.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
243
Roundtable
O Roundtable uma ferramenta que facilita o controle de verso de
programas, objetos e includes.
Para a utilizao do Roundtable, deve-se seguir os passos descritos abaixo:
1. Selecionar a Workspace;
3. Aps criada a task, selecionar a task que foi criada na opo Task.
Observao: Poder ter mais de uma Task criada para um mesmo usurio.
4. Como editar um objeto:
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
245
Observao: Caso essa opo no esteja habilitada certifique-se que a task esteja selecionada
ou se o objeto j est em uso por outra pessoa.
Para verificar se o objeto j est em uso Ir em Folder - Spec (que est na tela
principal do Roundtable) - na ltima label Event, que deve estar escrito 'Work
in process'.
Observao Com isso deve abrir o programa no Procedure Editor. Caso se queira abrir no
Interface Builder -
clicar em Ok.
Caractersticas
Objetivo
247
CAPTULO 13
APIs
Funcionamento
248
Logo, dados como empresa, usurio, devem ser enviados para a API, atravs
da temp-table, de forma alguma pode ser utilizado os valores das variveis
globais definidas no ut-glob.i, ou qualquer outro tipo de varivel global.
O retorno da API, deve ocorrer das seguintes formas:
Documentao
Verso
Retorno
de
de Erros
Integra
o
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
249
A API deve ter um controle interno para a verso corrente de integrao. Esta
verso fixa no programa API, sendo controlada pelo programador (deve ser
obrigatoriamente um nmero seqencial). Esta verso deve ser incrementada,
sempre que ocorrer alguma alterao no layout das temp-tables, ou na forma
de passar e receber os parmetros.
Utilizar um campo com nome cod-versao-integracao.
O programa chamador deve obrigatoriamente passar esta verso como
parmetro de entrada (sempre o primeiro campo da temp-table) e a API faz a
consistncia, verificando se a verso em que est o programa chamador
compatvel com a verso de integrao da API. Cabe ao responsvel do
programa chamador, adequar seu programa s exigncias impostas pela API.
No caso, da verso de integrao estiver incompatvel, deve ser utilizada a
mensagem de erro nmero 3941.
Importante lembrar que, esta verso de integrao da API diferente da
verso do programa da API, uma vez que, pode alterar o programa e gerar uma
nova verso, sem que seja necessrio alterar a verso de integrao da API.
Sempre que a API encontrar algum problema, com os dados recebidos por ela,
a mesma deve retornar no prprio registro da temp-table de entrada com
problemas, ou atravs de uma temp-table de erros de dois campos com as
seguintes informaes:
Campo
Descrio
cod-erro
desc-erro
Exemplo
verso de integrao;
objetivo;
consideraes gerais.
No manual tcnico do mdulo deve conter uma relao com todas as APIS do
mdulo; nome fsico da API, objetivo e nome do arquivo help. Se o usurio
precisar utilizar a API, este deve buscar via BBS o help corrente da API.
Nome Fsico: mmp/mpapi001.p
Verso de Integrao: 1
Objetivo: verificar se deve replicar transao nas mquinas remotas e por
buscar cdigo da mquina local.
Parmetros de Entrada: Para executar a API necessrio utilizar o include
{mpp/mpapi001.i} que contm a definio dos parmetros de entrada do
programa.
/**************************************************************
** Include: MPAPI001.i
** Definio das temp-tables utilizadas para verificar
** replicao das mensagens para uma planta remota - Multiplanta
**
***************************************************************
def temp-table tt-replic-msg
field cod-versao-integracao as integer format "999"
field cod-transacao
as char format "x(8)"
field log-replica-msg
as logical
field cod-erro
as integer format "99999"
field desc-erro
as char
format "x(60)"
field cd-maquina-local
as integer format "999".
Campo
Descrio
cod-versao-integracao
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
251
cod-transacao
log-replica-msg
cod-erro
desc-erro
cd-maquina-local
Cdigo da API
/*************************************************************
** Programa : MPAPI001.P
** API responsvel por verificar se deve replicar transao nas
** mquinas remotas e por buscar cdigo da mquina local
**
*************************************************************/
{mpp/mpapi001.i}
def input-output parameter table for tt-replic-msg.
def var i-versao-integ as integer format "999" no-undo.
assign i-versao-integ = 001.
find first tt-replic-msg no-lock no error.
if avail tt-replic-msg then do:
if tt-replic-msg.cod-versao-integracao <> i-versao-integ
then do:
run utp/ut-msgs.p (input "msg",
input 3941,
input "")
assign tt-replic-msg.cod-erro = 3941
tt-replic-msg.desc-erro = return-value.
return "NOK"
end.
else do:
find first maq-dest-trans where maq-dest-trans. cdtrans = tt-replic-msg.cod-transacao no-lock no-error.
if avail maqui-dest-trans then
assign tt-replic-msg.log-replica-msg = yes.
find first maquina where maquina.tp-conexao = 1 no-lock noerror.
if avail maquina then
assign tt-replic-msg.cd-maquina-local =
maquina.cd-maquina.
else do:
run utp/ut-msgs.p (input "msg",
input 3942,
input "").
Assign tt-replic-msg.cod-erro = 3942
tt-replic-msg.desc-erro = return-value
tt-replic-msg.cd-maquina-local = 0.
Return "NOK".
end.
end.
end.
else
return "NOK".
/* fim */
este documento deve ser escrito de forma mais clara possvel, pois deve
estar disponvel para clientes e parceiros comerciais;
Evoluo de lgica
Exemplo
de API,
sem
mudan
a de
parme
tros
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
253
/* API nova */
define input param param-1 as char no-undo.
define input param param-2 as int no-undo.
find first param-global exclusive-lock no-error.
if avail param-global then
assign param-global.taxa = 0.3. + param-global.indic.
Observao O resultado obtido atravs da nova API deve ser, sempre que
possvel, idntico ao resultado da antiga.
Evoluo de lgica
Exemplo
de API ,
com
mudan
as de
parme
tros
Para este tipo de evoluo, deve ser criada uma nova API com o mesmo nome
da API antiga, acrescida de um diferenciador. EX.: UTAPI012.P
UTAPI012A.P.
Esta nova API deve possuir uma procedure interna EXECUTE, que receber
os novos parmetros e uma lgica.
A API antiga deve chamar a nova API de forma persistente e roda a procedure
interna EXECUTE, passando todos os antigos parmetros e um valor padro
para cada um dos novos parmetros.
/* API antiga - UTAPI012.P */
define input-output parameter table for tt-configuracao2.
define input-output parameter table for tt-dados.
define input-output parameter table for tt-erros.
for each tt-erros:
delete tt-erros.
end.
*/
Evoluo de lgica
Exemplo
de API,
com
altera
o de
campos
na
tempAPTULO 8
tables
tilizando os Estilos e suas Tcnicas
de
parme
tros
Construo de Programas
255
Para este tipo de evoluo, deve ser criada uma nova API com o mesmo nome
da API antiga, acrescida de um diferenciador. Ex.: UTAPI012.P
UTAPI012A.P.
Esta nova API deve possuir uma procedure interna EXECUTE, que receber
os novos parmetros e uma lgica.
A API antiga deve, primeiramente, copiar todos os campos da antiga temptable para a nova, chamar a nova API de forma persistente e rodar a procedure
interna EXECUTE.
/* API antiga - UTAPI012.P */
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
257
param-global.taxa = tt-new-clientes.taxa.
end procedure.
Observao Caso a temp-table seja input-output, no retorno da API evoluda, devem ser
repassados os registros da nova temp-table para a antiga.
define input param table for tt-clientes.
define var h-api as handle no-undo.
for each tt-clientes no-lock:
create tt-new-clientes.
buffer-copy tt-clientes to tt-new-clientes
assign tt-new-clientes.taxa= = 1.
end.
run utp/utapi012a.p persistent set h-api.
run execute in h-api (input table tt-clientes).
delete procedure h-api.
Observao Caso a temp-table antiga seja input-output, no retorno da API evoluda, devem
ser repassados os registros da nova temp-table para a antiga.
Evoluo de lgica
Exemplo
de API,
com
mudan
a de
parme
tros,
que j
foi
evolud
a
Para este tipo de evoluo, deve ser criada uma nova procedure interna com o
mesmo nome da procedure interna antiga, acrescida de um diferenciador. Ex.:
EXECUTE EXECUTE2.
Esta nova procedure interna deve receber os novos parmetros e possuir toda a
lgica.
A procedure interna antiga deve chamar a nova procedure, passando todos os
antigos parmetros e um valor padro para cada um dos novos parmetros.
/* API antiga - UTAPI012A.P */
procedure execute:
define input-output param table for tt-configuracao2.
define input-output param table for tt-dados.
define input-output param table for tt-erros.
< cdigo customizado>
end procedure.
*/
procedure execute:
define input-output param table for tt-configuracao2.
define input-output param table for tt-dados.
define input-output param table for tt-erros.
run execute2 (input table tt-configuracao2,
input table tt-dados,
input table tt-error,
Evoluo de lgica
Exemplo
de API
com
mudan
a de
parme
tros,
onde
APTULO 8
Construo de Programas
no
tilizando os Estilos e suas Tcnicas
259
possve
l
determi
nar um
input 0).
valor
padro end procedure.
para o procedure execute2:
novo
define input-output param table for tt-configuracao2.
parme
define input-output param table for tt-dados.
tro ou o
define input-output param table for tt-erros.
novo
define input param param-4 as int no-undo.
parme
find first param-global exclusive-lock no-error.
tro
if avail param-global then
obrigat
assign param-global.taxa =
rio
if param-4 0 then 0.3 else 0.3 + param-4.
end procedure.
Observao Os parmetros novos que so passados como padro para a nova procedure
interna, devem garantir que o resultado seja o mesmo da antiga procedure interna.
Para este tipo de evoluo, deve ser criada uma nova procedure interna ou API
com o mesmo nome da procedure interna antiga, acrescida de um
diferenciador, conforme exemplificando nos itens anteriores.
Como no possvel determinar valores padro, a procedure interna ou API
antiga deve retornar um erro para que o programa que o chamou emita uma
mensagem de erro explicando o motivo que a API no foi executada e qual o
motivo da obrigatoriedade de novo parmetro.
/* API antiga - UTAPI012A.P */
procedure execute:
define input param param-1 as char no-undo.
define input param param-2 as int no-undo.
param-1,
param-2,
param-3,
0).
end procedure.
procedure execute2:
define
define
define
define
input
input
input
input
param
param
param
param
param-1
param-2
param-3
param-4
as
as
as
as
char no-undo.
int no-undo.
log no-undo.
int no-undo.
if param-4 = 0 then
find first param-global exclusive-lock no-error.
if avail param-global then
assign param-global.taxa = 0.3.
end.
else do:
find first param-global exclusive-lock no-error.
if avail param-global then
assign param-global.taxa = 0.3 + param-4.
end.
end procedure.
Evoluo de lgica
Exemplo
de API
com
mudan
a de
verso
de
integra
APTULO 8
o
tilizando os Estilos e suas Tcnicas
Construo de Programas
261
input
input
input
input
input
param
param
param
param
param
param-1
param-2
param-3
param-4
param-5
as
as
as
as
as
char no-undo.
int no-undo.
log no-undo.
int no-undo.
int no-undo.
Para este tipo de evoluo, deve ser criada uma nova procedure interna ou API
com o mesmo nome da procedure interna antiga, acrescida de um
diferenciador, conforme exemplificando nos itens anteriores.
A antiga API deve retornar um erro para o programa chamador.
A nova API deve conter uma procedure interna que retorne a verso de
integrao para o programa chamador.
/* API antiga - UTAPI012.P */
input
input
input
input
input
param
param
param
param
param
param-1
param-2
param-3
param-4
param-5
as
as
as
as
as
char no-undo.
int no-undo.
log no-undo.
int no-undo.
int no-undo.
Observao Esta tcnica pode ser utilizada quando as outras tcnicas citadas implicarem
muito na performance da API. Antes de rodar a nova API, o programa chamador deve rodar o
mtodo Get-Integration-Version da nova API e verificar se a verso est correta. Lembrar que,
qualquer mensagem para o usurio deve ser emitida pelo programa chamador e nunca pela API.
Parmetros
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
263
UTAPI002.P
A API utp/utapi002.p faz a integrao entre Progress e Microsoft Word 97,
permitindo a criao de arquivos, baseados em formulrios, para o Microsoft
Word.
Maiores informaes podem ser obtidas na documentao da API de
Integrao entre PROGRESS e Microsoft Word 97 (docapi/utapi002.doc).
Importante Para novos programas que venham a utilizar esta API,
recomendado que seja utilizado o programa utp/utapi012 ao invs deste.
UTAPI003.P
A API utp/utapi003.p faz a Integrao entre PROGRESS e Microsoft Excel 97,
permitindo a construo de planilhas e, tambm, grficos.
Maiores informaes podem ser obtidas na documentao da API de
Integrao entre PROGRESS e Microsoft Excel 97 (docapi/utapi003.doc).
Importante Para novos programas que venham a utilizar esta API,
recomendado que seja utilizado o programa utp/utapi013 ao invs deste.
UTAPI004.P
Permitir o envio de E-Mail ou FAX atravs do EMS 2.0 usando o MSExchagne (OLE Automation).
Parmetros
Objetivo
Configurao
Retorno
Exemplo
o oitavo parmetro a Confirmao de Leitura, ou seja, receber um EMail quando o destinatrio tiver lido a mensagem;
"fulano@internet.com.br",
"",
"Manual",
"Mensagem do manual ... ",
"c:\autoexec.bat, c:\config.sys",
0,
no,
no,
yes).
UTAPI005.P
Permitir o envio de E-Mail atravs do EMS 2.0 usando um servidor UNIX ou
qualquer outro servidor com suporte ao protocolo SMTP.
Devem ser passados oito parmetros para este programa:
Configurao
Retorno
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
265
o quinto parmetro deve ser o E-Mail para uma "Cpia Carbono" (Cc);
o oitavo parmetro, caso esteja enviando E-Mail via UNIX, deve ser o
diretrio para a criao do SCRIPT de envio de E-Mail, seno, pode ser
deixado em branco.
"172.16.1.89",
25,
c-from,
c-to,
c-cc,
c-assunto,
c-mesg,
"").
Se o retorno (return-value) desse programa for igual a Ok, o mail foi enviado
com sucesso, seno algum erro ocorreu no envio ou os parmetros passados
no esto corretos.
Para que o programa de envio de E-Mail funcione preciso que esteja
cadastrado corretamente o endereo IP do servidor de E-Mail e a sua porta nos
Parmetros Globais do Sistema.
Interface
Instalao
Observao O programa permite enviar um E-Mail para vrias pessoas. Para isto deve-se
passar cada nome separado por "," (vrgula) ou por ";" (ponto e vrgula). O mesmo acontece para
a Cpia Carbono.
Exemplo: fulano@internet.com.br, beltrano@internet.com.br". O assunto e a mensagem podem
ser passadas em branco.
Exemplo: ("") O remetente nunca pode conter espaos em branco.
UTAPI006.P
A API utp/utapi006.p permite a busca de dados de uma planilha Excel para o
Progress.
No programa responsvel por buscar os dados deve ser feita a incluso do
include: utp/utapi006.i, onde esto as definies das temp-tables que devem
ser passadas como parmetros API utp/utapi003.p.
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
267
UTAPI007.P
A API utp/utapi007.p permite o uso de funes do Excel, para retornar os
resultados para um programa Progress.
No programa responsvel por usar esta API deve ser feita a incluso do
include: utp/utapi007.i, onde esto as definies das temp-tables que devem
ser passadas como parmetros API utp/utapi007.p.
A chamada da API deve seguir o padro abaixo:
run utp/utapi007.p (input-output table tt-dados,
output table tt-erros).
UTAPI008.P
Nome Fsico: utp/utapi008.p
Nome do Include com os Parmetros: utp/utapi008.i
Verso de Integrao: 001
Atualizao de arquivos para o Microsoft Excel 97 e retorno de informaes
para o Progress.
Maiores informaes podem ser obtidas na documentao da API de
Integrao entre Progress e Microsoft Excel 97 (docapi/utapi008.doc).
Importante Para novos programas que venham a utilizar esta API,
recomendado que seja utilizado o programa utp/utapi018 ao invs deste.
Objetivo
UTAPI009.P
Nome Fsico: utp/utapi009.p
Nome do Include com os Parmetros: utp/utapi009.i
Verso de Integrao: 001
Envio de mensagens atravs do servidor de correio eletrnico e envio de FAX
atravs de servidor de FAX.
Maiores informaes podem ser obtidas na documentao da API de Envio de
FAX/E-mail (docapi/utapi009.doc).
Importante Para novos programas que venham a utilizar esta API,
recomendado que seja utilizado o programa utp/utapi019 ao invs deste.
UTAPI010.P
Nome Fsico: utp/utapi010.p
Nome do Include com os Parmetros: utp/utapi010.i
Verso de Integrao: 001
Permitir que impressoras cadastradas no EMS sejam utilizadas em programas
compilados contra os bancos do MAGNUS.
Maiores informaes podem ser obtidas na documentao da API para
Compartilhar Impressoras do EMS com Programas Magnus
(docapi/utapi010.doc).
UTAPI012.P
Nome Fsico: utp/utapi012.p
Nome do Include com os Parmetros: utp/utapi012.i
Verso de Integrao: 001
Criao de arquivos, baseados em formulrios, para o Microsoft Word. Sendo
que os parmetros recebidos so utilizados para preencher os campos de
formulrio existentes no documento.
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
269
UTAPI013.P
Nome Fsico: utp/utapi013.p
Nome do Include com os Parmetros: utp/utapi013.i
Verso de Integrao: 001
Faz a Integrao entre Progress e Microsoft Excel, permitindo a construo de
planilhas e, tambm, grficos.
Maiores informaes podem ser obtidas na documentao da API de
Integrao entre Progress e Microsoft Excel (docapi/utapi013.doc).
UTAPI018.P
Nome Fsico: utp/utapi018.p
Nome do Include com os Parmetros: utp/utapi018.i
Verso de Integrao: 001
Atualizao de arquivos para o Microsoft Excel e retorno de informaes para
o Progress..
Maiores informaes podem ser obtidas na documentao da API de
Integrao entre Progress e Microsoft Excel (docapi/utapi018.doc).
UTAPI019.P
Nome Fsico: utp/utapi019.p
Nome do Include com os Parmetros: utp/utapi019.i
Verso de Integrao: 001
Objetivo
UTAPI027.P
Nome Fsico: utp/utapi027.p
Nome do Include com os Parmetros: utp/utapi027.i
Verso de Integrao: 001
Criao de documentos, baseados em formulrios para o Microsoft Word,
sendo que a deciso de gravar ou no o documento caber ao usurio final.
Maiores informaes podem ser obtidas na documentao da API de
Integrao entre Progress e Microsoft Word (docapi/utapi027.doc).
UTAPI028.P
Nome Fsico: utp/utapi028.p
Nome do Include com os Parmetros: utp/utapi028.i
Verso de Integrao: 001
Envio de compromisso do tipo reunio via Microsoft Outlook.
Maiores informaes podem ser obtidas na documentao da API de Envio de
compromisso via Outlook (docapi/utapi028.doc).
UTAPI029.P
Nome Fsico: utp/utapi029.p
Nome do Include com os Parmetros: utp/utapi029.i
Verso de Integrao: 001
Consideraes
Objetivo
Gerais
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
271
A API de Integrao com excel tem como funo gerar cdigo javascript para
gerar planilhas e grficos no excel em programas estilo pai x filho.
Maiores informaes podem ser obtidas na documentao da API de
Integrao com Excel Web (docapi/utapi029.doc).
APAPI009.P
Nome Fsico: app/apapi009.p
Nome do Include com os Parmetros: app/apapi009.i
Verso de Integrao: 001
Consistir os parmetros passados e caso estejam Ok atualizar os pagamentos.
Parmetros de Entrada
Temp-table tt-referencia: nesta temp-table devero ser repassadas as
informaes de atualizao dos pagamentos extra fornecedor.
TEMP-TABLE TT-REFERENCIA
Atributo
Tipo
Formato
Valor Inicial
Obrigatrio
i-ep-codigo
Integer
Sim
c-referencia
Character
Sim
Cod-versao-integ Integer
Sim
c-usuario
Character
Sim
l-vid-rel
Logical
Sim
l-acompanha
Logical
Sim
Atributo
Descrio
i-ep-codigo
Empresa do pagamento
c-referencia
cod-versao-integ
Verso de integrao
c-usuario
Usurio corrente
l-vid-rel
l-acompanha
Parmetros de Sada
Temp-table tt-erro-pef: sero gerados registros nesta temp-table quando ttreferencial.l-vid-rel=yes com o cdigo do erro, descrio e informaes dos
registros com inconsistncias.
TEMP-TABLE TT-ERRO-PEF
Atributo
Tipo
Formato
Valor Inicial
i-cod-erro
Integer
9999999
Sim
c-desc-erro
Character
"x(70)"
Sim
c-arquivo-erro
Character
"x(100)"
No
Atributo
Descrio
i-cod-erro
c-desc-erro
c-arquivo-erro
Obrigatrio
Execuo
O programa app/apapi009.p ir primeiramente validar a verso de integrao:
Validao: Verso de Integrao
O programa ir verificar se o programa chamador est ntegro com a API, e
isto ocorre atravs da verificao da verso de integrao passada como
parmetro atravs da temp-table tt-referencia (campo cod-versao-integ). Caso
a verso esteja incompatvel, a API abortar a execuo retornando atravs da
temp-table tt-erro-pef o cdigo de erro 3941.
Nmero do Erro
Mensagem
Ajuda
3941
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
273
Mensagem
Ajuda
774
8759
6280
Referncia inexistente !
Objetivo
CAPTULO 14
Portabilidade de RCODES
O objetivo da anlise de portabilidade de RCODES validar o funcionamento
dos programas compilados em ambiente Windows e executados em ambientes
Unix. Isto se faz necessrio porque programas que respeitam as regras para
portabilidade de RCODE, podem ser executados via RPW/RPC e geralmente
em ambiente Unix. Caso contrrio, isto no possvel.
Ao executar programas no Unix, compilados em ambiente Windows e que no
tenha respeitado as regras de portabilidade, apresentado o erro 4438 como
descrito a seguir:
Program <program-name> was compiled under another incompatible display
environment. Cannot run without recompile. (4438)
You have frames in your program. You compiled it under one windowing
system (for example, MS-Windows) and tried to run it under another (for
example, tty). R-code with user interface components in it is only portable
within a windowing system. Your procedure file is portable across windowing
system, but you need to produce separate r-code files for each windowing
system.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
275
Outra soluo para este problema, usar o comando PUT, pois o mesmo no
usa FRAME.
output to value(c-arquivo)
find emitente where emitente.cod-emitente = 10 no-lock.
put emitente.cod-emitente.
Caso em Especial
A partir da regra de no utilizar comandos que criam FRAMES explcitas ou
implcitas, alguns problemas foram detectados com a descoberta de comandos
que criam, por algum motivo, FRAMES implcitas.
Implementao
Objetivo
277
CAPTULO 15
Tcnicas
o valor {&EM_SetPasswordChar};
o valor 0 (zero).
run SendmessageA in hpApi (input fill-in-2:hwnd,
input {&EM_SetPasswordChar},
input ASC ("*"),
input 0).
Objetivo
Implementao
278
rodar o procedimento SetCurrentDir que deve estar dentro do programa ututils.p passado o seguinte parmetro:
Implementao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
279
Implementao
Objetivo
TreeView
Instalao
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
281
ImageList
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
283
PSTimer
Observao A utilizao do ImageList necessria para que o programa possa ser executado
pelo WebEnabler. Na ausncia do mesmo o programa executar sem imagens.
Este controle permite que sejam programadas execues de uma rotina dentro
de determinados intervalos de tempo. Para interagir com esse objeto voc deve
utilizar o evento Tick do mesmo. Esse evento disparado sempre que se
passar o intervalo de tempo determinado na propriedade Interval.
Imagem
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
285
Evento
MediaPlayer
Altura - Altura da rea onde a imagem poder ser exibida, este valor
pode ser lido e alterado.
Sintaxe: <com-handle>:Controls:Item(1):Altura.
chCtrlFrame:Controls:Item(1):Altura = 500.
CellView
ListView
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
287
Aloca_Tarefa
DTPicker
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
289
UColunas
MSComm
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
291
ProgressBar
TabStrip
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
293
Max Por meio dessa propriedade definimos qual o maior valor que
a barra de progresso poder assumir. importante que se controle o
valor da barra para que no ultrapasse o valor mximo, pois isso causa
erro.
Sintaxe: <com-handle>:Max.
ASSIGN chctrlframe:ProgressBar:Max = 10.
DTelnet
chCtrlFrame:TabStrip:Tabs:Remove(chCtrlFrame:TabStrip:SelectedIte
m:INDEX).
Tree Chart
Sound
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
295
Print Chart
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
297
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
299
Integer-format,
Character-file ).
Exemplo: no-return-value chOrg:FONT: SaveFile( 0, 0, name file).
Onde Integer-tymed: afTypeMediumFile = 0
afTypeMediumClipboard = 1
Integer-format: afWMF = 0
afEMF = 1
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
301
= chNodos:add(0,0,1500,600).
Implementao
Objetivo
repeat i = 1 to chOrg:nodes:count:
chNodos = chOrg:nodes(i).
repeat j = 1 to chNodos:links:count:
chliga = chNodos:links(j).
chliga:LinkStyle = 4.
chLiga:Rigid = true.
end.
end.
Implementao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
303
na procedure local-display-fields da SmartViewer ou na procedure localinitialize da SmartWindow, dependendo onde se encontra o Editor, deve
Implementao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
305
rodar o procedimento GetMousePos que est dentro do programa ututils.p, passando os seguintes parmetros:
Implementao
Objetivo
rodar o procedimento GetCurrentDir que est dentro do programa ututils.p, passando o seguinte parmetro:
Implementao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
307
rodar o procedimento GetSysDir que deve estar dentro do programa ututils.p, passando o seguinte parmetro:
Implementao
Objetivo
rodar o procedimento GetWinDir que deve estar dentro do programa ututils.p, passando os seguintes parmetros:
Implementao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
309
rodar o procedimento GetEnv que deve estar dentro do programa ututils.p, passando os seguintes parmetros:
Implementao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
311
Onde:
Nome-rs: Nome do Radio-set
X: Nmero que obtm a entrada desejada do radio-set. Este nmero obtido
pela seguinte frmulaX=2 * (entrada desejada)-1.
Observao o Radio-Set Properties mostra que as strings so: "string", 1, "string", 2, ..., ento
para obter a posio desejada necessrio utilizar a frmula descrita anteriormente.
Exemplo:
desabilitar o radio-button emprstimo
Tipo-modalidade.transacao
1 - Aplicao
2 - Emprstimo
X = 2(2) -1
X=3
If tipo-modalidade.transacao:disable(entry(3, tipomodalidade:radio-buttons)) in frame {&frame-name} then.
If valid-handle(h-programa) then
run dispatch in h-programa ('initialize').9
If valid-handle(h-programa) then do:10
run pi-reposiciona-tabela1 in h-programa (input 123).
run pi-reposiciona-tabela2 in h-programa (input 456).
11
End.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
313
Onde:
<funo-do-boto>: Funo especfica do boto a ser trabalhado
<handle-do-painel>: Handle do painel, onde o link source
<logical>: Varivel em fator lgico, onde "yes" habilita e "no" desabilita.
Funes
Inclui
Elimina
Modifica
Copia
Cancela
Desfaz
Salva
Va-para
Zoom
Relacionamento
Relatrio
Implementao
Objetivo
Observao No utilize a opo "else", pois nesta procedure passam vrios outros states.
PROCEDURE state-changed:
/* --------------------------------------------------------Purpose:
Parameters: <none>
Notes:
----------------------------------------------------- */
DEFINE INPUT PARAMETER p-issuer-hdl AS HANDLE
DEFINE INPUT PARAMETER p-state
NO-UNDO.
AS CHARACTER NO-UNDO.
CASE p-state:
when "no-record-available":U then
assign bt-name:SENSITIVE in frame {&FRAME-NAME} =
no.
when "no-external-record-available":U then
assign bt-name:SENSITIVE in frame {&FRAME-NAME} =
no.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
315
Viewers de Folders
ADM-CREATE-FIELDS
ADM-ASSIGN-FIELDS
ADM-MODIFY-FIELDS
ADM-MODIFY-FIELDS
*/
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
317
Viewers de Folders
ADM-CREATE-FIELDS
ADM-ASSIGN-FIELDS
ADM-MODIFY-FIELDS
ADM-MODIFY-FIELDS
*/
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
319
/* coluna no browse
*/
*/
*/
Onde:
{03}:indica a funo a ser realizada, conforme a tabela abaixo:
Funo
Objetivo
01
02
03
04 n
05
06 item
incluir
{utp/ut-rtlbl.i mgadm conta natureza text-1}
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
321
Exemplo
Implementao
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
323
Implementao
Objetivo
rodar o procedimento pi-inicializar que deve estar dentro do programa utperc.p, passando os seguintes parmetros:
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
325
end.
run pi-inicializar in h-prog(input "Importando arquivos",
i-tot).
rodar o procedimento pi-acompanhar, que est dentro do programa utperc.p para cada iterao:
for each item no-lock on stop undo, leave:
run pi-acompanhar in h-prog.
end.
Implementao
Objetivo
rodar o procedimento pi-inicializar que deve estar dentro do programa utacomp.p, passando os seguintes parmetros:
rodar o procedimento pi-acompanhar, que est dentro do programa utacomp.p para cada iterao, passando o seguinte parmetro:
rodar o procedimento pi-finalizar, que est dentro do programa utacomp.p, logo aps a sada da iterao:
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
327
Exemplo
Passos:
1. Deve ser criada uma varivel do tipo caracter view-as fill-in, na qual
armazenado o campo de referncia da chave estrangeira e deve ser
colocada ao lado do campo que tem zoom. Acessar as propriedades deste
campo e retirar a propriedade 'Enable'.
Exemplo: Para o campo de referncia state-name temos a varivel c-statename.
2. Criar a procedure local-display-fields e nela, antes do run dispatch, deve
ser inserida uma lgica para carregar o valor inicial da varivel para o
campo de referncia.
if available customer then do:
find state where state.state = customer.state no-lock noerror.
assign c-state-name = if avail state then state.state-name
else "":U.
end.
3. No gatilho de leave do campo que possui zoom deve ser inserida uma
lgica para determinar o valor do campo de referncia com base no que o
usurio digitou no campo que possui zoom.
{include/leave.i &tabela=state
&atributo-ref=state-name
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
329
&variavel-ref=c-state-name
&where="state.state = input frame {&frame-name}
customer.state"}
Onde:
<tabela>: tabela que possui a chave estrangeira;
<atributo-ref>: recebe o campo de referncia da tabela da chave estrangeira;
<variavel-ref>: varivel criada para receber o campo de referncia;
<where>: clusula where para localizar o registro na tabela de referncia;
4. Atravs do include ZOOMVAR.I padronizada a chamada do zoom para
os campos que so chave estrangeira, que atende as seguintes situaes de
acesso ao zoom;
Onde:
<prog-zoom>: o nome do programa de zoom
<campo>: o campo/varivel na viewer ou frame onde est sendo colocado o
zoom, sendo um campo de tabela, deve ser especificado no formato
tabela.campo
<campozoom>: o campo no SmartBrowser do zoom de onde o valor
buscado, no deve ser informado o nome da tabela
<frame>: parmetro opcional utilizado quando o frame onde est o campo que
possui zoom diferente de {&frame-name}
<browse>: parmetro opcional utilizado quando o zoom acionado a partir de
uma coluna de um browse updateable;
<parmetros>: chama uma procedure dentro da Window do programa de
zoom, que recebe os parmetros. Deve conter um valor do tipo:
¶metros="run pi-procedure in wh-pesquisa(input 'inicio', input 'fim').".
Exemplos:
a) chamada de zoom para atributos em um frame:
ON F5 OF ord-prod.it-codigo in frame {&FRAME-NAME}
OR MOUSE-SELECT-DBLCLICK OF ord-prod.it-codigo in frame
{&FRAME-NAME} DO:
{include/zoomvar.i &prog-zoom=inzoom/z01in172.w
&campo=ord-prod.it-codigo
&campozoom=it-codigo}
END.
Observao Esta mesma sintaxe deve ser utilizada para colocar zoom em atributos cujo nome
na viewer difere no nome do atributo no browse da pesquisa.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
331
e) chamada de zoom para telas com mais de uma frame (estilo de relatrios):
ON F5 OF c-item-pai in frame f-pg-par
OR MOUSE-SELECT-DBLCLICK OF c-item-pai in frame f-pg-par
DO:
{include/zoomvar.i &prog-zoom=inzoom/z01in172.w
&campo=c-item-pai
&campozoom=it-codigo
&frame=f-frame}
END.
Observao A nica diferena est na utilizao do parmetro &frame, que recebe o nome da
frame onde o atributo se encontra.
Por fim, para todos os campos em frames (no possvel para colunas de
browsers) que possuem zoom necessrio alterar o ponteiro do mouse, atravs
do mtodo load-mouse-pointer, normalmente isto realizado no main-block do
programa. Exemplo:
c-item-pai:load-mouse-pointer ("image/lupa.cur") in frame
{&frame-name}.
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
333
Passos:
1. Deve ser criada uma varivel do tipo caracter view-as fill-in, na qual
armazenado o campo de referncia da chave estrangeira e deve ser
colocada ao lado do campo que tem zoom. Acessar as propriedades deste
campo e retirar a propriedade 'Enable'. Deve tambm ser definida na seo
definitions uma varivel do tipo Handle chamada hProgramZoom.
Exemplo: Para o campo de referncia state-name temos a varivel c-statename.
DEFINE VARIABLE hProgramZoom AS HANDLE NO-UNDO
3. No gatilho de leave do campo que possui zoom deve ser inserida uma
lgica para determinar o valor do campo de referncia com base no que o
usurio digitou no campo que possui zoom.
{include/leave.i &tabela=state
&atributo-ref=state-name
&variavel-ref=c-state-name
&where="state.state = input frame {&frame-name}
customer.state"}
Onde:
<tabela>: tabela que possui a chave estrangeira;
<atributo-ref>: recebe o campo de referncia da tabela da chave
estrangeira;
<variavel-ref>: varivel criada para receber o campo de referncia;
Sintaxe:
{method/ZoomFields.i &ProgramZoom="nome do programa"
&FieldZoomN="nome do campo que retorna"
&FieldScreenN="nome do campo ou varivel"
&FrameN="frame"
&RunMethod="run procedure in hProgramZoom"
&EnableImplant="yes/no"}
Onde:
<ProgramZoom>: Nome do programa de Pesquisa a ser executado;
<FieldZoomN>: Indica o nome do campo que deve ser retornado pelo
programa de Pesquisa, N indica um nmero que pode variar de 1 at 10;
<FieldScreenN>: Indica o nome do campo (varivel) que deve receber o valor
retornado pelo programa de pesquisa, N indica um nmero que pode variar de
1 at 10;
<FrameN>: Indica o nome da frame na qual est o campo (varivel) que deve
receber o valor retornado pelo programa de pesquisa, N indica um nmero
que pode variar de 1 at 10;
<RunMethod>: Indica a linha de comando, que contm a chamada a um
mtodo do programa de pesquisa. A varivel hProgramZoom contm o handle
do programa de pesquisa;
<EnabledImplant>: Os valores YES e NO indicam se o boto Implantar ser
habilitado ou no;
Exemplos:
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
335
END.
Observao Esta mesma sintaxe deve ser utilizada para colocar zoom em atributos cujo nome
na viewer difere no nome do atributo no browse da pesquisa.
Por fim, para todos os campos em frames que possuem zoom necessrio
alterar o ponteiro do mouse, atravs do mtodo load-mouse-pointer,
normalmente isto realizado no main-block do programa. Exemplo:
c-item-pai:load-mouse-pointer ("image/lupa.cur") in frame
{&frame-name}.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
337
form
tt-editor.conteudo format "x(50)" no-label
with stream-io width 132 frame f-imp.
Exemplo
*/
Exemplo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
339
Situaes necessrias
No caso, o Custom Browser Zoom Wizard por default criou a procedure piretorna-valor para o campo cod_proced que pertence a tabela principal do
browse, como o desejado que o mesmo retorne a descrio do programa
(des_prog_dtsul) ento, foi acrescentado o cdigo:
when "des_prog_dtsul" then
assign p_valor = prog_dtsul.des_prog_dtsul.
No caso, o Custom Browser Zoom Wizard criou automaticamente a pi-retornavalor para o campo cod_proced que pertence a tabela principal do browse,
como o desejado que o mesmo retorne a descrio que est gravada em uma
varivel e esta varivel consta no browse foi acrescentado o cdigo:
when "c-descricao" then
assign p-valor = c-descricao.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
341
Width: 46,29
Height: 1,71
3. Na frame f-pg-imp, inserir um objeto fill-in, com as propriedades a seguir:
Object: text-parametro
No-Label: selecionado
Column: 1,29
Row: 8,25
Width: 24,72
Height: 0,67
Display: no selecionado
Enable: no selecionado
View-as-Text: selecionado
Object: tb-parametro
No-Label: no selecionado
Column: 3,20
Row: 9,00
Width: 32,00
Height: 0,83
Initial Value: no
5. Na procedure pi-executar, alterar a lgica de assign da Temp-table ttparam para gravar o campo parametro
Exemplo
assign tt-param.usuario
= c-seg-usuario
tt-param.destino
= input frame f-pg-imp rsdestino
tt-param.data-exec
= today
tt-param.hora-exec
= time
tt-param.classifica
= input frame f-pg-imp rsdestino
tt-param.desc-classifica
= entry((ttparam.classifica - 1) * 2 + 1, rs-classif:radio-buttons in
frame f-pg-cla)
tt-param.parametro
= if input frame f-pg-imp tbparametro = "yes" then yes else no.
temp-table tt-param
destino
as integer
arquivo
as char
usuario
as char format "x(12)"
data-exec
as date
hora-exec
as integer
classifica
as char format "x(40)"
desc-classifica as char format "x(40)"
formato
as integer.
Column: 2,00
Row: 8,63
Width: 46,29
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
343
Object: text-parametro
No-Label: selecionado
Column: 1,29
Row: 8,25
Width: 31,00
Height: 0,92
Object: rs-formato
Buttons:
"80 colunas", 1,
"132 colunas", 2
Column: 3
Width: 32,00
Height: 0,83
Horizontal: selecionado
Initial Value: 2
5. Na procedure pi-executar, alterar a lgica de assign da Temp-table ttparam para gravar o campo formato
assign tt-param.usuario = c-seg-usuario
tt-param.destino = input frame f-pg-imp rs-destino
Exemplo
tt-param.data-exec
= today
tt-param.hora-exec
= time
tt-param.classifica = input frame f-pg-cla rs-classif
tt-param.desc-classifica = entry((tt-param.classifica
- 1) * 2 + 1, rs-classif:radio-buttons in frame f-pg-cla)
tt-param.formato = if input frame f-pg-imp rs-formato
= "1" then 1 else 2.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
345
Alm disso, deve ser incluso o cdigo a seguir aps o RUN DISPATCH ..., em
todas as consultas e nos cadastros em que for usado.
IF gr-<nome-tabela> <> ? THEN
RUN pi-reposiciona-query IN h_<nome-query>
(INPUT gr-<nome-tabela>).
ELSE
RUN dispatch IN h_<nome-query>
(INPUT "get-first":U).
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
347
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
349
cabealho;
definio do gatilho;
cdigo do gatilho;
include para chamada da EPC, sendo que este s ocorre nos gatilhos de
WRITE e DELETE.
Gatilho de Write
Create
Delete
/*************************************************************
** Copyright DATASUL S.A. (1997)
** Todos os Direitos Reservados.
**
** Este fonte de propriedade exclusiva da DATASUL, sua
** reproduo parcial ou total por qualquer meio, s poder ser
** feita mediante autorizao expressa.
**
** Gatilho de Dicionrio.: CREATE/<nome-da-tabela>
** Data de Criao......: XX/XX/XXXX
**
***************************************************************/
TRIGGER PROCEDURE FOR CREATE OF <nome-da-tabela>.
/** Definio da varivel que indica a verso do gatilho
def var c-versao-mg97 as char init "01.00.00" no-undo.
/** Cdigo do gatilho de Create
/** Fim de Include
**/
**/
**/
/*************************************************************
**
** Copyright DATASUL S.A. (1997)
** Todos os Direitos Reservados.
**
** Este fonte de propriedade exclusiva da DATASUL, sua
** reproduo parcial ou total por qualquer meio, s poder ser
** feita mediante autorizao expressa.
**
** Gatilho de Dicionrio.: DELETE/<nome-da-tabela>
** Data de Criao.......: XX/XX/XXXX
**
*********************************************************/
TRIGGER PROCEDURE FOR DELETE OF <nome-da-tabela>.
/** Definio da varivel que indica a verso do gatilho
def var c-versao-mg97 as char init "01.00.00" no-undo.
/** Validaes de eliminao
**/
**/
**/
{include/i-epc102.i <nome-da-tabela>}
/** Eliminao em cascata
**/
/*************************************************************
** Copyright DATASUL S.A. (1997)
** Todos os Direitos Reservados.
**
** Este fonte de propriedade exclusiva da DATASUL, sua
Gatilho de Assign
Find
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
351
**/
**/
Base de Dados
Objetos
Triggers
Padro
lcxxx.db
xxx9999.w
xxxv999.w (viewer)
xxx9999.i
xxxb999.w(browser)
xxx9999.il
xxxq999.w(query)
xxx9999a.p
xxxz999.w(zoom)
xxx9999a.i1
xxxg999.w(v para)
xxxi999.i(include de
dicionrios)
Argentina
lcarg.db
arg9999.w
argv999.w(viewer)
tcarg999.p(create da tabela)
arg9999.i
argb999.w(browser)
tdarg999.o(delete da tabela)
arg9999.i1
argq999.w(query)
tfarg999.p(find da tabela
arg9999a.p
argz999(zoom)
twarg999.p(write da tabela)
arg9999a.i1
argi999.i(include de
dicionrios)
tgarg999.p(assign de campo)
usa9999.w
usav999.w(viewer
Unidos
usa9999.i
usab999.w(browser)
(exemplo)
usa9999.il
usaq999.w(query)
usa9999a.p
usaz999.w(zoom)
usa9999a.il
usag999.w(v para)
(exemplo)
Estados
lcusa.db
usai999.i(include de
dicionrios)
5. Casa Pas deve ter uma base de dados prpria, sempre no padro 'lcxxx',
conforme a nomenclatura demonstrada na tabela acima.
6. Cada base de dados contm a extenso dos arquivos necessrios para a
localizao, como no Exemplo:
Campos da tabela: tipo-tax
cod-tax
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
353
descrio
tax-perc
tributados
ct-tax
tipo
sc-tax
conta-tax
ind-data-base
ct-percepcao
sc-percepcao
conta-percepcao
sc-retencao
ct-retencao
conta-retencao
perc-percepcao
cod-esp
serie
incidencia-impto
IndexName
pu
ch-tipo-tax
1 + cod-tax
IndexName
pu
cg-tipo-tax
1 + cod-tax
Implementao
Objetivo
Use-3D-Size
Keep3DfillinBorder
Implementao
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
355
Onde:
<handle-panel>: varivel que contenha o valor do handle do panel
<valor>: valor para a propriedade que pode ser: Simple ou Multiple
Exemplo
valor calculado por ela, devem ser retiradas as "" do comando RETURN e
acrescentado no seu lugar o nome da varivel que possui o valor a ser
retornado para quem chamou a funo.
RETURNS DECIMAL
(input de-valor as decimal): valor transferido
/*-----------------------------------------------------------Purpose:
Notes:
-------------------------------------------------------------*/
assign de-valor = (de valor + 1000). lgica da funo
Return de-valor. valor retornado da funo
END FUNCTION.
Esta funo muito til para os campos calculados de browsers. Antes era
necessrio utilizar ON-FIND TABELA no MAIN-BLOCK do programa para
calcular o valor de um campo que possua uma lgica mais complexa
(Exemplo: pesquisa em outras tabelas). Agora basta seguir a seguinte sintaxe:
fn-nome da funo (valor a ser transferido) na expresso de um calculated
field para utilizar uma funo e atribuir o valor retornado a uma outra varivel
do browser. Exemplo:
Neste exemplo, temos que a funo "fn-valor" est sendo acionada utilizando
o valor do campo banco.vl-lim-aplic. Conforme a expresso do calculated
Implementao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
357
rodar o procedimento IsRegistered que deve estar dentro do programa ututils.p, passando o seguinte parmetro:
Implementao
Objetivo
Nome
BARRAS_2.OCX
MSCOMM32.OCX
CELLSVWR.OCX
CIMAIL.OCX
CTWAVE32.OCX
MSCOMCT2.OCX
TREEVIEW.OCX
DATIMAGE.OCX
DATSOUND.OCX
DATVIDEO.OCX
MIDIFL32.OCX
MCI32.OCX
COMCTL32.OCX
COMDLG32.OCX
Barras.Aloca_Tarefa
Communications Control
CellsVwr.CellsView
CIMAIL.CISMTPCtrl.1
CtWAVE.ctWaveCtrl.l
Date and Time Picker Control
DatTreeView.TreeView
DatasulImage.Imagem
DatasulSound.Sound
DatasulMultimedia.MediaPlayer
Mabry.Midifile Ctl
MCI.MMControl.l
Microsoft TreeView Control
Microsoft Common Dialog Control
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
359
CASE columnHandle:NAME:
WHEN 'Name' THEN
OPEN QUERY {&BROWSE-NAME}
FOR EACH Customer NO-LOCK BY Customer.Name.
WHEN 'City' THEN
OPEN QUERY {&BROWSE-NAME}
FOR EACH Customer NO-LOCK BY Customer.City.
END CASE.
Mini-Flexibilizao
para
Tipo de
Banco
de
Dados
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
361
Mini-Flexibilizao
Em muitas situaes faz-se necessria a implementao de mini-flexibilizao,
para implementar funcionalidades ou caractersticas especficas para uma
verso do produto ou um tipo especfico de banco de dados, por exemplo.
Para tanto se deve saber qual o tipo de mini-flexibilizao desejada, que so:
Tipo Descrio
Tipo de Banco de Mini-flexibilizao visando atender necessidades de
Dados implementaes especficas a um determinado tipo de
banco de dados
Verso de Banco de Mini-flexibilizao visando atender necessidades de
Dados implementaes especficas a uma determinada verso
ou release do banco de dados
Especifica Mini-flexibilizao visando atender necessidades de
implementaes especficas a um determinado mdulo
ou funes, podendo ser utilizada para atender as mais
diversas situaes
Sigla
progress
oracle
mss
Outro fato relacionado a insero da chamada ao include que esta deve ser
feita uma nica vez em todo o programa, e mais especificamente no incio do
programa. Isto se deve ao fato dos pr-processadores definidos no include
terem escopo global, ficando assim disponveis em todo o escopo do
programa.
E os pr-processadores disponveis para utilizao esto listados a seguir:
Nome do pr-processador
ems_dbtype
Produto EMS 5
emsbas_dbtype
emsedi_dbtype
emsfin_dbtype
emsuni_dbtype
Produto EMS 2
mgadm_dbtype
mgdis_dbtype
mgind_dbtype
mguni_dbtype
mgcld_dbtype
mginv_dbtype
mgsws_dbtype
mgmrp_dbtype
mgven_dbtype
mgcex_dbtype
mgmp_dbtype
mgmfg_dbtype
mgsop_dbtype
lcarg_dbtype
movadm_dbtype
movdis_dbtype
movind_dbtype
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
363
Nome do pr-processador
movmnt_dbtype
movmfg_dbtype
Produto HR
dthrpyc_dbtype
dthrpmg_dbtype
dthrtma_dbtype
A utilizao dos pr-processadores, em conjunto com as diretivas de prprocessadores, na maioria das vezes visa implementar solues para contornar
ou diminuir as deficincias e/ou limitaes de bancos de dados no-Progress.
Isto faz com que o uso dos pr-processadores utilize uma estrutura simples que
consiste em: caso o banco de dados seja Progress executada uma lgica
seno executada outra lgica.
A seguir veja dois exemplos de utilizao de pr-processadores de miniflexibilizao para banco de dados:
Exemplo 1:
{include/i_dbtype.i}
&IF "{&ems_dbtype}":U = "progress":U &THEN
GET LAST {&QueryName} NO-LOCK.
&ELSE
MESSAGE "Funo no disponvel!" VIEW-AS ALERT-BOX.
&ENDIF
Exemplo 2:
{include/i_dbtype.i}
CREATE customer.
ASSIGN customer.cust-num = 1000
customer.name
= "Bob Song".
&IF "{&ems_dbtype}":U <> "progress":U &THEN
VALIDATE customer.
&ENDIF
IF customer.credit-limit > 1000 THEN
...
Mini-Flexibilizao
para
Tipo de
Verso
Banco
de
de
Banco
Dados
de
em
Dados
DBOs
Sigla
progress
oracle
mss
A utilizao do pr-processador, em conjunto com as diretivas de prprocessadores, na maioria das vezes visa implementar solues para contornar
ou diminuir as deficincias e/ou limitaes de bancos de dados no-Progress.
Isto faz com que o uso do pr-processador utilize uma estrutura simples que
consiste em: caso o banco de dados seja Progress executada uma lgica
seno executada outra lgica.
A seguir veja um exemplo de utilizao de pr-processador de miniflexibilizao para banco de dados:
Exemplo 1:
PROCEDURE afterNewRecord:
&IF "{&DBType}":U = "PROGRESS":U &THEN
GET LAST {&QueryName} NO-LOCK.
&ENDIF
END PROCEDURE.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
365
Mini-Flexibilizao
Especfi
ca
Nome do pr-processador
movmfg_version
mgrac_version
movrac_version
Produto HR
dthrpyc_version
dthrpmg_version
dthrtma_version
A utilizao dos pr-processadores, em conjunto com as diretivas de prprocessadores, visa implementar caractersticas e funcionalidades disponveis
para uma verso (ou a partir de uma verso) especfica do banco de dados.
Isto faz com que o uso dos pr-processadores utilize uma estrutura simples que
consiste em: caso a verso do banco de dados seja maior ou igual a um valor
especfico ento executada uma lgica seno executada outra lgica.
A seguir veja um exemplo de utilizao de pr-processadores de miniflexibilizao para verso de produto:
Exemplo 1:
{include/i_dbvers.i}
CREATE customer.
ASSIGN customer.cust-num = 1000
customer.name
= "Bob Song".
&IF "{&mgadm_version}":U >= "2.04":U &THEN
ASSIGN customer.credit-limit = 1500.
&ELSE
ASSIGN customer.dec-1 = 1500.
&ENDIF
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
367
O modelo de estrutura do include simples, consistindo em: verificao de redefinio do include no escopo e definio de pr-processadores de escopo
global.
Um exemplo de include de mini-flexibilizao especfica pode ser visto a
seguir:
Exemplo 1:
&IF DEFINED(include_sports) = 0 &THEN /* Verificao de
* definio do
* include */
&GLOBAL-DEFINE fn-calculo-lambda
&ENDIF
Outro fato relacionado a insero da chamada ao include que esta deve ser
feita uma nica vez em todo o programa, e mais especificamente no incio do
programa. Isto se deve ao fato dos pr-processadores definidos no include
terem escopo global, ficando assim disponveis em todo o escopo do
programa.
Implementao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
369
{include/i-wenrgm.i
&field1=FILL-IN-1 &event1="leave"
&field2=FILL-IN-2 &event2="entry"
&field3=FILL-IN-4 &event3="focus-gained"
&field4=FILL-IN-4 &event4="focus-lost"}.
{include/i-wenrgm.i &field1=v_num_pessoa_fisic
&event1="leave"
&field2=funcionario.dat_admis_func
&event2="leave"
&field3=funcionario.qti_meses_trab_ant
&event3="leave"
&field4=funcionario.qti_dias_contrat_trab
&event4="leave"
&field5=funcionario.dat_term_contrat_trab
&field6=funcionario.cdn_vinc_empregat
&event6="leave"}.
Observao: Existe um limite de 10 campos a serem utilizados em cada chamada da include.
Caso esse limite seja excedido o programador dever definir uma nova chamada da include
passando os demais campos.
Implementao
Objetivo
{include/i_dbtype.i}
DEFINE VARIABLE iCount AS INTEGER NO-UNDO.
&IF "{&mgadm_dbtype}" = "progress" &THEN
SELECT COUNT(*) INTO iCount FROM cheque-pend
WHERE cod-banco > 20.
&ELSE
{include/i-countds.i &BANCO=mgadm
&TABELA="cheque-pend"
&COND="where cod-banco > 20"
&DEST=iCount}
&ENDIF
Esta tcnica deve ser utilizada quando for necessrio chamar um programa que
janela a partir de uma transao de incluso / modificao de registros.
Implementao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
371
Esta tcnica deve ser utilizada quando for necessrio descobrir se o EAI est
habilitado e configurado.
Implementao
Nos programas que possuem integrao atravs do EAI, antes da chamada dos
adapters necessrio verificar se o EAI est configurado. Para isso deve-se
incluir a include i_dbeai.i e verificar o valor da varivel v_log_eai_habilit.
Durante o login o valor dessa varivel alterado para YES se o EAI estiver
configurado, habilitando assim a integrao.
Exemplo
{include/i_dbeai.i}
IF v_log_eai_habilit THEN DO:
/* Chamada do adapter. */
END.
Objetivo
Implementao
Observao No esquecer que a execuo do segundo procedimento nica, mesmo que sejam
enviadas diversas informaes, como no caso da criao de um grfico, este comando deve ser
executado uma nica vez por ao.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
373
field l-habilitaRtf
as LOG.
as char
no-undo.
as char
no-undo.
Aps a definio da varivel c-arquivo(DEFINE VARIABLE carquivo AS CHARACTER) inserir o seguinte cdigo:
DEFINE VARIABLE c-modelo-rtf AS CHARACTER
VIEW-AS EDITOR MAX-CHARS 256
SIZE 40 BY .88
BGCOLOR 15 NO-UNDO.
Aps a definio da varivel text-destino(DEFINE VARIABLE textdestino AS CHARACTER) inserir o seguinte cdigo:
DEFINE VARIABLE text-modelo-rtf AS CHARACTER FORMAT
"X(256)":U INITIAL "Modelo:"
VIEW-AS TEXT
SIZE 10.86 BY .63 NO-UNDO.
Aps a definio da varivel text-modo(DEFINE VARIABLE textmodo AS CHARACTER) inserir o seguinte cdigo:
DEFINE VARIABLE text-rtf AS CHARACTER FORMAT
"X(256)":U INITIAL "Rich Text Format(RTF)"
VIEW-AS TEXT
SIZE 20.86 BY .63 NO-UNDO.
Aps a definio do retngulo rect-9 (DEFINE RECTANGLE RECT9) inserir o seguinte cdigo:
DEFINE RECTANGLE rect-rtf
EDGE-PIXELS 2 GRAPHIC-EDGE NO-FILL
SIZE 46.29 BY 3.54.
DEFINE VARIABLE l-habilitaRtf AS LOGICAL INITIAL no
LABEL "RTF"
VIEW-AS TOGGLE-BOX
SIZE 44 BY 1.08 NO-UNDO.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
375
LABEL
text-modo AT ROW 8.13 COL 1.14 COLON-ALIGNED NOLABEL
rect-rtf AT ROW 4.46 COL 2
RECT-7 AT ROW 1.33 COL 2.14
RECT-9 AT ROW 8.33 COL 2
WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY
SIDE-LABELS NO-UNDERLINE THREE-D
AT COL 3 ROW 3
SIZE 73.72 BY 10.5.
= no
bt-arquivo:visible
= no
bt-config-impr:visible = YES
&IF "{&RTF}":U = "YES":U &THEN
l-habilitaRtf:sensitive
= NO
= yes
bt-arquivo:visible
= yes
bt-config-impr:visible
= NO
= YES
&endif
.
end.
when "3" then do:
assign c-arquivo:sensitive
= no
bt-arquivo:visible
= no
bt-config-impr:visible
= no
= YES
&endif
.
&IF "{&RTF}":U = "YES":U &THEN
IF VALID-HANDLE(hWenController) THEN DO:
ASSIGN l-habilitaRtf:sensitive
= NO
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
377
end case.
end.
&IF "{&RTF}":U = "YES":U &THEN
RUN pi-habilitaRtf.
&endif
END.
as char no-undo.
END.
tt-param.l-habilitaRtf
habilitaRtf
&endif
2.
field l-habilitaRtf
as LOG.
Objetivo
Implementao
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
379
3.
Este comando select ser passado como parmetro para o send-sqlstatement, ento ele deve ser montado numa varivel CHAR, montando
cuidadosamente o comando de consulta, realizando as converses de tipos
de dados entre Progress e Oracle necessrias. Esta a fase mais crtica da
converso. Aqui podem ser gerados erros que acarretaro diferenas no
resultado. Esta converso de for each para send-sql-statement tem que
estar perfeitamente correta antes de se passar para a prxima atividade.
Certifique-se que as duas consultas retornam o mesmo resultado antes de
passar para a prxima fase. Para converso dos tipos de dados entre
Progress e Oracle, foram criadas algumas funes que esto disponveis na
include utp/ut-oraFunConv.i. Existem nesta include funes para campos
do tipo CHAR, INTEGER ou DATE, e a converso pode ser feita do
Progress para Oracle (usando as funes que comeam com p2o) ou do
Oracle para o Progress (usando as funes que comeam com o2p). No
exemplo abaixo, podemos notar a utilizao de algumas dessas funes:
ASSIGN cComandoSQL = "SELECT cod_estabel, nome_abrev FROM ped_venda
P" + CHR(10) + "WHERE" + CHR(10) +
"P.cod_estabel = " + p2oCharacter(c-cod-estabel) + CHR(10) +
"P.nome_abrev = " + p20Character(c-nome-abrev) .
Uma vez que o comando SQL foi definido, o prximo passo executar o
comando RUN STORED-PROCEDURE no Progress. Primeiramente,
executamos o comando SELECT montado (contido na varivel
cComandoSQL neste exemplo) atravs do comando RUN STOREDPROCEDURE. Como a consulta montada dentro do prprio programa
Progress, passamos "send-sql-statement" como parmetro do RUN
STORED-PROCEDURE (este um nome padro para a stored-procedure
a ser executada). Caso seja necessrio rodar uma stored-procedure j
existente na base de dados, podemos passar o nome dela no lugar de sendsql-statement. Neste caso a PROC-HANDLE tem a funo de passar
parmetros para a stored-procedure. Em ambas as situaes, a funo
PROC-HANDLE retorna o handle (no formato Integer) que referencia
aquela consulta no buffer. Este handle ser usado posteriormente para
leitura do resultado da consulta. necessrio definir uma varivel INT
para receber esse valor. No exemplo, utilizamos a varivel chamada
iHandle1:
RUN STORED-PROCEDURE send-sql-statement
HANDLE(oracleCommand).
iHandle1
PROC-
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
381
like ped-venda.nome-abrev.
Agora os dados j foram consultados. Afim de aproveitar as lgicas prexistentes de negcio no relatrio, deve-se agora substituir o(s) for each
(ou eachs) na tabela do banco por um for each simples na(s) temp-table(s)
de resultados que acabamos de popular. Deve-se ento fazer um search e
replace para cada campo, fazendo a modificao que definimos
anteriormente, como no exemplo:
Search: ped-venda.cod-estabel
Replace: oracleLine.pedVenda_codEstabel.
Search: ped-venda.nome-abrev
Replace: oracleLine.pedVenda_nomeAbrev.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
383
AS INTEGER NO-UNDO.
Objetivo
Implementao
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
385
Observao Esta conveno de nome pode gerar problema com os tamanhos de campos, caso
ocorra este tipo de situao o desenvolvedor dever utilizar o pr-processador UsaSeqField
= YES .
Com a utilizao deste pr-processador o desenvolvedor dever observar a sequncia dos
campos informados na definio da temp-table e utilizar a mesma seqncia dos campos na
procedure gerarSelect. Isto deve ser feito porque a atribuio automtica de valores para a
temp-table utilizar a sequncia dos campos para determinar o valor correspondente de cada
campo. Sem o pr-processador UsaSeqField esta rotina utiliza o nome do campo.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
387
Exemplo:
Para incluir a clusula BETWEEN: sports.order-line.qty BETWEEN
i-qty-ini AND i-qty-fim executar o cdigo abaixo:
RUN adicionarBetween IN utSelect(INPUT 0,
INPUT "customer.cust_num",
INPUT STRING(tt-param.tt_iIniCustNum),
INPUT STRING(tt-param.tt_iFimCustNum),
INPUT "Integer",
INPUT 0,
INPUT "").
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
389
customer.address, Customer.Address2 ,
Customer.City, Customer.Country,
Customer.Credit-Limit, order.order-num,
item.item-num, item.price, order-line.qty,
Customer.Comments
FROM Customer, order, order-line, item
WHERE customer.cust-num = order.cust-num
AND order.order-num = order-line.order-num
AND order-line.item-num = ITEM.item-num
AND item.price > 18
AND order-line.qty BETWEEN i-qty-ini AND i-qty-fim
Executar os procedimentos apresentados anteriormente para criao
das clusulas BETWEEN e Where juntamente com o cdigo abaixo:
RUN gerarSelect IN utSelect
(INPUT " customer.cust-num, customer.NAME, " +
" customer.address, Customer.Address2, " +
" Customer.City, Customer.Country, " +
" Customer.Credit-Limit, order.order-num, " +
" item.item-num, item.price, " +
" order-line.qty, Customer.Comments " ,
INPUT " Customer, order, order-line, item ",
OUTPUT sqlCommand).
Observao Para tabelas em bancos diferentes pode-se optar por duas alternativas. A primeira
ser utilizar a include para cada banco, gerando duas temp-tables. A outra seria identificar o
banco mais crtico e utilizar a include apenas nesse banco. Os demais bancos seriam tratados
com comandos FOR EACH, utilizando a temp-table retornada pela include.
Importante Para campos CHAR dever ser feito a seguinte verificao no cdigo
INPUT IF <campo> = ? THEN INTEGER ELSE CHARACTER.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
391
as integer
field arquivo
field usuario
field data-exec
as date
field hora-exec
as integer
field classifica
as integer
field desc-classifica
field modelo-rtf
field l-habilitaRtf
as LOG
FIELD tt_iIniCustNum
AS INTEGER
FIELD tt_iFimCustNum
AS INTEGER
FIELD tt_classifica
AS INTEGER
FIELD tt_address-2
AS LOGICAL
FIELD tt_country
AS LOGICAL.
AS RAW.
AS CHARACTER
NO-UNDO.
AS HANDLE
NO-UNDO.
LIKE customer.cust-num
FIELD customer_name
LIKE customer.name
FIELD customer_city
LIKE customer.city
FIELD customer_state
FIELD customer_address2
LIKE customer.state
LIKE customer.Address2
FIELD customer_country
FIELD customer_salesrep
LIKE customer.country
LIKE customer.sales-rep.
&endif
/* recebimento de parmetros */
*/
{include/i-rpvar.i}
/* definio de variveis
DEFINE VARIABLE h-acomp
*/
AS HANDLE
NO-UNDO.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
393
c-programa
= "wRelatRP"
c-versao
= "1.00"
c-revisao
= ".00.000"
c-empresa
= "Empresa Teste"
c-sistema
= "Sports"
c-titulo-relat
= "Customer".
forma
persistente
utilitrio
de
INPUT 0,
INPUT "AND").
RUN adicionarWhere IN utSelect(INPUT 0,
INPUT "customer.address2",
INPUT "<>",
INPUT STRING(""),
INPUT "character",
INPUT 0,
INPUT "").
RUN gerarSelect IN utSelect (INPUT "customer.cust-num," +
" customer.NAME, " +
" customer.city, customer.state, " +
" customer.address2, customer.country",
INPUT "customer",
OUTPUT sqlCommand).
RUN resetWhere IN utSelect.
{utp\ut-send-sql.i sqlCommand sqlLine Sports}
DELETE OBJECT send-sql-bh.
DELETE OBJECT utSelect.
&endif
/* corpo do relatrio */
&IF "{&EMS_DBTYPE}" <> "progress" &THEN
FOR EACH sqlLine NO-LOCK ON STOP UNDO, LEAVE
BY sqlLine.customer_custnum:
RUN
pi-acompanhar
sqlLine.customer_name).
IN
h-acomp
(INPUT
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
395
sqlLine.customer_custnum
sqlLine.customer_name
sqlLine.customer_city
sqlLine.customer_state
sqlLine.customer_address2
sqlLine.customer_country
WITH FRAME f-complete.
DOWN STREAM str-rp WITH FRAME f-complete.
END.
END.
&ELSE
FOR EACH
customer NO-LOCK
&endif
/*fechamento do output do relatrio*/
{include/i-rpclo.i &STREAM="stream str-rp"}
RUN pi-finalizar IN h-acomp.
RETURN "OK":U.
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
397
INPUT "=",
INPUT STRING(iCust-num),
INPUT "integer",
INPUT 0,
INPUT "").
run gerarDelete in utSelect
(input "customer",
output SQLCommand).
{utp/ut-delete-sql.i SQLCommand Sports}
DELETE OBJECT utSelect.
end procedure.
Remover o SmartLink do tipo RECORD que tem como source THISPROCEDURE e target a viewer do programa.
Editar a procedure pi-reposiciona substituir a ocorrncia "<queryname>" na linha de comando abaixo pelo nome da SmartQuery
instanciada:
RUN pi-reposiciona-query
table).
IN
h_<query-name>
(input
v-row-
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
399
find {&first-table-in-query-{&frame-name}}
where rowid({&first-table-in-query-{&frame-name}}) =
v-row-table
no-lock no-wait no-error.
if available ({&first-table-in-query-{&frame-name}}) then
run notify In this-procedure ("row-available":U).
Est tcnica tem como objetivo fazer algumas adptaes no zoom na pgina de
digitao.
Ao utilizar ZOOM nos campos de um browser de digitao deveremos fazer
algumas alteraes na trigger do boto inserir, antes e aps a execuo do
mtodo INSERT-ROW.
Editar o boto inserir e acrescentar os seguintes pontos em comentrio abaixo
ao cdigo do programa.
ON CHOOSE OF bt-inserir IN FRAME f-pg-dig /* Inserir */
DO:
assign bt-alterar:SENSITIVE in frame f-pg-dig = yes
bt-retirar:SENSITIVE in frame f-pg-dig = yes
bt-salvar:SENSITIVE in frame f-pg-dig = yes.
if num-results("br-digita") > 0 then
DO:
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
401
Esta tcnica tem como objetivo aplicar o facelift nos programas que no esto
no padro.
Como exemplo, podemos citar programas Masterdetail que no definitions no
foi marcado a opo de frames, para que no aparecessem as abas, pois a troca
de pgina feita automaticamente de acordo com alguns critrios de negcio.
Quando este programa for executado em um ambiente de facelift no sero
aplicadas as novas tcnicas de visual do facelift.
Para estes casos dever ser executado o utilitrio responsvel pela aplicao da
tcnica do facelift, o btb/btb901zo.p, para que o mesmo seja executado
necessrio que seja definido na sesso de definitions a include a qual define se
o processador do Facelift est ativado ou no.
{include/i_fclpreproc.i}
Aps a sua definio necessrio chamar o utilitrio, sua chamada dever ser
executada na procedure de inicializao do templete, para os templates smart
dever ser aplicado na procedure local-initialize, caso for thintemplate dever
ser aplicado na procedure intitializeInterface, segue a baixo o cdigo a ser
utilizado:
&IF "{&mguni_version}" >= "2.06b" or "{&aplica_facelift}" = "YES" &THEN
define new global shared variable h-facelift as handle no-undo.
if not valid-handle(h-facelift) then run btb/btb901zo.p persistent
set h-facelift.
&ENDIF
A varivel handle ser global, para que seja executado apenas no incio da
sesso, porm caso acontea alguma interrupo do processamento e o handle
for perdido o mesmo ir carregar o utilitrio novamente.
Para que o utilitrio aplique os novos padres de interface, o usurio precisa
passar a handle da frame para uma pi do utilitrio.
Para aplicar o facelift em todos os objetos do programas dever ser executado
a procedure pi_aplica_facelift_thin, conforme exemplo a seguir:
&IF "{&mguni_version}" >= "2.06b" or "{&aplica_facelift}" = "YES" &THEN
Aps isto, basta apenas colocar a chamada para include ut9000 na Initialize do
programa, antes do dispacth:
{Utp/ut9000.i "TESTE" "1.00.00.000"}
*/
Exemplo
Implementao
Objetivo
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
403
*/
<none>
Notes:
--------------------------------------------------------------*/
assign customer.cust-num
FRAME {&FRAME-NAME})
customer.cust-num:SCREEN-VALUE
IN
END PROCEDURE.
APTULO 8
tilizando os Estilos e suas Tcnicas
Construo de Programas
405
CAPTULO 16
Dicas de Desenvolvimento
Detalhamento