Histórico da Página
...
Uma form é um programa que se compila com o comando "form4gl" e gera um executável com a extensão .frm. A execução do .frm é feita pelo programa 4GL que, durante a execução abre e manipula a form por intermédio de instruções próprias.
+----------+
+----------+
+----------+ |
Compilação de uma form
...
Este atributo associa uma mensagem a um campo. Esta mensagem aparecerá na linha correspondente da tela sempre que o cursor estiver posicionado sobre o respectivo campo.
f011 f011 = livros.data_entrada, AUTONEXT, |
Exemplo atributo COMMENTS
7.2.4.3 DEFAULT
Este atributo permite definir um valor inicial no campo da tela a que está associado, quando é invocada a instrução INPUT.
f011 f011 = livros.data_entrada, AUTONEXT, DEFAULT = TODAY; |
Exemplo atributo DEFAULT
7.2.4.4 FORMAT
Permite controlar o formato de display dos campos a que está associado, desde que tenham tipo de dados numéricos ou do tipo data.
...
As datas podem ter os separadores "-" ou "/" à escolha.
f011 f011 = livros.data_entrada, AUTONEXT, DEFAULT = TODAY, |
Exemplo atributo FORMAT
Se a variável de ambiente DBDATE já estiver no formato “dmy4/” que indica o formato “dd/mm/yyyy”, não será necessário indicar o formato acima, pois o 4GL já assumirá automaticamente este formato.
...
Pode-se especificar uma série de valores separados por virgulas ou um valor mínimo e um valor máximo separados pela palavra "TO".
f007 f007 = livros.volumes, INCLUDE = (1 to 100); |
Exemplo atributo INCLUDE
7.2.4.6 NOENTRY
Evita a inclusão de dados quando executa uma instrução INPUT, ou seja, o cursor nunca será posicionado no campo definido como NOENTRY através da instrução INPUT.
...
Este atributo mostra os campos, a que está associado, com caracteres em vídeo reverso.
f000 f000 = livros.numero, REVERSE; |
Exemplo atributo REVERSE
7.2.4.8 PICTURE
Permite definir o formato de entrada de um campo da tela, para campos do tipo alfanumérico.
...
X Representa qualquer caracter.
f001 f001 = formonly.num_matricula CHAR(08), AUTONEXT, PICTURE = "##.###-#"; |
Exemplo de utilização do atributo PICTURE
7.2.4.9 VERIFY
Este atributo usa-se quando se pretende introduzir, num determinado campo, o mesmo valor duas vezes para reduzir a probabilidade de erro na entrada dos dados.
...
Com o comando DELIMITERS pode-se alterar os caracteres delimitadores do campo da tela, quando este é visualizado na execução do programa. Os caracteres default do 4GL são os colchetes "[...]".
DELIMITERS "{}" |
Neste exemplo o símbolo "{" é o caracter de abertura e "}" é o caracter de fechamento.
7.3 O comando FORM4GL
Após a definição, deve-se compilar o arquivo de definição da form utilizando o programa form4gl. Se existirem erros, estes são colocados num arquivo de mesmo nome, com extensão .err, contendo a identificação dos erros, que após corrigidos no arquivo de definição original, deve-se compilá-lo novamente. Estes procedimentos podem ser executados repetidamente até obter uma compilação da form sem erros.
form4gl <arquivo.per> per> |
Exemplo de compilação de form
O comando form4gl tem a estrutura de um comando LINUX, com três opções disponíveis.
...
Esta opção cria uma form default. Pode especificar o nome da form, o banco de dados e as tabelas que compõem a form escrevendo-as nesta ordem e a seguir à opção -d do comando. No entanto se escrever apenas o comando seguido da opção -d e pressionar <ENTER> o comando irá solicitar ao usuário que introduza esses elementos uma a um, pressionando <ENTER> após informar cada elemento. Para indicar que não pretende especificar mais tabelas pressione <ENTER> duas vezes.
form4gl form4gl -d f_livros livros autores livroslivros |
Cria e compila a form f_livros com as tabelas LIVROS e AUTORES do banco de dados LIVROS.
form4gl form4gl -v f_livros
|
livros |
No comando acima é realizada apenas a compilação da form f_livros.
8 Gestão de janelas – parte 1
...
A abertura de uma form através da instrução OPEN FORM é feita da seguinte forma:
OPEN FORM nome_da_form FROM "arquivo_form" |
Definição genérica da instrução OPEN FORM
O nome da form é dado pelo programador e é com esse nome que se passa a referenciar a entrada de dados dentro do programa. "arquivo_form" é o arquivo em que se encontra a form (arquivo .per) compilada retirando a extensão ".frm".
Antes de qualquer ação sobre a entrada de dados, deve-se mostrar esta form na tela sem qualquer dado. Para efetuar esta ação usa-se a instrução DISPLAY FORM.
...
DISPLAY FORM nome_da_form ATTRIBUTE(lista_de atributos) |
Definição genérica da instrução DISPLAY FORM
8.2 WINDOW
É comum, em num programa a utilização de pequenas partes da tela para efetuar algumas tarefas, a que se costuma chamar de janelas (Windows).
8.2.1 OPEN WINDOW
As cláusulas desta instrução definem o tamanho e o posicionamento da janela na tela, podendo associar uma form a janela e definir um ou mais atributos para a janela.
Assim que é executada a instrução OPEN WINDOW, a janela aparece na tela.
OPEN WINDOW nome_da_janela AT linha,coluna |
Definição genérica da instrução OPEN WINDOW
Utilizando este comando não é preciso efetuar o comando DISPLAY FORM como é feito para a instrução OPEN FORM para apresentar a form na tela.
Na cláusula AT diz-se quais as coordenadas do canto superior esquerdo da janela. A cláusula WITH serve para dizer qual o tamanho da janela e pode ser feita de duas maneiras: dizendo o numero de linhas e de colunas que se pretende para a janela ou associando uma form. No caso de se associar a janela a uma form, o 4GL atribui como tamanho da janela o tamanho da form. Se escolher esta opção não é necessário chamar a instrução OPEN FORM. A cláusula ATTRIBUTE é opcional e associa um ou mais atributos à janela. Os atributos podem ser utilizados para fazer o seguinte:
- Apresentar borda para a janela (BORDER);
...
- COMMENT LINE <posição> - default é 1 ou FIRST;
- FORM LINE <posição> - default é 3 ou (FIRST + 2);
- MENU LINE <posição> - default é 1 ou FIRST;
- MESSAGE LINE <posição> - default é 2 ou (FIRST + 1);
- PROMPT LINE <posição> - default é 1 ou (FIRST)
...
A “posição” pode ser identificada com os seguintes valores:
- FIRST (indica a primeira linha da janela);
- LAST (indica a última linha da janela);
- Número fixo da linha desejada, respeitando o número de linhas definidas para a janela.
...
OPEN WINDOW wcust AT 3, 6 WITH 10 ROWS, 50 COLUMNS |
Definição genérica da instrução OPEN WINDOW
8.2.2 CLOSE WINDOW
Para retirar a janela da tela utiliza-se a instrução CLOSE WINDOW. Assim que esta instrução é executada, a janela desaparece da tela. Se a janela estiver associada a uma form, quando se fechar a janela, a form é fechada automaticamente.
CLOSE WINDOW nome_da_janela
|
janela |
Definição genérica da instrução CLOSE WINDOW
8.2.3 CURRENT WINDOW
Durante alguns processamentos, você pode pretender mudar de janela de trabalho (ou janela corrente). A instrução CURRENT WINDOW transforma em janela corrente o nome da janela desejado, que é passado como parâmetro.
CURRENT WINDOW IS nome_da_janelajanela |
Definição genérica da instrução CURRENT WINDOW
A janela para qual se dá o nome precisa estar aberta para utilizar a instrução CURRENT WINDOW. Se a janela especificada estiver associada uma form, essa form passará a ser a form corrente.
...
Um programa de 4GL assume valores por default para o funcionamento de diversas instruções. Para alterar esses valores usa-se a instrução OPTIONS.
OPTIONS {MESSAGE LINE linha | |
Definição genérica da instrução OPTIONS
8.4 Instrução INPUT
A instrução INPUT é utilizada para editar uma form (para receber dados por intermédio de uma form).
Esta instrução tem como parâmetros um conjunto de nomes de campos (que correspondem aos campos que se pretende editar) que foram previamente identificados na seção ATTRIBUTES da form e um conjunto de variáveis que também podem ser definidas de várias formas. É também possível executar instruções e controlar o movimento do cursor condicionalmente à posição atual do cursor.
INPUT [BY NAME lista_de_variaveis |
|
[{BEFORE INPUT |
[NEXT FIELD nome_do_campo] |
END INPUT |
|
Definição genérica de uma instrução INPUT
Se a cláusula WITHOUT DEFAULTS for omitida, faz com que a instrução INPUT, quando chamada, apresente nos campos os defaults definidos na form. Se a cláusula existir, os valores apresentados nos campos durante o INPUT são os valores que estavam atribuídos as variáveis no momento anterior ao acionamento do INPUT.
9 Exercício - Sistema proposto
...
Como ponto de partida vamos gerar a form de dados de livros para a tabela LIVROS, obtendo-se o esqueleto do programa com o comprimento e o vínculo das colunas às tabelas já definidas.
DATABASE livros DATABASE livros SCREEN TABLES livros livros ATTRIBUTES |
A seguir vamos trabalhar sobre a seção SCREEN para obter o desenho da entrada de dados pretendida, considerando que todos os campos devem estar presentes numa única entrada de dados.
Uma solução para a entrada de dados pretendida pode ser conforme a seção SCREEN seguinte:
DATABASE DATABASE livros SCREEN } } |
Seção SCREEN da form livros
A seção TABLES fica da mesma forma como foi apresentado inicialmente:
...
TABLES |
Seção TABLES da form livros
Na seção ATTRIBUTES pode-se além de definir o nome e o tipo dos campos da form, definir alguns atributos que serão descritos a seguir. Na form livros serão utilizados os de uso mais comum.
...
Na form livros iremos usá-lo nas datas.
f011 f011 = livros.data_entrada, AUTONEXT;
|
COMMENTS
Na form livros iremos aplicá-lo ao campo data_entrada com a seguinte mensagem: "Introduza a data em que o livro entrou na biblioteca"
f011 f011 = livros.data_entrada, AUTONEXT, |
DEFAULT
Na form livros será aplicado aos campos volumes, sala e data da entrada. Neste último campo (data da entrada do livro) irá assumir o valor inicial como a data atual, escrevendo "today" como valor inicial.
f011 f011 = livros.data_entrada, AUTONEXT, DEFAULT = TODAY; |
...
FORMAT
FORMAT
Na form livros iremos usar o atributo "format" apenas nas datas e com o formato "dd/mm/yyyy".
f011 f011 = livros.data_entrada, AUTONEXT, DEFAULT = TODAY, |
INCLUDE
Na form livros vamos usar o atributo INCLUDE nos campo “volumes”, admitindo que um livro não pode ter mais de 100 volumes (1 a 100).
f007 f007 = livros.volumes, INCLUDE = (1 to 100); |
...
REVERSE
Na form livros vamos usar em vídeo reverso o campo número.
f000 f000 = livros.numero, REVERSE; |
...
9.2 Programa de cadastro de livros
DATABASE livros |
MAIN |
END MAIN
FUNCTION
END MAIN FUNCTION menu() |
END FUNCTION |
Abertura da form livros
A abertura da tela será feita utilizando a instrução OPEN WINDOW.
...
O programa deve ter variáveis para todas as colunas que desejar fazer entrada de dados na tela. Neste caso podemos declarar facilmente um RECORD que contenha todas as colunas da tabela LIVROS.
DATABASE livros
DATABASE livros
|
DEFINE mr_livros LIKE livros.* |
MAIN |
END MAIN
FUNCTION
END MAIN FUNCTION menu() |
END FUNCTION
END FUNCTION |
Declaração do RECORD mr_livros
Este programa terá um menu que permitirá as seguintes opções sobre a tabela de LIVROS:
...
Para criar menus utiliza-se a instrução MENU já vista anteriormente.
...
MENU "LIVROS" COMMAND COMMAND "Consultar" "Consultar um livro pelo numero." COMMAND COMMAND "Modificar" "Permite modificar o livro corrente." COMMAND COMMAND "Excluir" "Remove o livro corrente." COMMAND COMMAND "Fim" "Sai do programa." |
Menu da entrada de dados para livros
Este menu é implementado após a abertura da form principal de cadastro de livros.
...
Nesta função vamos utilizar a instrução INPUT na sua forma mais simples.
FUNCTION FUNCTION incluir() WHENEVER ERROR CONTINUE IF sqlca.sqlcode = 0 THEN END FUNCTION
|
END FUNCTION |
Inclusão de novo livro
A lista de campos da cláusula FROM da instrução INPUT, neste caso está implícita no caracter '*' do RECORD. Isto quer dizer que vão ser editados todos os campos que existem na variável composta mr_livros. Como a variável foi declarada LIKE livros.*, vão ser editadas todas as colunas da tabela LIVROS onde os nomes dos componentes forem correspondentes aos nomes dos campos da tela, definidos no arquivo da form, na seção ATTRIBUTES.
...
A função consultar, recebe o número do livro que se pretende procurar, procura-o no banco de dados, e mostra na entrada de dados todos os dados correspondentes. Note que o número do livro é introduzido na form.
FUNCTION FUNCTION consultar() INPUT BY NAME mr_livros.numero numero SELECT * IF status != 0 THEN END FUNCTION
|
END FUNCTION |
Função que procura um livro com determinado número
A instrução CLEAR FORM serve para limpar todos os campos existentes na form corrente. No exemplo acima, se a busca for bem sucedida é feito um display de todas as colunas da tabela.
...
Estrutura Estrutura da tabela requisições
A tabela entidades tem os dados gerais de cada entidade. A sua estrutura é a seguinte:
...