Академический Документы
Профессиональный Документы
Культура Документы
ndice
CAPTULO 1
Datasul-EMS 2.0............................................................................................ 7
Datasul-HR 1.0 ............................................................................................ 12
CAPTULO 3
Nomenclatura .................................................................... 15
ii
Estilos ................................................................................. 29
ndice
iii
UT-FIELD.I ................................................................................................. 57
UT-RTLBL.I................................................................................................ 58
UT-RUN.I .................................................................................................... 58
UT-MSGS.P................................................................................................. 62
IND01-10.I, IND11-50.I E IND51500.I ...................................................... 64
UT-TABLE.I ............................................................................................... 65
UT-LITER.I ................................................................................................. 66
UT-LIMIT.P ................................................................................................ 67
UT-GLOB.I ................................................................................................. 67
I-FREEAC.I ................................................................................................. 67
UT-DIR.P .................................................................................................... 68
BTB917ZX.P ............................................................................................... 69
BTB917ZY.P ............................................................................................... 70
BTB917ZZ.P ............................................................................................... 71
UT-VRBIN.P ............................................................................................... 72
UT-FINFO.P ................................................................................................ 73
UT-CMDLN.P ............................................................................................. 73
UT-OSVER.P .............................................................................................. 74
I-COUNTDS.I ............................................................................................. 74
UT-WIN.I .................................................................................................... 75
UT-TRACE.P .............................................................................................. 78
iv
CAPTULO 7
Traduo ......................................................................................................... 80
ndice
vi
CAPTULO 10
ndice
vii
viii
CAPTULO 1
Antes do incio da converso de cada mdulo deve ser realizada uma reviso n
Dicionrio de Dados do MAGNUS verso I.00, que abrange os seguintes itens:
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;
CAPTULO 1
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
CAPTULO 1
CAPTULO 2
Estrutura de Diretrios
Definio
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
\DMCL
\DMDI
\DMIN
\DMIV
\DMMP
\DMPE
\DMRH
\DMUN
\LDAD
\LDCL
\LDDI
\LDIN
\LDIV
\LDMP
\LDPE
\LDRH
\LDUN
\TGAD
\TGCL
\TCP
\TDP
\TFP
\TWP
\TAP
\TCP
\TDP
CAPTULO 2
Estrutura de Diretrios
\TGDI
\TGIN
\TGIV
\TGPE
\TGRH
\TGUN
\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
10
\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
CAPTULO 2
Estrutura de Diretrios
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
12
\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
CAPTULO 2
Estrutura de Diretrios
\TGPY
\TGTM
\TGUN
13
\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
14
\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
15
CAPTULO 3
Nomenclatura
Definio
Sigla
Nome lgico
Administrativo
AD
MGADM
Coletor de Dados
CL
MGCLD
Distribuio
DI
MGDIS
Industrial
IN
MGIND
Investimentos
IV
MGINV
MultiPlanta
MP
MGMP
Ponto Eletrnico
PE
MGPE
Recursos Humanos
RH
MGRH
Universal
UN
MGUNI
Sigla
Nome lgico
16
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
CAPTULO 3
Nomenclatura
17
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
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)
18
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
CAPTULO 3
Nomenclatura
19
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
database/tgin/twin172.p
Assign de campo
TA999999.p2
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.
Para os programas que so objetos (SmartObjects) e esto ligados a uma tabela
adota-se a nomenclatura abaixo:
Tipo do Objeto
Diretrio destino
Nomenclatura
Browser
xxbrw3
b99xx999.w4
bo01in172.w
Dialog
xxdialog
d99xx999.w
d01in172.w
Go (V para)
xxgo
g99xx999.w
g01in172.w
Query
xxqry
q99xx999.w
q01in172.w
Viewer
xxvwr
v99xx999.w
v01in172.w
Zoom (Pesquisa)
xxzoom
z99xx999.p
z01in172.w
20
Nomenclatura
Exemplos
API
xxapi999.p
cep/ceapi001.p
Container
xx9999zz.w5
cep/ce0401.w
Subprograma de relatrio
xx9999rp.p6
cep/ce0401rp.p
xx9999zz.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
5
"xx" indica a sigla do mdulo e "zz" caracteres de diferenciao entre programas e subprogramas.
Os caracteres "rp" so fixos para nomenclatura deste tipo de subprograma construdo atravs dos Estilos
relatrio e importao/exportao.
6
CAPTULO 3
Nomenclatura
21
Nomenclatura
Exemplos
varinc
var99999.i7
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.
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
22
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
CAPTULO 3
Nomenclatura
23
Frame
f-
f-cad
Parmetro
p-
p-rw-emitente
Stream
s-
s-import
Temporarytable
tt-
tt-param
Siglas de pases
Siglas de trs letras seguindo padro internacional que utilizado para
designar objetos e diretrios criados para localizao dos produtos nos pases:
Pas
Prefixo
Pas
Prefixo
frica do sul
saf
Guiana Francesa
guf
Argentina
arg
Haiti
hai
Bahamas
bah
Honduras
hon
Barbados
bar
Jamaica
jam
Belize
bel
Mxico
mex
Bolvia
bol
Nicargua
nic
Brasil
bra
Panam
pan
Canad
can
Paraguai
par
Chile
chi
Peru
per
Colmbia
col
Porto Rico
por
Costa-rica
cos
Repblica Dominicana
rep
Cuba
cub
San Vicente
vic
El Salvador
sal
Santa Lucia
luc
Equador
ecu
Suriname
sur
Estados Unidos
usa
Trinindad-Tobago
tri
Granada
gra
Uruguai
uru
Guatemala
gua
Venezuela
ven
Guiana
gui
24
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].
Nome: a[sigla do parceiro - 2 dgitos][sigla mdulo - 2 dgitos][inteiro
seqencial - 3 nmeros].p
Exemplo: adapters/neogrid/ccp/anecc102.p - adapter Neogrid do mdulo de
compras
25
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.
26
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)
CAPTULO 4
Layout de Telas
27
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
28
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.
Recomendaes
29
CAPTULO 5
Estilos
Cadastro Simples
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;
30
Ajuda
Primeiro
Ctrl-Home
Contedo
Anterior
Ctrl-Left
Sobre
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
CAPTULO 5
Estilos
31
Cadastro Complexo
Caractersticas
32
Caractersticas
CAPTULO 5
Estilos
Caractersticas
33
34
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;
CAPTULO 5
Estilos
35
Manuteno de Filhos
Caractersticas
o boto de 'Ok' tem funo igual tanto para chamada do programa, para
incluso, quanto para modificao;
36
Caratersticas
CAPTULO 5
Estilos
37
Manuteno de Pais
Caratersticas
o boto de 'Ok' tem funo igual tanto para chamada do programa, para
incluso, quanto para modificao;
38
Caractersticas
CAPTULO 5
Estilos
39
Caractersticas
40
Consulta Relacionamento
Caractersticas
CAPTULO 5
Estilos
41
42
Caractersticas
CAPTULO 5
Estilos
43
44
CAPTULO 5
Estilos
45
Parmetros nicos
Caractersticas
Parmetros Mltiplos
Seguir as mesmas regras dos Cadastros Simples ou Complexo, dependendo do
nmero de campos.
Exemplo: Parmetros por estabelecimento.
46
Formao
Caractersticas
o boto 'Incluir'
outras 2 tabelas;
o boto 'Deletar'
CAPTULO 5
Estilos
47
Caractersticas
boto de 'Incluir'
outras 2 tabelas;
boto de 'Deletar'
48
Importao
Caractersticas
CAPTULO 5
Estilos
49
50
Exportao
Caractersticas
CAPTULO 5
Estilos
51
52
CAPTULO 5
Estilos
53
Zoom de Tabelas
Caractersticas
o boto
responsvel pela aplicao do valor inicial e final definido
pelo usurio sobre a query apresentada no browse;
54
...............
[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
Caractersticas
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.
CAPTULO 5
Estilos
55
Digitao Rpida
Caractersticas
Painis
56
Funes
Relatrios Relacionados
Caractersticas
para acessar.
Consultas Relacionadas
Caractersticas
para acessar.
57
CAPTULO 6
UT-FIELD.I
Objetivo
Utilizao
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
58
UT-RTLBL.I
Objetivo
Utilizao
Formato
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
Objetivo
Utilizao
Formato
CAPTULO 6
59
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:
60
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...).
Exemplo
Nota Existe a API BTAPI008 que possui funes que podem ser utilizadas no
desenvolvimento.
Consideraes
Gerais
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.
CAPTULO 6
61
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>)
Parmetros X
Comportamento
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
62
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.
UT-MSGS.P
Objetivo
CAPTULO 6
63
Utilizao
Formato
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
64
Exemplo
Observaes
Utilizao
Formato
Onde:
{1}: indica a funo a ser realizada, conforme tabela abaixo:
Funo
Objetivo
01
02
03
04 n
05
06 item
CAPTULO 6
07
65
/******************************
* Include: i01un001.i
* Campo: tipo-cod-situacao
*******************************/
{include/i-lgcode.i}
&IF "{&LANGUAGE-CODE}" = "POR" &THEN
&global val1 Erro
&global val2 Advertncia
&global val3 Pergunta
&global val4 Informao
&ENDIF
&IF "{&LANGUAGE-CODE}" = "ESP" &THEN
&global val1 Erro
&global val2 Advertencia
&global val3 Pregunta
&global val4 Informacin
&ENDIF
&IF "{&LANGUAGE-CODE}" = "ING" &THEN
&global val1 Error
&global val2 Warning
&global val3 Question
&global val4 Information
&ENDIF
{include/ind01-10.i {01} {02}}
/* Fim */
UT-TABLE.I
Objetivo
Utilizao
para utilizao de literais ou textos nas telas com funo de label, como no
retngulo que envolve o radio-set.
Formato
Onde:
66
Propriedade
File-Label
Dump_Name
Desc
UT-LITER.I
Objetivo
Utilizao
Formato
Onde:
<literal>: Literal a ser utilizada na tela com os espaos substitudos por "_"
(undescore)
<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
CAPTULO 6
67
UT-LIMIT.P
Objetivo
Utilizao
Formato
Onde:
<opo>: indica o limite desejado, MIN = Mnimo e MAX = Mximo
<formato>: formato do campo caracter
O retorno obtido atravs do return-value.
Exemplo
UT-GLOB.I
Objetivo
Formato
I-FREEAC.I
Objetivo
68
Formato
{include/i-freeac.i}
Onde:
<varivel>: varivel que ir armazenar o valor do retorno da funo fn-freeaccent
<string>: string acentuada a ser convertida.
Exemplo
{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
Objetivo
Este utilitrio deve ser usado sempre que o usurio tiver que informar um
diretrio.
Formato
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:
run utp/ut-dir.p (input "Escolha um diretrio",
output <pasta>,
output <cancelado>).
Onde:
CAPTULO 6
69
BTB917ZX.P
Objetivo
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:
Formato
clicar no boto
70
Onde:
<som>: caminho completo do arquivo de som a ser executado
Exemplo:
run btb/btb917zx.p (input "c:\windows\media\start.wav").
BTB917ZY.P
Objetivo
Instalao
Formato
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:
<imagem>: caminho completo da imagem a ser visualizada
Exemplo:
run btb/btb917zy.p (input "c:\windows\egito.bmp").
CAPTULO 6
71
BTB917ZZ.P
Objetivo
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:
Formato
clicar no boto:
Onde:
<vdeo>: caminho completo do vdeo a ser apresentado
Exemplo:
72
UT-VRBIN.P
Objetivo
Este utilitrio pode ser usado sempre que for necessrio saber a verso de um
programa compilado (.R).
Formato
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
CAPTULO 6
73
UT-FINFO.P
Objetivo
Este utilitrio pode ser usado sempre que for necessrio saber a data, a hora ou
o tamanho de um arquivo no Windows.
Formato
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
Exemplo
Observaes
UT-CMDLN.P
Objetivo
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 ...).
Formato
74
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
Objetivo
Esta tcnica pode ser usada sempre que for necessrio saber informaes mais
detalhadas sobre o Sistema Operacional (somente para Windows).
Formato
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 ...)
Exemplo
c-plataforma,
i-versao,
i-release,
i-build,
c-extrainfo).
I-COUNTDS.I
Objetivo
Utilizao
CAPTULO 6
{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.
Exemplo
Observaes
UT-WIN.I
Objetivo
Procedures
CreateProcess{&A}
GetComputerName{&A}
GetEnvironmentVariable{&A}
GetLastError
GetProfileString{&A}
GetSystemDirectory{&A}
75
76
Exemplo 1
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
SystemParametersInfo{&A}
GetUserName{&A}
CAPTULO 6
Exemplo 2
77
PROCEDURE SupressWindowMove:
/*---------------------------------------------------------------------Purpose: Disable the MOVE option of the window object.
Parameters: windowHandle window que no poder mais ser arrastada
----------------------------------------------------------------------*/
DEFINE INPUT PARAMETER windowHandle AS WIDGET-HANDLE NO-UNDO.
&SCOPED-DEFINE SC_MOVE 61456
&SCOPED-DEFINE MF_BYCOMMAND 0
&SCOPED-DEFINE MF_DELETE 512
DEFINE VARIABLE iHWND
AS INTEGER INITIAL 0 NO-UNDO.
DEFINE VARIABLE iMenu
AS INTEGER INITIAL 0 NO-UNDO.
DEFINE VARIABLE iResult AS INTEGER INITIAL 0 NO-UNDO.
RUN GetParent (INPUT windowHandle:HWND, OUTPUT iHWND).
RUN GetSystemMenu (INPUT iHWND, INPUT 0, OUTPUT iMenu).
RUN RemoveMenu (INPUT iMenu, INPUT {&SC_MOVE},
INPUT {&MF_BYCOMMAND} + {&MF_DELETE}, OUTPUT iResult).
RUN DrawMenuBar (INPUT iHWND, OUTPUT iResult).
END PROCEDURE.
Exemplo 3
78
Exemplo 4
UT-TRACE.P
Objetivo
Utilizao
CAPTULO 6
Formato
Exemplo
79
80
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.
CAPTULO 7
Traduo
81
&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.
82
**
*****************************************************/
{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 */
/***********************************************************
**
** i01ad047.i campo natureza (conta) - Devedora/Credora
**
************************************************************/
{include/i-lgcode.i}
&IF "{&LANGUAGE-CODE}" = "POR" &THEN
&glob val1 Devedora
&glob val2 Credora
&ENDIF
&IF "{&LANGUAGE-CODE}" = "ESP" &THEN
CAPTULO 7
Traduo
83
&glob val1
&glob val2
&ENDIF
&IF "{&LANGUAGE-CODE}" = "ING" &THEN
&glob val1
&glob val2
&ENDIF
{include/ind01-10.i} {1} {2}}
/* fim */
84
/****************************************************
**
** 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
CAPTULO 7
Traduo
85
Utilizando utp/ut-liter.i:
{utp/ut-liter.i <literal> <modulo> <alinhamento>}
assign <varivel>:label in frame {&frame-name} = returnvalue.
Help
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.
Exemplo:
{utp/ut-liter Total_Pedidos}
assign de-total-pedidos:label in frame f-relat = trim{returnvalue}.
86
Cliente Descrio
Total Pedidos
------------------------------------->>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
>>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
>>>>>9 XXXXXXXXXXXXXXXX >.>>>.>>9,99
Side-Labels
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.
CAPTULO 7
Traduo
Dialeto
Nome idioma/Dialeto
en-US
es-AR
pt-BR
87
88
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
CAPTULO 7
Traduo
89
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
90
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
CAPTULO 7
Traduo
91
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
Dialeto Padro
X
Dialeto Usurio
2
3
Contexto
Contexto
informado/mdulo
Contexto Genrico (*)
Contexto
informado/mdulo
Contexto Genrico (*)
92
UT-TRCAMPOS.P
Objetivo
Utilizao
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
Objetivo
Utilizao
CAPTULO 7
Traduo
93
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
Objetivo
Utilizao
Onde cLista deve ser uma lista separada por "," provinda de uma das seguintes
situaes:
Include de domnio;
Sub-programa;
94
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
Objetivo
Utilizao
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>}
CAPTULO 7
Traduo
95
UT-MSGS.P
Objetivo
Utilizao
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
Maiores detalhes podem ser consultados na referncia geral deste utilitrio
neste documento.
96
UT-FIELD.P
Objetivo
Utilizao
1
2
3
4
Descrio
Label
Column-Label
Help
Format
Initial
Description
Observao
Continua
buscando do
banco
Continua
buscando do
banco
CAPTULO 7
Traduo
97
UT-TABLE.P
Objetivo
Utilizao
onde propriedade :
Propriedade
1
2
Descrio
File-Label
Dump_name
Desc
Observao
Continua
buscando do
banco
UT-LTMNU.P
Objetivo
98
Retorno
CAPTULO 7
Traduo
99
100
**
********************************************************/
&glob val1 Devedora
&glob val2 Credora
{include/ind01-10.i} {1} {2}}
/* fim */
CAPTULO 7
Traduo
101
**
*****************************************************/
&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} =
"1":U.
/***********************************************************
**
** i01ad047.i campo natureza (conta) - Devedora/Credora
**
************************************************************/
&glob val1 Devedora
&glob val2 Credora
{include/ind01-10.i} {1} {2}}
/* fim */
102
CAPTULO 7
Traduo
103
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 ...
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
104
Side-Labels
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
CAPTULO 7
Traduo
105
"Retorno Beneficiamento",
Remessa Consignao",
"Faturamento Consignao",
"Devoluo Consignao",
"Reajuste Preo",
"Drawback" .
ASSIGN cb-tp-oper-terc:screen-value in frame fPage2 = entry(ttnatur-oper.tp-oper-terc,cb-tp-oper-terc:list-items in frame
fPage2,",").
106
CAPTULO 7
Traduo
107
108
Antes:
assign cb-combo:list-items = {varinc/var00002.i 04 02}
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
no-label colon 55
skip(1)
tt-param.tp-etiq-ini
tt-param.tp-etiq-fim
>|"
CAPTULO 7
Traduo
109
skip(1)
c-lit-impressao
no-label colon 55
skip(1)
c-destino
colon 60 "-"
tt-param.arquivo
Importante Sempre passar valores fixos e de variveis substituindo-se o " " (Branco) por "_"
(underline).
110
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
ficar concatenando uma lista enorme de pr-processadores basta apenas fazer
FOR EACH ou FIND na temp-table conforme a opo de retorno desejada.
Implementao
CAPTULO 7
Traduo
111
112
CAPTULO 7
Traduo
113
114
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
115
CAPTULO 8
Implementao
Estilo Usado
Nome Fsico
Cadastro Simples
Masters/w-cadsim.w
Masters/w-cadsi2.w
Masters/w-cadsi3.w
116
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 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
117
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
Implementao
118
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 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
119
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.
120
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
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
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
121
Implementao
Estilo Utilizado
Nome Fsico
Masters/w-adf.w
122
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 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
123
124
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
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
h_p-exihel
STATE
125
h_query
Implementao
Estilo Utilizado
Nome Fsico
Masters/w-incmo3.w
126
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;
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
127
Exemplo:
run pi-atualiza-parent in h_v06pd001 (input v-rowparent).
128
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.
Exemplo
*/
*/
*/
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
129
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.
Exemplo
*/
*/
*/
130
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.
Exemplo
*/
*/
*/
Link Type
Target
THIS-PROCEDURE
TABLEIO
h_viewer
h_query
RECORD
h_viewer
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
131
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
Implementao
Estilo Utilizado
Nome Fsico
Masters/w-paiamb.w
132
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 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
133
134
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
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
135
Implementao
Estilo Utilizado
Nome Fsico
Master/w-incmo3.w
136
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;
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
137
138
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-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
Exemplo
*/
Link Type
Target
THIS-PROCEDURE
TABLEIO
h_viewer
*/
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
h_query
RECORD
139
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
Implementao
Estilo Utilizado
Nome Fsico
Master/w-incmdp.w
140
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 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
141
criar um SmartLink de TABLEIO, tendo como Source: THISPROCEDURE e como Target: SmartViewer recm instanciada;
142
{include/okpai.i h_v07pd002}
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
h_viewer1
GROUP-ASSIGN
h_viewer3
h_query
RECORD
h_viewer2
h_query
RECORD
h_viewer3
Implementao
Estilo Utilizado
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;
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
143
a query deve conter a tabela dos registros filhos que iro ser exibidos no
Cadastro PaiXFilho. Exemplo de query do browser:
144
Implementao
Estilo Utilizado
Nome Fsico
Masters/wbrwzoo.w
Onde:
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
145
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
...
146
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
147
148
Exemplo:
assign input frame {&frame-name} c-inicial c-final.
Para:
assign input frame {&frame-name} fi-ini-cust-num fi-fin-custnum.
Implementao
Estilo Utilizado
Nome Fsico
Masters/w-consim.w
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
149
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.
150
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
Implementao
Estilo Utilizado
Nome Fsico
Masters/w-concom.w
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
151
152
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 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
153
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
154
Implementao
Estilo
Utilizado
'
Nome Fsico
Masters/w-conrel.w
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
155
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.
156
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
157
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
158
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
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
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
159
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;
160
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
1. Em 'Definitions' implementar os campos de parmetros e seleo na
definio da temp-table tt-param.
2. Na procedure 'pi-executar', colocar as validaes necessrias s opes do
usurio para execuo do relatrio no local indicado pelo comentrio,
lembrando que elas devem apresentar uma mensagem de erro cadastrada,
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
161
162
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
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
163
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.
VIEW STREAM str-rp FRAME f-rodape.
END.
164
Exemplo de um
programa RP.P de
Relatrio
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
AS RAW.
/* recebimento de parmetros */
DEFINE INPUT PARAMETER raw-param AS RAW NO-UNDO.
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
CREATE tt-param.
RAW-TRANSFER raw-param TO tt-param.
*/
{include/i-rpvar.i}
/* definio de variveis
DEFINE VARIABLE h-acomp
*/
AS HANDLE
NO-UNDO.
165
166
c-programa
= "SP0014RP"
c-versao
= "1.00"
c-revisao
= ".00.000"
c-empresa
= "Empresa Teste"
c-sistema
= "Sports"
c-titulo-relat
= "Listagem Order".
/* corpo do relatrio */
IF tt-param.classifica = 1 THEN DO:
FOR EACH order WHERE
order.sales-rep = tt-param.sales-rep AND
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
167
168
Order.Sales-Rep
Order.Ship-Date
Order.Carrier WITH FRAME f-customer.
DOWN STREAM str-rp WITH FRAME f-customer.
END.
END.
Parmetros
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
169
170
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Seqncia:
Campo:
Tipo:
Extent:
Tamanho:
Formato:
Label:
Ajuda:
Val Default
Digitaes
Construo de Programas
171
172
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Consideraes
sobre o
cadastramento de
campos
Construo de Programas
173
Exportao JOB
Encontra-se no menu Tarefas do mdulo Job Execution e nessa opo fazemos
Execution (JE0104) a exportao dos parmetros e digitaes do programa que foi preparado para
ser executado neste mdulo, atravs do devido cadastramento de seus
parmetros e digitaes.
174
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
175
Implementao
Estilo
Utilizado
'
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').
176
criar um SmartLink de TABLEIO, tendo como Source THISPROCEDURE e como Target a SmartViewer da pgina1;
Implementao
Estilo
Utilizado
'
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
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
177
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.
178
Exemplo
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
179
Lista de Links:
Source
'
Link Type
Target
h_browse-formao
STATE
THIS-PROCEDURE
h_p-exihel
STATE
h_query
180
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
Implementao
Estilo
Utilizado
'
Nome Fsico
Masters/w-form2.w
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
181
Seqncia
1. Criar browse origem:
definir query;
182
Implementao
Estilo
Utilizado
'
Nome Fsico
Masters/wbrwfrm.w
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
183
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;
184
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 }
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
185
DO:
{include/i-imarq.i c-arquivo-entrada f-pg-par "'*.XLS' '*.xls' , 'todos' '*.*'" }
END.
Pgina de Log
No existem tarefas.
Gravao e validao dos parmetros
1. Em 'Definitions', implementar os campos de parmetros e seleo na
definio da temp-table tt-param.
2. Na procedure 'pi-executar', colocar as 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.
Exemplo
186
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
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
187
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.
*/
188
"XX0006RP"
"1.00"
".00.000"
"Empresa Teste"
'Sports'
= "Listagem de Erros da Importao de
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
189
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
190
&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.
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
191
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.
Exemplo
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.
Exemplo
192
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 fimport.
apply 'entry' to c-arquivo-destino in frame f-pg-log.
return error.
end.
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
193
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
194
Exemplo de um
programa RP.P de
Exportao
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
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
195
Implementao
'Estilo utilizado
Nome Fsico
Window Pesquisa
Masters/w-pesqui.w
196
Link Type
Target
h_browse
STATE
THIS-PROCEDURE
h_folder
PATE
THIS-PROCEDURE
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
197
Implementao
Estilo
Utilizado
'
Nome Fsico
Dialog VaPara
Masters/d-vapara.w
198
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.
Implementao
Estilo
Utilizado
'
Nome Fsico
Masters/w-digit.w
Implementao
Estilo
Utilizado
'
Nome Fsico
CustomBrowserDigita
Masters/b-digit.w
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
199
Implementao
Estilo
Utilizado
'
Nome Fsico
Masters/wquery.w
200
Implementao
Estilo
Utilizado
'
Nome Fsico
Masters/vieweraf.w
Padro;
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
201
202
Exemplo
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Exemplo
Construo de Programas
203
*/
*/
204
return 'ADM-ERROR':U.
Tipo de Objetos
Preprocessador
Finalidade
Adm-create-fields
Habilitados somente na
criao de um novo registro.
Outras variveis
Adm-modify-fields
Adm-assign-fields
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Exemplo
Construo de Programas
205
*/
{utp/ut-liter.i Quantidade * R}
assign fill-in_Qty:label in frame {&frame-name} = return-Comentar
chamada
value.
padro
{utp/ut-liter.i Preo * R}
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
206
Exemplo
*/
Comentar
/* Dispatch standard ADM method.
*/
chamada
/* RUN dispatch IN THIS-PROCEDURE (INPUT 'initialize':U). */
padro
/* Code placed here will execute AFTER standard behavior. */
/* if adm-new-record = yes then
*/
Exemplo
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Exemplo
Construo de Programas
207
*/
208
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
209
Preprocessador
Finalidade
Adm-create-fields
Adm-assign-fields
Adm-modify-fields
Exemplo
210
{utp/ut-liter.i Preo * R}
assign Order-line.Price:label in frame {&frame-name} =
return-value.
{utp/ut-liter.i Pas * L}
assign cb-country:label in frame {*frame-name} = return-value
{pdinc/i01pd001.i 03}.
/* Dispatch standard ADM method.
RUN dispatch IN THIS-PROCEDURE ( INPUT 'initialize':U ).
*/
*/
Exemplo
*/
Exemplo
= fill-in_Qty
= fill-in_Price
*/
*/
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
211
212
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
CAPTULO 8
utilizando os Estilos e suas Tcnicas
Construo de Programas
213
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.
214
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.
CAPTULO 9
Validaes
215
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.
216
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.
217
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.
Importante
Observaes
218
Observaes:
CAPTULO 10
Mensagens
219
220
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.
CAPTULO 10
Mensagens
221
Eliminao invlida!
Para auxiliar esta operao, o Sistema de Mensagens possui o boto Pesquisa,
onde voc pode buscar por Cdigo ou pelo Texto da Mensagem. Alm disso,
ainda possui a opo de Filtro onde voc informa palavras que deseja procurar
dentro do sistema.
222
223
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.
Nomenclatura
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.
225
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.
226
CAPTULO 12
Ferramentas
227
Opes de Compilao
O Application Compiler disponibiliza algumas opes de compilao,
descritas abaixo:
228
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.
CAPTULO 12
Ferramentas
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;
229
230
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:
CAPTULO 12
Ferramentas
231
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 -
232
clicar em Ok.
233
CAPTULO 13
APIs
Caractersticas
234
Funcionamento
A API deve ser construda de forma que, receba parmetros e execute alguma
ao. A API, no deve ter tratamento com tela, deve ser sempre via troca de
parmetros. Isto facilita no momento da utilizao do RPC.
A entrada dos parmetros na API, deve ser da seguinte forma:
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:
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,
CAPTULO 13
APIs
235
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
verso de integrao;
objetivo;
236
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.
Exemplo
Campo
Descrio
cod-versao-integracao
cod-transacao
log-replica-msg
cod-erro
CAPTULO 13
APIs
237
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.
238
end.
else
return "NOK".
/* fim */
este documento deve ser escrito de forma mais clara possvel, pois deve
estar disponvel para clientes e parceiros comerciais;
CAPTULO 13
APIs
/* API antiga */
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.
/* 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
de API , com
mudanas de
parmetros
239
240
Para este tipo de evoluo, deve ser criada uma nova API com o mesmo nome
da API antiga, acrescida de um diferenciador. EX.: UTAPI001.P
UTAPI001A.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.
Exemplo
*/
CAPTULO 13
APIs
241
Evoluo de lgica
de API, com
alterao de
campos na temptables de
parmetros
Para este tipo de evoluo, deve ser criada uma nova API com o mesmo nome
da API antiga, acrescida de um diferenciador. Ex.: UTAPI001.P
UTAPI001A.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.
Exemplo
242
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.
CAPTULO 13
APIs
243
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
de API, com
mudana de
parmetros, que j
foi evoluda
244
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.
Exemplo
*/
procedure execute:
define input param param-1 as char no-undo.
define input param param-2 as int no-undo.
define input param param-3 as log no-undo.
run execute2 (input
input
input
input
param-1,
param-2,
param-3,
0).
end procedure.
procedure execute2:
define input param param-1 as char no-undo.
define input param param-2 as int no-undo.
define input param param-3 as log no-undo.
CAPTULO 13
APIs
245
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.
Evoluo de lgica
de API com
mudana de
parmetros, onde
no possvel
determinar um
valor padro para o
novo parmetro ou
o novo parmetro
obrigatrio
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.
Exemplo
param-1,
param-2,
param-3,
0).
246
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.
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.
return "999".
end procedure.
procedure execute3:
define input param param-1 as char no-undo.
define input param param-2 as int no-undo.
CAPTULO 13
APIs
247
Evoluo de lgica
de API com
mudana de verso
de integrao
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.
Exemplo
248
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.
Importante Para novos programas que venham a utilizar a API utapi0001, recomendado
entrar em contato com a equipe de Suporte ao Desenvolvimento no ramal 7125 antes de utilizal. Para os programas antigos que j utilizam essa API, no deve-se realizar nenhuma alterao
pois esto sendo feitas correes nessa API.
CAPTULO 13
APIs
249
UTAPI001.P
A API de gerao de grficos tem por finalidade exibir grficos de acordo com
os parmetros a ela passados.
Essa API constituda por uma include utp/utapi001.i, que contm as
definies das templates utilizadas pela prpria API e pelos programas que
iro utiliz-la, um programa, utp/utapi001.p, que a prpria API, e, objetos
no Progress contidos em interfac/grafico que fazem parte de Datgraph
(visualizador de grficos).
Maiores informaes podem ser obtidas na documentao da API de Gerao
de Grficos (doc-api/utapi001.doc).
Importante Para novos programas que venham a utilizar esta API,
recomendado entrar em contato com a equipe de Suporte ao Desenvolvimento
no ramal 7125 antes de utiliza-l. Para os programas antigos que j utilizam
essa API, no deve-se realizar nenhuma alterao pois esto sendo feitas
correes nessa API.
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).
250
UTAPI004.P
Objetivo
Permitir o envio de E-Mail ou FAX atravs do EMS 2.0 usando o MSExchagne (OLE Automation).
Parmetros
o oitavo parmetro a Confirmao de Leitura, ou seja, receber um EMail quando o destinatrio tiver lido a mensagem;
Exemplo
"fulano@internet.com.br",
"",
"Manual",
"Mensagem do manual ... ",
"c:\autoexec.bat, c:\config.sys",
0,
no,
no,
yes).
Retorno
CAPTULO 13
APIs
251
UTAPI005.P
Objetivo
Parmetros
Exemplo
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,
252
input c-assunto,
input c-mesg,
input "").
Retorno
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.
Configurao
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.
Instalao
CAPTULO 13
APIs
253
Interface
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.
A chamada da API deve seguir o padro abaixo:
run utp/utapi006.p (input-output table tt-dados,
output table tt-erros).
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
Objetivo
254
UTAPI009.P
Nome Fsico: utp/utapi009.p
Nome do Include com os Parmetros: utp/utapi009.i
Verso de Integrao: 001
Objetivo
UTAPI010.P
Nome Fsico: utp/utapi010.p
Nome do Include com os Parmetros: utp/utapi010.i
Verso de Integrao: 001
Objetivo
CAPTULO 13
APIs
255
UTAPI011.P
Nome Fsico: utp/utapi011.p
Nome do Include com os Parmetros: utp/utapi011.i
Verso de Integrao: 003
Objetivo
A API de gerao de grficos tem por finalidade exibir grficos de acordo com
os parmetros a ela passados.
Maiores informaes podem ser obtidas na documentao da API para
Criao de Grficos (docapi/utapi011.doc).
Importante Para novos programas que venham a utilizar esta API,
recomendado entrar em contato com a equipe de Suporte ao Desenvolvimento
no ramal 7125 antes de utiliza-l. Para os programas antigos que j utilizam
essa API, no deve-se realizar nenhuma alterao pois esto sendo feitas
correes nessa API.
UTAPI012.P
Nome Fsico: utp/utapi012.p
Nome do Include com os Parmetros: utp/utapi012.i
Verso de Integrao: 001
Objetivo
256
UTAPI013.P
Nome Fsico: utp/utapi013.p
Nome do Include com os Parmetros: utp/utapi013.i
Verso de Integrao: 001
Objetivo
UTAPI018.P
Nome Fsico: utp/utapi018.p
Nome do Include com os Parmetros: utp/utapi018.i
Verso de Integrao: 001
Objetivo
UTAPI019.P
Nome Fsico: utp/utapi019.p
Nome do Include com os Parmetros: utp/utapi019.i
Verso de Integrao: 001
Objetivo
CAPTULO 13
APIs
257
UTAPI027.P
Nome Fsico: utp/utapi027.p
Nome do Include com os Parmetros: utp/utapi027.i
Verso de Integrao: 001
Objetivo
UTAPI028.P
Nome Fsico: utp/utapi028.p
Nome do Include com os Parmetros: utp/utapi028.i
Verso de Integrao: 001
Objetivo
UTAPI029.P
Nome Fsico: utp/utapi029.p
Nome do Include com os Parmetros: utp/utapi029.i
Verso de Integrao: 001
Objetivo
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).
258
APAPI009.P
Nome Fsico: app/apapi009.p
Nome do Include com os Parmetros: app/apapi009.i
Verso de Integrao: 001
Objetivo
Consideraes
Gerais
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
CAPTULO 13
APIs
259
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
Mensagem
Ajuda
774
260
8759
6280
Referncia inexistente !
CAPTULO 14
Portabilidade de RCODES
261
CAPTULO 14
Portabilidade de RCODES
Objetivo
262
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.
CAPTULO 14
Portabilidade de RCODES
263
265
CAPTULO 15
Tcnicas
Esta tcnica pode ser usada sempre quando for usado um fill-in do tipo blank,
ou seja, sempre que for colocada alguma informao que no possa ser
visualizada.
Implementao
o valor {&EM_SetPasswordChar};
o valor 0 (zero).
run SendmessageA in hpApi (input fill-in-2:hwnd,
input {&EM_SetPasswordChar},
input ASC ("*"),
input 0).
Esta tcnica pode ser usada quando for necessrio mudar o diretrio corrente
em tempo de execuo. Isto permite que o diretrio corrente seja fixo.
Implementao
266
{include/i-win.i}
rodar o procedimento SetCurrentDir que deve estar dentro do programa ututils.p passado o seguinte parmetro:
Implementao
CAPTULO 15
Tcnicas
267
Essa tcnica deve ser utilizada quando for necessrio dar foco a qualquer
objeto, mesmo sendo uma janela.
Implementao
268
Esta tcnica pode ser usada sempre que uma janela, mesmo perdendo o foco,
permanea visvel.
Implementao
Instalao
TreeView
CAPTULO 15
Tcnicas
269
270
Nesse caso o indice do nodo selecionado ficar armazenado na varivel iescolha. Contando que foram criados 4 (quatro) nodos Pai e um nodo
filho, o valor armazenado seria 5 (cinco) caso o filho fosse o nodo
selecionado.
5. SelectedItem:Text Retorna o texto do nodo selecionado na rvore.
Exemplo:
ChTreeView:TreeView:Nodes:Add("rh-1", 4, "rh-1-2", "Folha de Pgto
").
/* Aps seleo do novo nodo criado acima */
MESSAGE ChTreeView:TreeView:SelectedItem:Text
VIEW-AS ALERT-BOX INFO BUTTONS OK.
A mensagem desse exemplo exibira o texto Folha de Pgto quando o
nodo criado acima for selecionado.
Observao Deve-se utilizar sempre o TreeView da Microsoft (COMCTL32.OCX). Todos os
programas que hoje esto construdos e utilizando o TreeView da Datasul, no precisam ser
alterados.
CAPTULO 15
Tcnicas
271
ImageList
272
Observao A utilizao do ImageList necessria para que o programa possa ser executado
pelo WebEnabler. Na ausncia do mesmo o programa executar sem imagens.
PSTimer
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.
Esse componente j acompanha o Progress e por isso no precisa ser instalado,
o arquivo que possui esse componente PSTIMER.ocx. O nome do
componente a ser utilizado Progress Timer Control.
Propriedades
Evento
CAPTULO 15
Tcnicas
Imagem
273
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.
274
MediaPlayer
ListView
CAPTULO 15
Tcnicas
275
CellView
276
DTPicker
Aloca_Tarefa
CAPTULO 15
UColunas
Tcnicas
277
278
Sintaxe: <com-handle>:Tela_Limpar().
chCtrlFrame:UColunas:Tela_Limpar().
CAPTULO 15
Tcnicas
279
MSComm
280
ProgressBar
TabStrip
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.
CAPTULO 15
DTelnet
Tcnicas
281
282
Sound
CAPTULO 15
Tcnicas
283
Tree Chart
284
CAPTULO 15
Tcnicas
285
286
CAPTULO 15
Tcnicas
287
288
= chNodos:add(0,0,1500,600).
CAPTULO 15
Tcnicas
289
Esta tcnica deve ser usada sempre que for executado um programa externo.
Essa funo substitui a antiga funo WINEXEC.
Implementao
290
Esta tcnica tem com objetivo fazer com que seja possvel executar a correo
ortogrfica do Word 97 para o texto que foi inserido em um determinado
campo ou varivel view-as editor.
Implementao
CAPTULO 15
Tcnicas
291
Height: 1,25
na procedure local-display-fields da SmartViewer ou na procedure localinitialize da SmartWindow, dependendo onde se encontra o Editor, deve
ser inserida aps o Run Dispatch, a chamada da include i-inispl.i, passando
como parmetro o nome do boto que foi criado. Exemplo:
{include/i-inispl.i <nome-do-boto>}
292
Utilizar esta tcnica sempre que for necessrio verificar se o mouse est dentro
de uma determinada regio da janela no momento do clique. Pode ser usado
em browsers para ordenao automtica com base em um clique.
Implementao
CAPTULO 15
Tcnicas
293
rodar o procedimento GetMousePos que est dentro do programa ututils.p, passando os seguintes parmetros:
Utilizar sempre que for necessrio obter o diretrio corrente do aplicativo que
est sendo executado.
Implementao
rodar o procedimento GetCurrentDir que est dentro do programa ututils.p, passando o seguinte parmetro:
294
Utilizar esta tcnica sempre que for necessrio retornar o diretrio de sistema
do windows. Pode ser usada quando se deseja copiar algum arquivo para o
diretrio SYSTEM.
Implementao
rodar o procedimento GetSysDir que deve estar dentro do programa ututils.p, passando o seguinte parmetro:
CAPTULO 15
Tcnicas
Implementao
295
rodar o procedimento GetWinDir que deve estar dentro do programa ututils.p, passando os seguintes parmetros:
Essa tcnica deve ser usada quando for necessrio obter ou at mesmo
informar o nome do computador que deve estar executando a aplicao.
Implementao
296
Utilizar esta tcnica sempre que for necessrio ler alguma varivel de
ambiente;
Implementao
rodar o procedimento GetEnv que deve estar dentro do programa ututils.p, passando os seguintes parmetros:
CAPTULO 15
Tcnicas
297
Esta tcnica deve ser usada sempre que for necessrio implementar uma janela
que esteja sempre visvel e que contenha funes de ferramentas, ou seja,
funes que no estejam ligadas a nenhum objeto ou programa especfico.
Implementao
298
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.
CAPTULO 15
Tcnicas
Implementao
299
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.
300
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
CAPTULO 15
Tcnicas
301
Observao No utilize a opo "else", pois nesta procedure passam vrios outros states.
Esta tcnica pode ser usada quando for necessrio desabilitar/habilitar outros
botes em Browse Inclui/Modifica conforme a existncia ou no de registro no
Browse.
Implementao
PROCEDURE state-changed:
/* --------------------------------------------------------Purpose:
Parameters: <none>
Notes:
----------------------------------------------------- */
302
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.
when "record-available":U then
assign bt-name:SENSITIVE in frame {&FRAME-NAME} =
yes.
/* Object instance CASEs can go here to replace standard
behavior or add new cases. */
{src/adm/template/bstates.i}
END CASE.
run pi-trata-state (p-issuer-hdl, p-state).
END PROCEDURE.
CAPTULO 15
Tcnicas
303
Viewers de Folders
ADM-CREATE-FIELDS
ADM-ASSIGN-FIELDS
ADM-MODIFY-FIELDS
ADM-MODIFY-FIELDS
304
*/
Viewers de Folders
ADM-CREATE-FIELDS
ADM-ASSIGN-FIELDS
ADM-MODIFY-FIELDS
ADM-MODIFY-FIELDS
CAPTULO 15
Tcnicas
305
306
*/
/* coluna no browse
*/
*/
*/
CAPTULO 15
Tcnicas
307
Onde:
{03}:indica a funo a ser realizada, conforme a tabela abaixo:
Funo
Objetivo
01
02
03
04 n
05
06 item
308
incluir
{utp/ut-rtlbl.i mgadm conta natureza text-1}
CAPTULO 15
Tcnicas
309
310
CAPTULO 15
Tcnicas
311
Utilizar esta tcnica sempre que for executado um processo longo e que se
deseja manter o usurio informado sobre o andamento do mesmo.
Implementao
rodar o procedimento pi-inicializar que deve estar dentro do programa utperc.p, passando os seguintes parmetros:
312
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.
CAPTULO 15
Tcnicas
313
Implementao
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:
run pi-finalizar in h-prog.
314
CAPTULO 15
Tcnicas
315
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.
Exemplo
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.
Exemplo
{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;
316
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
CAPTULO 15
Tcnicas
317
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.
318
&campozoom=it-codigo
&browse=br-digita}
END.
Observao A nica diferena est na utilizao do parmetro &browse, que recebe o nome do
browse onde o campo/varivel se encontra.
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.
CAPTULO 15
Tcnicas
319
{include/zoomvar.i &prog-zoom=inzoom/z01in172.w
&campo=item.it-codigo
&campozoom=c-item-pai
¶metros="run pi-seta-inicial in
wh-pesquisa (input param-cp.tipo-contr)."}
END.
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}.
320
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.
Exemplo
{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;
<where>: clusula where para localizar o registro na tabela de
referncia;
4. Atravs do include ZoomFields.i padronizada a chamada do zoom para
os campos que so chave estrangeira, que atende as seguintes situaes de
acesso ao zoom;
CAPTULO 15
Tcnicas
321
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:
a) chamada de zoom para atributos em um frame:
ON F5 OF ttcustomer.sales-rep in frame fPage2
OR MOUSE-SELECT-DBLCLICK OF ttcustomer.sales-rep in frame
fPage2 DO:
{method/ZoomFields.i &ProgramZoom="spp/spzoom.w"
322
&FieldZoom1="Sales-Rep"
&FieldScreen1="ttCustomer.Sales-Rep"
&Frame1="fPage2"
&RunMethod="RUN setaVariable IN
hProgramZoom (INPUT 'Representante')."
&EnableImplant="NO"}
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.
CAPTULO 15
Tcnicas
323
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}.
No exemplo:
costumer.state:load-mouse-pointer ("image/lupa.cur") in frame
{&frame-name}.
324
{include/pi-edit.i}
DO:
/* desvincula a query do browse */
ASSIGN br-browse:REFRESHABLE IN FRAME {&frame-name}= no.
ASSIGN de-tot-debito = 0
de-tot-credito = 0.
CAPTULO 15
Tcnicas
325
*/
Situaes necessrias
326
/********************************/
/*
PI-RETORNA-VALOR
**/
/*******************************/
DEFINE input parameter p-campo as character no-undo.
DEFINE variable p-valor as char initial "" no-undo.
if avail mguni.proced_consult_proced then do:
case p-campo:
when "cond_proced" then
assign p-valor =
string(proced_consult_proced.cod_proced).
when "des_prog_dtsul" then
assign p-valor = prog_dtsul.des_prog_dtsul.
end case.
end.
return p-valor.
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.
/********************************/
/*
PI-RETORNA-VALOR
**/
/*******************************/
DEFINE input parameter p-campo as character no-undo.
DEFINE variable p-valor as char initial "" no-undo.
if avail proced_consult_proced then do:
case p-campo:
when "cond_proced" then
assign p-valor =
string(proced_consult_proced.cod_proced).
when "c-descricao" then
assign p-valor = c-descricao.
end case.
end.
return p-valor.
CAPTULO 15
Tcnicas
327
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.
Object: text-parametro
No-Label: selecionado
Column: 1,29
Row: 8,25
328
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
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.
CAPTULO 15
Tcnicas
329
Exemplo
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
Object: text-parametro
No-Label: selecionado
Column: 1,29
Row: 8,25
Width: 31,00
Height: 0,92
330
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
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.
CAPTULO 15
Tcnicas
331
332
{include/i-vrtab.i <nome-tabela>}
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).
CAPTULO 15
Tcnicas
333
ELSE
RUN dispatch IN h_<nome-query>
(INPUT "get-first":U).
ASSIGN gr-<nome-tabela> = rw-<nome-tabela>.
334
CAPTULO 15
Tcnicas
335
336
Gatilho de Create
cabealho;
definio do gatilho;
cdigo do gatilho;
include para chamada da EPC, sendo que este s ocorre nos gatilhos de
WRITE e 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
Gatilho de Delete
**/
**/
**/
/*************************************************************
**
CAPTULO 15
Tcnicas
337
**/
**/
**/
{include/i-epc102.i <nome-da-tabela>}
/** Eliminao em cascata
Gatilho de Write
**/
/*************************************************************
** 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.: WRITE/<nome-da-tabela>
** Data de Criao......: XX/XX/XXXX
**
***************************************************************/
TRIGGER PROCEDURE FOR WRITE OF <nome-da-tabela> OLD BUFFER <bold-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 Write
**/
**/
Gatilho de Find
Gatilho de Assign
338
if new <nome-da-tabela>
or <nome-da-tabela>.<campo> <> <b-old-nome-databela>.<campo> then do:
Cdigo desejado no gatilho de assign.
end.
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)
CAPTULO 15
Tcnicas
Argentina
339
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
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
340
incidencia-impto
IndexName
pu
ch-tipo-tax
1 + cod-tax
IndexName
pu
cg-tipo-tax
1 + cod-tax
Implementao
Use-3D-Size
Keep3DfillinBorder
CAPTULO 15
Tcnicas
341
Onde:
<handle-panel>: varivel que contenha o valor do handle do panel
<valor>: valor para a propriedade que pode ser: Simple ou Multiple
342
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:
CAPTULO 15
Tcnicas
343
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 field,
o valor retornado da funo mostrado na varivel de soma-aplic do browser.
Observao Recomenda-se que no sejam utilizadas temp-tables. Na verso 8.2A do
Progress, a utilizao de tabelas temporrias dentro de funes est causando SYSTEM ERROR
(130).
Esta tcnica deve ser usada sempre que for utilizado um OCX no programa.
Ela consiste basicamente em verificar se o OCX est registrado corretamente
na mquina para que no seja disparado um erro PROGRESS.
Implementao
rodar o procedimento IsRegistered que deve estar dentro do programa ututils.p, passando o seguinte parmetro:
344
COMCTL.TreeCtrl.l ").
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
CAPTULO 15
Tcnicas
345
Esta tcnica deve ser usada sempre que for preciso construir um browse que
ter ordenao por coluna.
Implementao
346
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.
CAPTULO 15
Tcnicas
347
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
348
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
CAPTULO 15
Tcnicas
349
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
...
350
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.
CAPTULO 15
Tcnicas
351
352
Nome do pr-processador
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
CAPTULO 15
Tcnicas
353
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.
354
Implementao
Esta tcnica deve ser utilizada somente para os campos do tipo fill-in que
possua uma trigger de "LEAVE"/"VALUE-CHANGED" e no tenha lupa
como cursor do mouse ou um boto de zoom na sua direita; ou possua uma
trigger de "ENTRY".
CAPTULO 15
Tcnicas
355
{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.
Esta tcnica deve ser utilizada quando for necessrio contar a quantidade de
registros numa tabela, usando uma condio (clusula WHERE) ou no.
Implementao
356
para separar o cdigo para banco PROGRESS do cdigo para banco ORACLE
ou SQL Server, acessado atravs do DataServer.
Para banco PROGRESS o comando :
SELECT COUNT(*) INTO <var> FROM <tabela>
WHERE <condio>.
Para os outros bancos use o include include/i-count.p, descrito no item ICOUNTDS.I do cap. 6 deste manual.
Exemplo
{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
Exemplo
CAPTULO 15
Tcnicas
357
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.
Implementao
358
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.
Implementao
field l-habilitaRtf
as LOG.
as char
no-undo.
CAPTULO 15
Tcnicas
359
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.
360
CAPTULO 15
Tcnicas
361
= no
= no
bt-config-impr:visible = YES
&IF "{&RTF}":U = "YES":U &THEN
l-habilitaRtf:sensitive
= NO
= yes
362
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
CAPTULO 15
Tcnicas
363
as char no-undo.
END.
364
tt-param.l-habilitaRtf
habilitaRtf
&endif
2.
3.
field l-habilitaRtf
as LOG.
CAPTULO 15
Tcnicas
365
Esta tcnica deve ser utilizada apenas para revisar programas de relatrio que
apresentam problemas em Oracle.
Implementao
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) .
366
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-
CAPTULO 15
Tcnicas
367
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.
368
AS HANDLE NO-UNDO.
{utp/ut-oraFunConv.i }
ASSIGN oracleCommand = "SELECT" +
" order.order-num, order.cust-num, " + CHR(10) +
" order.Promise-Date, order.Sales-Rep " + CHR(10) +
"FROM order " + CHR(10) + "WHERE" + CHR(10) +
CAPTULO 15
Tcnicas
369
370
Esta tcnica tem por objetivo apresentar uma alternativa para efetuar consultas
em bases Oracle. Atualmente o acesso bases Oracle feito de maneira
transparente ao desenvolvedor, ficando cargo do DataServer a interface entre
os comandos Progress e SQL. Nem sempre os comandos convertidos pelo
DataServer so os mais eficazes, gerando perda de performance se
comparamos processos executados utilizando banco Progress e banco Oracle.
Para implementar tal processo o desenvolvedor far uso de dois utilitrios que
so:
Implementao
CAPTULO 15
Tcnicas
FIELD
FIELD
FIELD
FIELD
FIELD
FIELD
FIELD
FIELD
FIELD
FIELD
FIELD
FIELD
371
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
LIKE
LIKE
LIKE
LIKE
LIKE
LIKE
LIKE
LIKE
LIKE
LIKE
LIKE
LIKE
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.
372
Para
CAPTULO 15
Tcnicas
373
374
Exemplo:
Para obtermos o comando:
SELECT 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
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 oracleCommand).
CAPTULO 15
Tcnicas
375
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.
376
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 sel-inicial
AS INTEGER
FIELD sel-final
AS INTEGER.
AS RAW.
AS CHARACTER
AS HANDLE
NO-UNDO.
NO-UNDO.
LIKE order-line.Order-num
FIELD orderLine_lineNum
LIKE order-line.line-num
FIELD orderLine_itemNum
LIKE order-line.item-num
FIELD orderLine_price
LIKE order-line.price
FIELD orderLine_qty
LIKE order-line.qty
FIELD orderLine_discount
LIKE order-line.discount
CAPTULO 15
Tcnicas
377
/* 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/i-rpvar.i}
/* definio de variveis
DEFINE VARIABLE h-acomp
*/
AS HANDLE
NO-UNDO.
378
&endif
c-programa
= "SMARTRP"
c-versao
= "1.00"
c-revisao
= ".00.000"
c-empresa
c-sistema
= "Empresa Teste"
= "Sports"
c-titulo-relat
= "Listagem Order-Line".
/* corpo do relatrio */
&IF "{&EMS_DBTYPE}" = "Oracle" &THEN
RUN utp/ut-select.p PERSISTENT SET utSelect.
CAPTULO 15
Tcnicas
379
380
OracleLine.orderLine_qty
OracleLine.orderLine_discount
OracleLine.orderLine_extendedPrice WITH FRAME forder-line.
DOWN STREAM str-rp WITH FRAME f-order-line.
END.
&Else IF
FOR EACH OracleLine WHERE
OracleLine.orderLine_orderNum >= tt-param.sel-inicial
AND
OracleLine.orderLine_orderNum <= tt-param.sel-final
NO-LOCK ON STOP UNDO, LEAVE:
RUN pi-acompanhar IN h-acomp (INPUT
STRING(OracleLine.orderLine_orderNum)).
DISPLAY STREAM str-rp
OracleLine.orderLine_OrderNum
OracleLine.orderLine_lineNum
OracleLine.orderLine_itemNum
OracleLine.orderLine_price
OracleLine.orderLine_qty
OracleLine.orderLine_discount
OracleLine.orderLine_extendedPrice WITH FRAME f-orderline.
DOWN STREAM str-rp WITH FRAME f-order-line.
END.
&endif
/*END.*/
/*fechamento do output do relatrio*/
{include/i-rpclo.i &STREAM="stream str-rp"}
RUN pi-finalizar IN h-acomp.
RETURN "OK":U.
CAPTULO 15
Tcnicas
381
Remover o SmartLink do tipo RECORD que tem como source THISPROCEDURE e target a viewer do programa.
382
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-
CAPTULO 16
Dicas de Desenvolvimento
383
CAPTULO 16
Dicas de Desenvolvimento
Detalhamento
384