Académique Documents
Professionnel Documents
Culture Documents
Layout de Telas
TIPOS DE TELAS
Janela Mestre
Base dos programas chamados a partir do menu
Menu de barra, régua de botões no topo da janela que disponibilizam as funções existentes
naquele programa, e possuem moldura (resizeable).
Ex: Tela de um programa de cadastro.
Caixas de Diálogo
Interface modal = funções de grande risco aos sistemas.
Régua de botões na parte de baixo da caixa.
Exemplo: Programa de Cálculo do Preço Médio.
Observação Não é aconselhável salvar uma Dialog com uma Window aberta. Quando isto é feito, é
possível que o menu da Window seja copiado para a Dialog eliminando-o. Caso isto aconteça é
necessário recriar a Dialog e o menu da Window.
OBJETOS
Combo-boxes
Ver capítulo Como implementar campos indicadores com view-as combo-box nas telas.- TECNICAS
Retângulos
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.
Botões
Botões com label: altura: 1,00; largura: 10, 15 ou 20 unidades;
Representarem ações: verbos no infinitivo. (Cancelar, Incluir... ).
'OK': confirma e sai da tela;
'Cancelar': não confirma e sai da tela;
Fill-in´s
Altura de 0,88
Frames(Telas)
Título das telas: UT-9000.i, não necessita intervenção do programador;
Máximo 90 colunas – tamanho fixo.
Máximo 17 linhas - tamanho variável.
"Property Sheet" da janela no UIB, nos campos "Width" e "Height";
Mesmas dimensões utilizadas para as propriedades MAX-WIDTH-CHARS e MIN-WIDTH-CHARS
(altura máxima e mínima) e MAX-HEIGHT-CHARS e MIN-HEIGHT-CHARS (largura máxima e mínima)
Com isso as janelas podem possuir a moldura dada pela propriedade RESIZEABLE. O include WIN-
SIZE.I faz estas atribuições.
Radio-Sets
Não possuiem labels (retângulo)
Horizontais (<4) ou verticais (>4 <7)
Mais de 7 itens - combo-boxes.
Ver capítulo Como implementar campos indicadores com view-as radio-set nas telas.- TECNICAS
Editores
Não possui label.
Propriedades (Property Sheet): RETURN-INSERTED
Fonte "2"
SmartBrowser
Objeto Procedure
Recupera e visualiza dados, utilizando um browse.
Nome padrão do Browse não deve ser modificado.
Manter tamanho
SmartViewer
Procedure object
Visualiza os campos da base de dados
Preenche registros da base de dados
Distanciamento de uma linha (antes e após).
SmartQuery
Contém uma base de dados query.
Preenche registros para outro SmartObjects
Pode responder de navegação de um SmartPanel.
Recomendações
Na tela de características da "Query Builder", em "Options", o campo "Returned" deve
ser alterado de "All Fields" para "Fields Used".
Observação: :T em comentários - tradução dos fontes dos templates para outros idiomas.
CAPÍTULO 5 Estilos
CADASTRO SIMPLES
Características
Todas as funções, exceto zoom e 'vá para', realizadas na tela base do programa;
Campos alinhados formando colunas
Tabulação de cima para baixo – coluna a coluna
menu de barra todos os botões
Novas funções: botões (régua de botões no topo) e itens no menu de barra
Alterar: não permite alterar a chave
Eliminar: confirmação
Menu de barra:
Arquivo Ajuda
CADASTRO COMPLEXO
Características
Menu de barra: igual cadastro simples
Folders: campos não couberem em uma viewer.
Características
menu de barra: apenas Atualizar
COMPLEXO: tem folders
MANUTENÇÃO DE FILHOS
Características
Sem painéis, folders ou não;
Chamado através de um pai x filho;
Inclusão/Alteração;
Funções dos botões
MANUTENÇÃO DE PAIS
Caraterísticas
Igual manutenção filho, porem altera o pai.
Tem função copiar
Características
Apenas para consulta
Apenas zoom e do 'Vá para' não realizadas na tela base do programa
Menu = botões
CONSULTA RELACIONAMENTO
Características
Relacionamentos de uma tabela pai
Cada página um relacionamento (filho).
Brower: botão detalhar consulta tabela filho (duplo-clique ou <space> no Browser)
Acima do folder/retângulo principais campos da tabela
PARÂMETROS ÚNICOS
Características
Tipo detalhe: sem menu de barra e moldura - caixa de diálogo
Função dos botões
PARÂMETROS MÚLTIPLOS
Mesmas regras dos Cadastros Simples ou Complexo
Exemplo: Parâmetros por estabelecimento.
FORMAÇÃO
Características
Navegação: programa independente
Botão Incluir () adiciona ao browser de formação informação de 2 tabelas;
Botão Deletar () remove dados.
Botão Modifica: atualização dos atributos (Cadastro sem a régua).
Características
Não possui navegação – dependente
Chamado por um programa que possua Browser Formação.
IMPORTAÇÃO
Características
Janela tipo detalhe
Executar: dispara a importação parametrizada nos folders
Layout: layout do arquivo
Editar – através de um editor de texto
Seleção: faixa de registros
Parâmetros: nome do arquivo de entrada (registros a serem importados)
Log: nome do arquivo de saída
A seguir estão demonstrados os folders de Layout, Seleção e Parâmetros:
EXPORTAÇÃO
Características
Janela tipo detalhe
Executar : dispara a exportação parametrizada nos folders.
Seleção: faixa dos registros que serão exportados;
Parâmetros: nome do arquivo de saída
Log: determinação de modo de execução do mesmo.
A seguir são mostrados os folders de Layout, Seleção e Parâmetros:
ZOOM DE TABELAS
Características
Janela do tipo detalhe
Default-button: 'OK'
Implantar: chama o programa de cadastro da tabela (pode estar desabilitado)
Botões específicos: ao lado do ‘Implantar
aplicação do valor inicial e final definido pelo usuário
Folder: opção de classificação.
Label do campo: [valor inicial] ............... [valor final].
Não literais para denominar inicial e final.
Observação Verificar se cada folder tem um browser diferente ou não, se isto for necessário
inverter a ordem dos campos, conforme a classificação.
Não tem os botões de INÍCIO e de FIM teclado: "HOME" e "END"
VÁ-PARA
Características
Reposicionamento rápido do registro corrente
Conhecimento da chave do registro
Caixa de diálogo com botões de 'Ok' e 'Cancelar' e 'Ajuda'
default-button: OK
Observação Não salvar uma Dialog com uma Window aberta. (Possível que o menu da Window
seja copiado para a Dialog eliminando-o).
DIGITAÇÃO RÁPIDA
Características
Tipo Detalhe
default-button - 'Ok'
Páginas iniciais: informações genéricas
Última página: browser.
PAINÉIS
FUNÇÕES
Relatórios Relacionados
Características
Browser: lista relatórios relacionados ao programa
Executar - chama o relatório selecionado
Consultas Relacionadas
Características
Browser que lista todas as consultas relacionadas
Executar: chama a consulta selecionada
Observação
Campos fill-in’s: trigger de "LEAVE"/"VALUE-CHANGED" e sem lupa ou bt de zoom
trigger de "ENTRY".
Registro para o WebEnabler
CADASTRO SIMPLES
1) Selecionar o estilo:
Cadastro Simples Masters/w-cadsim.w
Cadastro Simples – Alteração Masters/w-cadsi2.w
Cadastro Simples – Inclusão Masters/w-cadsi3.w
7) Salvar SmartWindow.
LISTA DE LINKS
CADASTRO COMPLEXO
Passos 1 a 6 – igual cadastro simples. Diferença: instanciar várias viewers (page0 e folders).
Verificar o nome do estilo
10) Salvar.
LISTA DE LINKS
Source Link Type Target
LISTA DE LINKS
9) Botões de 'Ok' e 'Salvar': substituir "<handle da viewer principal>" pelo handle da viewer
12) Se desejar preencher os campos chave da tabela pai na viewer para inclusão:
12.1 Na SmartViewer principal: criar local-display-fields e local-add-record
12.2 Após o run dispatch:
12.2.1 Define buffer para a tabela pai
12.2.1 Find no buffer da tabela pai com o rowid (v-row-parent)
12.2.2 Se avail buffer, salva screen-value da tabela filho com a chave do buffer
Se não = “”.
LISTA DE LINKS
Uma Viewer
Source Link Type Target
THIS-PROCEDURE TABLEIO h_viewer
h_query RECORD h_viewer
10) Se necessário, incluir botões de Seleção e/ou Parâmetros para a tabela do SmartBrowser.
LISTA DE LINKS
LISTA DE LINKS
Uma Viewer
Source Link Type Target
THIS-PROCEDURE TABLEIO h_viewer
h_query RECORD h_viewer
INCLUI/MODIFICA
1) Selecionar o estilo: Window IncluiModifica Pai Master/w-incmdp.w
4) "Indexed-Reposition" marcado.
3) Alterar fill-ins faixa: nome (mesmo usado na query), tipo, formato, tamanho e valor inicial
3.1 Database fields indicar o campo dialog Dictionary Defaults desmarcar os toogle-boxes
Label e Database Variable;
CONSULTA SIMPLES
1) Selecionar o estilo:
Window Consulta Simples Masters/w-consim.w
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
LISTA DE LINKS
RELATÓRIOS
1) Não gerados pelo DataViewer - estilo Window Relatórios/Cálculos/Fechamentos (w-relat.w)
2) Não utiliza SmartObjects
3) Constituído por dois programas : .w e rp.p
4) Páginas do relatório (obs: igual Thin, porém sem Layout e Log só as de rel)
5) Traduções automáticas – exceto list-items do combo-box
Interface
1) Verificar quais páginas são desnecessárias, eliminar as freames, eliminar n (nº pág.
Desnecessárias) imagens com as "orelhas" mais a direita, renomeando as remanescentes e limpar
conteúdo preprocessadores
Página de Seleção
1) Colocar fill-ins de inicial e final. Sugestão: criar como 'Database Fields' e converter para variáveis
2) Corrigir 'initial values'
3) Retirar queries que o UIB queira associar a frame.
Página de Classificação
1) Redefinir o 'list-items' com as opções de classificação do relatório. Se necessário, adicionar mais.
Pagina de Parâmetros
1) Colocar as variáveis necessárias na representação desejada
2) Labels de retângulo devem ser fill-in´s view-as text, e o seu valor deve ser informado no seu
initial e private-data. As propriedades 'Display' e 'Enable' devem ser retiradas.
Página de Digitação
1) Definitions corrigir a definição da temp-table
2) Section Editor objeto browse br-digita, adaptar gatilhos para a nova definição da tt-digita
2.1 Display: campos apresentados/habilitados.
2.2 Row-entry: valores iniciais na inclusão de novas linhas
2.3 Row-leave: salva as alterações feitas pelo usuário.
3) bt-inserir e bt-alterar: aplica evento 'Entry' sobre o primeiro campo habilitado no browse;
Página de Impressão
Não é necessário qualquer função adicional.
Formato RTF
Não é necessário alteração na interface.
Se não desejar que o relatório possua essa funcionalidade:
1) &GLOBAL-DEFINE RTF NO
2) Pág. Impressão: remover os componentes e reposicionar campos.
FORMAÇÃO
7) procedure STATE-CHANGED, trigger botão "(>)" e trigger botão "(<)": substituir os comantarios.
LISTA DE LINKS
Source Link Type Target
h_browse-formação STATE THIS-PROCEDURE
h_p-exihel STATE h_query
h_p-navega NAVIGATION h_query
h_p-navega STATE h_query
h_query RECORD h_viewer
h_query RECORD h_browse-formação
THIS PROCEDURE STATE h_browse-fonte
Seqüência
1. Criar browse origem:
2. Definir query;
3. Definir campos para display.
4. Colocar campos da tabela pai.
5. Criar browse destino:
6. criar uma temp-table (definitions) com os atributos da tabela destino.
7. definir query (relacionando esta com a tabela pai) para a temp-table freeform;
8. definir campos para display.
9. Pré-processor nome da tabela pai;
10. local-initialize: lógica para carregar a temp-table com os registros da tabela de destino.
11. Criar funções e procedures internas:
12. criar função para mostrar o registro da tabela pai (pi-show-master-record);
13. criar inclusão no browse destino:
14. Procedure pi-ins - lê os registros selecionados verifica se o registro pode ser incluído, através
da função is-create-allowed, e caso a inclusão seja permitida executa a procedure pi-add-to-
target;
15. Função is-create-allowed - valida se o registro não existe ainda no browse destino, ou realiza
outras regras de negócio que verificam se a inclusão é valida retorna um status que indica o
resultado dos testes;
16. Procedure pi-add-to-target - realiza o create e o assign no browse destino (temp-table);
17. criar eliminação do browse destino:
18. Procedure pi-del - lê os registros selecionados e para cada um deles executa regras de
negócio que verificam se a eliminação é permitida (através da função is-delete-allowed) e
realiza a eliminação quando permitida pela função através da procedure pi-delete-from-
target (elimina da temp-table).
19. criar uma procedure interna (pi-commit) que transfira os registros da temp-table para a
tabela de destino, esta procedure é chamada pelo evento choose do botão 'Ok':
PROGRAMA DE IMPORTAÇÃO
1) Estilo Importação/Exportação (variação de relatório).
2) Páginas: Layout, Seleção, Parâmetro e Log.
3) Seleção e Log igual relatório padrão.
4) Pode impirmir Todos ou somente registros rejeitados (com erro).
Página de Layout
1)'Main Block': include {include/i-imvrf.i} informar nome do programa e versão do layout.
2) Criar arquivo de layout.
Pagina de Parâmetros
Diferenças:
1) bt-arquivo-entrada: pode adicionar terceiro parâmetro na include i-imarq.i : filtros. Se não
informar padrão *.lst e todos os tipos de arquivos.
END.
Página de Log
Não existem tarefas.
PROGRAMA DE EXPORTAÇÃO
Diferenças entre Importação
Página de Parâmetros
Mudar private-data e o initial do label "Arquivo de Entrada" do retângulo para "Arquivo de Saída".
Página de Log
Remover o retângulo, o label e o radio-set com as opções "Todos" e "Rejeitados". Reposicionar.
PROGRAMA DE PESQUISA
Window Pesquisa
Um SmarBrowser para cada classificação. Ordem das colunas = ordem de classificação.
LISTA DE LINKS
Source Link Type Target
h_browse STATE THIS-PROCEDURE
h_folder PATE THIS-PROCEDURE
PROGRAMA VÁ-PARA
1) Estilo Dialog VaPara
2) Selecionar a tabela e os campos.
3) Ajustar os campos na tela;
Gera automáticamente a TRIGGER GO
Sugestão: campos exibidos na altura adequada:
1. No AppBuilder Acessar Options - Preferences
2. Selecionar o folder Grid Units
3. Alterar a opção Layout Units para Pixel
4. Preencher os campos com valor 1
Ou alterar o tamanho dos campos manualmente
BROWSE DE DIGITAÇÃO
1) Estilo CustomBrowserDigita
2) Alterar definição da temp-table. Não eliminar o campo "line”.
3) Alterar trigger de open_query, substituindo a cláusula <temp-table>
3) Alterar trigger de display, substituindo as cláusulas <campo1> <campo2>.
4) Alterar pi-salva-rel para gravar todos os valores do browse.
5) Pi-busca-valor: nome das variáveis da viewer que deseja retornar o valor destas para o browse.
6) Validações na pi-salva-rel
7) Pi-cria-registro: a leitura dos registros da temp-table e criados os registros na tabela física.
QUERY
1) Estilo Custom Query Wizard
2 ) Seguir os passos do wizard: se viewer não contiver cláusula where assinalar Index Reposition;
Desabilitar SortBy-Phrase, Key-Phrase
VIEWERS
1) Estilo Custom Viewer com AutoField
Padrão: ao menos um campo não chave.
Sem campos de tabela:
Só com campos chave:
Padrão
1) Selecionar tabelas e campos.
4) Alterar a altura
8) Se não forem colocados atributos chave: eliminar o retângulo rt-key; mover demais campos.
10) Customizar LOCAL-INITIALIZE para inicializar objetos. (Labels, itens para combo-boxes e radio-
sets, etc) Antes do dispatch padrão.
7) Customizar LOCAL-INITIALIZE para inicializar objetos. (Labels, itens para combo-boxes e radio-
sets, etc) Antes do dispatch padrão.
11) LOCAL-ASSIGN-STANTEMENT: objetos terão seus valores salvos: comentar o dispatch padrão;
inserir a lógica de gravação dos valores das variáveis.
5) LOCAL-INITIALIZE: inicializações.
LOCAL-DISPLAY-FIELDS: exibir valores.
LOCAL-ENABLE-FIELDS: customizações.
LOCAL-ASSIGN-RECORD: salvar campos.
6) Alterar alturas e tabulação.
VALIDAÇÕES
Conferir entradas de dado fornecidas pelo usuário: evitar informações errôneas.
API’S
Recebe parâmetros para realizar alguma tarefa (atualização, retornar informações).
Visa facilitar a customização e a integração dos módulos.
Sempre executada através de outro programa.
Evitar duplicidade de código. Mantendo atualizadas.
Outros módulos: independência dos aplicativos.
Customizações.
Cliente e outros módulos não precisam conhecer detalhes do módulo.
Funcionamento
Receber parâmetros e executar uma açãos.
Não deve ter tratamento com tela.
INPUT-OUTPUT PARAMETER TEMP-TABLE: única forma de comunicação de dados com a API.
Pode usar mais de uma tabelas temporária.
NÃO utilizar variáveis globais.
Retorno da API RETURN-VALUE: OK ou NOK;
INPUT-OUTPUT PARAMETER TEMP-TABLE: pode retornar mensagem de erro ou
temp-table de retorno.
Nomenclatura: XXAPI999.P.
Definição temp-tables: include nome igual ao .p
Controle p/ versão de integração cod-versao-integracao: fixa, programador controla.
- Programa chamador passa versão como param entrada, API faz consistência (diferente da
versão do programa).
Retorno de erros: - retornar na própria tt de entrada
- tt de erros com cód do erro e descrição.
- msg cadastrada no cad mensagens.
Documentação: - modulo responsável: nome físico, versão, objetivo, parâmetros de entrada e
saída, include com definição da tt, validações e a ações.
- manual do modulo deve conter relação de todas apis.
TÉCNICAS
Desabilitar Radio-Buttons
Sintaxe normal: DISABLE(label-do-RB).
Porem o label muda para cada idioma, então:
IF nome-rs:DISABLE(ENTRY(X,(nome-rs:RADIO-BUTTONS IN FRAME {&FRAME-NAME}))) THEN.
Onde:
X =2 * (entrada desejada)-1. ("string", 1, "string", 2).
Acompanhamento (UT-ACOMP)
run utp/ut-acomp.p persistent set h-prog.
run pi-inicializar in h-prog(input "Importando arquivos").
run pi-acompanhar in h-prog(input string(item.it-codigo)).
run pi-finalizar in h-prog.
Zoom
A partir de:
Campo chave estrangeira;
Variável;
Campo chave estrangeira cujo nome não coincide com o nome do campo no browse de pesquisa
Sintaxe:
{include/zoomvar.i &prog-zoom=diretório/programa
&campo=variavel/tabela.atributo
&campozoom=nome-atributo
[&frame=nome-frame]
[&browse=nome-browse]
[¶metros="run pi-procedure in wh-pesquisa".]}
Onde:
<prog-zoom>: programa de zoom
<campo>: campo/variável na viewer. Formato tabela.campo
<campozoom>:campo do zoom de onde o valor é buscado. Sem informar tabela.
<frame>: quando o frame é diferente de {&frame-name}
<browse>: zoom é acionado a partir de uma coluna de um browse
<parâmetros>: procedure do zoom, que recebe os parâmetros.
thinZoom
{method/ZoomFields.i &ProgramZoom="nome do programa"
&FieldZoomN="nome do campo que retorna"
&FieldScreenN="nome do campo ou variável"
&FrameN="frame"
&RunMethod="run procedure in hProgramZoom"
&EnableImplant="yes/no"}
Onde:
<FieldZoomN>: nome do campo que deve ser
<FieldScreenN>: nome do campo (variável) que deve receber o valor
<EnabledImplant>: botão Implantar será habilitado ou não;
Depois de ter criado a função, deve ser declarado os valores a serem transferidos para ela,
conforme exemplo abaixo. Para que a função retorne o valor calculado por ela, devem ser retiradas
as "" do comando RETURN e acrescentado no seu lugar o nome da variável que possui o valor a ser
retornado para quem chamou a função.
Exemplo
RETURNS DECIMAL
(input de-valor as decimal): valor transferido
/*------------------------------------------------------------
Purpose:
Notes:
-------------------------------------------------------------*/
assign de-valor = (de valor + 1000). lógica da função
Return de-valor. valor retornado da função
END FUNCTION.
Esta função é muito útil para os campos calculados de browsers. Antes era necessário utilizar ON-
FIND TABELA no MAIN-BLOCK do programa para calcular o valor de um campo que possuía uma
lógica mais complexa (Exemplo: pesquisa em outras tabelas). Agora basta seguir a seguinte
sintaxe: fn-nome da função (valor a ser transferido) na expressão de um calculated field para
utilizar uma função e atribuir o valor retornado a uma outra variável do browser. Exemplo:
Neste exemplo, temos que a função "fn-valor" está sendo acionada utilizando o valor do campo
banco.vl-lim-aplic. Conforme a expressão do calculated field, o valor retornado da função é
mostrado na variável de soma-aplic do browser.
Observação Recomenda-se que não sejam utilizadas temp-tables. Na versão 8.2A do Progress, a
utilização de tabelas temporárias dentro de funções está causando SYSTEM ERROR (130).
inicializar o atributo READ-ONLY de todos os campos que serão utilizados para ordenação como YES:
ASSIGN Customer.Name:READ-ONLY IN BROWSE {&BROWSE-NAME} = TRUE
Customer.City:READ-ONLY IN BROWSE {&BROWSE-NAME} = TRUE.
marcar o atributo column-searching do browse;
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.
Objetivo
Utilizando ZOOM na página de digitação
Está técnica tem como objetivo fazer algumas adptações no zoom na página de digitação.
Ao utilizar ZOOM nos campos de um browser de digitação deveremos fazer algumas alterações na
trigger do botão inserir, antes e após a execução do método INSERT-ROW.
Editar o botão inserir e acrescentar os seguintes pontos em comentário abaixo ao código do
programa.
END.
else do transaction:
create tt-digita.
open query br-digita for each tt-digita.
apply "entry" to tt-digita.cdn_cargo in browse br-digita.
end.
END.