Escolar Documentos
Profissional Documentos
Cultura Documentos
Customizações
Abril/1999
Não homologado
Copyright © 1998 DATASUL S.A. Todos os direitos reservados.
Nenhuma parte deste documento pode ser copiada, reproduzida, traduzida ou
transmitida por qualquer meio eletrônico ou mecânico, na sua totalidade ou em
parte, sem a prévia autorização escrita da DATASUL S.A., que reserva-se o
direito de efetuar alterações sem aviso prévio. A DATASUL S.A não assume
nenhuma responsabilidade pelas conseqüências de quaisquer erros ou
inexatidões que possam aparecer neste documento.
DATASUL S.A.
Av. Santos Dumont, 831, Joinville, SC, CEP 89.222-900
i
Índice
Índice................................................................................................................. i
CAPÍTULO 1 Introdução..............................................................................1
CAPÍTULO 1
Introdução
CAPÍTULO 2
OK / NOK
Saída
Entrada
API
Acesso Extração
de dados
Datasul-EMS
Documentação
Tipos
Toda API criada pela Datasul possui um padrão que está documentado e a
partir dele que são criadas quaisquer APIs;
Os componentes podem ser:
Objetivo: O que vai ser gerado pela API, quando deve ser utilizada, para
que função ;
Os parâmetros de entrada e saída também possuem sua definição, o que
devem passar para a API e o que podem retornar;
Em caso de ocorrência de erro, quais as mensagens de erro podem ser
retornadas para o programa chamador;
As documentações de APIs estão no diretório docapi, com o nome da api
mais a extensão .doc;
--- Exemplo
Exemplo:
Parâmetros de Entrada:
Temp-table tt-atributos:
Na Temp-Table tt-atributos são definidas as características gerais de
apresentação do gráfico.
1
Quando houver alguma alteração da interface da API esta verifica se o programa
chamador está de acordo com a nova interface, em caso negativo, é emitida uma
mensagem informando que o programa deve ser revisto.
Objetivos
Definição
Customização
Clientes - Necessidades específicas e especialistas
User Program Call - UPC
Integração
Parceiros - Integrações com outros softwares
Application Partner Program Call – APPC
UPC + APPC = EPC
Exemplo :
Alterar as características das telas: labels, formatos, cores,
posicionamento, tabulação.
Implementar novos campos, novos botões com chamada para sub-
programas.
Parâmetros
Tanto o programa UPC quanto o programa APPC recebem os seguintes
parâmetros:
Criar um botão novo em uma window para chamar um subprograma a partir deste;
def input param p-ind-event as char no-undo.
def input param p-ind-object as char no-undo.
def input param p-wgh-object as handle no-undo.
def input param p-wgh-frame as widget-handle no-undo.
def input param p-cod-table as char no-undo.
def input param p-row-table as rowid no-undo.
if p-ind-event = "INITIALIZE"
and p-ind-object = "CONTAINER" then do:
create button wh-button
assign frame = p-wgh-frame
width = 4
height = 1.25
row = 1.26
label = "teste"
col = 65
sensitive = yes
visible = yes
triggers:
ON CHOOSE PERSISTENT RUN
upc/testeupc1.p.
end triggers.
end.
xternal Program Call 11
def new
global shared var wh-button as widget-handle no-undo.
def new global shared var wh-fill as widget-handle no-
undo.
def new global shared var tx-label as widget-handle no-
undo.
def var c-objeto as char no-undo.
if p-ind-event = "BEFORE-INITIALIZE"
and p-ind-object = "VIEWER"
and c-objeto = "v24ad098.w" then do:
create button wh-button
assign frame = p-wgh-frame
width = 18
height = 1
label = "Assistência Técnica"
row = 3.7
col = 67
visible = yes
sensitive = no
triggers:
ON CHOOSE PERSISTENT RUN upc/demoupc1.p.
end triggers.
create text tx-label
assign frame = p-wgh-frame
format = "x(17)"
width = 6.2
screen-value = "Perfil Marketing:"
row = 2.8
col = 59.5
fgcolor = 1
visible = yes.
create fill-in wh-fill
assign frame = p-wgh-frame
side-label-handle = tx-label:handle
format = "x(20)"
width = 12
height = 0.88
row = 2.7
col = 71
bgcolor = 1
fgcolor = 15
label = "Perfil Marketing:"
visible = yes
sensitive = no.
end.
if p-ind-event = "ENABLE"
and p-ind-object = "VIEWER"
and c-objeto = "v24ad098.w" then do:
assign wh-button:sensitive = yes
wh-fill:sensitive = yes.
end.
if p-ind-event = "DISABLE"
and p-ind-object = "VIEWER"
and c-objeto = "v24ad098.w" then do:
assign wh-button:sensitive = no
wh-fill:sensitive = no.
end.
if p-ind-event = "DISPLAY"
and p-ind-object = "VIEWER"
and c-objeto = "v24ad098.w" then do:
xternal Program Call 13
DO :
ASSIGN h_Frame = p-wgh-frame:FIRST-CHILD. /* pegando o
Field-Group */
ASSIGN h_Frame = h_Frame:FIRST-CHILD. /* pegando o
1o. Campo */
message h_frame:name view-as alert-box.
DO WHILE h_Frame <> ? :
if h_frame:type <> "field-group" then do:
IF h_Frame:NAME = "nome-mic-reg" THEN
DO :
assign h_campo = h_Frame.
leave.
END.
ASSIGN h_Frame = h_Frame:NEXT-SIBLING.
end.
else do:
assign h_frame = h_frame:first-child.
end.
END.
END.
end.
/* Variable Definitions
*****************************************************/
define var c-folder as character no-undo.
define var c-objects as character no-undo.
define var h-object as handle no-undo.
define var i-objects as integer no-undo.
define var l-record as logical no-undo initial no.
define var l-group-assign as logical no-undo initial no.
/* Main Block
*************************************************************
**/
if p-ind-event = "INITIALIZE" and p-ind-object = "CONTAINER"
then do:
RUN get-link-handle IN adm-broker-hdl (INPUT p-wgh-
object,
INPUT "PAGE-
SOURCE":U,
OUTPUT c-folder).
assign h-folder = widget-handle(c-folder) no-error.
do i-objects = 1 to num-entries(c-objects):
assign h-object = widget-handle(entry(i-objects, c-
objects)).
if p-ind-event = "BEFORE-INITIALIZE"
and p-ind-object = "VIEWER"
and c-objeto = "v24ad098.w" then do:
create text tx-label
assign frame = p-wgh-frame
format = "x(17)"
width = 6.2
screen-value = "Perfil:"
row = 2.8
col = 59.5
fgcolor = 1
visible = yes.
create fill-in wh-fill
assign frame = p-wgh-frame
format = "x(10)"
side-label-handle = tx-label:handle
width = 10
height = 0.88
row = 2.8
col = 65
bgcolor = 1
fgcolor = 15
visible = yes
sensitive = no
triggers:
ON F5 PERSISTENT RUN upc-curso/zoomupc.p.
end triggers.
end.
if p-ind-event = "ENABLE"
and p-ind-object = "VIEWER"
xternal Program Call 17
if p-ind-event = "DISABLE"
and p-ind-object = "VIEWER"
and c-objeto = "v24ad098.w" then do:
assign wh-fill:sensitive = no.
end.
{include/zoomvar.i &prog-zoom=inzoom/z01in172.w
&proghandle=wh-window
&campohandle=wh-fill
&campozoom=it-codigo}
BEFORE-VALUE-CHANGED APPLYVALUECHANGED
AFTER-VALUE-CHANGED APPLYVALUECHANGED
BEFORE-CHANGE-PAGE CHANGEPAGE
AFTER-CHANGE-PAGE CHANGEPAGE
BEFORE-OPEN-QUERY OPENQUERY
AFTER-OPEN-QUERY OPENQUERY
AFTER-DISPLAY DISPLAYFIELDS
BEFORE-ENABLE ENABLEFIELDS
AFTER-ENABLE ENABLEFIELDS
BEFORE-INITIALIZE INITIALIZEINTERFACE
AFTER-INITIALIZE INITIALIZEINTERFACE
BEFORE-CHANGE-PAGE CHANGEPAGE
AFTER-CHANGE-PAGE CHANGEPAGE
FORMAT = "x(40)"
WIDTH = 15
SCREEN-VALUE = "Comentário:"
ROW = 2
COL = 10
VISIBLE = YES
FONT = 1.
END.
END.
DO:
assign h-objeto = p-wgh-frame:FIRST-CHILD.
assign h-objeto = h-objeto:FIRST-CHILD.
do while valid-handle(h-objeto):
IF h-objeto:TYPE <> "field-group" THEN DO:
IF h-objeto:NAME = "nome-mic-reg" THEN DO:
ASSIGN h-campo = h-objeto.
Leave.
END.
assign h-objeto = h-objeto:NEXT-SIBLING.
END.
ELSE DO:
Assign h-objeto = h-objeto:first-child.
END.
end.
END.
END.
Habilitar o folder;
Somente é possível habilitar o folder se o programa utilizar as páginas fPage0
e fPage1.
def input param p-ind-event as char no-undo.
def input param p-ind-object as char no-undo.
def input param p-wgh-object as handle no-undo.
def input param p-wgh-frame as widget-handle no-undo.
def input param p-cod-table as char no-undo.
def input param p-row-table as rowid no-undo.
DO:
assign h-frame = p-wgh-frame:FIRST-CHILD.
assign h-frame = h-frame:FIRST-CHILD.
do while valid-handle(h-frame):
IF h-frame:TYPE <> "field-group" THEN DO:
IF h-frame:NAME = "fPage1" THEN DO:
ASSIGN h-fpage1 = h-frame.
END.
assign h-frame = h-frame:NEXT-SIBLING.
END.
ELSE DO:
LEAVE.
END.
xternal Program Call 23
end.
END.
End.
FONT = 1
TRIGGERS:
ON "F5":U PERSISTENT RUN epc/epczoom.p.
ON "MOUSE-SELECT-DBLCLICK":U PERSISTENT RUN
epc/epczoom.p.
END TRIGGERS.
WH-FILL:LOAD-MOUSE-POINTER("image/lupa.cur":U).
END.
END.
{method/zoomFields.i &ProgramZoom="spp/sp0008a.w"
&FieldZoom1="rep-name"
&frame1="fPage2"
&fieldHandle1=wh-fill}
{spbo/bosp001.i tt-Customer}
WH-FILL:LOAD-MOUSE-POINTER("image/lupa.cur":U).
IF VALID-HANDLE(wh-fill) AND
valid-handle(h-bo) THEN DO:
RUN GetCharField IN h-bo (INPUT "comments",
OUTPUT c-comments).
ASSIGN wh-fill:SCREEN-VALUE = c-comments.
END.
END.
Exemplos
END.
END.
END.
Ponto de Chamada
Parâmetros
EPCs em Gatilhos
de DELETE
Ponto de Chamada
Parâmetros
Caso houver outra situação de customização, que não seja possível de ser
resolvida através de EPC´s, se propõe:
a construção de um sucinto programa que seja o SETUP da customização
para cada um de seus clientes (caso for parceiro). Este programa, a
princípio limparia o conteúdo dos campos: ‘prog_dtsul.nom_prog_upc’ e
‘tab_dic_dtsul.nom_prog_upc’ e após faria o registro das customizações
daquele cliente.
aplicar o programa SETUP de determinado cliente na base sempre que for
realizar um teste com o ambiente daquele cliente.
Parâmetros
Exemplo:
no fonte de um programa sem interface do produto EMS 2.0, a
chamada EPC poderia ser implementada da seguinte forma:
Objetivo
Especificar a localização para armazenamento de programas
customizados por terceiros.
Implementação
Esta localização deve ser feita a partir de um diretório raiz que deve ter
o nome da empresa que desenvolveu o programa específico. Os diretórios dos
módulos e os nomes dos programas, podem ter o mesmo nome de programas
Datasul.
A diferença fica na chamada destes programas, isto é, para executar um
programa específico e seus sub-programas e includes, deve-se identificar na
chamada destes, o nome do diretório específico, identificando assim, estes
programas como não Datasul.
Este diretório raiz não deve estar sob o diretório do produto, isto é, não
deve ser incluído no diretório do produto Datasul instalado e, sim, em um
diretório de instalação próprio.
No cadastro destes programas no menu, deve-se ter o nome da empresa
que criou o específico, mais o nome do programa como a chave de
identificação. Ainda no cadastro de programas, será necessário colocar o nome
Considerações
Gerais
Exemplo
Caso a empresa XYZ desenvolva programas para o módulo APP, a
localização dos programas específicos desenvolvidos devem ficar em:
C:\EMS20POR\...
C:\<diretório>\XYZ\APP\AP0101.W
O PROPATH fica:
PROPATH = "c:\<datasul>;c:\<diretório>;..."
Obs.: O diretório XYZ está debaixo de c:\<diretório>
A: [ ]
B: [ ]
C: [ ]
varD:MOVE-AFTER-TAB-ITEM(varA:HANDLE).
varD:MOVE-BEFORE-TAB-ITEM(varA:HANDLE).