Você está na página 1de 499

Natural Fundamentals

Contedo

Mdulo I - Introduo ao Natural ......................

Mdulo II - rea de Dados ................................. 28


Mdulo III - Funes Programticas .................

78

Mdulo IV Mapas ............................................

193

Mdulo V - Acesso a Base de Dados ................... 267


Mdulo VI Relatrios ......................................

333

Mdulo VII - Mapas de Help e Helprotinas ......... 386


Mdulo VIII - Atualizao a Base de Dados .......

399

Mdulo IX - Processamento Batch .....................

413

Apndice A - Editor do Mainframe .....................

427

Exerccios ..........................................................

472

MDULO I - Introduo ao Natural

Unidade A - Introduo Linguagem de 4. gerao e ao Natural


-

Introduo Linguagem de 4. Gerao


O que torna o Natural to atraente
Bibliotecas
Ambiente operacional Natural
User Work Areas

Introduo tecnologia de 4. gerao

1950

Cdigo
de
Mquina

1960

COBOL

Cdigo
Assembler
4

1970

1980

1990

Linguagens
de

2000

Fim
do
TELEX

4. gerao

Windows

Introduo tecnologia de 4. gerao

Introduo tecnologia de 4. gerao

As empresas dependentes das linguagens de alto nvel


enfrentavam alguns problemas, tais como:
O desenvolvimento de uma aplicao levava muito tempo
para ser concluda, as vezes, anos;
As modificaes e manutenes nos aplicativos eram
demoradas e muito caras;
O processo de depurao de erros era extremamente
tedioso.

Introduo tecnologia de 4. gerao

As linguagens de 4. gerao foram desenvolvidas para


simplificar a computao.
Em vez dos cdigos de mquina, dos cdigos assembler e
das linguagens de alto nvel do passado, foi adotada para
as 4GL comandos mais textuais em ingls, com poucas
instrues, de fcil manuteno e capaz de acessar o
banco de dados diretamente.

Linguagem de 4. gerao e Natural

O Natural um ambiente de desenvolvimento para


produo orientada de tecnologia de 4. gerao e um
poderoso ambiente portvel de execuo.
A SAGA oferece outros produtos que, junto com Natural
funcionam como um completo sistema de informao de
software. Entre eles:
ADABAS C;
ADABAS D (Relacional);
Natural Engineering Workbench;
Natural for Windows;
8

Linguagem de 4. gerao e Natural

Construct (Gerador de Aplicaes);


Predict (Documetao Dicionrio de Dados;
Entire Connection (Emulao e Transferncia de dados);
Super Natural (Data Query);
EntireX (integrador de aplicaes);
Natural Web (internet / intranet).

Bibliotecas do Natural

Onde o Natural armazena as aplicaes criadas pelo


usurio?
Aps a criao ou modificao de um objeto, voc deve
armazen-lo numa biblioteca, caso contrrio, voc perder
todo seu trabalho ao finalizar a sesso.
Ao armazenar um objeto, ambos, o cdigo fonte e o cdigo
compilado ficam armazenados na mesma biblioteca.
Cada vez que voc acessa o Natural voc colocado
numa biblioteca default. Essa biblioteca depende de como
o seu sistema foi parametrizado.
10

Bibliotecas do Natural

Onde o Natural armazena as bibliotecas?


As bibliotecas do Natural so armazenadas numa
estrutura do banco de dados ou diretrios (dependendo do
ambiente operacional). FUSER ou FNAT.
Voc s pode trabalhar em uma biblioteca por vez. Para
acessar outra biblioteca basta entrar com o comando
LOGON na linha de comando direto e, em seguida, o nome
da biblioteca que voc deseja acessar.
Como conveno, o nome da biblioteca deve ter at oito
caracteres, sendo o primeiro, alfanumrico.
11

Ambiente Operacional do Natural

Ambiente Operacional Natural


Ncleo

Ncleo

Natural

Natural

DBMS

ADABAS

Online Natural

Batch Natural

Buffer Pool

Buffer Pool

User User

User

Work Work

Work

Area Area
1

...

12

Area

Ambiente Operacional do Natural

O Natural funciona tanto em modo online como em modo


batch, mas para executar um programa em batch
preciso submeter um job que chame o Natural.
H cinco componentes principais usados pelo ambiente
operacional Natural:
Ncleo Natural;
Natural Buffer Pool
As reas de trabalho do usurio (user work areas)
Arquivos para roll-ins/roll-outs das threads (mainframe) e
Systems Files
13

User Work Areas

Cada vez que voc aciona o Natural, uma rea alocada


para voc. Trata-se de uma rea de armazenamento
temporria composta de vrios buffers.
Cada buffer alocado para um propsito especifico. H um,
por exemplo, que armazena o cdigo fonte do seu objeto
Natural. H um outro que, durante a execuo de um
programa, retm os valores dos dados para os campos que
esto sendo utilizados.
Os nomes dos buffers em sua rea de trabalho iro variar
em funo da plataforma utilizada (MVS, Open VMS,
Windows ou Unix).
14

MDULO I - Introduo ao Natural

Unidade B - O que envolve a construo de aplicaes Natural


- Tipos de objetos Natural e Editores
- Modo Estruturado vs. Modo Report
- Modularizao

15

Tipos de Objetos Natural e Editores

H trs grupos principais de objetos Natural:


Objetos Programticos: Programas (P), Subprogramas
(N), Subrotinas (S), Helprotinas (H) e Copycode (C);
rea de Dados: Global (G), Parameter (A) e Local (L);
Mapas: Mapa (M) e Mapa de Help (H).
Cada um desses grupos tm o seu prprio editor, que
aberto quando voc escolhe o tipo de objeto com o qual
voc ir trabalhar.

16

Modo Estruturado vs. Modo Report

Modo Report
til para a criao de programas simples e pequenos,
que no envolvem dados complexos e/ou lgica de
programao.
Modo Estruturado
usado em aplicaes complexas, fornecendo uma
estrutura clara e bem-definida do programa.
Esses programas so mais fceis de serem lidos,
facilitando tambm sua manuteno;
Todos os campos usados no programa so definidos
numa nica localizao.
17

Modularizao

O principal motivo para o uso de mdulos nas aplicaes


devido facilidade da manuteno. Os vrios sistemas de
aplicaes com que voc trabalha possui diferentes
exigncias.
Em vez de tentar programar todas essas funes em um
nico e grande programa, mais fcil agrupar essas
funes em pequenos mdulos. Isto exige um
planejamento antecipado.

18

Modularizao

Modelo no-modular
Um objeto

19

Modularizao

Modelo modular

20

MDULO I - Introduo ao Natural

Unidade C - Viso Geral do Natural


- Instrues e Comandos do Natural
- Viso Geral

21

Instrues e Comandos Natural

O Natural responde a dois tipos de declaraes primarias: as


instrues e os comandos. As instrues so usadas para
codificar o seu programa, e os comandos para gerenciar o
ambiente.
Instrues
Dividem-se em cinco grupos funcionais: Definio de dados, acesso
aos dados, manipulao de dados, modificao de dados e exibio
de dados.
Comandos
Executam funes da sesso e podem ser emitidos a partir da linha
de comando direto ou dos prompts. H dois grupos de comandos:
Comandos do sistema (ex.: SAVE) e Comandos de terminal (ex.:
%T).
22

Instrues e Comandos Natural

Instrues
READ
DISPLAY
FIND

Comandos

LOGON
RUN
SAVE

WRITE...

Define programas Natural

Gerencia o ambiente Natural


Executa funes de sesso

23

MDULO I - Introduo ao Natural

Unidade D - O Help do Natural


- Help online
- Documentao

24

Help Online

O Help online do Natural fornece informaes sobre:


instrues;
variveis de sistema;
funes do sistema;
comandos;
editores;
utilitrios;
parmetros da sesso;
comandos de terminal;
mensagens do sistemas e mensagens definidas pelo usurio.
25

Help Online

Para acessar o help basta digitar a palavra help na linha de


comando ou ?, ou ainda, pressionar a tecla chave para
essa funo (geralmente PF1). No caso do Natural
Windows, para acessar o help basta clicar na barra de
menus o item Help.
Se voc souber exatamente que tipo de auxlio solicitar,
poder dirigir-se diretamente para a tela de help especfica
seguida do parmetro que foi solicitado. Por exemplo:
Este comando...

Faz isto...

HELP CHECK
HELP USER 1234
HELP 0082
HELP LAST

Explica o comando Natural CHECK


Exibe a mensagem de usurio completa do erro n. 1234
Exibe a mensagem Natural completa n. 0082
Exibe o texto do ltima comando
26

Help Online

H vrios manuais de documentao sobre o Natural e eles podem


variar de acordo com a plataforma que voc est utilizando. Os
seguintes manuais podem ser interessantes:
Statements Manual;
Reference Manual;
Users Guide e
Programmers Guide.
Alm disso, a SAGA disponibiliza via CD-ROM uma documentao
eletrnica contendo todos os manuais citados acima e suas respectivas
atualizaes.

27

MDULO II - rea de Dados

Unidade A - Viso Geral dos Tipos de Dados Disponveis


-

rea de Dados
Variveis do Sistema e Definidas pelo Usurio
Dados do Banco
Escolhendo a rea de Dados

28

Data Areas

rea de Dados

Funo

Global Data Area

Define os dados que podem ser compartilhados por mltiplos


objetos na aplicao.

(GDA)
Parameter Data Area
(PDA)

Referencia os dados que esto definidos tanto na GDA quanto


na rea de dados local (LDA).

Local Data Area


(LDA)

Define os dados que podem ser usados somente pelo objeto.

Application-

So variveis independentes de qualquer estrutura de dados

Independent

especfica. Alguns a utilizam para permitir o acesso de

Variables (AIVs)

subprogramas rea de dados global indiretamente.


Usadas com o Natural RPC para variveis disponveis a

Context

mltiplos subprogramas remotos com uma conversao.


29

Data Areas

rea de Dados Interna vs. Externa


As reas de dados podem ser criadas internamente nas
linhas de cdigo do seu programa, ou externamente, e
acessadas quando forem necessrias.
Voc pode ter mltiplas PDAs e LDAs, mas somente
uma GDA por aplicao.

30

Data Areas

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170

******************************************************************
* EXEMPLO DE DEFINICAO DA AREA DE DADOS GLOBAL, PARAMETER,
*
* LOCAL EXTERNA E LOCAL INTERNA
*
* NOME DO PROGRMA : PEXEMPLO
*
******************************************************************
DEFINE DATA
GLOBAL USING MAINGLOB
PARAMETER
1 #PARM1 (A10)
1 #PARM2 (A20)
LOCAL USING LDA1
LOCAL
1 PEOPLE VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
1 #DATA (A6)
END-DEFINE

31

Data Areas

rea de Dados Global

O objetivo da rea de dados global compartilhar dados


entre os objetos Natural. Os objetos que podem
compartilhar dados globais so:
Programas;
Subrotinas e
Helprotinas.

32

Data Areas

Vantagens no uso da Global Data Area

A vantagem de usar a GDA que voc no precisa definir


a passagem de parmetros do objeto chamador para o
chamado.

Alm disso, ela fornece dados para vrios programas com


muito menos espao que as reas de dados individuais
dos programas (usa-se a rea ESIZE).

33

Data Areas

Lembre-se!
As GDAs s podem ser criadas como estruturas
externas;
A GDA deve ser o objeto mais antigo da aplicao. Caso
voc precise criar uma GDA numa aplicao existente ou
modific-la, todos os demais objetos devero ser
recompilados;
Deve haver apenas uma GDA por aplicao;
Mltiplas GDAs podem ser usadas dentro de uma
aplicao somente quando usada conjuntamente com
subprogramas.
Programas, subrotinas e rotinas de help podem acessar
a GDA.
34

Data Areas

Parameter Data Area


Uma rea de parameter usada para definir elementos de
dados que um subprograma, subrotina ou uma help rotina
usa para receber e retornar dados para um mdulo
chamador. Ela pode ser definida internamente no
programa ou ser um mdulo externo. Os objetos que
podem usar uma PDA so:
Subprogramas;
Helprotinas e
Subrotinas Externas.
35

Data Areas

Lembre-se!
A PDA deve definir todos os campos que
esto sendo passados para ela;
Os campos devem ser definidos na seqncia
exata, com os mesmos formatos e tamanhos
que foram definidos no objeto chamador (a no
ser que se use a clusula by value). Os nomes
dos campos podem ser diferentes no objeto
chamador. Isto permite ao objeto ser usado por
diferentes aplicaes;
User views no podem ser definidas na PDA.
36

Data Areas

Lembre-se!
Os parmetros so passados para um
subprograma/routine por referncia (conforme
seus endereos). A opo BY VALUE, significa
que os valores atuais dos parmetros so
passados e no apenas o endereo, assim,
formato e tamanho no precisam coincidir;
Exemplo: Define data parameter
#NAME (A20) BY VALUE

A clusula BY VALUE RESULT faz com que os


parmetros sejam passados por valor em ambas
as direes (no envio e no recebimento).
37

Data Areas

0010 ******************************************************************
0020 * EXEMPLO DO USO DA PARAMETER DATA AREA
*
0030 * NOME DO PROGRMA : PDAEXEMP
*
0040 ******************************************************************
0050 DEFINE DATA
0060 LOCAL
0070 1 EMP VIEW OF EMPLOYEES
0080
2 PERSONNEL-ID
0090
2 NAME
0100
2 INCOME
0110
3 SALARY (1)
0120
2 DEPT
0130 1 #TAX (P6.3)
0140 END-DEFINE
0150 *
0160 READ EMP BY NAME
0170 CALLNAT 'SUBPEXEM' SALARY (1) #TAX
/* Passando parmetros para a PDA
0180 DISPLAY NAME PERSONNEL-ID SALARY (1) #TAX DEPT
0190 END-READ
0200 END

38

Data Areas

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120

*************************************************************
* EXEMPLO DE UM SUBPROGRAMA QUE RECEBE PARAMETROS
*
* NOME DO SUBPROGRAMA: SUBPEXEM
*
*************************************************************
DEFINE DATA
PARAMETER
1 #SALARY (P9)
PDA
1 #TAX
(P6.3)
END-DEFINE
*
COMPUTE #TAX = #SALARY * .045
END

39

Data Areas

Local Data Area

A rea de dados local define os campos que sero


utilizados por um objeto especfico. Elas podem ser
definidas internamente ou como um mdulo externo.
Diferentes objetos podem usar as definies de uma LDA,
mas no podem compartilhar os dados em tempo de
execuo.

Em tempo de execuo os valores dos dados so retidos


num buffer da sua rea de trabalho.
40

Data Areas

Lembre-se!
Em tempo de execuo, os dados locais so
usados somente pelo objeto que define a LDA.
Dois objetos programticos podem compartilhar
as definies de uma LDA, mas no podem
compartilhar os dados;
Defina somente aqueles campos que voc vai
usar no seu programa. Se voc define mais
campos do que realmente precisa, acaba
gastando o espao de seu buffer.
41

Variveis definidas pelo usurios

Se voc precisa definir campos diferentes dos encontrados


na DDM, defina-os como user-defined variables. H trs
importantes razes para o uso desse tipo de campo:
1. Exibir informaes geradas pelo usurio;
2. Para armazenagem intermediria de dados;
3. Para criar contadores.

Toda varivel definida pelo usurio deve ter nome e


formato.
42

Variveis definidas pelo usurios

Lembre-se!
Como os demais campos, voc deve criar as
user-defined variables dentro da estrutura da
instruo DEFINE DATA, ou ento numa rea
de dados externa;
Defina primeiro o formato de um campo e
depois o tamanho;
Costuma-se iniciar as variveis definidas pelo
usurio com o caracter (#);
Os nomes dos campos podem ter entre 1-32
caracteres.
43

Variveis definidas pelo usurios

Formato

Significado

Tamanhos Permitidos

Alfanumrico

1-253

Numrico (descompactado)

1-29 ou 1-27 (plataforma especfica)

Numrico (compactado)

1-29 ou 1-27 (plataforma especfica)

Inteiro

1, 2 ou 4

Ponto Flutuante

4 ou 8

Binrio

1-126

Atributo de Controle

(2)*

Data

(6)* (Armazenada como compactada de 4)

Hora

Lgico

(12)* (Armazenada como compactada de 7)


(1)*

* Os nmeros entre parnteses indicam valores que voc no pode alterar, portanto, para essas
variveis, no preciso definir o tamanho.
44

Variveis do Sistema

As variveis do sistema contm as informaes


atualizadas do sistema, tais como: o nome da biblioteca
corrente, do usurio e do terminal, etc.
A varivel de sistema facilmente reconhecida pois o
primeiro caracter um asterisco(*).
Data e Hora
Essas variveis contm a data e a hora em vrios
formatos. Voc pode exibi-las atravs das declaraes
DISPLAY, WRITE e MOVE. Veja o exemplo:
WRITE *DATE *TIME
01/01/96 12:00:00.9
45

Variveis do Sistema

Nome

Contedo

*NUMBER

Nmero de registros

*COUNTER

Nmero de vezes que o loop foi executado

*PAGE-NUMBER Valor atualizado do nmero da pgina


*LIBRARY-ID

Nome da biblioteca Natural

*PROGRAM

Nome do objeto Natural

*USER

Identificao do usurio

*LANGUAGE
*CURSOR
*ERROR-NR

Idioma corrente (1 Ingls) (11 ou 38 Portugus)


Posio do cursor
Nmero de erro Natural
46

Variveis do Sistema

Nome

Formato/Tamanho

Formato dos Contedos

*DATN

N8

YYYYMMDD

*DATE

A8

DD/MM/YY

*DATI

A8

YY-MM-DD

*DATJ

A5

YYDDD

*DATX

Formato interno

*TIME

A10

HH:MM:SS.T

*TIMN

N7

HHMMSST

*TIMX

Formato interno

Para cada varivel de sistema DATA corresponde outra que inclui o ano com 4 dgitos, exemplo:
*DAT4E, *DAT4I, *DAT4J.
47

Arquivos do Banco de Dados e DDMs

Arquivo Fsico vs. Arquivo Lgico


Os dados so armazenados no seu banco em arquivos
fsicos (tabelas). Para acessar esses arquivos com uma
das velhas linguagens de programao, voc deve
escrever rotinas de acesso, checar os return codes e
extrair os dados antes de process-los.

Com o Natural esse processo tedioso foi eliminado. Ele


pode usar arquivos lgicos e criar esse acesso para voc.

48

Arquivos do Banco de Dados e DDMs

Data Definition Module (DDM)


Trata-se de uma viso lgica do arquivo fsico. A DDM
define os campos do banco que vo ser usados no
programa. Os campos de uma DDM podem compreender
todos os campos definidos no arquivo do banco, ou
apenas um subconjunto desses campos.
Dependendo do seu DBMS, seu sistema pode ter mais que
uma DDM por arquivo.
O uso de DDMs tambm promove independncia dos
dados nos programas.
49

Arquivos do Banco de Dados e DDMs

Data Definition Module (DDM)


As seguintes informaes esto armazenadas na DDM
para cada campo:
Tipo de campo (grupo, elementar, MU e/ou PE);
Nvel do campo na estrutura;
Nome do campo no banco;
Nome do campo no Natural;
Formato;
Tamanho;
50

Arquivos do Banco de Dados e DDMs

Supresso de campos no ADABAS;


Situao do campo Descritor/Chave;
Observaes e/ou comentrios.

51

Arquivos do Banco de Dados e DDMs

Database
Physical Files

A B C D

Arquivo A

Arquivo B

DDM1

DDM2

Arquivo C

DDM3

DDM5

DDM4

52

Arquivo D

DDM6
DDM7

Programmatic user Views e Data Areas

O que so Programmatic user Views?


Trata-se de um subconjunto da DDM, que ir definir os
campos que seu objeto Natural ir usar.
Instruo Define Data
Voc define sua programmatic user view na rea de dados
dentro da instruo DEFINE DATA. Para verificar a sintaxe
apropriada para essa instruo, veja o exemplo:
DEFINE DATA LOCAL
1 cars view of vehicles /* cars a user view e vehicles a DDM
END-DEFINE
53

Escolhendo a rea de Dados

Para escolher corretamente a rea de Dados devemos levar em


considerao a funo e o propsito e cada uma delas. Observe a
tabela abaixo:
Interna ou Externa ?
Ento use...

Se a rea de dados contm...


Muitos campos e/ou precisam estar centralizados.

Externa

Definies de campos a serem compartilhados.

Externa

Poucos campos e/ou usado somente por um objeto Natural.

Interna

GDA, PDA ou LDA?


Se os dados...
So usados por vrios objetos Natural.

O tipo mais indicado ...


GDA ou PDA

So usados por apenas um objeto Natural.

LDA

So passados por um objeto chamador.

PDA

54

MDULO II - rea de Dados

Unidade B - Definio de Dados


-

rea de Dados Interna


rea de Dados Externa
Movendo Definies de Dados
DBMS
Modelos de Banco de Dados

55

rea de Dados Interna

Voc usa o editor de programa para criar a rea de dados


interna. Quando voc codifica o seu programa,
necessrio definir dentro da declarao DEFINE DATA
todos os campos que pretende utilizar.
DEFINE DATA
GLOBAL USING GDA2
LOCAL USING LDA3
LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 YEAR
2 COLOR
1 #NAME (A20)
END-DEFINE

56

rea de Dados Interna

Edio de Mscaras

A edio de mscara permite que voc mude o formato de


exibio de um campo sem mudar o formato e tamanho do
prprio campo. As principais razes para usar uma
mscara de edio so:
Mudar a aparncia da informao que vai ser exibida;
Remover dados desnecessrios de um campo;
Economizar espao de armazenamento.

57

Mscaras de Edio

Mscaras
de Edio
EM=999.99EM=9(3).9(2)EM=ZZZZZ9
EM=Z(5)9(1)
EM=X^XXXXX
EM=X(1)X(5)
EM=XXX..XX
EM=X(3)..X(2)

Exemplo A

Exemplo B

Valor

Sada

Valor

Sada

36732

367.32

-530

005.30-

BLUE

B LUE

A19379

A 19379

BLUE

BLU..E

AAB01

AAB..01

58

579

579

Mscaras de Edio

de Edio

Valor

Sada

Valor

Sada

100

F1F0F0

ABC

C1C2C3

Use *DATU

01/05/96

EM=HHH
EM=H(3)
EM=MM/DD/YY

Exemplo B

Exemplo A

Mscaras

EM=MM/DD/YYYY Use *DAT4U 01/26/1999


EM=HH.II.SS.T

Use *TIME

08.54.12.7

TRUE

ON

EM=OFF/ON

59

Use *DATU

02/30/96

Use *DAT4U

02/30/1996

Use *TIME

14.32.54.3

FALSE

OFF

Mscaras de Edio

Mscaras para campos do tipo DATA


Cdigo

Descrio

DD, ZD

Dia

MM, ZM

Ms

YYYY, YY, ZY

Nmero da semana

WW, ZW

Ano

JJJ, ZZJ

Dia juliano

NN, N(n)

Nome do dia

LL, L(n)

Nome do ms
Ano em numerais romanos

60

Mscaras de Edio

Mscaras para campos do tipo HORA


Cdigo

Descrio

Dcimos de segundo

SS, ZS

Segundos

II, ZI

Minutos

HH, ZH

Hora

AP

AM/PM

61

Mscaras de Edio

Exemplo de mscara para o formato DATA :


DEFINE DATA LOCAL
1 #BIRTH (D) INIT <*DATX>
END-DEFINE
WRITE #BIRTH (EM=NNNNNNNN, LLLLLLLLLL DDth)
END

Sada:
Monday, September 28th

62

Valores Iniciais

Valores de inicializao (INIT) podem ser atribudos aos campos da rea


de dados interna. Ao defini-los voc estar sobrescrevendo o valor nulo
que o default de um campo. Para campos alfanumricos, o valor nulo
default (branco) , para campos numricos (0), para variveis
lgicas, FALSE e para as variveis de controle, (AD=D).
Lembre-se!
Os valores de inicializao para campos alfanumricos devem
estar entre apstrofes;
As variveis de sistema podem ser usadas para inicializar
variveis definidas pelo usurio;
Valores de inicializao para ocorrncias de array devem ser
separados por vrgula, ou os ndices devem ser especificados para
definir os valores iniciais de cada ocorrncia do array.
63

Exemplo

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
0220

******************************************************************
* ILUSTRA O USO DO EDIT MASK E DOS INIT
******************************************************************
DEFINE DATA
LOCAL
1 #COLOR
(A10)
INIT <'TURQUOISE'>
(EM=X' 'X' 'X' 'X^X^X^X^X^X)
1 #SSN
(N9)
(EM=999-99-9999)
1 #MONTH
(A3/12) INIT <'JAN','FEV','MAR','ABR','MAI','JUN',
'JUL','AGO','SET','OUT','NOV','DEZ'>
1 #COUNTRY-MENU
(9)
2 #SELECT
(N1)
INIT <1,2,3,4,5,6,7,8,9>
2 #COUNTRY-TEXT (A20)
INIT (1) <'AUSTRALIA'>
(2) <'CANADA'>
(3) <'INGLATERRA'>
(4) <'FRANCA'>
(5) <'ALEMANHA'>
(6) <'JAPAO'>
(7) <'ESPANHA'>
(8) <'ESTADOS UNIDOS'>
(9) <'IOGUSLAVIA'>
64

Exemplo

Continuao
0230
0240
0250
0260
0270
0280
0290
0300
0310
0320
0330
0340
0350
0360
0370

1 #DATE
(D)
INIT <*DATX>
1 #TIME
(T)
INIT <*TIMX>
1 #REPEAT
(L)
INIT <TRUE>
END-DEFINE
*
#SSN := 123456789
*
WRITE NOTITLE
/ 10T '=' #COLOR (CD=YE)
// 10T '=' #SSN (CD=GR)
// 10T '=' #DATE #TIME (CD=PI)
// 10T '=' #MONTH(1:12)(CD=RE)/
*
DISPLAY NOHDR #COUNTRY-MENU (*)
END

65

Exemplo

Sada:

#COLOR: T U R Q U O I S E
#SSN: 123-45-6789
#DATE: 02-10-02 18:00:50
#MONTH: JAN FEV MAR ABR MAI JUN JUL AGO SET OUT NOV DEZ
1
2
3
4
5
6
7
8
9

AUSTRALIA
CANADA
INGLATERRA
FRANCA
ALEMANHA
JAPAO
ESPANHA
ESTADOS UNIDOS
IOGUSLAVIA
66

Redefinio de Campos

O Natural permite a redefinio de um grupo ou de um


nico campo da rea de dados interna. Uma das razes
para redefinir campos a necessidade de usar trechos de
campos, tais como o ano, o ms e/ou o dia de um campo
DATA-ACQ, por exemplo.
A clusula para redefinio de campos REDEFINE. Ela
ir definir os trechos que compem o campo a ser
redefinido. Esses trechos tambm podem ser campos
definidos pelo usurio ou um FILLER (bytes que no tm
nenhum significado especfico para o objeto em questo).
67

Notao FILLER nX

O FILLER uma opo da clusula REDEFINE para


definir o nmeros de bytes que preenchem os campos que
esto sendo redefinidos. importante lembrar que quando
se usa essa notao, no preciso especificar qualquer
formato e tamanho entre os parnteses - a notao nX
basta.

68

Exemplo

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200

******************************************************
* ILUSTRA DECLARACAOREDEFINE COM A OPCAO DE FILLER
******************************************************
DEFINE DATA
LOCAL
1 CAR VIEW OF VEHICLES
2 PERSONNEL-ID
2 MAKE
2 DATE-ACQ
2 REDEFINE DATE-ACQ
3 FILLER 4X
3 #MONTH (A2)
3 FILLER 2X
END-DEFINE
*
FIND (1) CAR WITH PERSONNEL-ID = '11100106'
WRITE NOTITLE / 10T '=' MAKE
/ 10T '=' DATE-ACQ 5X '=' #MONTH
END-FIND
END

69

Exemplo

Sada:
MAKE: VW
DATE-ACQ:

19860115

70

#MONTH: 01

rea de Dados Externa

No editor da rea de dados, voc pode definir qualquer tipo de campo,


assim como no editor de programa. Se voc estiver definindo uma
user-variable, entre com o nmero do nvel, o nome, formato e
tamanho diretamente. Se for usar campos da DDM, voc deve usar um
comando para puxar os campos selecionados. O Natural traz os
campos com seus respectivos nomes, tamanhos e formatos
automaticamente para voc.
Alm da DDM, os dados podem ser inseridos na sua rea de dados
externa usando o comando .I(xxxxxxxx) (vlido somente para o editor
Natural no mainframe), a partir dos seguintes objetos: Mapas,
Programas, Subprogramas, Subrotinas e Helprotinas.
Dependendo de como o seu sistema est parametrizado, o natural
poder dar um nome default sua user-view; para sobrescrever esse
nome, basta digitar o nome de sua preferncia sobre o campo.
71

rea de Dados Externa

Lembre-se!
Campos do banco de dados no podem ser
movidos ou copiados;
Os formatos e tamanhos dos campos do
banco de dados no podem ser mudados;
Os campos do banco dados no podem ser
renomeados;
Os campos do banco de dados podem ser
redefinidos usando a instruo REDEFINE;
Os valores de inicializao no podem ser
definidos para campos do banco de dados.
72

Opo FILLER na rea de Dados Externa

A opo FILLER tambm est disponvel na rea de dados externa, no


entanto, no preciso mencionar a keyword FILLER quando usar essa
opo, nem o formato e tamanho.
I T L Name
All - --------------------------------V 1 VEHICLES-VIEW
2 PERSONNEL-ID
2 MAKE
2 MODEL
2 COLOR
2 YEAR
2 DATE-ACQ
R 2 DATE-ACQ
3 4X
3 #MONTH
3 2X
1 #START-MAKE
1 #END-MAKE
73

F Leng Index/Init/EM/Name/Comment
- ---- -------------------------------

A
A
A
A
N
N

8
20
20
10
4.0
8.0

A
A

20
20

VEHICLES
/* INTERN.
/* LOCAL/GENERIC
/* LOCAL/GENERIC
/* LOCAL/GENERIC
/* INTERN.
/* INTERN.

Movendo Definies de Dados

Uma das decises que voc precisar tomar ao definir os


seus dados ser a escolha da rea de dados. Alm disso,
pode haver a necessidade de mover as definies dos
dados de uma rea externa para uma rea de dados
interna (ou vice-versa).
H dois comandos para isso:
Generate - Usado para mover as definies de uma
rea de dados externa para uma rea de dados interna.
I(xxxxxxxx)- Usado para mover as definies de uma
rea de dados interna para uma rea de dados externa
(vlido somente para o editor Natural no mainframe).
74

Comando Generate

E esse comando permite que voc mova as definies


contidas no editor da rea de dados para o editor do
programa. Quando o comando GEN emitido (dentro do
editor da rea de dados externa), um copycode criado.
As definies so colocadas na LDA do copycode.
Para aproveitar essas definies num programa, basta
digitar o comando SET TYPE P para mudar o tipo de
objeto de copycode para programa.

75

Comando .I(xxxxxxxx)
(somente para Nat. Mainframe)

Esse comando permite que voc mova as definies contidas no editor


do programa para uma rea de dados externa. Antes de inserir essas
definies, devemos nos certificar que o objeto que contm os dados a
serem puxados foi previamente catalogado.
Emitir o comando .I(<nome do objeto>) na ltima linha editada da rea
de dados, ou ento na primeira linha do editor, caso no haja nenhum
campo editado.
Selecione os campos que deseja incluir na rea de dados atravs de
uma das seguintes opes:
All local variables and parameters
All local variables
Only internally defined local variables
All parameters
Only internally defined parameters
76

Exemplo

I T L Name
All - -------------------------------V 1 CARS
2 REG-NUM
2 PERSONNEL-ID
2 MAKE
2 MODEL
2 COLOR
2 COLOUR
2 YEAR
*
1 #OPTION
*
V 1 EMPL
2 PERSONNEL-ID
*
*

77

F Leng Index/Init/EM/Name/Comment
- ---- -----------------------------VEHICLES
A
15 /* LOCAL FORMAT
A
8 /* INTERN.
A
20 /* LOCAL/GENERIC
A
20 /* LOCAL/GENERIC
A
10 /* LOCAL/GENERIC
A
10 /* LOCAL/GENERIC
N 4.0 /* INTERN.
/* INSERTED FROM SANPGM01
A
1
/* INSERTED FROM SANMAP01
EMPLOYEES
A
8
/* END OF SANMAP01
/* END OF SANPGM01

MDULO III - Funes Programticas

Unidade A - Processamento Condicional


-

Introduo
Tomando uma deciso
Controle de loop
Varivel lgica
Resumo

78

Introduo

Condio Lgica
Para aplicar funes que envolvem o processamento condicional a seus
programas, voc pode usar qualquer uma das declaraes abaixo.
Condio Lgica

Descrio

IF/THEN/ELSE

Testa a condio lgica e divide-se em uma ou duas operaes.

DECIDE

Estrutura condicional de mltiplas opes.


Usado para criar um processamento de loop. O loop continua at

REPEAT

que uma certa condio seja satisfeita, ou at que um determinado


nmero de iteraes tenha sido completado.
Usado para criar um processamento de loop. O loop continua at

FOR

que um certo nmero de iteraes tenha sido completado.


79

Tomando uma deciso

Instruo IF
Essa instruo define uma condio lgica que executada
em funo da condio associada a ela. A declarao IF
contm 3 componentes:
IF - condio lgica que deve ser encontrada;
THEN - instruo a ser executada caso a condio seja
verdadeira;
ELSE - (opcional) instruo a ser executada caso a
condio seja falsa.

80

Tomando uma deciso

Lembre-se!
Voc pode usar expresses aritmticas com IF.
A clusula ELSE no essencial.
Valores em campos alfanumricos podem ser
checados para um formato e tamanho especficos, para
que voc saiba se pode ou no converter o valor para
us-lo em outro formato. Os formatos vlidos para
converso so: N, F, D, T, P, I. Use a funo VAL para
mover o valor para um campo de outro formato.
Exemplo
IF #ALPHA IS (N5,3) THEN
#NUM := VAL(#ALPHA)
END-IF
81

Tomando uma deciso

Lembre-se!
Voc pode combinar vrios operadores booleanos
dentro de uma nica instruo IF. A ordem em que os
operadores so avaliados a seguinte: (), NOT, AND e
OR.
Exemplo
IF YEAR = 80 THRU 89 AND MAKE=AUDI
AND (COLOR = GREEN OR =BLACK)
THEN
INPUT USING MAP CARMAP
END-IF
82

Tomando uma deciso

Lembre-se!
Voc pode usar a opo SUBSTRING para comparar
parte de um campo alfanumrico.

Exemplo
IF SUBSTRING (#DATE,1,2) GT 12
REINPUT
MS INCORRETO PARA A MSCARA (MMDDYYYY)
END-IF
83

Tomando uma deciso

Lembre-se!
Voc pode consultar posies selecionadas um
campo de acordo com um contedo especfico usando
a opo MASK.
Exemplo
IF #DATE NE MASK (DD/MM/YYYY)
REINPUT
POR FAVOR, ENTRE COM O FORMATO DD/MM/YYYY
END-IF
IF #SSN NE MASK (NNNNNNNNN)
REINPUT SSN MUST BE 9 DIGITS
END-IF
84

Tomando uma deciso

Lembre-se!

Exemplo

Voc pode verificar se um valor termina com um


caracter especfico. No exemplo abaixo, a condio
ser verdadeira tanto se houver um E na ltima
posio do campo, ou o ltimo E no campo for
seguido de brancos.

IF #FIELD NE MASK ( * E /)
REINPUT POR FAVOR, ENTRE COM UM NOME QUE TERMINE COM E
END-IF

85

Tomando uma deciso

Lembre-se!
Campos numricos tambm podem ser verificados
dessa forma.
Exemplo

IF #YEAR NE MASK ( *9/)


REINPUT POR FAVOR, ENTRE COM UM ANO QUE TERMINE COM 9
END-IF

86

Tomando uma deciso

Lembre-se!
Instrues que so embutidas dentro de outras
instrues so chamadas nested (aninhadas).
Instrues IF podem ser aninhadas desde que uma
condio leve a outra e assim por diante.
Instrues com as clausulas THEN ou ELSE, podem
por sua vez, conter outras declaraes IF/THEN/ELSE.
Essa alternativa de aninhar cria vrios caminhos que
possibilitam a execuo do programa.

87

Tomando uma deciso

0010 ************************************************************************
0020 * ILUSTRA O USO DA DECLARACAO IF
0030 ************************************************************************
0040 DEFINE DATA
0050 LOCAL
0060 1 EMPL VIEW OF EMPLOYEES
0070
2 NAME
0080
2 JOB-TITLE
0090
2 PERSONNEL-ID
0100
2 CITY
0110
2 COUNTRY
0120 1 #PID (A8)
0130 1 #CV1 (C)
0140 1 #CV2 (C)
0150 1 #MESSAGE (A60)
0160 END-DEFINE
0170 *
0180 REPEAT
0190
INPUT USING MAP 'EMPLMAP'
...
88

Tomando uma deciso

0200
IF #PID=' '
0210
ESCAPE BOTTOM
0220
END-IF
0230
FIND EMPL WITH PERSONNEL-ID = #PID
0240
MOVE (AD=P) TO #CV1 #CV2
0250
INPUT USING MAP 'EMPLMAP'
0260
IF #CV2 MODIFIED
0270
UPDATE
0280
END TRANSACTION
0290
MOVE (AD=P) TO #CV1 #CV2
0300
#MESSAGE := 'UPDATE DONE'
0310
INPUT USING MAP 'EMPLMAP'
0320
END-IF
0330
END-FIND
0340
RESET EMPL #CV1 #CV2 #MESSAGE #PID
0350 END-REPEAT
0360 *
0370
END

89

Tomando uma deciso

Lembre-se!
A opo MODIFIED usada para testar o contedo
de um campo que recebeu atributos dinamicamente foi
modificado durante a execuo de uma instruo
INPUT.
No primeiro input do mapa, as variveis de controle
so sempre referenciadas com o status NOT
MODIFIED na declarao INPUT.Sempre que o
contedo de um campo (que est ligado a uma varivel
de controle) modificado, a varivel de controle recebe
o status MODIFIED.

90

Tomando uma deciso

Instruo DECIDE
A instruo DECIDE permite a execuo de mltiplas opes
num processamento condicional. Assim como o IF, voc
avalia a condies lgicas ou valores de um campo. O tipo
de avaliao ir determinar o tipo de declarao DECIDE que
voc usar. H duas formas bsicas:
DECIDE FOR - refere-se a um ou mais campos.
DECIDE ON - baseia-se nos valores de uma nica
varivel.

91

Tomando uma deciso

Exemplo - DECIDE FOR


DECIDE FOR FIRST CONDITION
WHEN #FUNCTION =A AND #PARM =X
PERFORM ROUTINE-A
WHEN #FUNCTION =B AND #PARM =X
PERFORM ROUTINE-B
WHEN #FUNCTION =B AND #PARM =Z
PERFORM ROUTINE-BZ
WHEN NONE
REINPUT INVALID FUNCTION ENTERED MARK *#FUNCTION
END-DECIDE

92

Tomando uma deciso

Exemplo - DECIDE ON
DECIDE ON FIRST VALUE OF *PF-KEY
VALUE PF1
PERFORM ROUTINE-UPD
VALUE PF2
PERFORM ROUTINE-ADD
ANY VALUE
END TRANSACTION
WRITE RECORD HAS BEEN MODIFIED
NONE VALUE
IGNORE
END-DECIDE
93

Tomando uma deciso

Declarao DECIDE - OPES


Descrio

Opes
FIRST

Para a checagem at a primeira condio verdadeira ser encontrada

EVERY

Checa todas as condies. Processa todas as condies verdadeiras.

ANY

Processa a declarao se qualquer uma das condies especificadas

ALL

for verdadeira.
Processa as declaraes se todas as condies especificadas forem
verdadeiras.

NONE

Opo obrigatria em todas declaraes. processada se nenhuma


condio for verdadeira. A palavra IGNORE indica que nenhuma ao
adicional exigida se nenhuma condio for verdadeira.
94

Tomando uma deciso

IF vs. DECIDE FOR


Como regra geral, o nmero mximo de IF aninhados num
programa trs, pois a depurao de ifs aninhados difcil,
Portanto, aconselhvel para mais de trs nveis o uso da
instruo DECIDE.
Vejamos como fica a leitura de um mesmo programa, com o
emprego de duas possibilidades diferentes: uma com o uso
do IF e o outro com o usos do DECIDE.

95

Tomando uma deciso

Exemplo com uso da instruo IF:


0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200

************************************************************************
* ILUSTRACAO O USO DA DECLARACAO IF
************************************************************************
DEFINE DATA LOCAL
1 PERSON VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 MAR-STAT
2 SEX
1 #STATUS (A25)
END-DEFINE
*
READ PERSON BY NAME
IF MAR-STAT = 'M' THEN
IF SEX = 'M' THEN
#STATUS := 'THIS MAN IS MARRIED'
ELSE
#STATUS := 'THIS WOMAN IS MARRIED'
END-IF
ELSE
96

Tomando uma deciso

0210
IF MAR-STAT = 'S' THEN
0220
IF SEX = 'M' THEN
0230
#STATUS := 'THIS MAN IS SINGLE'
0240
ELSE
0250
#STATUS:= 'THIS WOMAN IS SINGLE'
0260
END-IF
0270
ELSE
0280
#STATUS := 'STATUS IS UNKNOWN'
0290
END-IF
0300 END-IF
0310 DISPLAY NOTITLE
0320 10T PERSONNEL-ID NAME 'MARITAL STATUS' #STATUS
0330 END-READ
0340 END

97

Tomando uma deciso

Exemplo com uso da instruo DECIDE:


0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200

************************************************************************
* ILUSTRACAO O USO DA DECLARACAO DECIDE FOR
************************************************************************
DEFINE DATA LOCAL
1 PERSON VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 MAR-STAT
2 SEX
1 #STATUS (A25)
END-DEFINE
*
READ PERSON BY NAME
DECIDE FOR FIRST CONDITION
WHEN MAR-STAT='M' AND SEX='M'
#STATUS := 'THIS MAN IS MARRIED'
WHEN MAR-STAT='M' AND SEX='F'
#STATUS := 'THIS WOMAN IS MARRIED'
WHEN MAR-STAT='S' AND SEX='M'
#STATUS := 'THIS MAN IS SINGLE'
98

Tomando uma deciso

0210
WHEN NONE
0220
#STATUS := 'STATUS IS UNKNOWN'
0230
END-DECIDE
0240 DISPLAY NOTITLE
0250 10T PERSONNEL-ID NAME 'MARITAL STATUS' #STATUS
0260 END-READ
0270 END

99

Tomando uma deciso

PERSONNEL

NAME

MARITAL STATUS

ID
--------- -------------------- ------------------------1234567
99990000
55555551
44444444
95555551
60008339
30000231
50005800
20009800
20012700
20013800
20019600
20008600
20005700
20011000
11300313
20013600
20023500

ABELLAN
ACHIESON
ADAM
ADKINSON
ADKINSON
ADKINSON
ADKINSON
ADKINSON
ADKINSON
ADKINSON
AECKERLE
AFANASSIEV
AFANASSIEV
100

STATUS IS UNKNOWN
STATUS IS UNKNOWN
STATUS IS UNKNOWN
STATUS IS UNKNOWN
STATUS IS UNKNOWN
THIS MAN IS SINGLE
THIS MAN IS SINGLE
THIS WOMAN IS MARRIED
STATUS IS UNKNOWN
STATUS IS UNKNOWN
THIS MAN IS MARRIED
THIS MAN IS MARRIED
STATUS IS UNKNOWN
THIS MAN IS SINGLE
THIS MAN IS MARRIED
THIS WOMAN IS MARRIED
THIS MAN IS SINGLE
STATUS IS UNKNOWN

Controle de loop

Processos de Repetio
O Natural fornece duas instrues para ajudar a controlar o
processamento de loop: FOR e REPEAT.

FOR - Inicia um loop que executado um nmero exato de vezes. Um


campo de controle usado para contar o nmero de iteraes. O valor
desse campo incrementado num certo valor (chamado STEP) cada vez
que o loop processado. Esse campo deve ser referenciado dentro do
loop.

REPEAT - Voc especifica uma ou mais instrues, que devem ser


executadas repetidamente. Voc pode ainda, definir uma condio lgica
para que as instrues sejam executadas somente se a condio for
encontrada. Nesse caso, voc dever usar as clausulas UNTIL ou
WHILE. Elas podem ser definidas no incio ou no fim do loop.
101

Controle de loop

FOR
O nmero exato de repeties conhecido de antemo.

Counter

no

Field

Processing loop

Exceeded?

yes

102

end

Controle de loop

REPEAT[UNTIL]
Condio lgica no incio do loop.

true

Logical

Processing loop

Condition

false

103

end

Controle de loop

REPEAT[WHILE]
Condio lgica no fim do loop.

Processing loop

Logical

true

Condition

false

104

end

Controle de loop

Processos de Repetio
Se voc no definir condio lgica alguma, a sada do loop,
com a instruo REPEAT, dever ser feita usando uma das
seguintes instrues: ESCAPE, STOP ou TERMINATE.

105

Controle de loop

Exemplos
Nesse primeiro exemplo, a instruo FOR usada para
incrementar o valor de #INDEX de 1 at 5 a fim de criar um
relatrio das razes quadradas dos nmeros 1 ao 5.
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140

************************************************************
* ILUTSRA O USO DA DECLARACAO FOR NUM LOOP DE PROCESSAMENTO
************************************************************
DEFINE DATA
LOCAL
1 #INDEX (I1)
1 #ROOT (N2.7)
END-DEFINE
*
FOR #INDEX 1 TO 5
COMPUTE #ROOT = SQRT(#INDEX)
WRITE NOTITLE 'THE SQUARE ROOT OF' #INDEX 'IS ' #ROOT
END-FOR
END
106

Controle de loop

Sada:
THE
THE
THE
THE
THE

SQUARE
SQUARE
SQUARE
SQUARE
SQUARE

ROOT
ROOT
ROOT
ROOT
ROOT

OF
OF
OF
OF
OF

107

1
2
3
4
5

IS
IS
IS
IS
IS

1.0000000
1.4142135
1.7320508
2.0000000
2.2360679

Controle de loop

Exemplos
Nesse segundo exemplo, o REPEAT usado para
repetidamente permitir que os usurios entrem com um
PERSONNEL-ID por vez at no ser mais necessrio entrar
com nenhum ID (ou seja, quando o usurio deixa o em
branco).
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110

************************************************************************
* ILUTSRA O USO DA DECLARACAO REPEAT
************************************************************************
DEFINE DATA
LOCAL
1 EMPLOY-VIEW VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
1 #PERS-NR (A8)
END-DEFINE
*
108

Controle de loop

0120 REPEAT
0130 INPUT 'ENTER A PERSONNEL ID' #PERS-NR
0140
IF #PERS-NR = ' '
0150
ESCAPE BOTTOM
0160 END-IF
0170
FIND EMPLOY-VIEW WITH PERSONNEL-ID = #PERS-NR
0180
IF NO RECORDS FOUND
0190
REINPUT 'NO RECORDS FOUND'
0200
END-NOREC
0210
DISPLAY NOTITLE NAME
0220
END-FIND
0230 END-REPEAT
0240 END

Sada:
NO RECORDS FOUND
ENTER A PERSONNEL ID 23
109

Controle de loop

Exemplos
Nesse terceiro exemplo, a opo UNTIL do REPEAT usada para sair do
loop quando #X tiver o valor 6. Note que a a opo UNTIL pode ser
colocada no incio ou no final do loop.
0010 **************************************************
0020 * ILUSTRACAO DA DECLARACAO REPEAT
0030 **************************************************
0040 DEFINE DATA
0050 LOCAL
0060 1 #X (I1) INIT <0>
0070 1 #Y (I1) INIT <0>
0080 END-DEFINE
0090 *
0100 REPEAT
0110 #X := #X + 1
0120 WRITE NOTITLE '=' #X
0130 UNTIL #X=6
0140 END-REPEAT
0150 END
110

Controle de loop

Sada:
#X:
#X:
#X:
#X:
#X:
#X:

1
2
3
4
5
6

111

Controle de loop

Finalizando os processamentos de loop


ESCAPE - Finaliza a execuo de um processamento de
loop baseado na condio lgica. H trs opes para essa
declarao: ESCAPE TOP, ESCAPE BOTTOM e ESCAPE
ROUTINE.
STOP - usada para finalizar a execuo de uma
aplicao inteira Natural.
TERMINATE - semelhante instruo STOP no que se
refere a parar a aplicao inteira. Alm disso, essa instruo
sai do ambiente Natural.
112

Controle de loop

Finalizando os processamentos de loop


Declarao

Ilustrao

ESCAPE

Descrio
Retorna ao topo do loop e inicia o processamento
da prxima iterao.

TOP
ESCAPE

Termina e sai do loop para o qual o label se


refere. O processamento continua a partir da 1.
declarao aps o loop.

BOTTOM[(r)]
[IMMEDIATE]*

A rotina atual Natural abandona o controle. Para


subrotinas, o processamento continua a partir da
1. declarao aps aquela usada para chamar a
subrotina.

ESCAPE
ROUTINE
[IMMEDIATE]

113

Controle de loop

Finalizando os processamentos de loop


Declarao

Ilustrao

Descrio
Finaliza o programa/aplicao e retorna o controle
ao Natural.

STOP

Finaliza o programa/aplicao e sai do Natural.


TERMINATE

Observao:
Se a opo IMMEDIATE for utilizada, ambos, a ltima declarao AT BREAK e
AT END OF DATA so executadas antes da sada do loop.
114

Variveis Lgicas

O que so variveis lgicas?


Quando o valor de um campo pode ser definido como
verdadeiro/falso, voc pode lhe designar o formato L para o
campo. O uso da varivel lgica em seu programa permite
que voc o referencie da seguinte maneira:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110

DEFINE DATA
LOCAL
1 #ROUTINE-DONE (L) INIT <TRUE>
END-DEFINE
.
.
.
IF #ROUTINE-DONE = TRUE
THEN ...
END-IF
END

115

Variveis Lgicas

Mscaras de edio
Para tornar o uso das variveis lgicas mais significativo, a edio de
mscara EM=FALSE/TRUE pode ser definida. Essa edio pode ser
trocada por OFF/ON, NO/YES, REJECT/ACCEPT.
0010
0020
0030
0031
0040
0060
0070
0070
0071
0080
0090
0100
0110
0120
0130
0140

DEFINE DATA
LOCAL
1 #SWITCH (L) INIT <TRUE>
1 #INDEX (I1)
END-DEFINE
FOR #INDEX 1 5
WRITE #SWITCH (EM=FALSE/TRUE) 5X 'INDEX = ' #INDEX
WRITE #SWITCH (EM=FALSE/TRUE) 5X 'INDEX = ' #INDEX
SKIP 1
IF #SWITCH = TRUE
MOVE FALSE TO #SWITCH
ELSE
MOVE TRUE TO #SWITCH
END-IF
END-FOR
END
116

Controle de loop

Sada:
Page

TRUE
TRUE

INDEX =
INDEX =

1
1

FALSE
FALSE

INDEX =
INDEX =

2
2

TRUE
TRUE

INDEX =
INDEX =

3
3

FALSE
FALSE

INDEX =
INDEX =

4
4

TRUE
TRUE

INDEX =
INDEX =

5
5

117

MDULO III - Funes Programticas

Unidade B - Usando os objetos Natural efetivamente


-

Programas
Subrotinas
Subprogramas
Copycode

118

Programas

Os programas so fundamentais para qualquer aplicao.


Desde que tenham uma rea de dados interna, no precisam
de qualquer outro objeto para ser executado. Nas grandes
aplicaes, no entanto, eles servem como navegador e
tambm podem ser usados para chamar outros objetos.
Instruo FECTCH
Um programa pode chamar outro atravs da instruo
FETCH ou FETCH RETURN. A diferena entre eles que a
declarao FETCH RETURN retorna ao programa chamador
e o outro no.
119

Programas

A pilha do Natural (stack)


A pilha do Natural uma poro da rea de trabalho usada
para guardar informaes para uso futuro. Os dados so
acessados por um objeto atravs da instruo INPUT. O uso
da pilha para compartilhar dados mais lento que o uso da
GDA. No entanto a pilha permite a passagem de dados
atravs de outras aplicaes, o que no acontece com a
GDA.

120

Programas

Controlando pilha
Usando os objetos programveis voc pode carregar comandos
e/ou dados na pilha;
Voc pode carregar esses itens no topo ou na base da pilha;
Voc pode colocar os dados na pilha no modo Form ou no modo
Delimiter;
Voc pode ver o que est no topo da pilha atravs da varivel de
sistema *DATA. Essa varivel pode assumir os seguintes valores:
Valor
0

Descrio

-1

A pilha est vazia


O topo da pilha contm um comando

O topo da pilha contm n elementos


121

Programas

Passando dados
Quando voc estiver passando dados de um programa para
outro, lembre-se dos seguintes pontos em relao GDA e a
pilha:
Pilha (Stack)
A pilha passa dados via lista de argumentos;
Os dados da pilha so recebidos no programa chamador dia
declarao INPUT;
Informaes limitadas podem ser passadas em uma nica entrada
da.
122

Programas

GDA (Global Data Area)


Inclua o mesmo nome de GDA em ambos objetos- o chamado e o
chamador;
Os dados da GDA no programa chamador est disponvel para o
programa chamado;
A GDA mais eficiente e flexvel que a pilha.

123

Programas

Exemplo
DEFINE DATA

DEFINE DATA

GLOBAL USING GDA1

GLOBAL USING GDA1

GDA

LOCAL

LOCAL

1 #PARM1 (A10)

1 #ARG1 (A10)

1 #PARM2 (A10)

1 #ARG2 (A10)

END-DEFINE

END-DEFINE

NATURAL

FETCH RETURN PGM2 #PARM1 #PARM2

Stack

INPUT #PARM1 #PARM2

END

END

124

Programas

Carregando a pilha
Voc pode carregar a pilha usando o comando EXECUTE;
Com as declaraes FETH e FETCH RETURN;
Com a declarao STACK
Essa declarao, por default coloca os dados na base da pilha no
modo delimiter.

Limpando a Pilha
Voc pode limpar a pilha atravs da declarao RELEASE STACK;
Com o comando de terminal %%;
Pressionando a tecla CLEAR.
O comando de terminal %P apaga a primeira entrada e o comando
%S l a primeira entrada sem apag-la.
125

Programas

Como a pilha recebe os dados


0010

** SATCKING PROGRAM

...
0080

SMITH
STACK DATA SMITH

STACK AFTER LINE 0200

...
0190

MOVE BRYAN TO #NAME

0200

STACK TOP #NAME 30

BRYAN,30
SMITH

0360

STACK AFTER LINE 0080

FETCH PERSON #PERS-NUM #AGE

STACK AFTER LINE 0360

...

100783,28
BRYAN,30
SMITH
126

Programas

Como a pilha recebe os dados


STACK AFTER LINE 0360
0010

** INPUT PROGRAM

0020

** PERSON

100783,28
BRYAN,30

...
0120

INPUT #PERS-NUM AGE

0130

INPUT #PERS-NAME #NUM

...
0200

SMITH
STACK AFTER LINE 0130

INPUT #LASTNAME

SMITH

127

Subrotinas

As subrotinas so tipicamente usadas para carregar funes


especificas em seu sistema. Voc tem dois tipos de
subrotinas disponveis no Natural:
Subrotinas Internas
So codificadas dentro do objeto;
Est disponvel somente para esse objeto;
Tm acesso GDA e a LDA do objeto nos qual foi
codificada, assim como aos dados passados ao usar-se a
PDA.
128

Subrotinas

Subrotinas Externas
So codificadas como um objeto separado;
Podem ser acessadas por mltiplos objetos.
O que constitui uma subrotina
PERFORM subroutine-name
...
DEFINE SUBROUTINE subroutine-name
(processing statements)
END-SUBROUTINE

129

Subrotinas

Subrotinas Externas
Tudo que voc codifica entre as declaraes DEFINE
SUBROUTINE e END-SUBROUTINE considerado parte
da subrotina. Qualquer processamento de loop iniciado
dentro de uma subrotina deve ser fechado antes da
declarao END-DEFINE.
A declarao PERFORM usada para chamar tanto a
subrotina interna quanto a externa. Ela busca o nome da
subrotina definido na declarao DEFINE SUBROUTINE
e no o nome do objeto.
130

Subrotinas

Subrotina Interna
PGMA

Subrotina Externa
PGM1

DEFINE DATA

DEFINE DATA...

END-DEFINE

END-DEFINE

READ...

PERFORM XYZ

PERFORM SUBRT1

...

...

DEFINE SUBROUTINE XYZ

END-READ

END-SUBROUTINE

END

SUBRT1
DEFINE DATA

END-DEFINE

DEFINE SUBROUTINE SUBRT1

END

END-SUBROUTINE

END
131

Subrotinas

Prs e contras das subrotinas internas


Prs
Auxilia a modularizao interna do objeto;
O teste e a depurao fica confinado a um objeto apenas;
Melhor performance de todos os mdulos.
Contras
O objeto no qual est inserido ir possuir um nmero maior de
linhas de cdigo;
No reutilizvel e no pode ser compartilhado por outros objetos.
132

Subrotinas

Prs e contras das subrotinas externas


Prs
Auxilia a padronizao do sistema;
Mantm os mdulos com tamanhos manipulveis;
Acesso GDA e a PDA;
Facilidade nas funes de segurana;
Compartilhvel entre os outros objetos da aplicao;
Permite o uso do XREF.

133

Subrotinas

Prs e contras das subrotinas externas


Contras
O teste e a depurao envolve muitos objetos;
Aumenta o uso do buffer pool;
Os dados compartilhados atravs da GDA ou da pilha limita a
reutilizao e o controle da interface.

134

Subprogramas

Subprogramas vs. Subrotinas


Em vez de chamar uma subrotina, voc pode chamar um
subprograma. Basta emitir a declarao CALLNAT.
Os subprogramas diferem das subrotinas na forma como
compartilham os dados no objeto chamador. Os
subprogramas s podem acessar os dados atravs de um
conjunto de parmetros definidos na PDAs; as subrotinas
podem acessar os dados atravs da GDA e da PDA.

135

Subprogramas

PGM1

SU PGM1

DEFINE DATA

DEFINE DATA

END-DEFINE

PDA1

...
CALLNAT SBPGM1
argumentos

argumentos

PARAMETER USING PDA1


...
END-DEFINE

...

END

END

136

Subprogramas

Lembre-se!
Os subprogramas fornecem um meio mais eficiente
de compartilhar dados que a pilha, uma vez que os
dados so meramente referenciados e no passados;
Os subprogramas passam apenas referncias para os
dados definidos em suas GDA ou PDA;
Por default, um parmetro passado por referncia
para um subprograma/subrotina, ou seja, transferido
pelo seu endereo. Um campo definido como
parmetro numa declarao CALLNAT/PERFORM
deve ter o mesmo formato/tamanho que o campo
correspondente;
137

Subprogramas

Lembre-se!
Se parmetros so passados por valor (by value), o
valor atual do parmetro que passado e no o
endereo, logo o campo do subprograma no precisa
ter o mesmo formato e tamanho que o parmetro da
declarao CALLNAT/PERFORM;
Se os valores dos parmetros que foram modificados
no subprograma devem ser retornados ao programa
chamador voc tem que definir esses campos como BY
VALUE RESULT.

138

Copycode

Com o copycode voc pode inserir rotinas especiais dentro


do seu objeto em tempo de compilao em vez de ter que
codificar essas linhas repetidamente.
A declarao usada para incorporar o copycode ao seu
objeto INCLUDE.
PGM1
COPYC1
SET KEY PF1

DEFINE DATA

PF2
PF3

Esse cdigo inserido em


tempo de compilao dentro
do cdigo compilado.

END-DEFINE

PF12

INCLUDE COPYC1

139

END

Copycode

Lembre-se!
Voc no pode ter a declarao END em seu
copycode;
Copycode salvo, nunca catalogado;
O copycode no pode ser checado;
O copycode no pode conter um trecho de outra
declarao (s pode conter uma ou mais declaraes
completas);
O teste e a depurao pode ser difcil;
Se voc modifica um copycode, voc deve recompilar
todos os objetos que o utiliza.
140

Copycode

Lembre-se!
O copycode aumenta o tamanho do objeto compilado
que o utiliza. O tamanho do cdigo fonte no sofre
aumento;
Valores podem ser inseridos dinamicamente dentro
do copycode usando-se a notao &n&.

141

MDULO III - Funes Programticas

Unidade C - Manipulao de Dados


-

Calculando valores
Atribuindo valores
Combinando e separando valores
Trabalhando com Strings
Trabalhando com Data e Time
Processamento de arrays

142

Calculando Valores

Operadores aritmticos
Cada operador deve ser precedido por um caracter branco para no ser
confundido com o nome da varivel. Os seguintes smbolos so usados
como operadores:
Operador

Smbolo

Add

+
-

Subtract

*
/
()
**

Multiply
Divide
Parnteses
Exponencial
143

Calculando Valores

Ordem do processamento
Os clculos aritmticos possuem vrios operadores para serem
processados dentro de uma nica declarao. Para assegurar a exatido
desses clculos, a seguinte ordem deve ser seguida:
1. Parnteses;
2. Exponencial;
3. Multiplicao/Diviso (da esquerda para direita);
4 Adio/Subtrao (da esquerda para direita).

144

Calculando Valores

Descrio

Operador

DIVIDE[ROUNDED] oper1 INTO oper2[GIVING oper3] [REMAINDER oper4]


O resultado colocado:

-operador2

DIVIDE #A INTO #B

-operador3

DIVIDE #A INTO #B GIVING #RESULT

COMPUTE[ROUNDED] {oper1}expresso aritmtica

O resultado colocado:
-operador1

/
+

COMPUTE #A = (#A + 1) + (#B / (#C * 8))

Notas:
- Use os parnteses para agrupar operaes complexas;
- A palavra chave COMPUTE opcional em report mode;

- A palavra chave COMPUTE no usada com a notao :=;


- A funo DIVIDE sempre ROUNDED.

145

Calculando Valores

Operador

Descrio
ADD[ROUNDED] oper1TO oper2[GIVING oper3]

O resultado colocado:
-operador2

ADD 7 TO #FIELD1

-operador3

ADD 3 TO #FIELD1 GIVING #RESULT

SUBTRACT[ROUNDED] oper1FROM oper2[GIVING oper3]

O resultado colocado:
-operador2

SUBTRACT #A FROM SALARY

-operador3

SUBTRACT #A FROM SALARY GIVING #NETPAY

MULTIPLY[ROUNDED] oper1BY oper2[GIVING oper3]


O resultado colocado:
-operador1

MULTIPLY #A BY #B

-operador3

MULTIPLY #B BY 6 GIVING #YTD

146

Atribuio de valores

RESET
Essa instruo devolve varivel o valor nulo ou seu valor
original. Os seguintes elementos podem ser atualizados com
o RESET:
Campos elementares de qualquer formato Natural vlido;
Arrays;
Campos de grupo;
Variveis do sistema;
Toda user view ou campos do banco dentro dessas views.
147

Atribuio de valores

Exemplo
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170

**************************************************************
* ILUSTRA O USO DA DECLARACAO RESET INITIAL
**************************************************************
DEFINE DATA
LOCAL
1 #A (P4.2)INIT <119.2>
1 #B (P4.2)INIT <17>
1 #C (P4.2)
1 #D (P4.2)
END-DEFINE
DIVIDE #B INTO #A GIVING #C REMAINDER #D
WRITE // 'DEPOIS DE TER DIVIDIDO #B DE #A: ' 40T #A #B #C #D
RESET INITIAL #A #B #C #D
WRITE // 'RETORNANDO AOS VALORES INICIAIS: ' 40T #A #B #C #D
RESET #A #B #C #D
WRITE // 'LIMPANDO OS VALORESDAS VARIAVEIS: ' 40T #A #B #C #D
END
148

Atribuio de valores

Sada:
Page

03-01-16

15:50:38

DEPOIS DE TER DIVIDIDO #B DE #A:

119.20

17.00

7.01

0.03

RETORNANDO AOS VALORES INICIAIS:

119.20

17.00

0.00

0.00

0.00

0.00

0.00

0.00

LIMPANDO OS VALORES DAS VARIAVEIS:

149

Atribuio de valores

RESET com arrays


Ao fazer uso da instruo RESET com arrays, ndices devem
ser fornecidos. Quando o asterisco informado[ ex.:
#ARRAY(*)], todo array atualizado com nulo ou com seus
valores iniciais. Mas quando o ndice informado [ex.:
#ARRAY(2:5)], somente as ocorrncias apontadas so
atualizadas.

150

Atribuio de valores

Exemplo
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190

************************************************************************
* ILUSTRA O USO DA DECLARACAO RESET
************************************************************************
DEFINE DATA
LOCAL
1 #A (A30) INIT <'BUILDING NATURAL APPLICATIONS'>
1 #B (P3.2)
1 #C (I4)
1 #ARRAY (A4/12)
1 #GRP
2 #GRP-F-1 (A10)
2 #GRP-F-2 (N5)
1 PERSON VIEW OF EMPLOYEES
2 NAME
2 BIRTH
2 CITY
END-DEFINE
RESET #A #B #C #ARRAY(*) #GRP PERSON
END
151

Atribuio de valores

MOVE vs. ASSIGN


Essa instruo copia um valor para dentro de uma varivel. A palavra
ASSIGN pode ser omitida se usarmos a notao :=. Ambas as formas
so vlidas:
ASSIGN #MAKE = FORD
#MAKE := FORD

A instruo MOVE tambm copia um valor para dentro de uma varivel.


Se os valores que esto sendo movidos tm um formato diferente da
varivel que est recebendo, o Natural primeiro converte o dado antes de
copi-lo.
MOVE FORD TO #MAKE
152

Atribuio de valores

Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170

*******************************************************
* ILUSTRA O USO DA DECLARACAO ASSIGN
*******************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 COLOR
2 YEAR
1 #MAKE(A20)
END-DEFINE
*
ASSIGN #MAKE = 'FORD' /* MOVE FORD TO #MAKE seria a outra alternativa
FIND CARS WITH MAKE=#MAKE
DISPLAY NOTITLE YEAR MAKE MODEL
END-FIND
END
153

Atribuio de valores

Sada:
YEAR
MAKE
MODEL
----- -------------------- -------------------1982
1980
1980
1980
1980
1980
1980
1985
1983
1978
1984
1986
1984
1985
1986
...

FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD

SIERRA
CAPRI
ESCORT
CAPRI
CAPRI
FIESTA
ESCORT
ESCORT LASER
TRANSIT
GRANADA
SIERRA 2.0
SCORPIO 2.0 I GL
FIESTA XR2
SIERRA L TURNIER
ESCORT XR3I

154

Atribuio de valores

Opes da instruo MOVE


Opo
MOVE ROUNDED

Descrio
Pode ser usado quando o valor a ser recebido uma varivel
numrica. O valor arredondado antes de ser movido.

MOVE EDITED

Copia o valor de acordo com o formato da mscara de


edio (EM=).

MOVE BY NAME

Copia individualmente campos de uma estrutura de dados para


outra baseada no nome do campo sem levar em considerao
sua posio.
155

Atribuio de valores

Opes da instruo MOVE


Opo
MOVE ALL

Descrio
Copia o valor para dentro de uma varivel at que ela esteja
totalmente preenchida. A opo UNTIL limita o nmero de posies.
Copia o contedo de um campo de uma estrutura para outra

MOVE BY POSITION

baseada na posio que ela ocupa. O mesmo nmero de campos


devem existir em cada estrutura.

MOVE SUBSTRING

Copia substrings de um campo para uma varivel.

MOVE LEFT/RIGHT

Faz com que o dado seja posicionado esquerda/direita ou

JUSTIFIED

justificado quando movido para a varivel que recebe.


156

Atribuio de valores

Exemplo da opo MOVE EDITED


0010
0020
0030
0040
0050
0060
0070
0110
0120
0130
0140
0150
0160
0170
0180
0190

***************************************************************
* ILUSTRA O USO DA DECLARACAO ASSIGN
***************************************************************
DEFINE DATA LOCAL
1 #DATEA-RESULT
(D)
1 #NUMERIC-RESULT
(N6)
1 #ALPHA-DATEA
(A8) INIT <'96/01/20'>
END-DEFINE
*
MOVE EDITED #ALPHA-DATE TO #NUMERIC-RESULT (EM=99/99/99)
WRITE '=' #NUMERIC-RESULT '=' #ALPHA-DATE
**
MOVE EDITED #ALPHA-DATE TO #DATE-RESULT
(EM=YY/MM/DD)
WRITE '=' #DATE-RESULT '=' #ALPHA-DATE
**
END
157

Atribuio de valores

Sada:
Page

03-01-16

#NUMERIC-RESULT: 960120 #ALPHA-DATE: 96/01/20


#DATE-RESULT: 96-01-20 #ALPHA-DATE: 96/01/20

158

16:06:34

Combinando e separando valores

COMPRESS
A instruo COMPRESS combina os valores de dois ou mais
campos em um nico campo alfanumrico.
Se o campo que ir receber o contedo dos valores
comprimidos for maior que o contedo combinado o restante
preenchido com brancos.
Se o campo que ir receber o contedo for menor, o valor
ser truncado. Zeros esquerda em campos numricos e
brancos entre campos alfanumricos so suprimidos quando
combinados. Se os zeros esquerda forem necessrios, o
campo numrico deve ser redefinido como alfanumrico.
159

Combinando e separando valores

Opes da declarao COMPRESS


Descrio

Opo

Usado com a opo WITH DELIMITER. O delimitador colocado


ALL
SUBSTRING
LEAVING NO

campo alvo para cada branco que no transferido.


Permite transferir parte de um campo.

SPACE

No haver brancos ou qualquer outro delimitador entre os


campos.

WITH

Haver um delimitador especial entre os campos.

DELIMITER
160

Combinando e separando valores

Opo
FULL

NUMERIC

Descrio
Os valores dos campos fontes so combinados para incluir todos
os brancos e zeros..
Pontos e sinais no campo fonte sero transferidos para o campo
alvo.

161

Combinando e separando valores

Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170

**************************************************************
* ILUSTRA O USO DA DECLARACAO COMPRESS
**************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 FIRST-NAME
2 MIDDLE-I
2 NAME
1 #FULL-NAME (A20)
END-DEFINE
**
READ (5) VIEWEMP BY NAME STARTING FROM 'JONES'
COMPRESS FIRST-NAME MIDDLE-I NAME INTO #FULL-NAME
DISPLAY NOTITLE FIRST-NAME MIDDLE-I NAME #FULL-NAME
SKIP 1
END-READ
END
162

Combinando e separando valores

Sada:
FIRST-NAME
MIDDLE-I
NAME
#FULL-NAME
-------------------- -------- -------------------- -------------------VIRGINIA

MARSHA

JONES

VIRGINIA J JONES

JONES

MARSHA JONES

ROBERT

JONES

ROBERT B JONES

LILLY

JONES

LILLY P JONES

EDWARD

JONES

EDWARD C JONES

163

Combinando e separando valores

SEPARATE
A instruo SEPARATE divide o contedo de um campo
alfanumrico em dois ou mais campos ou em mltiplas
ocorrncias de um array.
Se voc no especificar um delimitador, qualquer caracter
diferente de letra ou nmero ser tratado como tal. A
separao ocorre sempre que um delimitador encontrado.

164

Combinando e separando valores

Opes da declarao SEPARATE


Descrio

Opo
WITH INPUT

Usa o caracter default de entrada como delimitador.

DELIMITER
WITH
DELIMITER
LEFT
JUSTIFIED
GIVING
NUMBER

Define o delimitador que ser usado


para separar. Brancos so ignorados.
Brancos entre o delimitador e o prximo caracter no branco
so removidos no campo alvo.
Retorna o nmero de campos alvo que receberam dados durante
a separao.
165

Combinando e separando valores

Opo
IGNORE
REMAINDER
RETAINED

Descrio
Evita mensagens de erro quando voc define um nmero de
campos alvo menor que o esperado.

Posiciona os delimitadores indicados dentro dos campos alvos

DELIMITERS

SUBSTRING

Define a poro do campo a ser processada

166

Combinando e separando valores

Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120

************************************************************
* ILUSTRA O USO DA DECLARACAO SEPARATE
************************************************************
DEFINE DATA LOCAL
1 #PRODUCT-NAME
(A40) INIT <'ENTIRE APPC SERVER'>
1 #PRODUCT-CATEGORY (A10) /* EX.: NATURAL, ADABAS, ENTIRE
END-DEFINE
*
SEPARATE #PRODUCT-NAME INTO #PRODUCT-CATEGORY IGNORE
WRITE NOTITLE
// 4X '=' #PRODUCT-NAME / '=' #PRODUCT-CATEGORY
END

167

Combinando e separando valores

Sada:
#PRODUCT-NAME: ENTIRE APPC SERVER
#PRODUCT-CATEGORY: ENTIRE

168

Trabalhando com Strings

EXAMINE
A instruo EXAMINE varre o contedo de um campo
alfanumrico ou de um array a procura de um string. H duas
formas para essa instruo:
ABSOLUTE - Qualquer ocorrncia do string procurada.
WITH DELIMITERS - As ocorrncias devem ser delimitadas
por brancos ou por um caracter especial.
Opo DELETE/REPLACE
Use essas opes para excluir ou substituir cada valor do
operando1 que idntico ao operando2.
169

Trabalhando com Strings

Opes da instruo EXAMINE


Descrio

Clausula
EXAMINE

Examina o campo atravs de um caracter padro.

PATTERN
EXAMINE

Define uma poro do campo a ser examinada.

SUBSTRING
EXAMINE
TRANSLATE

Transforma os dados de maiscula para minscula atravs


de uma tabela de converso.

170

Trabalhando com Strings

Clausula GIVING:
Descrio

Clausula
GIVING

Nmero de ocorrncias do string.

NUMBER
GIVING
POSITION
GIVING
LEFT
GIVING

Byte inicial onde o primeiro string foi encontrado.


Tamanho final do valor do campo examinado aps todas as
excluses e substituies terem sido feitas..

ndice do array onde a primeira ocorrncia do string foi encontrada.

INDEX
171

Trabalhando com Strings

Exemplo:
EXAMINE #TELE FOR PATTERN () GIVING NUMBER #NUMBER
EXAMINE #NAME FOR GIVING NUMBER #NUM GIVING POSITION #POS
EXAMINE FULL #NAME FOR GIVING NUMBER #NUM GIVING POSITION #POS
EXAMINE #ARRAY(*) FOR X GIVING INDEX #INDEX

172

Trabalhando com Data e Hora

No natural os campos Data e Hora tm seus prprios formatos: D para


data e T pata hora. Quando os definimos, basta indicar seus formatos.
Internamente eles so definidos como campos numricos compactados
(P6 e P12).
Combinando campos
possvel fazer clculos com esses campos. A tabela abaixo mostra os
formatos recomendados para os campos de destino.
Combinao de formatos
Numrico(I,n,P) com D ou T

Resultados
Colocado no campo Data ou hora

Data com Hora

Colocado no campo Hora

Data com Data

Colocado num campo P6

Hora com Hora

Colocado num campo P12

173

Trabalhando com Data e Hora

Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180

***************************************************************
* ILUSTRA O USO DA DE CAMPOS DATA
***************************************************************
DEFINE DATA LOCAL
1 EMPL VIEW OF EMPLOYEES
2 NAME
2 PERSONNEL-ID
2 LEAVE-START (1)
2 REDEFINE LEAVE-START
3 #LEAVE-START-A (A6)
2 LEAVE-END (1)
2 REDEFINE LEAVE-END
3 #LEAVE-END-A(A6)
1 #LEAVE-DUE (P6)
1 #START-DATE (D)
1 #END-DATE
(D)
END-DEFINE
*

174

Trabalhando com Data e Hora

Exemplo:
0190 READ (10) EMPL BY NAME FROM 'A'
0200
MOVE EDITED #LEAVE-START-A TO #START-DATE (EM=YYMMDD)
0210
MOVE EDITED #LEAVE-END-A TO #END-DATE (EM=YYMMDD)
0220
COMPUTE #LEAVE-DUE = #END-DATE - #START-DATE +1
0230
DISPLAY NAME PERSONNEL-ID LEAVE-START(1) LEAVE-END(1)
0240
'LEAVE/DUE' #LEAVE-DUE
0250 END-READ
0260 END

175

Trabalhando com Data e Hora

Sada:
NAME

PERSONNEL
LEAVE
LEAVE
LEAVE
ID
START
END
DUE
-------------------- --------- ---------- ---------- ------ABELLAN
ACHIESON
ADAM
ADKINSON
ADKINSON
ADKINSON
ADKINSON
ADKINSON
ADKINSON
ADKINSON

60008339
30000231
50005800
20009800
20012700
20013800
20019600
20008600
20005700
20011000

176

1998/11/04
1998/12/27
1999/08/01
1998/02/22
1998/01/02
1998/01/12
1998/01/02
1998/01/12
1998/01/12
1998/01/02

1998/11/09
1998/12/31
1999/08/31
1998/02/23
1998/01/03
1998/01/12
1998/01/03
1998/01/12
1998/01/12
1998/01/03

1
1
1
1
1
1
1
1
1
1

Processamento de Array

Arrays so tabelas multi-dimensionais com dois ou mais


dados logicamente relacionados e identificados atravs de
um nico nome. Arrays podem ser usadas para:
Armazenar dados para serem processados mais tarde;
Processar dados numa ordem seqencial;
Guardar mltiplos valores em um nico campo;
Auxiliar em clculos matemticos.

177

Processamento de Array

Array de duas-dimenses

Array de uma-dimenso

#FLD(A15/5,4)

#FLD (A15/5)
1

4
5

5
Array de trs-dimenses

#FLD(A15/4,5,3)
1

178

Processamento de Array

ndices de array:
Descrio

ndice
#ARRAY(1)

#ARRAY(7:12)

1. ocorrncia de um array unidimensional..


Byte inicial onde o primeiro string foi encontrado.

Ocorrncia localizada na posio #IND mais cinco, em um array


#ARRAY(#IND+5) unidimensional.

#ARRAY(5,3:7)

A 5. ocorrncia da 1. dimenso e o intervalo da 3. 7. da 2.


dimenso .
179

Processamento de Array

ndices de array:
Descrio

ndice

#ARRAY(5,3:7,1:4) A 5. ocorrncia da 1. dimenso, o intervalo da 3. 7. da 2.


dimenso e o intervalo da 1. 4. ocorrncias da 3. dimenso.
#ARRAY(*)

Todas as ocorrncias do array.

180

Processamento de Array

Lembre-se!
Quando expresses aritmticas so usadas como
ndices, os operadores + e - devem ser precedidos e
seguidos por um caracter em branco;
Se um valor constante possui 4 dgitos, coloque-o
entre parnteses, pois o Natural interpreta esse nmero
como um nmero de linha. Portanto um array que
possui ocorrncias com 4 dgitos devem ser precedidos
por uma barra /. Exemplo:
#ARRAY(/1000) vs. #ARRAY(1000)

181

Definindo Arrays em mapas

Para exibir arrays em mapas externos preciso definir a


dimenso, o tamanho e como eles devero aparecer no
mapa.
1. Acessar o editor de mapa
Chamar a funo de edio de array.
2. Determinar o tamanho do array
quantas dimenses ele tem;
qual o tamanho de cada dimenso
Nota: Se o campo for puxado para dentro do mapa este
tamanho j est previamente definido.
182

Definindo Arrays em mapas

3. Verificar como o array dever aparecer no mapa


quantas ocorrncias de cada dimenso dever ser
exibida?
Cada dimenso ser exibida horizontalmente ou
verticalmente?
Quantas linhas em branco dever aparecer entre cada
linha?
Quantos espaos em branco dever aparecer entre
cada campo?
183

Definindo Arrays em mapas

Quando voc quiser exibir apenas uma poro do array, use


os parmetros STARTING FROM e NUMBER OF
OCURRENCES.
O objeto que chama o mapa deve fornecer a funcionalidade
de exibir o mapa tantas vezes quantos forem necessrias at
que todas as ocorrncias tenham sido exibidas. Para isso,
voc precisa definir um processamento de loop que mostra o
mapa mltiplas vezes. Exemplo:
FOR #ITERATION 1 N STEP N
INPUT USING MAP ______
END-FOR
184

Mltiplos e Peridicos

Mltiplos e Peridicos so tratados como arrays no Natural.


As ocorrncias podem ser definidas tanto na rea de dados
interna como na externa usando o editor de programa ou o
editor da rea de dados.
O contador de ocorrncia binria (BOC) est disponvel para
uso. Ele contm o nmero de ocorrncias que existem no
banco para os campos de valores mltiplos e peridicos.
Para ter acesso ao BOC, defina um campo com o mesmo
nome do campo mltiplo ou peridico precedido por C*.
Exemplo:
C*ADDRESS-LINE (Esse campo ir conter o nmero de ocorrncias do
mltiplo ADDRESS-LINE que existe no banco)
185

Mltiplos e Peridicos

Funo

Varivel

Retorna o nmero de valores de um mltiplo e o

C*fieldname

nmero de ocorrncias do peridico.


Para uso em campo peridico apenas. Usando a
C*fieldname

notao n o Natural ir retornar dentro da nth


ocorrncia do peridico

186

Mltiplos e Peridicos

Lembre-se!
A varivel C* contm o nmero e ocorrncias que
existem no banco, no o nmero de ocorrncias que
voc escolhe para retornar ao programa.
Para definir a varivel C* no editor da rea de dados,
verifique o comando de edio apropriado. Exemplo
.*.

187

Mltiplos e Peridicos

1. Exemplo
As ocorrncias do Campo de valor mltiplo PROF. Podem
ser referenciadas da seguinte forma:
MU:PROF
DISPLAY NAME PROF (2:4)
MOVE PROF(#I) TO #HLD
DISPLAY PROF (#I:#J)

188

Mltiplos e Peridicos

2. Exemplo
As ocorrncias do Peridico EDUC composta por um grupo
de trs campos, podem ser referenciadas da seguinte forma:
DISPLAY EDUC (1:3)

PE:EDUC

DISPLAY SERIE (1:#J) GR-ANO (1:#J)


ASSIGN #HLD = SERIE (#K)

189

Escola

Srie

Ano

Mltiplos e Peridicos

3. Exemplo
Esse exemplo ilustra um campo de valor mltiplo chamado
CURSOS contido em um peridico. As ocorrncias de um
campo mltiplo definido dentro de um peridico podem ser
referenciadas da seguinte forma:
PE:EDUC

DISPLAY CURSOS (1,2:4) CURSOS (2,1:2)


DISPLAY CURSOS (1:3,1:4)
DISPLAY CURSOS (#I:,*)

Escola Srie
190

Ano
Cursos

Mltiplos e Peridicos

Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190

***************************************************************
* ILUSTRA O USO DE CAMPOS MLTIPLOS
***************************************************************
DEFINE DATA LOCAL
1 EMP VIEW OF EMPLOYEES
2 C*INCOME
2 SALARY (5)
2 BONUS (5,5)
2 PERSONNEL-ID
2 NAME
1 #TOTAL-INCOME (P12)
1 #NO-OF-SALARIES (N2)
END-DEFINE
READ (15) EMP BY NAME STARTING FROM G
#NO-OF-SALARIES := C*INCOME
ADD SALARY(*) TO #TOTAL-INCOME
NEWPAGE LESS THAN #NO-OF-SALARIES
DISPLAY NOTITLE (SF=3)
8T EMPLOYE/ID PERSONNEL-ID EMPLOYEE/NAME NAME
191

Mltiplos e Peridicos

Exemplo:
0200
SALARY/HISTORY SALARY(1:#NO-OF-SALARIES) (EM=ZZZ,ZZZ,ZZ9 HC=R)
0210
TOTAL/INCOME #TOTAL-INCOME (EM=ZZZ,ZZZ,ZZ9 HC=R)
0220
SKIP 1
0230
RESET #TOTAL-INCOME
0240 END-READ
0250 END

192

MDULO IV - Mapas

Unidade A - Definio e Implementao de Mapas


-

Construindo uma interface para o usurio


Conceitos sobre mapas
Layouts
Formulrios

193

Construindo uma interface padro para o usurio

Por que criar uma interface padro para o usurio?

Cada vez mais as organizaes esto se voltando pra a


criao de uma interface consistente como padro para
todas as suas aplicaes, pois, ela resolve vrios
problemas, tanto para o programador como para o usurio.
E ssa padronizao conhecida como commom user
access (CUA).

194

Construindo uma interface padro para o usurio

Commom User Access - Benefcios


Um layout uniforme, com um menu que direciona as
opes dos usurios, oferece uma maneira consistente
de arranjar e apresentar as informaes.
Navegao uniforme para guiar o usurio atravs do
sistema. Desde que o usurio possa contar com os
mesmos comandos em qualquer tela, essa uniformizao
torna o sistema fcil de ser aprendido e usado.
Uniformizao dos servios (como o Help) tambm
facilita o uso do sistema, pois h uma pequena
possibilidade de aprendizado envolvendo o uso de novas
funes.
195

Construindo uma interface padro para o usurio

Linhas Gerais para o desenvolvimento de Interfaces


Se voc estiver criando uma interface para uma
aplicao baseada em caracter no mainframe ou para
uma aplicao grfica numa estao de trabalho, os
usurios, geralmente querem as mesmas coisas em suas
interfaces. Considere os seguintes objetivos ao criar uma
interface para o usurio:
Objetivo

Propsito
O usurio deveria sempre estar seguro do controle da

Controle do usurio

interface, e no o contrrio. Isso significa que voc


deveria apresentar vrios opes de input e fornecer
caminhos com rotas de sada.

196

Construindo uma interface padro para o usurio

Objetivo

Propsito
O usurio deveria sempre estar seguro do controle da

Controle do usurio

interface, e no o contrrio. Isso significa que voc


deveria apresentar vrios opes de input e fornecer
caminhos com rotas de sada.

Consistncia

Atratividade

Uma vez que os usurios aprendem uma interface, eles


so capazes de aplicar as tcnicas de navegao e a
terminologia que j conhecem para cada aplicao nova.
Adote padres que sejam aderentes dentro de toda
aplicao.
Dedique uma ateno especial esttica assim como
uma boa tela e desenvolvimento grfico.

197

Construindo uma interface padro para o usurio

Objetivo

Propsito
Os usurios deveriam sempre receber imediatamente
mensagens de retorno de suas aes. Eles no
deveriam e questionar sobre o que fizeram de errado.

Feedback

Evite rechamadas. Os seres humanos podem lembrar-se


de um nmero grande de informaes, mas uma interface
de fcil uso no deveria solicit-las. Controle as
informaes em trechos manipulveis.Use elementos de
reconhecimento do prompt.

Recall

Usurios cometem erros. Fornea opes que lhes


permitam facilmente reverter suas aes.

Esquecimentos

198

Conceitos sobre Mapas

Programao Interativa
Os mapas Natural permitem aos usurios comunicar-se
com os programas. Um programa iterativo controla o
mapa para que ele possa enviar e obter informaes do
usurio. A maneira do Natural fornecer essa iterao se
d pelo uso da declarao INPUT.

199

Conceitos sobre Mapas

Especificaes do Mapa
O tamanho mximo da pgina (n. de linhas) 250, e o tamanho
da linha (n. de colunas) deve compreender 5-249;
Todo campo do mapa deve ter nome e esses nomes devem
corresponder aos nomes de campos usados no programa chamador;
Os campos exibem atributos que podem ser sobrescritos usando
as variveis de controle;
O nvel do campo e o nvel do mapa podem ser incorporados
dentro do mapa;
As regras de processamento podem ser definidas em seu mapa,
embora a maioria prefiram definir nos programas.

200

Conceitos sobre Mapas

Tipos de Mapa
Interno
Os mapas internos so definidos dentro do programa
usando-se o editor de programa e so utilizados
unicamente por esse programa em particular.

Externo
Como a rea de dados externo, esses programas podem
ser usados por diferentes programas. Esses objetos so
definidos for a do programa usando-se o editor de mapa.
201

Tipos de Mapa

Interno

Externo
Mapa

Programa
Programa
Mapa

Mapa

Mapa

Mapa

Mapa
202

Exemplo de Mapa Externo

DATA:(XXXXXXXXXX
HORA:(XXXXXXXXXX

BIBLIOTECA:(XXXXXXXX
MAPA:(XXXXXXXX

SISTEMA DE WORKSHOP
MENU PRINCIPAL
______________________________________________________________________________

A
B
C
D
E

INCLUIR UM NOVO REGISTRO


ATUALIZAR UM REGISTRO
EXCLUIR UM REGISTRO
EXIBIR LISTA DE ENDERECO
TERMINAR

OPCAO: )X
ID DO FUNCIONARIO: )XXXXXXXX

(OBRIGATORIO PARA AS OPCOES A, B E C)

(XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
______________________________________________________________________________
PF3 - ENCERRA

203

Conceitos sobre Mapas

Mapa Interno
Para criar um mapa interno voc vai utilizar a instruo
INPUT. Todos os campos definidos na declarao INPUT
so so campos de entrada, por default.
Se voc quiser mudar o tipo do campo para output ou
modifiable, use as definies de atributos (AD) para aquele
campo. Essas definies permitem que voc defina a funo
e aparncia dos campos no mapa.

204

Conceitos sobre Mapas

Atributo

Variaes Disponveis
B = Blinking (flash on and off)

Representao
do
Campo
Alinhamento

= Intensified (Negrito)

N = No display
D = Default
L = left-justified

(default para campos alfanumricos)

do

R = right-justified (default para campos alfanumricos)

Campo

Z = Zero print (imprime zeros de campos nmericos )


A = Campo de input(usurios podem digitar informaes)

Tipo

M = Campo Modifiable(usurios podem alterar as

de
Campo

informaes que o Natural ir apresentar)


O = Campo Output (usurios no podem alterar as
informaes apresentadas pelo Natural).
205

Conceitos sobre Mapas

Atributo

Variaes Disponveis

Tamanho

T = Transforma tudo no campo para maiscula

das letras

W = Transforma tudo no campo para minscula

no Campo

Caracteres

c = Qualquer caracter que voc escolher para preencher

de Preenchimento

206

o campo (exemplo: _. O default o espao em branco.

Conceitos sobre Mapas

Posicionamento do Cursor no Mapa


Quando um mapa gerado o cursor automaticamente
colocado no primeiro campo de input ou modificvel.
Entretanto, ocorrer certas situaes em que o mapa poder
solicitar o posicionamento do cursor, no no primeiro mas
em qualquer outro campo do mapa.
A clausula MARK das declaraes INPUT(e REINPUT)
permitem que voc posicione o cursor. Isto pode ser feito
usando:
Nome de campo (precedido de um *);
Varivel numrica;
Constante numrica.
207

Conceitos sobre Mapas

Opo MARK POSITION


Voc no apenas pode determinar o lugar em que seu
cursor ir aparecer como pode tambm definir que o cursor
ir ser colocado em uma posio particular para o valor
daquele campo.
Essa caracterstica pode ser usada quando voc gostaria
que o usurio modificasse, por exemplo, o valor do item dia
do campo data 11/25/1996.
MARK POSITION 4 IN *#DATE (AD=MM/DD/YYYY)

208

Conceitos sobre Mapas

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
0220
0230
0240
0250

***************************************************************
* ILUSTRA O POSICIONAMENTO DO CURSOR NO MAP
****************************************************************
DEFINE DATA
LOCAL
1 #MARCA-INICIAL (A20)
1 #MARCA-FINAL
(A20)
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 YEAR
END-DEFINE
*
INPUT MARK *#MARCA-FINAL /////
7T 'ENTRE COM A MARCA INICIAL E FINAL PARA A LEITURA DO ARQUIVO'
// 17T 'MARCA INICIAL:' #MARCA-INICIAL (AD=AIT'_')
// 19T 'MARCA FINAL :' #MARCA-FINAL
(AD=AIT'_')
*
READ CARS BY MAKE STARTING FROM #MARCA-INICIAL ENDING AT #MARCA-FINAL
DISPLAY MAKE MODEL YEAR
END-READ
*
WRITE / 10T 'O RELATORIO ESTA COMPLETO'
*
END

209

Conceitos sobre Mapas

ENTRE COM A MARCA INICIAL E FINAL PARA A LEITURA DO ARQUIVO


MARCA INICIAL: ____________________
MARCA FINAL: datsun______________

Cursor

210

Conceitos sobre Mapas

MAKE
MODEL
YEAR
-------------------- -------------------- ----ALFA ROMEO
ALFA ROMEO
ALFA ROMEO
AMERICAN MOTOR
AMERICAN MOTOR
AMERICAN MOTOR
AUDI
AUDI
AUDI
AUDI
AUDI

GIULIETTA 2.0
SPRINT GRAND PRIX
QUADRIFOGLIO
HORNET
AMBASSADOR
HORNET
QUATRO
QUATRO TURBO
QUATRO TURBO
100 CD
80 S

DATSUN
DATSUN
DATSUN

300ZX
CHERRY
SUNNY
O RELATORIO ESTA COMPLETO

211

1985
1984
1984
1977
1983
1977
1983
1983
1986
1982
1980

1986
1983
1981

Conceitos sobre Mapas

Mapas Externos
Os mapas externos so criados no editor de mapa e so
invocados no programa atravs da declarao INPUT
USING MAP.
Iremos mostrar 2 tipos de mapas. Um simples e o outro
usa vrias opes em sua declarao.

212

Chamando um mapa externo

Programa
...

Mapa Externo
~~~~

menumap

/*Exemplo 1
INPUT USING MAP MENUMAP

~~~~~ ~ ~~~~

...

~~~~~~

~~~~

~~~~~~

/*Exemplo 2
INPUT WITH TEXT
. ENTRE COM SUA OPO

menumap

~~~~

. MARK *#CHOICE ALARM

~~~~~ ~ ~~~~

. USING MAP MENUMAP

~~~~~~

~~~~

.
ENTRE COM SUA OPO

END
213

Conceitos sobre Mapas

Definies do Perfil do Mapa

Para cada mapa externo que voc cria, voc pode mudar
vrias definies que alteram sua aparncia e seu
comportamento. Por exemplo, voc pode controlar o
tamanho do mapa, se as teclas de funo iro aparecer ou
no, etc.
Quando voc inicia um novo mapa, estas definies esto
com seus valores padres, mas, voc pode sobrescrev-los.

214

Conceitos sobre Mapas

Que tipos de definies existem


Format
As definies de formato permitem que voc determine
como seu mapa ser formatado. Qual o tamanho de seu
mapa? Que PF-keys sero usadas? etc.
Context
Permitem dizer como o mapa est sendo usado, se
permitido usar caractersticas especiais para a tela como o
pisca-pisca ou vdeo reverso, se o help est definido a nvel
de mapa, etc.
215

Conceitos sobre Mapas

Que tipos de definies existem


Caracter de Preenchimento
Um caracter de preenchimento padro pode ser definido.
Essas definies podem ser sobrescritas por outro caracter
utilizando o editor de campo estendido.
Delimitadores (em alguns ambientes apenas)
Em alguns ambientes os delimitadores so usados para
atribuir inicialmente certos atributos dos campos ou textos
como cor, por exemplo.

216

Conceitos sobre Mapas

Que tipos de definies existem


Delimitadores (em alguns ambientes apenas)
Qualquer caracter especial pode ser definido como
delimitador, exceto o caracter de controle e de notao de
ponto decimal. Eles aparecem sempre na primeira posio
do campo no mapa externo.
Obs.: Nos ambientes nos quais os delimitadores no so
usados, costuma-se usar o parmetro AD para definir os
atributos de um campo.

217

Conceitos sobre Mapas

Definindo campos no mapa externo


Mtodo I
possvel definir um novo campo no mapa diretamente
indicando o delimitador, o formato e o tamanho e
posteriormente o nome.
Mtodo II
Uma outra forma de definir um campo no mapa pux-lo de
uma rea de dados ou da DDM. Nesse caso, o nome,
formato e o tamanho so definidos automaticamente.

218

Conceitos sobre Mapas

Mtodo I
Meu Mapa
#novo-campo
(nome default: #001)
Especificar:
Formato;
Tamanho;
Localizao no mapa e
Nome

219

Conceitos sobre Mapas

Mtodo II
Definio de Dados existente
#campo-ja-existente (a40)
#outro-campo (a1)

220

Meu Mapa

Conceitos sobre Mapas

Atribuindo nome aos campos


Antes de catalogar o mapa, todos os campos no seu mapa
devem ser nomeados. Se os campos no foram puxados de
nenhuma rea de dados, elas recebem nomes temporrios
(ex.: #001, #002, #003, etc). Esses nomes devem ser
alterados antes do mapa ser catalogado.
Todos os campos definidos no seu mapa externo devem
corresponder queles definidos no programa chamador,
bem como os respectivos formatos e tamanhos.

221

Layouts

Para assegurar que todos os seus mapas tenham a


mesma aparncia, voc pode optar por usar uma tela
de layout padronizada. Os dados localizados no
mesmo lugar nas diversas telas melhora a eficincia de
seu processamento.

222

Layouts

Tipos de Layout
Esttico: Serve apenas como um ponto inicial para a criao
de um novo mapa. Voc usa o mapa de layout como um
modelo para a definio de novos mapas. As mudanas
realizadas no layout no tm efeito sobre o novo mapa.
Dinmico: Ele permite que voc tenha um modelo
consistente e modifique facilmente o layout de tal forma que
as alteraes efetuadas no layout sejam repassadas para o
outros mapas da sua aplicao.

223

Layouts

Procedimento para criar um mapa de Layout


Crie o mapa de layout;
Crie um novo mapa;
Especifique o nome o mapa de layout na tela de profile
do novo mapa;
Adicione os novos campos, textos e os campos
definidos pelo usurio do novo mapa;
catalogue o mapa.
224

Formulrios

O que so formulrios (Forms)


So mapas que no tm campos de input ou campos
modificveis. So criados no editor do mapa como uma
alternativa para compor declaraes complexas com o WRITE.
Para identificar o mapa como um formulrio, voc deve chamar
o formulrio atravs da declarao WRITE USING FORM.
Dessa forma:
As declaraes WRITE so criadas nos bastidores;
Se estiver trabalhando numa plataforma que usa
delimitadores, eles devem estar definidos para aceitar apenas
campos do tipo output.
225

Formulrios

Chamando um formulrios
Uma vez criado, para chamar um formulrio a partir de
outro objeto, basta usar a declarao WRITE USING
FORM seguido do nome do formulrio.
Mltiplos formulrios sero escritos para a mesma pgina
ou tela.
Voc pode usar regras de processamento no formulrio mas,
Lembre-se!
A regra no pode usar a declarao REINPUT ;
As regras de PF nunca so processadas;
Todas as regras so processadas depois que o formulrio
escrito e antes do controle ser retornado ao objeto chamador.
226

Formulrios

Programa com a instruo WRITE USING FORM


DEFINE DATA

END-DEFINE

WRITE USING FORM HELLO1

END

Hello Jeff Smith

Formulrio HELLO1 (Criado com o editor de mapa)

Bem vindo ao Building Natural Applications!


Esperamos que ache esse curso uma experincia educacional gratificante.
227

MDULO IV - Mapas

Unidade B - Editando campos do Mapa


- Editando campos do Mapa
- Variveis de Controle

228

Editando Campos do Mapa

Caractersticas do campo
Ao criar um mapa, voc pode definir todas as caractersticas
que voc deseja para um campo. Muitas caractersticas esto
associada a definio de algum parmetro. Segue na tabela
abaixo alguns desses parmetros.
Caracterstica

Parmetro

Nome do campo

s/p

Propsito
Nome do campo. Qualificador de alto nvel
includo para campos do banco.

Tamanho e

s/p

Formato
229

Formato e tamanho. S podem ser alterados


para campos criados originalmente no mapa.

Editando Campos do Mapa

Caracterstica

Parmetro

Definio de

AD

Atributos

Propsito
Exibe a funo de seu campo( ex.:
input/output/modifiable; required/optional)
e como o campo ser exibido (ex.:
intensificado, com caracter de
preenchimento.

Help em nvel de campo e variveis de controle


Varivel de

CV

Controle
Help

HE

230

Voc pode ligar uma varivel de controle


em nvel de campo usando esse
parmetro
Voc pode ligar um mapa de help ou
uma helproutine em nvel de campo
usando esse parmetro.

Editando Campos do Mapa

Caracterstica

Parmetro

Propsito

HE

Entre com HE=+ abre uma janela para


que voc defina at 20 parmetros para

Help

serem passados para a helproutine.


Parmetros Especiais
Atributos de
String Dinmico

DY

Usado para definir certas caractersticas


contidas num texto para controlar a
definio de atributos.

Campos informativos no-modificveis


Nmero de regras

s/p

de processamento
231

Nmero atual de regras de


processamento definidas para o campo

Editando Campos do Mapa

Caracterstica

Parmetro

Modo de
Definio

s/p

Propsito
Indica como o campo foi definido:
DATA

= selecionados a partir da
DEFINE DATA;

SYS

= varivel de sistema;

UNDEF = criada no mapa e assinalada


com um nome dummy;

232

USER

= criada no mapa e definida


atravs do editor do campo;

VIEW

= selecionada a partir da DDM.

Editando Campos do Mapa

Controlando a exibio do campo


AL

Tamanho do
campo de exibio

FL

Altera o tamanho de exibio dos


campos mostrando somente as
primeiras posies definidas pelo
parmetro.

EM

Edita especificaes de mscaras

NL

Mscara de
edio

dependendo do formato do campo.

Definio de cor

CD

Impresso de

ZP

zeros

233

Campos podem ser exibidos com


qualquer cor suportada pelo ambiente.
Determina se os zeros sero impressos
para campos numricos com dados nulos

Editando Campos do Mapa

Controlando a exibio do campo


Posio do Sinal

Modo de
Impresso

234

SG

Determina se alocada ou no uma


posio extra no inicio do campo para
incluir o seu sinal.

PM

Permite alternar definies de caracter e


a direo de impresso utilizadas.

Variveis de Controle

Definies de atributo para campo dinmico


Os mapas do Natural tm a inteno de interagir com o usurio
da forma mais eficiente possvel. Para que o usurio possa
entender melhor a utilizao de cada mapa voc pode ligar
variveis de controle e us-las junto com as instrues
DISPLAY, INPUT, PRINT e WRITE.
Um campo com formato C pode ser usado para definir
delimitadores dinamicamente. Dessa forma voc poder
modificar as caractersticas desses campos.

235

Variveis de Controle

Possveis usos das variveis de controle


Enfatizar mensagens de erro ou outras mensagens
importantes;
Permitir que um nico mapa seja usado para mltiplos
propsitos;
Podem ser usadas com arrays em campos de seleo
para tornar invisveis as ocorrncias dos campos que no
tm dados a serem selecionados;
Verificar se o contedo de um campo que recebeu
atributos dinamicamente foi modificado durante a execuo
de uma instruo INPUT.
236

Variveis de Controle

Categoria de delimitadores
Representao do campo (Parmetro AD)
B

Blinking

Cursive/Italic

Default intensity

Intensified

Non-display

Underlined

Reverse video

Dynamic atributtes

Caractersticas de Input/Output do campo (Parmetro AD)


P

Temporarily protected
237

Variveis de Controle

Categoria de delimitadores
Exibio de cor (Parmetro CD)
BL

Blue

GR

Green

NE

Neutral

PI

Pink

RE

Red

TU

Turquoise

YE

Yellow

238

Variveis de Controle

Usando variveis de controle em nvel de campo e mapa


A varivel de controle tem formato C e no tem tamanho. Elas
devem ser definidas e receber atributos antes da chamada do
mapa.
Passo

Ao
No objeto que chama o mapa, defina a varivel de controle,

por exemplo:
#CNTL (C)
Antes de chamar o mapa, mova ou defina atributos varivel.
MOVE (AD=B CD=YE) TO #CNTL

239

Variveis de Controle

Passo

Ao
Use o parmetro control variable para ligar a varivel de
controle em nvel de campo ou mapa.

Nvel de Campo: esse parmetro encontra-se na tela de


edio do campo. Ela sobrepe a definio em nvel de mapa,
se essa opo foi usada.
Nvel de mapa: esse parmetro est na tela de profile do
mapa (PF2).
Verifique que o atributo Y (AD=Y) foi definido para cada campo

a ser controlado pela varivel de controle. Em algumas


plataformas um delimitador pode ser usado para esse fim.

240

Variveis de Controle

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200

************************************************************************
* ILUSTRACAO DO USO DA VARIAVEL DE CONTROLE
************************************************************************
DEFINE DATA
GLOBAL USING DIAGDA
LOCAL
1 #LANME
(A20)
1 #OPTION (A1)
1 #CTLVAR1 (C)
/* NIVEL DE MAPA
1 #CTLVAR2 (C)
/* NIVEL DE CAMPO
1 #MESSAGE (A60)
END-DEFINE
REPEAT
INPUT
////'POR FAVOR ENTRE COM O ULTIMO NOME: ==> ' #LNAME (AD=AILT'_')
/'OU ENTRE COM A PALAVRA "QUIT" PARA SAIR' (CD=RE)
IF #LNAME = ' '
REINPUT 'OPCAO INVALIDA! ENTRE COM O NOME OU "QUIT"' MARK *#LNAME
END-IF
IF #LNAME='QUIT'

241

Variveis de Controle

0210
0220
0230
0240
0250
0260
0270
0280
0290
0300
0310
0320
0330
0340
0350
0360
0370
0380
0390
0400

'WRITE NOTITLE 10/6 'VOCE SOLICITOU O FIM DA SESSAO...' *USER


'....' 6T 'TENHA UM BOM DIA!'
STOP
END-IF
F1. FIND(1) EMPL-VIEW WITH NAME=#LNAME
INPUT USING MAP 'CNTLMAP1'
DECIDE ON FIRST VALUE OF #OPTION
VALUE 'Q'
ESCAPE BOTTOM
VALUE 'U'
UPDATE (F1.)
END OF TRANSACTION
MOVE 'UPDATE DONE' TO #MESSAGE
MOVE (CD=RE AD=P) TO #CTLVAR2
VALUE 'D'
DELETE (F1.)
END OF TRANSACTION
MOVE 'DELETE DONE' TO #MESSAGE
MOVE (CD=NE AD=P) TO #CTLVAR2
NONE

242

Variveis de Controle

0410 REINPUT 'OS VALORES CORRETOS SAO D(DELETE), U(UPDATE), Q(QUIT)'


0420
MARK *#OPTION
0430
END-DECIDE
0440
MOVE (AD=P) TO #CTLVAR1
0450
INPUT USING MAP 'CNTLMAP1'
0460
RESET EMPL-VIEW #CTLVAR2 #OPTION #MESSAGE
0470 END-FIND
0480 END-REPEAT
0490 END

243

MDULO IV - Mapas

Unidade C - Validando as entradas do mapa


-

Instruo REINPUT
Regras de processamento
Regras de processamento internas
Reutilizao das regras internas
Resumo

244

INSTRUO REINPUT

EXIBINDO MENSAGENS DE ERRO


Se seu programa testa a entrada de dados em um campo do
mapa e um erro detectado, este erro precisa ser
comunicado ao usurio. Voc pode fazer isso utilizando a
instruo REINPUT.

A CLAUSULA MARK
Voc pode usar a clausula MARK com a instruo REINPUT
para posicionar o cursor no campo em que o erro ocorreu.
Alm disso, voc tem a opo de exibir as mensagens de
erro com cores diferentes ou em negrito.
245

INSTRUO REINPUT

EXIBINDO MENSAGENS DE ERRO


0010 ************************************************************
0020 * EXEMPLO DA DECLARAO REINPUT
0030 ************************************************************
0040 DEFINE DATA LOCAL
0050 1 #LNAME (A20)
0060 END-DEFINE
0170 INPUT //// PLEASE ENTER A LAST NAME #LNAME (AD=AIT_)
0180
/ OR ENTER THE WORD QUIT (CD=RE)
0190 IF #LANME =
0200
REINPUT PLEASE ENTER A LAST NAME OR QUIT MARK *#LNAME
0210 END-IF
0240 END

Sada:
PLEASE ENTER A LAST NAME OR QUIT
PLEASE ENTER A LAST NAME_______________________
OR ENTER THE WORD QUIT
246

INSTRUO REINPUT

Lembre-se!
Nenhuma instruo WRITE ou DISPLAY
pode ser executada entre as declaraes
INPUT e REINPUT.
A instruo REINPUT pode ser usada em
mapas internos e externos, porm seu uso
mais eficiente quando codificada em mapas
externos.
Em virtude da instruo REINPUT retornar
ao ltimo INPUT, todas as regras de
processamento no mapa so re-executadas.
247

Regras de Processamento

O que so regras de processamento?


Trata-se de uma edio ligada ao campo no mapa externo.
Elas so usadas para avaliar o contedo do campo e para
tratar os valores da varivel de sistema *PF-KEY. Quando o
mapa catalogado, elas passam a fazer parte do cdigo do
mapa.

248

Regras de Processamento

Exemplo
0010 IF #END = FALSE
0020
IF & = 'D' OR = 'U' OR = 'Q'
0030
IGNORE
0040
ELSE
0050
REINPUT 'CORRECT VALUE ARE "D" = DELETE, "U" = UPDATE, "Q" = QUIT'
0060
(AD=I) MARK *&
0070
END-IF
0080 END-IF

249

Regras de Processamento

Vantagens
possvel testar o mapa e toda lgica associada a ele
antes da criao do objeto chamador;
Ajuda a executar sua aplicao de forma mais eficiente;
As regras de processamento podem ser compartilhada
entre outros programas e aplicaes. Isso pode ser feito
com o auxlio do Predict, que fornece 3 tipos de regras:
Inline rules (regras internas)
Free rules (regras livres)
Automatic rules (regras automticas)
250

Regras de Processamento

Regras Inline
Elas so definidas diretamente no mapa para serem usadas
somente por ele. Esse tipo de regra no precisa estar
documentada no Predict e outros mapas na aplicao no
precisam acess-la.
Regras Free
So criadas para serem usadas em vrios mapas. Como
forma de centralizar as informaes so documentadas no
Predict. Para ser usada por mais de um mapa deve ser
criada de forma geral e em virtude desse compartilhamento
no deve ser modificada antes que seus efeitos sejam
avaliados nos outros mapas.
251

Regras de Processamento

Regras Automticas
So definidas para campos do banco dentro da DDM pelo
DBA ou pelo administrador do banco. Elas so
automaticamente usadas sempre que campos do banco so
usados no mapa. Elas so criadas no Predict e no podem
ser alteradas em nvel de mapa.

252

Regras de Processamento

Nveis de Processamento
Um nico campo pode ter at 100 regras. A ordem do
processamento feita atribuindo nveis para cada regra. As
regras so processadas na ordem ascendente do nvel 0 ao
99 e de acordo com a posio do campo no mapa - da
esquerda para a direita e de cima para baixo. As regras
associadas com as *PF-KEY so processadas primeiro. Elas
agem como se fossem o primeiro campo do mapa.

253

Regras de Processamento

Definindo os nveis da regra


Se suas regras no so executadas na ordem desejada, voc pode
mudar a ordem de execuo alterando o seu nvel.

Rank

Regra de processamento

Regra de Finalizao

1-4

Regras Automticas

5-24

Checagem de formato

25-44

Checagem de valor para campos individuais

45-64

Checagem de valores entre campos


254

Regras de Processamento

Regra de processamento

Rank
65-84

Acesso ao banco

85-99

Propsitos especiais

255

Regras de Processamento

Criando Regras Internas


O mtodo usado para criar regras variam de acordo com a
plataforma operacional. No mainframe basta entrar com .p
sobre o delimitador do campo ao qual deseja-se associar a
regra.
Notao &
Ao editar a regra voc pode utilizar o caracter & para
substituir o nome do campo. Essa opo possibilita a
padronizao de regras, permitindo que a mesma regra seja
usada em diferentes campos com o mesmo propsito.

256

Regras de Processamento

Exemplo
0010 IF #END = FALSE
0020
IF & = 'D' OR = 'U' OR = 'Q'
0030
IGNORE
0040
ELSE
0050
REINPUT
0060
'CORRECT VALUES ARE "D" = DELETE, "U" = UPDATE, "Q" = QUIT'
0070
(AD=I) MARK *&
0080
END-IF
0090 END-IF

257

Regras de Processamento

Lembre-se!
A declarao END no permitida dentro
das regras de processamento;
Referncias a nmeros de linha no so
permitidas dentro das regras de
processamento;
Voc pode checar, testar ou salvar uma
regra de processamento.

258

Regras de Processamento

Lembre-se!
Evite a execuo de objetos externos a partir de
regras de processamento (ex.: uso do PERFORM
ou CALLNAT) pois h uma enorme possibilidade
do controle ser passado para fora do mapa antes
da validao dos campos de entrada;
Regras de processamento podem conter a
declarao DEFINE DATA, pois voc pode
precisar usar uma varivel que no est definida
no mapa ou uma view e seus campos.
259

MDULO IVI - Mapas

Unidade D - Definindo Function Keys


- Interface da Function Key
- Instruo SET KEY

260

Interface da Function Key

Voc pode tornar seus programas mais amigveis


atribuindo-lhes processos a serem executados quando uma
determinada funo chave pressionada. Entre essas
funes, podemos incluir:
Program attention keys 1-3

(PA 1-3)

Program function keys 1-24

(PF 1-24)

ENTER key

(ENTR)

CLEAR key

(CLR)

Ligth pen

(PEN)

261

Interface da Function Key

H 4 passos que envolvem a adio de funes em sua


aplicao:
1. No editor do mapa, diga que voc quer exibir as funes chaves;
2. Adicione uma regra de processamento varivel de sistema *PF-KEY
para executar qualquer ao necessria;
3. Ative as chaves programaticamente. Use a declarao SET KEY no
objeto. Voc pode ainda definir um nome para essa funo;
4. Codifique seu programa usando as variveis *PF-KEY ou PF-NAME.

262

Interface da Function Key

Variveis de sistema

*PF-KEY - Contm a identificao da ltima funo que foi


pressionada. Seu formato e tamanho A4 e o contedo no
pode ser modificado.

*PF-NAME - Contm a identificao da ltima funo que foi


pressionada cuja denominao dada atravs da clausula
NAMED. Seu formato e tamanho A10.

263

Instruo SET KEY

Essa instruo assinala funes para as PF, PA, ENTER e


CLEAR. As funes que podem ser definidas para essas
chaves, incluem:
Interrogao pelo programa ativo;
Nome do programa e/ou do comando;
Comandos de terminal.
Sintaxe:
SET KEY
PFn = KEYWORD
PFn NAMED name
264

Instruo SET KEY

SET KEY

Descrio

Keyword
OFF

Desativa todas as funes e retorna o controle ao monitor de TP do


sistema.

ON

Reativa o nome do programa ou do comando definido para a funo.

ALL

Faz com que todas as chaves tornem-se sensitivas, ou desativa


qualquer definio anterior.

PFn=HELP
PFn=OFF

Quando PFn pressionado, o help acionado. Tambm pode acionar


help rotinas e mapas de help.
Desativa a PFn.

265

Instruo SET KEY

SET KEY

Descrio

Keyword
PFn

Torna a PFn sensitiva ou a reativa.

PFn=command O comando apontado atribudo PFn (ex.: QUIT, SAVE,etc).


PFn=#X
PFn=program
NAMED XXXX
PFn NAMED
XXXX

O valor da varivel #X atribuda a PFn.


Um programa atribudo PFn. O rtulo definido na clausula NAMED
aparece na tela para essa funo.
Altera o nome mas no a funo da PFn.

266

MDULO V - Acesso a Base de Dados

Sistema de Gerenciamento de Banco de Dados


Viso Geral sobre acesso ao banco
Processamento seqencial
Mtodos para limitar o processamento seqencial
Processamento randomico
Mtodos para limitar o processamento randomico
Mtodos especiais de acesso
Uso de condies lgicas
Acesso a mltiplos arquivos

267

Sistema de Gerenciamento de
Banco de Dados (DBMS)

Manufacturing
Sistema

DBMS

Operacional
Human Resources

Accounting

DADOS

Sales/Marketing
268

Viso Geral sobre Acesso ao Banco

Instrues de acesso ao banco


Para que seu programa possa manipular dados, ele ter
primeiro que acess-los e recuper-los. O Natural executa
essa tarefa atravs de instrues definidas dentro dos
programas. A partir delas, possvel tambm especificar
critrios de recuperao para esses mesmos dados.

269

Viso Geral sobre Acesso ao Banco

As instrues possuem as seguintes caractersticas em comum:


Elas podem acessar um ou mais arquivos do banco (geralmente
um de cada vez);
A maioria podem iniciar processamento de loops;
Elas podem retornar dados para o objeto questionando-o. (Se sua
instruo de acesso inclui critrios de pesquisa e nenhum dado
atendeu quele critrio, ento nenhum dado retornado ao seu
programa);

Elas podem colocar os dados em hold para garantir que outros


usurios no acessem os dados at que eles tenham sido
completamente processados.
270

Viso Geral sobre Acesso ao Banco

Mtodos de Acesso
O Natural suporta dois mtodos: Seqencial e Randmico. A
declarao que voc escolher para fazer o acesso ir
determinar o tipo do mtodo.
Seqencial
Seu uso adequado para acessar um nmero grande
de registros.
Randmico
Seu uso adequado para acessar um nmero restrito
de registros ou para registros que satisfazem algum
critrio de pesquisa.
271

Viso Geral sobre Acesso ao Banco

REGISTRO RETORNADO

READ

FIND
SOLICITAO

SOLICITAO

Employees
Vehicles
Etc.

SOLICITAO

GET

REGISTRO

CONTADOR

RETORNADO

RETORNADO

272

SOLICITAO

HISTOGRAM

Processamento Seqencial

Instruo READ
o mtodo de acesso mais eficiente para processar todo o
arquivo. Os arquivos podem ser recuperados do banco:
Na ordem em que foram fisicamente armazenados
(READ PHYSICAL);
Atravs do nmero seqencial interno (READ BY ISN);
Na ordem dos valores de um campo chave (READ
LOGICAL).

273

Processamento Seqencial

READ PHYSICAL
Essa instruo gera um loop de processamento para
acessar os dados no qual os registros so retornados na
ordem em que forma armazenados fisicamente. A leitura
comea com o incio do dados e continua at que o ltimo
registro seja lido. Podemos interromper esse
processamento estabelecendo um limite, por exemplo,
definindo um nmero de registros a serem lidos.
O READ PHYSICAL til quando a ordem dos registros
retornados no importante ou quando o critrio de
seleo no necessrio.
274

Processamento Seqencial

Lembre-se!
Use o READ PHYSICAL para ler um nmero
grande de registros por ordem fsica de
armazenamento;
Cuidado ao usar o READ PHYSICAL para
obter e atualizar todos os registros num
arquivo. Em alguns DBMSs voc poderia
atualizar inadvertidamente um registro duas
vezes se o registro atualizado no for
colocado de volta na mesma localizao fsica
aps a modificao.
275

Processamento Seqencial

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200

**************************************************************
* ILUSTRA O READ PHYSICAL
**************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 COLOR
2 YEAR
1 #CAR-TYPE (A30)
END-DEFINE
*
FORMAT SF=3 PS=21
*
READ (50) CARS PHYSICAL
COMPRESS YEAR MAKE MODEL INTO #CAR-TYPE
DISPLAY NOTITLE 5T' ' *COUNTER (UC= NL=4)
'TIPO/DE/CARRO' #CAR-TYPE
'COR' COLOR
END-READ

276

Processamento Seqencial

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

TIPO
DE
CARRO
------------------------------

----------

1980
1980
1980
1985
1984
1982
1982
1982
1982
1980
1983
1986
1984
1984
1982
1982

ROUGE
BLANCHE
GRISE
BLANCHE
ROUGE
BLEUE
GRISE
BLANCHE
BLANCHE
CREME
GRISE
GRISE
BLEUE
BLANCHE
BLANCHE
BLEUE

RENAULT R9
RENAULT R5
PEUGEOT 305
PEUGEOT 305
FIAT PANDA
RENAULT R4
RENAULT R18
PEUGEOT 205
FIAT UNO
FIAT UNO
BMW 30
RENAULT R25
CITROEN CX
CITROEN BX 19
RENAULT R5
RENAULT R5

277

COR

Processamento Seqencial

READ BY ISN

Essa instruo gera um loop de processamento para


acessar os dados no qual os registros so retornados na
ordem do nmero seqencial interno. A busca comea com
o ISN 1 e continua at o ltimo ISN ser lido. Para DBMSs
que suportam ISNs esse o mtodo mais rpido de
acesso e assegura que o registro ser atualizado apenas
uma vez.

278

Processamento Seqencial

Lembre-se!
ISNs no so disponveis em todos os
DBMSs. Tente identificar o tipo de seu DBMSs
para usar essa caracterstica.

279

Processamento Seqencial

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
0220
0230

**********************************************************************
* ILUSTRA O READ BY ISN
**********************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 COLOR
2 YEAR
1 #CAR-TYPE (A30)
END-DEFINE
*
FORMAT SF=3 PS=21
*
READ (60) CARS BY ISN
COMPRESS YEAR MAKE MODEL INTO #CAR-TYPE
DISPLAY NOTITLE 5T ' ' *COUNTER (UC= NL=4)
'TIPO/DE/CARRO' #CAR-TYPE
'COR' COLOR
'IDENTIFICACAO/DO/REGISTRO' *ISN (NL=6)
END-READ
*
END

280

Processamento Seqencial

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...

TIPO
DE
CARRO
------------------------------

----------

1980
1980
1980
1985
1984
1982
1982
1982
1982
1980
1983
1986
1984
1984
1982
1982

ROUGE
BLANCHE
GRISE
BLANCHE
ROUGE
BLEUE
GRISE
BLANCHE
BLANCHE
CREME
GRISE
GRISE
BLEUE
BLANCHE
BLANCHE
BLEUE

RENAULT R9
RENAULT R5
PEUGEOT 305
PEUGEOT 305
FIAT PANDA
RENAULT R4
RENAULT R18
PEUGEOT 205
FIAT UNO
FIAT UNO
BMW 30
RENAULT R25
CITROEN CX
CITROEN BX 19
RENAULT R5
RENAULT R5

281

COR

IDENTIFICACAO
DO
REGISTRO
------------1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

Processamento Seqencial

READ LOGICAL
Essa instruo gera um loop de processamento para
acessar os dados no qual os registros so retornados na
ordem ascendente de um campo chave. A busca comea
com o primeiro registro que satisfaz o valor definido no
campo chave e continua at o fim do arquivo. Podemos
interromper esse processamento estabelecendo um limite
ou escapando do loop.
O READ LOGICAL indicado para a leitura de um nmero
grande de registro em que a ordem importante. Esse tipo
de instruo bem eficiente quando os registros do banco
so armazenados por ordem de descritor.
282

Processamento Seqencial

Lembre-se!
Use o READ LOGICAL para ler um grande
nmero de registros pela ordem do campo
chave.
A menos que voc defina explicitamente o
nmero de registros a ser lido, ou defina um
valor final, a instruo READ LOGICAL
retorna os registros definidos a partir do valor
especificado de incio e continua at o fim do
arquivo.
283

Processamento Seqencial

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0150
0160
0170
0180
0190
0200
0210
0220
0230

*****************************************************************
* ILUSTRA O INSTRUCAO READ LOGICAL
*****************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 COLOR
2 YEAR
1 #CAR-TYPE (A30)
END-DEFINE
*
FORMAT SF=3 PS=21
READ (50) CARS BY MAKE
COMPRESS YEAR MAKE MODEL INTO #CAR-TYPE
DISPLAY NOTITLE 5T ' ' *COUNTER (UC= NL=4)
'TIPO/DE/CARRO' #CAR-TYPE
'COR' COLOR
'IDENTIFICACAO/DO/REGISTRO' *ISN (NL=4)
END-READ
*
END
284

Processamento Seqencial

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
...

TIPO
DE
CARRO
------------------------------

----------

1985
1984
1984
1977
1983
1977
1983
1983
1986
1982
1980
1984
1985
1984
1985
1984

VERMELHO
ROT
BLAU-MET.
YELLOW
BLACK
YELLOW
ROUGE
BLANCHE
GRISE
WEISS
WEISS
GOLD-MET.
ROT
BLAU-MET.
GOLD-MET.
DUNKELGRAU

ALFA ROMEO GIULIETTA 2.0


ALFA ROMEO SPRINT GRAND P
ALFA ROMEO QUADRIFOGLIO
AMERICAN MOTOR HORNET
AMERICAN MOTOR AMBASSADOR
AMERICAN MOTOR HORNET
AUDI QUATRO
AUDI QUATRO TURBO
AUDI QUATRO TURBO
AUDI 100 CD
AUDI 80 S
AUDI 100 CC
AUDI 80 LS
AUDI 100 CD
AUDI 100 CC
AUDI 100 CD 5E

285

COR

IDENTIFICACAO
DO
REGISTRO
------------205
206
207
299
302
328
102
103
104
108
109
113
114
118
123
125

Mtodos para Limitar o Processamento Seqencial

Limitando o nmero de registros a serem lidos


Basta acrescentar, entre parnteses, o nmero de registros
a serem lidos aps a palavra chave READ.
Lembre-se!
Para ler registros na casa do milhar,
defina um zero esquerda do nmero (por
exemplo (0nnnn), pois o Natural entende
qualquer nmero da casa do milhar entre
parnteses como uma linha de referncia
de alguma declarao.
286

Mtodos para Limitar o Processamento Seqencial

As clusulas STARTING / ENDING


Com as opes EQUAL/STARTING FROM nas clusulas BY ou WITH,
voc pode definir o valor a partir do qual a leitura deveria comear.
Adicionando as opes THRU/ENDING AT, voc pode tambm definir
um ponto final para a operao de leitura. Sem essa opo a leitura dos
registros continuaria at o fim do arquivo.
Lembre-se!
Os valores lidos incluem o valor definido aps o
THRU/ENDING AT. Por exemplo, se voc estiver
fazendo uma leitura READ EMPLOYEES BY JOBTITLE=A THRU C, todos os registro que
comeam com A, B so lidos; se houver algum
job-title C, esse tambm seria lido, mas o prximo
no.
287

Mtodos para Limitar o Processamento Seqencial

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200

********************************************************************
* ILUSTRA O USO DO READ COM OPCAO DE STARTING FROM / ENDING AT
********************************************************************
DEFINE DATA LOCAL
1 EMP VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
2 DEPT
2 JOB-TITLE
1 #START (A20)
1 #END
(A20)
1 #MAX
(P2)
END-DEFINE
*
FORMAT SF=3 PS=21
*
INPUT /// '
ENTRE COM O NOME INICIAL:' #START (AD=AIT'_')
/ '
E O NOME FINAL:' #END
(AD=AIT'_')
/ 'NUMERO DE REGISTROS A SEREM LIDOS:' #MAX

288

(AD=AIT'_')

Mtodos para Limitar o Processamento Seqencial

Continuao
0210
0220
0230
0240
0250
0260

*
READ (#MAX) EMP BY NAME STARTING FROM #START THRU #END
DISPLAY NOTITLE FIRST-NAME / 2X NAME DEPT PERSONNEL-ID JOB-TITLE
END-READ
*
END

Tela de Input:
ENTRE COM O NOME INICIAL: ____________________
E O NOME FINAL: ____________________
NUMERO DE REGISTROS A SEREM LIDOS: ___

289

Mtodos para Limitar o Processamento Seqencial

Continuao
FIRST-NAME
DEPARTMENT
PERSONNEL
NAME
CODE
ID
-------------------------------------

CURRENT
POSITION
-------------------------

VIRGINIA
JONES
MARSHA
JONES
ROBERT
JONES
LILLY
JONES
EDWARD
JONES
MARTHA
JONES
LAUREL
JONES
KEVIN
...
290

SALE30

20007500

MANAGER

MGMT10

20008400

DIRECTOR

TECH10

20021100

PROGRAMMER

MGMT10

20000800

SECRETARY

TECH10

20001100

DBA

SALE00

20002000

TRAINEE

SALE20

20003400

SALES PERSON

COMP12

30034045

V D U OPERATOR

Mtodos para Limitar o Processamento Seqencial

A clausula WHERE
O READ LOGICAL com a clausula WHERE fornece outro mtodo para
definir um critrio de pesquisa. Ela permite que voc verifique os
valores de dados que no foram definidos como chave.
Lembre-se!
A clausula WHERE diferente das clausulas
WITH/BY em dois aspectos:
1. O campo definido na clausula WHERE no
precisa ser descritor;
2. As opes que seguem a clausula WHERE
so condies lgicas (igual, menor que, maior
que, etc.).
291

Mtodos para Limitar o Processamento Seqencial

Lembre-se!
Todo critrio com a clausula WHERE avaliado aps
a leitura dos registros pelo DBMS e antes que qualquer
processamento seja executado no registro.
Se um processamento com limites definido numa
declarao READ contendo a clausula WHERE, os
registros rejeitados como resultado no so testados
contra o limite.
Evite usar a clausula WHERE em loops de
processamento que contenham as declaraes
UPDATE ou DELETE. Em alguns DBMS a clausula
WHERE pode rejeitar registros suficientes para exceder
o nmero permitido de registros em hold.
292

Mtodos para Limitar o Processamento Seqencial

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200

*****************************************************************
* ILUSTRA A DECLARACAO READ COM A CLAUSULA WHERE
******************************************************************
DEFINE DATA LOCAL
1 EMP VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
2 DEPT
2 JOB-TITLE
2 SALARY (1)
END-DEFINE
*
FORMAT SF=3 PS=20
*
READ EMP BY PERSONNEL-ID WHERE SALARY (1) = 60000
DISPLAY NOTITLE PERSONNEL-ID SALARY(1) JOB-TITLE FIRST-NAME / 2X NAME
END-READ
*
END

293

Mtodos para Limitar o Processamento Seqencial

PERSONNEL
ID
---------

ANNUAL
SALARY
----------

CURRENT
POSITION
-------------------------

FIRST-NAME
NAME
--------------------HEINZ
GRAF
HAZEL
WYLLIS
RICHARD
GEE

11700312

60000

SYSTEMBERATER

20000900

60000

DIRECTOR

20021900

60000

DIRECTOR

294

Processamento Randmico

Declarao FIND
Gera um loop de processamento onde os registros no so retornados
numa ordem especfica ao definir-se a chave. No ADABAS, os registros so
retornados por ordem de ISN.
Uso de variveis de sistema
*NUMBER
Em alguns DBMSs essa varivel contm o nmero de registros que
satisfizeram o critrio da clausula WITH.
*COUNTER
uma varivel automaticamente incrementada a cada interao do loop
de leitura. Se for referenciada fora do loop de processamento ao qual
ela se aplica, a referncia deve ser fornecida.
295

Processamento Randmico

Lembre-se!
A menos que a opo SORT seja usada, a
declarao FIND retorna os registros numa ordem
qualquer.
Quando estiver fazendo atualizaes com a
declarao FIND, importante lembrar que todos os
registros so colocados em hold.
Os campos que voc definiu aps a declarao WITH
devem ser campos do banco definidos na view. Esse
campo deve ser um descritor.

296

Processamento Randmico

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
0220
0230
0240
0250

*****************************************************************
* EXEMPLO DO USA DA DECLARACAO FIND
*****************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 COLOR
2 YEAR
1 #CAR-TYPE (A30)
1 #MARCA
(A20)
END-DEFINE
*
FORMAT SF=3 PS=21
*
INPUT /// 10T 'POR FAVOE ENTRE COM A MARCA DESEJADA:' #MARCA (AD=AIT'_')
*
F1.
FIND CARS WITH MAKE = #MARCA
COMPRESS YEAR MAKE MODEL INTO #CAR-TYPE
DISPLAY NOTITLE 5T ' '*COUNTER (UC= NL=3 AD=I) 'TIPO/DE/CARRO' #CAR-TYPE
'COR' COLOR 'IDENTIFICACAO/DO/REGISTRO'*ISN (NL=3)
END-FIND
*
END

297

Processamento Randmico

POR FAVOE ENTRE COM A MARCA DESEJADA: ____________________

TIPO

1
2
3
4
5
6
7
8
9
10
...

COR
IDENTIFICACAO
DE
CARRO
--------------------------------------1984
1982
1980
1980
1985
1985
1984
1982
1984
1984

FIAT
FIAT
FIAT
FIAT
FIAT
FIAT
FIAT
FIAT
FIAT
FIAT

PANDA
UNO
UNO
PANDA
UNO
PANDA 45
RITMO 75 CL
127 S
DINO
DINO
298

ROUGE
BLANCHE
CREME
ROUGE
GRISE
GELB
GRUEN-MET.
ROTBRAUN
BLUE
BLUE

DO
REGISTRO
------------5
9
10
17
105
176
177
178
312
341

Processamento Randmico

Instruo FINDSORTED BY
Lembre-se, quando usa-se a declarao FIND os registros
so retornados numa ordem qualquer. Voc pode controlar a
ordem em que os registros so retornados ao programa
usando a clausula SORTED BY. Com essa chave voc pode
definir at 3 campos chaves.
Exemplo:
FIND CARS WITH
MAKE ='BMW' THRU 'FORD'
SORTED BY COLOR
END-FIND

299

Processamento Randmico

Lembre-se!
Enquanto o FINDSORTED BY permite que voc
classifique os dados numa ordem especfica, ele pode,
por outro lado deixar o processamento de sua mquina
mais lento quando houver muitos arquivos para
classificar.
Outras opes para retornar os dados classificados
incluem o uso das declaraes READ LOGICAL ou
instrues de SORT.

300

Mtodos para Limitar o Processamento Randmico

Clausula WHERE
Com a clausula WHERE da declarao FIND voc pode
especificar um critrio de seleo adicional que avaliado
aps os registros terem sido lidos e antes que o
processamento seja executado no registro.

FIND EMPL WITH NAME = SMITH


WHERE SALARY(1) > 10000
END-FIND

301

Mtodos para Limitar o Processamento Randmico

Lembre-se!
Todo critrio que usa a clausula WHERE so
avaliados aps os registros terem sido lidos pelo DBMS
e antes que qualquer processamento seja executado.
Se um limitador definido junto com a declarao
FIND que contm a clausula WHERE, os registros
rejeitados como resultado da clausula WHERE no so
testados contra o limitador.
Evite usar a clausula WHERE em loops de
processamento contendo a declarao UPDATE ou
DELETE.
302

Mtodos para Limitar o Processamento Randmico


0010 ******************************************************************
0020 * EXEMPLO DO USO DO FIND COM CLAUSULA WHERE
0030 ******************************************************************
0040 DEFINE DATA LOCAL
0050 1 CARS VIEW OF VEHICLES
0060 2 MAKE
0070 2 MODEL
0080 2 COLOR
0090 2 YEAR
0100 1 #CAR-TYPE (A30)
0110 1 #MAKE
(A20)
0120 END-DEFINE
0130 *
0140 FORMAT SF=3 PS=20
0150 *
0160 INPUT /// 10T 'POR FAVOR ENTRE COM A MARCA DESEJADA:' #MAKE (AD=AIT'_')
0170 *
0180 F1.
0190 FIND CARS WITH MAKE = #MAKE
0200 WHERE YEAR = 1983
0210 COMPRESS YEAR MAKE MODEL INTO #CAR-TYPE
0220 DISPLAY NOTITLE 5T ' ' *COUNTER (UC= NL=3 AD=I)
0230
'TIPO/DE/CARRO' #CAR-TYPE
0240
'COR' COLOR
0250 END-FIND
0260 *
0270 END

303

Mtodos para Limitar o Processamento Randmico

POR FAVOR ENTRE COM A MARCA DESEJADA: ____________________

1
2
3
4
5
6
7
8
9
10

TIPO
DE
CARRO
------------------------------

----------

1983
1983
1983
1983
1983
1983
1983
1983
1983
1983

BLAU
METAL BL$
METAL GR$
WHITE
WHITE
WHITE
WHITE
YELLOW
YELLOW
BLUE

FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD

TRANSIT
FIESTA
ESCORT 1.3
ESCORT
ESCORT
ESCORT
ESCORT
ESCORT
ESCORT
ESCORT 1.3
304

COR

Mtodos Especiais de Acesso

Instruo FIND NUMBER


Apresenta o nmero de registros que passaram pelo critrio
de pesquisa sem a necessidade do fornecimento de dados
relativos aos campos. O resultado colocado na varivel
de sistema *NUMBER.

305

Mtodos Especiais de Acesso

Lembre-se!
FIND NUMBER uma declarao de acesso
randmico.
Nenhum registro do banco retornado com o seu
uso.
Essa declarao no inicia loop de
processamento, portanto no exige o END-FIND.
As clausulas WHERE, SORTED BY e IF NO
RECORDS FOUND no esto disponveis para ela.
Ela bem eficiente quando usada com um banco
do tipo relational-like.
306

Mtodos Especiais de Acesso

0010 ******************************************************************
0020 * EXEMPLO DO USO DO FIND NUMBER
0030 ******************************************************************
0040 DEFINE DATA LOCAL
0050 1 CARS VIEW OF VEHICLES
0060 2 MAKE
0070 2 MODEL
0080 2 COLOR
0120 END-DEFINE
0130 *
0160 INPUT /// 10T 'POR FAVOR ENTRE COM A MARCA DESEJADA:' #MAKE
(AD=AIT'_')
0170 *
0180 F1.
0190 FIND NUMBER CARS WITH MAKE = FORD
0200
AND COLOR = BLUE
0220 WRITE NOTITLE // 5T O numero de carros FORD azuis sao: *number
0270 END

O numero de carros FORD azuis so:

307

38

Mtodos Especiais de Acesso

Instruo HISTOGRAM
Essa declarao pode ser usada tanto para ler apenas os
valores de um campo do banco, como para determinar o
nmero de registros que passaram pelo critrio de
pesquisa definido.

308

Mtodos Especiais de Acesso

Lembre-se!
Deve-se incluir uma user view na declarao DEFINE
DATA que define somente o campo descritor atravs
do qual o HISTOGRAM se guiar.
Somente um descritor pode ser definido por
declarao HISTOGRAM.
Se a clausula WHERE estiver sendo usada, ela s
poder conter um critrio que utilize o mesmo descritor
de HISTOGRAM.
As clausulas STARTING FROM e ENDING AT esto
disponveis; assim como as variveis de sistema
*COUNTER e *NUMBER.
309

Mtodos Especiais de Acesso

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150

****************************************************************
* EXEMPLO DO USO DA DECLARACAO HISTOGRAM
****************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
END-DEFINE
*
H1. HISTOGRAM CARS FOR MAKE
DISPLAY NOTITLE 25T 'NBR' *NUMBER (NL=3) 2X MAKE
END-HISTOGRAM
*
WRITE // 20T 'NUMERO DE MARCAS DIFERENTES:' *COUNTER (H1.)
*
END

310

Mtodos Especiais de Acesso

Sada:
NBR
---3
3
29
25
37
57
29
1
10
1
16
...
15
16

MAKE
-------------------ALFA ROMEO
AMERICAN MOTOR
AUDI
AUSTIN
BMW
CHRYSLER
CITROEN
DAIHATSU
DATSUN
FERRARI
FIAT
VOLVO
VW
NUMERO DE MARCAS DIFERENTES:

311

45

Mtodos Especiais de Acesso

Instruo GET
usada para operaes que envolvem um nico registro.
Segue algumas caractersticas:
Retorna um registro do banco atravs de um ISN
conhecido. A varivel *ISN pode ser usada para fornecer o
valor do ISN, caso o registro tenha sido previamente
acessado.
O registro retornada atravs do GET pode ser colocado
em hold para um processamento posterior. Somente o
atual usurio pode atualizar o registro posto em hold.
uma forma eficiente de acessar um nico registro.
312

Mtodos Especiais de Acesso

Lembre-se!
Assim como a varivel de sistema *ISN, a
declarao GET no est disponvel para
todos os DBMS.

313

Mtodos Especiais de Acesso

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210

***********************************************************
* EXEMPLO DO USO DA DECLARACAO GET
***********************************************************
DEFINE DATA LOCAL
1 EMP VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 FIRST-NAME
2 JOB-TITLE
2 SALARY(1)
END-DEFINE
*
FORMAT PS=21
*
READ-ISN.
READ (5) EMP BY ISN
DISPLAY NOTITLE (SF=7) 8T'IDENTIFICACAO/DO/REGISTRO(ISN)' *ISN
PERSONNEL-ID 'NOME' NAME(AL=9)
'SALARIO' SALARY(1)
END-READ

314

Mtodos Especiais de Acesso

Continuao
0230
0240
0250
0260
0270
0280
0290
0300
0310
0320
0330
0340
0350

************************************************************************
* A VARIAVEL *ISN IRA CONTER O VALOR DO ISN DO ULTIMO REGISTRO ACESSADO
************************************************************************
*
GET EMP *ISN (READ-ISN.)
*
WRITE NOTITLE
/ 'O ULTIMO REGISTROLIDO FOI:' //
3X 'ISN:
' *ISN(AL=3 AD=L)/
3X 'PERSONNEL ID:' PERSONNEL-ID /
3X 'NOME:
' NAME /
*
END

315

Mtodos Especiais de Acesso

Sada:
IDENTIFICACAO
DO
REGISTRO(ISN)
------------1
2
3
4
5
O ULTIMO REGISTROLIDO FOI:
ISN:
5
PERSONNEL ID: 50004900
NOME:
CAOUDAL

316

PERSONNEL
ID

NOME

---------

---------

50005800
50005600
50005500
50005300
50004900

ADAM
MORENO
BLOND
MAIZIERE
CAOUDAL

SALARIO

---------159980
165810
172000
166900
167350

Usando Condies Lgicas

Expresses Lgicas
Ao definir os critrios de seleo nas declaraes READ ou
FIND, voc pode fazer uso de condies lgicas. Ou seja,
voc pode escolher um intervalo de valores para seus
dados tais como: salrios menores que $30.000 ou nome
igual a SMITH. Essas condies so introduzidas no
programa atravs das expresses lgicas, que classificamse em dois tipos:
Condies Simples,
Condies Mltiplas
317

Usando Condies Lgicas

Lembre-se!
Se voc estiver usando mais que uma
expresso lgica simples e/ou lgica
booleana, voc deveria usar um dos
seguintes conectores:
()
NOT
AND
OR
THRU
318

Usando Condies Lgicas

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190

************************************************************
* EXEMPLO DO FIND COM OPERADORES
************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 MODEL
2 COLOR
2 YEAR
END-DEFINE
*
FORMAT SF=3 PS=21
FIND CARS WITH (MAKE='FORD' OR='HONDA')
AND (COLOR ='BLUE' OR ='RED')
SORTED BY COLOR
DISPLAY NOTITLE MAKE MODEL COLOR YEAR
END-FIND
*
END

319

Usando Condies Lgicas

MAKE
--------------------

MODEL
--------------------

COLOR
----------

FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD
FORD

MERCURY
MERCURY
MERCURY
MERCURY
MUSTANG
GRANADA
MUSTANG
LTD
LTD
ORION 1.6
ORION 1.6
ORION 1.6
ORION 1.6
ORION 1.6
ORION 1.6
ORION 1.6
ORION 1.6
ORION 1.6

BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE
BLUE

320

GHIA
GHIA
GHIA
GHIA
GHIA
GHIA
GHIA
GHIA
GHIA

YEAR
----1982
1986
1982
1986
1984
1977
1977
1982
1982
1985
1985
1985
1985
1985
1985
1985
1986
1986

Usando Condies Lgicas

Instruo ACCEPT / REJECT


As instrues ACCEPT/REJECT so usadas para avaliar
os registros baseados no critrios lgico. Se os registros
satisfazem ao critrio ACCEPT, eles sero processados; se
satisfizerem ao critrio REJECT, no sero processados.
FIND EMPLOYEES
WITH JOB-TITLE ='DBA' OR='ADMINISTRATOR'
ACCEPT IF SEX ='M'
END-FIND
READ EMPLOYEES
BY JOB-TITLE WHERE JOB-TITLE='DBA' OR='ADMINISTRATOR'
REJECT IF SEX =F'
END-READ
321

Usando Condies Lgicas

Lembre-se!
Essas declaraes podem ser colocadas em
qualquer lugar no seu loop de processamento.
O campo usado para base de critrio pode
ser tanto descritor como no-descritor.
Se uma declarao LIMIT ou outra notao
de limite for definido para o loop de
processamento junto com ACCEPT e
REJECT, cada registro processado avaliado
contra o limite para ser aceito ou rejeitado.
322

Usando Condies Lgicas

Clausula IF NO RECORDS FOUND

Se dentro da instruo FIND nenhum registro satisfez ao


critrio de pesquisa, as declaraes dentro do loop de
processamento no sero executadas. Se esse for o caso,
voc pode utilizar a clausula IF NO RECORDS FOUND
para definir que processamento ser executado caso
nenhum registro seja encontrado.

323

Usando Condies Lgicas

0010 *********************************************************
0020 * EXEMPLO DA CLAUSULA IF NO RECORDS FOUND
0030 *********************************************************
0040 DEFINE DATA LOCAL
0050 1 EMPLOY-VIEW VIEW OF EMPLOYEES
0060 2 PERSONNEL-ID
0070 2 NAME
0080 1 #PERS-NR (A8)
0090 END-DEFINE
0100 *
0110 REPEAT
0120
INPUT 'ENTRE COM A IDENTIFICACAO DO FUNCIONARIO:' #PERS-NR
0130
IF #PERS-NR = ' '
0140
ESCAPE BOTTOM
0150
END-IF
0160
FIND EMPLOY-VIEW WITH PERSONNEL-ID = #PERS-NR
0170
IF NO RECORDS FOUND
0180
REINPUT 'NENHUM REGISTRO ENCONTRADO'
0190
END-NOREC
0200
DISPLAY NOTITLE NAME
0210 END-FIND
0220 END-REPEAT
0230 *
0240 END

324

Acesso Mltiplo-Arquivo

Acessando mais que um arquivo


At agora, temos recuperado dados armazenados em
apenas um arquivo. Entretanto, a maioria das aplicaes
acessam mais que um arquivo por banco. Esse processo
conhecido como coupling (acoplamento).
O acoplamento permite a extrao de dados de um arquivo,
baseado nos dados encontrados em outro arquivo. H trs
tipos de acoplamento:
Lgico;
Soft;
Fsico.
325

Acesso Mltiplo-Arquivo

Linhas Gerais
Para executar o acoplamento, deve existir um campo
chave comum em cada arquivo.
O acoplamento lgico uma tcnica de codificao em
Natural.
O acoplamento Soft executado pelo seu DBMS.

326

Acesso Mltiplo-Arquivo

Acoplamento Lgico

um processo que permite que voc leve vantagem do


relacionamento lgico entre dois ou mais arquivos, se
estiverem ou no acoplados fisicamente no DBMS. Com
essa caracterstica voc pode acessar dois ou mais arquivos
usando um campo descritor comum. Duas declaraes FIND
ou READ so usadas para acoplar arquivos logicamente
onde um loop interno montado para cada registro
selecionado no loop externo.

327

Acesso Mltiplo-Arquivo

0010 ************************************************************
0020 * EXEMPLO DE ACOPLAMENTO LOGICO
0030 ************************************************************
0040 DEFINE DATA LOCAL
0050 1 CARS VIEW OF VEHICLES
0060 2 MAKE
0070 2 PERSONNEL-ID
0080 2 MODEL
0090 2 COLOR
0100 *
0110 1 EMPL VIEW OF EMPLOYEES
0120 2 PERSONNEL-ID
0130 2 NAME
0140 2 FIRST-NAME
0150 END-DEFINE
0160 *
0170 FIND EMPL WITH NAME = 'JONES'
0180
FIND CARS WITH PERSONNEL-ID = EMPL.PERSONNEL-ID AND MAKE = 'FORD'
0190
DISPLAY PERSONNEL-ID MAKE (AL=10) MODEL (AL=10) COLOR *NUMBER
0200
FIRST-NAME (AL=10) NAME (AL=10)
0210
END-FIND
0220 END-FIND
0230 *
0240 END

328

Acesso Mltiplo-Arquivo

Sada:
PERSONNEL-ID
MAKE
MODEL
COLOR
NMBR
FIRST-NAME
NAME
------------ ---------- ---------- ---------- ----------- ---------- ---------20000800
30034233

FORD
FORD

ESCORT
BLACK
ESCORT 1.3 GREEN

329

1 LILLY
1 GREGORY

JONES
JONES

Acesso Mltiplo-Arquivo

Acoplamento Soft

O acoplamento soft est disponvel com declarao FIND e


pode ser emitida para criar loops aninhados onde o loop
interno criado para cada registro selecionado do loop
externo. Esta caracterstica permite que voc acesse um
arquivo baseado nos descritores a partir de dois arquivos que
possuem dados em comum.

330

Acesso Mltiplo-Arquivo
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
0230
0240

************************************************************
* EXEMPLO DE ACOPLAMENTO LOGICO
************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 MAKE
2 PERSONNEL-ID
2 MODEL
2 COLOR
*
1 EMPL VIEW OF EMPLOYEES
2 PERSONNEL-ID
2 NAME
2 FIRST-NAME
END-DEFINE
*
FIND CARS WITH MAKE = FORD AND COUPLED TO EMPL
VIA PERSONNEL-ID = PERSONNEL-ID WITH NAME= 'JONES'
DISPLAY PERSONNEL-ID MAKE MODEL) COLOR *NUMBER
END-FIND
*
END
331

Acesso Mltiplo-Arquivo

PERSONNEL-ID
MAKE
MODEL
COLOR
NMBR
------------ -------------------- -------------------- ---------- ----------20000800

FORD

ESCORT

BLACK

30034233

FORD

ESCORT 1.3

GREEN

332

MDULO VI - Relatrios

Unidade A - Criao de Relatrios


-

Instrues Display e WRITE


Exibio de atributos
Parmetros de sesso
Controle de sada para relatrios
WRITE TITLE e WRITE TRAILLER
AT TOP OF PAGE e AT END OF PAGE
Declarao PRINT

333

Instrues DISPLAY e WRITE

Display
Produz uma sada em formato de coluna onde cada coluna
representada pelo valor do campo. A ordem de exibio segue
a seqncia na qual os campos so definidos. Alm disso,
possui um cabealho (title), que consiste do nmero da pgina,
hora e data.
Sintaxe
DISPLAY [(rep)] [NOTITLE] [NOHDR] [parmetros] {elemento de sada
[/]}
elemento de sada = [{ nX, nT}] [{=, text, c(n)}] [=]
operando 1 [(parmetros)]

334

Instrues DISPLAY E WRITE

Recursos Adicionais - Display


- Controle de relatrio escrito;
- Controle de ttulos e cabealhos automticos;
- Sobreposio de cabealhos de campos d DDM;
- Insero de caracteres em frente ao campo.
- A barra provoca o avano de linha dentro da coluna
especificada.
- Somente a primeira instruo DISPLAY tem controle do
ttulo e cabealho.
335

Instrues DISPLAY e WRITE

Write
Produz uma sada em formato livre. Quando o tamanho do
texto no couber na linha definida h um avano automtico
para a linha seguinte. No possui cabealhos automticos.
Sintaxe
WRITE [(rep)] [NOTITLE] [{nX, nT, x/y}] [{{text, c(n)}, =,
/}] operando 1

Os ttulos da pgina so gerados, exceto quando


suprimidos.
336

Instrues DISPLAY e WRITE

Caractersticas

DISPLAY

WRITE

Coluna

Linha

Imprime ttulos das pginas automaticamente

Sim

Sim

Imprime cabealhos automaticamente

Sim

No

Estouro de linha permitido

No

Sim

Orientao da sada

Espao permitido para os campos no relatrio

Determinado pelo
campo maior cabealho ou o
prprio campo.

337

Determinado pelo
tamanho do campo.

Instrues DISPLAY e WRITE

Caractersticas

DISPLAY

WRITE

Controlado pelo
parmetro
Spacing Factor,
mas pode ser
sobreposto pelas
notaes nX e
nT. O padro
um espao.

Para obter mais que


um espao deve-se
usar a notao nX,
nT, ou x/y.

Uso da barra /

Pula uma linha


dentro da prpria
coluna

Inicia uma nova linha


a partir da margem
esquerda

Impresso de Arrays

Lista verticalmente Lista horizontalmente


na coluna
atravs da linha.

Espao entre os campos

338

Exibio de atributos

Parmetro AD
Controla a forma na qual os campos so exibidos.
Representao (normal, intensificado, etc);
Alinhamento (esquerda, direita, zeros)
Caracteres (maisculos, minsculos, misturados).
Parmetro CD
Define a cor na qual os campos so exibidos
. Exemplo:
DISPLAY NAME (AD=I CD=YE) HOME TOWN(AD=I CD=BL) CITY(AD=DR)
WRITE THE NUMBER OF CARS: (AD=I) #CNT (CD=RE AD=IL)
339

Parmetros de Sesso

Parmetros

Cdigos

Valores

Disponvel p/
declarao(es)

LS

Line Size

10-250

DISPLAY e WRITE

10-250

DISPLAY e WRITE

1-30

DISPLAY

Default=tamanho do dispositivo
PS

Page Size
Default=tamanho do dispositivo

SF

Spacing Factor

default=1

AL

Alphanumeric Length

1-tamanho da
linha

DISPLAY e WRITE

NL

Numeric Length

1-tamanho da
linha

DISPLAY e WRITE

340

Parmetros de Sesso

Cdigos

Parmetros

Valores

Disponvel p/
declarao(es)

HC

Header Centering

Center, Left, e
Rigth

DISPLAY

default=center
FC

GC

UC

Filler Character

Qualquer caracter
default=branco
Qualquer caracter

Filler character for group headers


Underlining character

DISPLAY

DISPLAY

default=branco
Qualquer caracter

DISPLAY

default=hfen
DF

Date Format

S - ano com 2 dg.


I - ano com 4 dg.

341

DISPLAY e WRITE

Parmetros de Sesso

Cdigos

Parmetros

Valores

Disponvel p/
declarao(es)

IS

Identical Supress

ON/OFF

DISPLAY, WRITE,
FORMAT

default=ON
ES

Supresso de linhas em branco

342

ON/OFF
default=OFF

DISPLAY, WRITE,
FORMAT

Parmetros de Sesso

FIELD LEVEL

Hierrquia:

STATEMENT LEVEL

PROGRAM LEVEL

SESSION LEVEL

SYSTEM LEVEL
343

Controle de Sada para Relatrios

*LINE-COUNT
Indica a linha atual contida na pgina do relatrio;
Um contador separado mantido para cada relatrio
grado pelo programa;
O valor desse contador atualizado durante a execuo
das declaraes WRITE, SKIP, DISPLAY, PRINT ou INPUT;
As instrues NEWPAGE e EJECT limpam esse valor.
Seu formato/tamanho P5 e seu contedo no pode ser
modificado.
344

Controle de Sada para Relatrios

*PAGE-NUMBER
Indica o nmero da pgina atual do relatrio;
Um contador separado mantido para cada relatrio grado
pelo programa;
Um programa Natural pode modificar essa varivel;
O seu valor atualizado durante a execuo das
declaraes WRITE, SKIP, DISPLAY ou NEWPAGE;
A declarao EJECT no provoca a atualizao do
contador;
Seu formato/tamanho P5.
345

Controle de Sada para Relatrios

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190

************************************************************************
** ILUSTRA O USO DAS VARIAVEIS DE SISTEMA *PAGE-NUMER E *LINE-COUNT
************************************************************************
DEFINE DATA
LOCAL USING LOC1
EM-DEFINE
*
WRITE TITLE 'PAGE:'*PAGE-NUMBER (AD=L) 70T *DAT4E //
'********************** RELATORIO DE CARROS ********************' (AD=I)
SKIP 1
READ CARS BY MAKE
IF *LINE-COUNT GT 21 THEN
NEWPAGE
/* NEWPAGE RESETS *LINE-COUNT
END-IF
DISPLAY (HC=L) 15X 'MARCA E MODELO' (AD=I) MAKE / ' ' MODEL
10X 'COR DO CARRO E' (AD=I) COLOR / 'MODELO DO ANO' (AD=I) YEAR
SKIP 1
END-READ
END

346

Controle de Sada para Relatrios

Sada:
PAGE: 1

05/02/2003
********************** RELATORIO DE CARROS ********************
MARCA E MODELO
--------------------

COR DO CARRO E
MODELO DO ANO
--------------

ALFA ROMEO
GIULIETTA 2.0

VERMELHO
1985

ALFA ROMEO
SPRINT GRAND PRIX

ROT
1984

ALFA ROMEO
QUADRIFOGLIO

BLAU-MET.
1984

AMERICAN MOTOR
HORNET

YELLOW
1977

347

Controle de Sada para Relatrios

EJECT
Provoca um avano de pgina sem a impresso dos ttulos e
cabealhos. freqentemente usada com uma condio
que avalia o nmero de linhas a vencer na pgina.

EJECT (rep.)
Se voc est produzindo vrios relatrios, o repositrio de
relatrio (rep) pode ser usado para identificar a que relatrio
pertence a declarao EJECT.
348

Controle de Sada para Relatrios

NEWPAGE
Provoca um avano de pgina com a impresso dos ttulos e
cabealhos. Se EJECT ou NEWPAGE no forem usadas, o
avano de pgina controlado automaticamente pelo
parmetro de sesso Natural Page Size (PS).

SKIP
Gera uma ou mais linhas em branco. Voc pode definir o
nmero de linhas em branco que sero introduzidas. Essa
declarao no executada dentro da condio AT-TOPOF-PAGE.
349

Controle de Sada para Relatrios

Exemplo: EJECT
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190

************************************************************************
* ILUSTRA O USO DA DECLARACAO EJECT
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 CITY
2 DEPARTMENT
END-DEFINE
*
FORMAT PS=10
READ VIEWEMP BY CITY STARTING FROM 'ARLINGTON'
DISPLAY NOTITLE 'LOCALIZACAO' CITY (IS=ON) NAME 'DEPT' DEPARTMENT
SKIP 1
AT BREAK OF CITY
EJECT
END-BREAK
END-READ
END

350

Controle de Sada para Relatrios

Sada:
Page

03-02-0514:50:23

LOCALIZACAO
NAME
DEPT
-------------------- -------------------- ---ARLINGTON

LORIE

TECH

ELLIOT

SALE

BRANDIN

MGMT

ASHBOURNE

351

DALE

PROD

BURTON

TECH

Controle de Sada para Relatrios

Exemplo: NEWPAGE
Page

03-02-05

14:45:12

03-02-05

14:47:43

LOCALIZACAO
NAME
DEPT
-------------------- -------------------- ---ARLINGTON

Page

LORIE

TECH

ELLIOT

SALE

BRANDIN

MGMT

LOCALIZACAO
NAME
DEPT
-------------------- -------------------- ---ASHBOURNE

DALE

PROD

BURTON

TECH

352

Instruo WRITE TITLE

Essa declarao pode ser usada somente uma vez em


cada relatrio;
A opo SKIP faz com que as linhas sejam saltadas logo
aps o ttulo;
Como padro o ttulo centralizado e no-sublinhado.
Exemplo:
WRITE TITLE SAME TITLE
/ PAGE: *PAGE-NUMBER (AD=L)
SKIP 2
WRITE (5) TITLE REPORT NUMBER 5
/ *DATU
/ PAGE: *PAGE-NUMBER (5)
353

Instruo WRITE TRAILER

Essa declarao pode ser usada somente uma vez em


cada relatrio;
A instruo executada sempre que o Natural detecta o
fim da pgina devido a uma instruo DISPLAY, WRITE,
SKIP ou NEWPAGE;
O tamanho lgico da pgina (PS) deve ser menor que o
tamanho fsico para que as informaes de rodap
apaream. Exemplo:
WRITE (3) TRAILER LEFT JUSTIFIED
50T RUNNING TOTAL: #TOTAL
SKIP 2
WRITE TRAILER *PAGE-NUMBER
354

Exemplo

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210

************************************************************************
* ILUSTRA O SUO DA DECLARACAO WRITE TITLE E WRITE TRAILER
************************************************************************
DEFINE DATA
LOCAL
1 #CNT
(N2)
1 #REG-NUM (A20)
1 CARS VIEW OF VEHICLES
2 REG-NUM
2 MAKE
2 MODEL
2 COLOR
2 YEAR
END-DEFINE
*
FORMAT PS=20
WRITE TITLE UNDERLINED 1T *DAT4E 70T *TIMX
/ 'SISTEMA DE WORKSHOP - RELATORIO'
SKIP 1
WRITE TRAILER / '-' (79)
'PAGE:' *PAGE-NUMBER (AD=L)

355

Exemplo

0220
0230
0240
0250
0260
0270
0280
0290
0300
0310
0320

INPUT MARK *#CNT


//// 7T 'ENTRE COM O VALOR INICIAL'
// 7T 'E O NUMERO DE REGISTROS A SEREM LIDOS NO ARQUIVO DE VEICULOS'
/// 9T 'NUMERO DO REGISTRO INICIAL:' #REG-NUM (AD=AIT'_')
/// 9T 'NUMERO DE REGISTROS:
'#CNT (AD=AIT'_')
R1. READ (#CNT) CARS BY REG-NUM STARTING FROM #REG-NUM
DISPLAY 7T 'REGISTRO' REG-NUM MAKE MODEL 'ANO' YEAR
END-READ
WRITE
// 'O NUMERO TOTAL DE REGISTROS PROCESSADOS:' *COUNTER (R1.)
END

356

Exemplo

Sada:

ENTRE COM O VALOR INICIAL


E O NUMERO DE REGISTROS A SEREM LIDOS NO ARQUIVO DE VEICULOS

NUMERO DO REGISTRO INICIAL: ____________________

NUMERO DE REGISTROS:

357

22___

Exemplo

05/02/2003

18:01:28

SISTEMA DE WORKSHOP - RELATORIO


----------------------------------------------------------------------------REGISTRO
MAKE
MODEL
ANO
--------------- -------------------- -------------------- ----A-C 712
A-KS 731
ABC 345X
ABY 449Z
ACD 897X
ADF 367Y
ADF 567Y
AFG 456Y
AFG 563Y
AIC-H 334
ARS 668X
ASD 536X
A112 DDD

CITROEN
ALFA ROMEO
AUSTIN
TALBOT
AUSTIN
LADA
CITROEN
VAUXHALL
VAUXHALL
AUDI
AUSTIN
AUSTIN
VAUXHALL

BX LEADER
SPRINT GRAND PRIX
MINI
SOLARA
MINI
RIVA
CV2
ASTRA 1.3
CHEVETTE
90 QUATTRO
MINI
MINI
ASTRA 1.3

1985
1984
1980
1983
1980
1982
1982
1982
1982
1984
1981
1981
1984

---------------------------------------------------------------------------PAGE:
1

358

Exemplo

05/02/2003

18:05:13
SISTEMA DE WORKSHOP - RELATORIO
-----------------------------------------------------------------------------REGISTRO
MAKE
MODEL
ANO
--------------- -------------------- -------------------- ----A567
A567
A612
A632
A654
A654
A655
A657
A665

EGH
VVF
CGH
DGH
BUN
YHR
FGH
ERB
TAT

VAUXHALL
VAUXHALL
FORD
FORD
CITROEN
VAUXHALL
FORD
VAUXHALL
FORD

O NUMERO TOTAL DE REGISTROS PROCESSADOS:

NOVA
NOVA
ESCORT 1.3
FIESTA
PALLAS
CAVALIER
ESCORT 1.3
ASTRA 1.3
ORION 1.6

1983
1983
1984
1984
1983
1983
1983
1983
1983

22

-----------------------------------------------------------------------------PAGE:
2

359

AT TOP OF PAGE / AT END OF PAGE

AT TOP OF PAGE
Executa um processamento quando uma nova pgina
iniciada. Essa declarao executada quando o tamanho
lgico da pgina encontrado ou devido a uma instruo
NEWPAGE. A sada impressa uma linha abaixo do ttulo.
AT END OF PAGE
Executa um processamento quando o fim da pgina
detectado ou devido a instruo SKIP, NEWPAGE. A
checagem do fim da pgina feita aps o processamento
das instrues DISPLAY ou WRITE. A sada impressa
aps qualquer informao de rodap.
360

AT TOP OF PAGE / AT END OF PAGE

EXEMPLO:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200

************************************************************************
* ILUSTRA O USO DA INSTRUCAO AT TOP OF PAGE E AT END OF PAGE
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 CITY
END-DEFINE
*
WRITE TITLE '**********TITULO*************'
SKIP 2
WRITE TRAILER '*********RODAPE*************'
*
AT TOP OF PAGE
WRITE ' ESTE EH O LUGAR ONDE EH IMPRESSO O TOPO DA PAGINA'
END-TOPPAGE
AT END OF PAGE
WRITE ' ESTE EH O LUGAR ONDE EH IMPRESSO O FIM DA PAGINA'
END-ENDPAGE
361

AT TOP OF PAGE / AT END OF PAGE

0210
0220
0230
0240
0250
0260
0270
0280
0290
0300
0310

*
READ (10) VIEWEMP BY NAME
AT START OF DATA
WRITE ' INICIO DOS DADOS...'
END-START
DISPLAY NAME FIRST-NAME CITY
AT END OF DATA
WRITE ' FIM DOS DADOS'
END-ENDDATA
END-READ
END

362

AT TOP OF PAGE / AT END OF PAGE

**********TITULO*************

ESTE EH O LUGAR ONDE EH IMPRESSO O TOPO DA PAGINA


NAME
FIRST-NAME
CITY
-------------------- -------------------- -------------------INICIO DOS DADOS...

ABELLAN
ACHIESON
ADAM
ADKINSON
ADKINSON
FIM DOS DADOS

KEPA
ROBERT
SIMONE
PHYLLIS
HAZEL

MADRID
DERBY
JOIGNY
BEVERLEY HILLS
NEW YORK

*********RODAPE*************
ESTE EH O LUGAR ONDE EH IMPRESSO O FIM DA PAGINA

363

Instruo PRINT

Produz a sada de relatrios em formato livre. Assemelha-se


instruo WRITE, mas diferente em funo de 3
aspectos:
Zeros a esquerda e brancos desnecessrios so
suprimidos;
A impresso de cada campo feita de acordo com o
tamanho do valor campo;
Se o tamanho da linha excedido, a impresso
continuar na prxima linha.

364

Instruo PRINT

Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170

************************************************************************
** ILUSTRA O USO DA DECLARACAO PRINT
************************************************************************
DEFINE DATA LOCAL
1 VIEWEMP VIEW OF EMPLOYEES
2 NAME
2 FIRST-NAME
2 JOB-TITLE
END-DEFINE
*
READ (4) VIEWEMP BY NAME STARTING FROM 'A'
WRITE NOTITLE /
'EXEMPLO DO WRITE =' NAME 'TRABALHA COMO UM ' JOB-TITLE
PRINT
'EXEMPLO DO PRINT =' NAME 'TRABALHA COMO UM ' JOB-TITLE
END-READ
END

365

Instruo PRINT

Sada:
EXEMPLO DO WRITE = ABELLAN
TRABALHA COMO UM
MAQUINISTA
EXEMPLO DO PRINT = ABELLAN TRABALHA COMO UM MAQUINISTA
EXEMPLO DO WRITE = ACHIESON
TRABALHA COMO UM
DATA BASE ADMINISTRATOR
EXEMPLO DO PRINT = ACHIESON TRABALHA COMO UM DATA BASE ADMINISTRATOR
EXEMPLO DO WRITE = ADAM
TRABALHA COMO UM
CHEF DE SERVICE
EXEMPLO DO PRINT = ADAM TRABALHA COMO UM CHEF DE SERVICE
EXEMPLO DO WRITE = ADKINSON
TRABALHA COMO UM
DBA
EXEMPLO DO PRINT = ADKINSON TRABALHA COMO UM DBA

366

MDULO VI - Relatrios

Unidade B - Agrupando os dados de sada


-

Instruo SORT
Processamento de quebra automtico
Instrues de quebra
Funes do Sistema

367

Instruo SORT

Executa uma operao de classificao nos registros. O uso


do programa de classificao online do Natural possui uma
limitao quanto ao tamanho do buffer sort da user work
area. Essa declarao possui as seguinte clausulas:
Clausula
BY

Descrio
Especifica at 10 campos de classificao.

USING

Indica quais campos escrever para um armazenamento intermedirio


alm dos campos classificados. Se nenhum campo adicional for
solicitado, a clausula USING KEYS deve ser definida.

GIVE

Define qualquer funo do sistema Natural a ser avaliada no SORT.

368

Instruo SORT

Lembre-se!
Antes de usar a declarao SORT, voc deve fechar
todos os processamentos de loop com a clausula ENDALL;
Voc deve definir at 10 campos de classificao. Cada
campo pode ser classificado em ordem ascendente ou
descendente;
Campos de classificao podem ser variveis definidas
pelo usurio ou campos do banco, sendo escritores ou
no;
A declarao SORT inicia seu prprio processamento
de loop e termina com a declarao END-SORT;
Para processar um nmero grande de registros use o
processamento batch.
369

Instruo SORT

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170

***********************************************************************
* ILUSTRA O USO DA DECLARACAO SORT
***********************************************************************
DEFINE DATA LOCAL
1 EMPVIEW VIEW OF EMPLOYEES
2 NAME
2 JOB-TITLE
2 CITY
2 DEPT
END-DEFINE
*
FIND EMPVIEW WITH DEPT = 'TECH10'
END-ALL
SORT BY CITY NAME USING JOB-TITLE
DISPLAY NOTITLE CITY (IS=ON) NAME JOB-TITLE
END-SORT
END

370

Instruo SORT

CITY

CURRENT
POSITION
-------------------- -------------------- ------------------------ALBUQUERQUE
ANN ARBER
ARGONNE
ARLINGTON
AUSTIN
BALTIMORE
BEDFORD
BERKELEY
BEVERLEY HILLS
BIRMINGHAM
BOSTON
BOULDER
BUFFALO
CAMDEN

NAME

LINCOLN
MARON
ROLLING
LORIE
HALL
ALEXANDER
ZINN
BONNER
SMITH
ADKINSON
GUTENBERG
PERREAULT
STANWOOD
DAY
CHU
FORRESTER
JONES
371

ANALYST
ANALYST
DBA
PROGRAMMER
ANALYST
PROGRAMMER
PROGRAMMER
ANALYST
ANALYST
DBA
ANALYST
PROGRAMMER
PROGRAMMER
PROGRAMMER
ANALYST
PROGRAMMER
DBA

Processamento de quebra automtico

AT START OF DATA
Define o processamento que ir ser executado logo aps a
leitura do primeiro registro. Essa declarao deve estar
dentro de um loop de processamento. Exemplo:
READ VIEW-NAME
AT START OF DATA
(PROCESSING STATEMENTS)
END-START
END-READ

372

Processamento de quebra automtico

AT END OF DATA
Define o processamento que ir ser executado logo aps
todos os registros do loop de processamento terem sido
processados. Essa declarao deve estar dentro de um loop
de processamento. Exemplo:
READ VIEW-NAME
AT END OF DATA
(PROCESSING STATEMENTS)
END-ENDDATA
END-READ
373

Processamento de quebra automtico

AT BREAK
Define um processamento a ser executado sempre que um
controle de quebra ocorrer; ou seja, sempre que o valor de
um campo definido para essa declarao muda. Geralmente
esses campos so campos do banco. Exemplo:
READ VIEW-NAME
AT BREAK OF DEPT
(PROCESSING STATEMENTS)
END-BREAK
END-READ
374

Processamento de quebra automtico

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200

************************************************************************
** ILUSTRA O USO DA DECLARACAO AT BREAK
************************************************************************
DEFINE DATA LOCAL
1 EMP VIEW OF EMPLOYEES
2 FIRST-NAME
2 NAME
2 DEPT
2 REDEFINE DEPT
3 #DEPT (A4)
END-DEFINE
FORMAT PS=21
READ (20) EMP
END-ALL
SORT BY DEPT USING FIRST-NAME NAME
NEWPAGE LESS THAN 5
DISPLAY (AL=15) DEPT FIRST-NAME NAME
AT BREAK DEPT /4/
NEWPAGE LESS THAN 4
PRINT (AD=L) // '-' (79)

375

Processamento de quebra automtico

0210
/ 'NO DEPT: ' OLD(#DEPT) 'HA ' COUNT(DEPT) 'PESSOAS'
0220
SKIP 3
0230
END-BREAK
0240
AT END OF DATA
0250
PRINT (AD=L) / '-' (79)
0260
/ 'ESTATISTICAS FINAIS: HA ' COUNT (NAME) 'PESSOAS'
0270
END-ENDDATA
0280 END-SORT
0290 END

376

Processamento de quebra automtico

Sada:

DEPARTMENT
FIRST-NAME
NAME
CODE
--------------- --------------- --------------COMP01
COMP02
COMP70
COMP70
COMP73

MICHEL
LOUIS
PATRICK
MARC
ANDRE

HEURTEBISE
D'AGOSTINO
BAILLET
LEROUGE
GRUMBACH

-------------------------------------------------------------NO DEPT: COMP HA 5 PESSOAS

377

Processamento de quebra automtico

Sada:
DEPARTMENT
FIRST-NAME
NAME
CODE
--------------- --------------- --------------FINA01

DANIEL

JOUSSELIN

------------------------------------------------------NO DEPT: FINA HA 1 PESSOAS

MARK06

JEAN-MARIE

MARX

------------------------------------------------------NO DEPT: MARK HA 1 PESSOAS

378

Processamento de quebra automtico


DEPARTMENT
FIRST-NAME
NAME
CODE
--------------- --------------- --------------VENT01
JEAN
MONTASSIER
VENT02
ROBERT
CHAPUIS
VENT03
BERNARD
VAUZELLE
VENT04
MICHELE
GUERIN
VENT05
BERNARD
VERDIE
VENT06
ALBERT
CAOUDAL
VENT07
HUMBERTO
MORENO
VENT27
PAUL
GUELIN
VENT29
JACQUELINE
REIGNARD
VENT30
JEAN-CLAUDE
REISKEIM
VENT54
ELISABETH
MAIZIERE
DEPARTMENT
FIRST-NAME
NAME
CODE
--------------- --------------- --------------VENT56
VENT59

ALEXANDRE
SIMONE

BLOND
ADAM

--------------------------------------------------NO DEPT: VENT HA 13 PESSOAS


--------------------------------------------------ESTATISTICAS FINAIS: HA 20 PESSOAS

379

Processamento de quebra automtico

BEFORE BREAK
Define as instrues a serem executadas antes do controle
de quebra, ou seja, antes do valor do campo ser avaliado
independente da posio que ocupa no loop. Exemplo:
READ VIEW-NAME
BEFORE BREAK PROCESSING
(PROCESSING STATEMENTS)
END-BEFORE
END-READ

380

Processamento de quebra automtico

0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190
0200
0210
0220

************************************************************************
* ILUSTRA O USO DA DECLARACAO BEFORE BREAK PROCESSING
************************************************************************
DEFINE DATA LOCAL
1 EMP VIEW OF EMPLOYEES
2 CITY
2 COUNTRY
2 JOB-TITLE
2 SALARY (1)
1 #LOCATION (A20)
END-DEFINE
FORMAT SF=3
READ (10) EMP
BY CITY WHERE COUNTRY ='USA'
BEFORE BREAK PROCESSING
COMPRESS CITY 'USA' INTO #LOCATION
END-BEFORE
DISPLAY (HC=L) 'LOCATION' #LOCATION JOB-TITLE SALARY(1) (AD=L)
AT BREAK OF #LOCATION
SKIP 1
END-BREAK
END-READ
END
381

Processamento de quebra automtico

Sada:
LOCATION
--------------------

CURRENT
POSITION
-------------------------

ANNUAL
SALARY
----------

ALBUQUERQUE
ALBUQUERQUE
ALBUQUERQUE
ALBUQUERQUE

SECRETARY
MANAGER
MANAGER
ANALYST

22000
34000
34000
41000

ANN ARBER USA


ANN ARBER USA
ANN ARBER USA

MANAGER
SALES PERSON
ANALYST

36000
30000
43000

ARGONNE USA
ARGONNE USA

SECRETARY
DBA

16000
41500

ARLINGTON USA

PROGRAMMER

35000

USA
USA
USA
USA

382

Funes do Sistema

Informaes padronizadas de quebra de nvel


O sistema de funes Natural so um conjunto de funes
estatsticas e matemticas que podem ser aplicadas aos
dados aps o processamento dos registros e antes que a
quebra seja avaliada.
Essas funes s podem ser definidas nas declaraes
WRITE, DISPLAY, PRINT, COMPUTE ou MOVE que
estejam codificadas dentro de blocos de processamento de
quebra de nvel.

383

Processamento de quebra automtico

Funo do sistema
AVER
NAVER

Retorna essa informao


Mdia de todos os valores para um campo.
Mdia de todos os valores para um campo, com exceo dos nulos.

MAX

Valor mximo de um campo.

MIN

Valor mnimo de um campo.

NMIN

Valor mnimo de campo, com exceo dos nulos.

OLD

Valor mais antigo do campo.

SUM

Soma de todos os valores do campo.

TOTAL

Valor total de todos os campos.

384

Processamento de quebra automtico

Funo do sistema
COUNT
NCOUNT

Retorna essa informao


Nmero de passagens pelo processamento de loop.
Nmero de passagens pelo processamento de loop, com exceo
dos nulos.

385

MDULO VII - Mapas de Help e Helprotinas

Mapas de Help e Helprotinas


-

Criando Mapas de Help


Criando Helprotinas
Janelas Pop-Up
Como as Helprotinas passam os dados

386

Criando Mapas de Help

O mapa de help um mapa Natural cuja funo dar ao


usurio uma explicao sobre a tela em uso. Geralmente
contm textos explicativos, embora seja possvel incluir
campos de entrada e/ou sada.
- Voc pode ligar um help ao mapa inteiro (map level help);
- Ou, ligar o help a um campo particular (field level help).
Quando um help solicitado para um campo e esse no tem
help definido, o Natural exibe o help definido em nvel de
mapa.
387

Criando Mapas de Help

Parmetro HE
Em nvel de mapa, basta fornecer o nome do objeto na tela
de profile do mapa. Em nvel de campo, basta fazer o
mesmo na tela de edio do campo. O nome do objeto deve
estar entre apstrofes. Exemplo: HE=XXXHH1.
Em vez de definir o nome do objeto , voc pode usar uma
varivel alfanumrica que contenha o nome do objeto (ex.:
#HELP-OBJ). Nesse caso no necessrio o uso de
apstrofes.

388

Criando Mapas de Help

Os objetos do tipo help que voc criou podem ser chamados


tanto pelo usurio como pelo programa.
Controle do usurio
O usurio pode solicitar um help digitando uma marca em
determinada posio do campo, no mapa; ou pressionando
uma tecla chave que ative o HELP (ex.: PF1).
Controle do Programa
O programador pode definir a instruo REINPUT USING
HELP para solicitar o help. Exemplo:
IF &= THEN
REINPUT USING HELP MARK *&
END-IF
389

Criando Mapas de Help

DATA: 04/02/2003
HORA: 12:49

MAPA: DIAMIAE
PROGRAMA: DIAPINC

INCLUSAO
___________________________________________________________________________

CODIGO:
SOBRENOME:
CIDADE:
CARGO:

SALARIO
_________

1111
Santos______________ NOME: Paula_______________
?___________________
_
ESCOLHA A CIDADE

BONUS
________
_________

1
2
3
4
5

ARARAQUARA
ITU
POA
PINDAMONHANGABA
SANTANA DO PARNAIBA
OPCAO: _
_________

SALARIO
_________

BONUS
_________
_________

____________________________________________________________________________
PF3 - ENCERRA
PF5 - MENU
390

Criando Mapas de Help

DATA: 04/02/2003
HORA: 12:53

MAPA: DIAMIAE
PROGRAMA: DIAPINC

INCLUSAO
_____________________________________________________________________________

CODIGO:
SOBRENOME:
CIDADE:
CARGO:

SALARIO
_________

1111
SANTOS______________ NOME: PAULA_______________
ARARAQUARA__________
?________________________
SELECIONE O CARGO COM 'X'

BONUS
________
_________

_
_
_
_
_

ACCOUNTANT
ACCOUNTING
ACCOUNTING
ACCOUNTING
ADMIN.BASE

ASSISTANT
CLERK
MANAGER
DE DATOS

_________

SALARIO
_________

BONUS
_________
_________

_______________________________________________________________________________
PF3 - ENCERRA
PF5 - MENU
391

Criando Helprotinas

As helprotinas so helps iterativos pois auxiliam os usurios


a decidir o que colocar na tela. Elas s podem ser chamadas
a partir dos mapas. Elas oferecem ao usurio mltiplas telas
de help, com a possibilidade de escolha de dados e com a
opo de dispor as informaes em janelas.
As helprotinas podem ser definidas no programa, em nvel
de declarao e campo; e no mapa, em nvel de mapa e
campo.

392

Criando Helprotinas

************************************************************************
0020 * DESCRICAO: ROTINA DE AUXILIO PARA A ESCOLHA DO CAMPO CIDADE
0030 * PROGRAMA : DIAHH1
0040 * MAPAS
: DIAMIAE, DIAMH1
0050 * DATA
: 04/06/2001
AUTOR: DIANA PATRICIA
0060
************************************************************************
0070 DEFINE DATA
0080 PARAMETER
0090 1 #CIDADE-ESCOLHIDA (A20)
0100 LOCAL
0110 1 #OPT
(N1)
0120 1 #I
(I1)
0130 1 #CIDADE (A20/5) INIT (1) <'ARARAQUARA'>
0140
(2) <'ITU'>
0150
(3) <'POA'>
0160
(4) <'PINDAMONHANGABA'>
0170
(5) <'SANTANA DO PARNAIBA'>
0180 END-DEFINE
0190 DEFINE WINDOW HELP
0200 SIZE AUTO

393

Criando Helprotinas

0210
0220
0230
0240
0250
0260
0270
0280
0290

BASE CURSOR
TITLE 'ESCOLHA A CIDADE'
CONTROL WINDOW
FRAMED ON
INPUT WINDOW ='HELP' USING MAP 'DIAMH1'
IF NOT (#OPT=0 OR #OPT GT 5)
MOVE #CIDADE(#OPT) TO #CIDADE-ESCOLHIDA
END-IF
END

394

Janelas Pop-Up

Uma janela um segmento de uma pgina lgica,


construda por um programa, exibida na tela do usurio. O
tamanho da janela pode ser definido pelo clausula SIZE da
declarao DEFINE WINDOW.
Essa declarao usada para definir o tamanho, a posio,
e os atributos da janela. Exemplo:
DEFINE WINDOW NICE-WIN
SIZE AUTO
BASE CURSOR
TITLE A NICE WINDOW
CONTROL WINDOW
FRAMED ON
395

Janelas Pop-Up

A instruo DEFINE WINDOW no ativa a janela, apenas


define. Para ativar a janela usa-se a clausula SET WINDOW
ou a clausula WINDOW da declarao INPUT.Exemplo:
INPUT WINDOW = WINDOW-NAME
INPUT WINDOW = WINDOW-NAME USING MAP MAP-NAME

396

Como as Helprotinas passam dados

As help rotinas s podem acessar a GDA corrente. Mas, os


dados podem ser passados via parmetros. Uma help rotina
pode ter at 20 parmetros explcitos e um implcito.
Parmetro explcito
HE=MYHELP, #HELPME

Parmetro implcito
INPUT #A (A5) (HE=YOURHELP,#HELPME)

397

Como as Helprotinas passam dados

Lembre-se!
Quando um help chamado, a help rotina chamada
antes dos dados serem passados da tela para rea de
dados. Isto significa que as help rotinas no podem
acessar os dados de entrada dentro da mesma
transao de tela.
Uma vez completo o processamento de help, os
dados da tela so atualizados. Qualquer campo
modificado por uma rotina de help atualizado (com
exceo dos campos modificados pelos usurios antes
da chamada da help rotina).

398

MDULO VIII Atualizao a Base de Dados

Atualizando a Base de Dados


-

Store, Update e Delete


Proteo dos Dados
Transaes Lgicas
Exemplos

399

Store, Update e Delete

As instrues para modificaes no Banco so STORE,


UPDATE e DELETE. Elas operam em nvel de registro
individualmente.
Descrio

Declarao
STORE

Adiciona um novo registro e valores ao campo do registro.

UPDATE

Atualiza valores de campos em um registro existente. Para que o


registro seja atualizado, ele deve ser acessado e colocado em hold
antes que a atualizao ocorra.

DELETE

Exclui todo o registro. Para que o registro seja excludo, ele deve ser
acessado e colocado em hold antes que a excluso ocorra.

400

Protegendo os Dados

Declaraes de Hold
Qualquer registro a ser atualizado ou excludo deve, em
primeiro lugar, ser lido e posto em hold. Usando o registro
colocado em hold para um usurio, ele se torna indisponvel
para atualizao/excluso para outro usurio.
No Natural o registro colocado em hold se estiver dentro
de um loop de processamento das declaraes READ e
FIND. Caso a instruoGET seja usada para acessar o
registro, deve-se usar um label para referenciar o nmero da
linha onde o GET esta sendo emitido.
401

Protegendo os Dados

Ordem do Processamento
1. Uma solicitao feita para colocar o registro em hold a
fim de proceder a atualizao;
2. Uma exigncia feita para verificar se algum j prendeu
o registro;
3. Se ningum estiver prendendo o registro, ele colocado
em hold, e a atualizao/excluso pode seguir;
4. Se algum estiver prendendo o registro, seu DBMS pode
tentar colocar o registro em hold novamente ou enviar uma
mensagem de erro informando que o registro est preso.
402

Transaes Lgicas

Uma transao lgica consiste de um ou mais comandos


que juntos provocam a atualizao do banco. Isso envolve a
modificao de um ou mais registros. Uma transao lgica
comea com o 1. comando que coloca o registro em hold
e termina quando a declarao ET (END TRANSACTION)
ou BT (BACKOUT TRANSACTION) emitida.
O tempo limite para efetuar uma transao definido pelo
DBA. Se a transao ultrapassar esse tempo, o usurio ser
lanado ao ltimo ET.

403

Transaes Lgicas

Declarao

Descrio

END TRANSACTION

Encerra as modificaes do banco. A localizao


da declarao ET depende do DBMS.

(ET)
BACKOUT
TRANSACTION

Desconsidera todas as modificaes a partir do


ltimo ET.

(BT)

404

Armazenando Registros

Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180

***************************************************************
* ILUSTRA O USO DA DECLARAO STORE
***************************************************************
DEFINE DATA LOCAL
1 CARS VIEW OF VEHICLES
2 PERSONNEL-ID
2 MAKE
2 MODEL
2 COLOR
2 YEAR
1 #PID (A8)
1 #ADD (A4)
END-DEFINE
INPUT (AD=_) ENTER THE OWNER ID: #PID
IF #PID=SCAN QUIT
STOP
END-IF
*
405

Armazenando Registros

Exemplo:
0190 FIND. FIND CARS WITH PERSONNEL-ID = #PID
0200
IF NO RECORDS FOUND
0210
MOVE #PID TO CARS.PERSONNEL-ID
0220
INPUT (AD=_) 10X ADD RECORD
0230
// ID NUMBER: CARS.PERSONNEL-ID (AD=O)
0240
/ MAKE
: CARS.MAKE
0250
/ MODEL
: CARS.YEAR
0260
/ YEAR
: CARS.YEAR
0270
/ COLOR
: CARS.COLOR
0280
/// DO YOU WANT TO ADD THIS RECORD: #ADD
0290 DECIDE ON FIRST VALUE OF #ADD
0300
VALUE YES
0310
STORE CARS
0320
END TRANSACTION
0330
VALUE NO
0340
IGNORE
0350
VALUE QUIT
0360
STOP

406

Armazenando Registros

Exemplo:
0370
0380
0390
0400
0410
0420
0430
0440
0450

NONE VALUE
REINPUT PLEASE ENTER YES, NO, OR QUIT
END-DECIDE
END-NOREC
END-FIND
IF *NUMBER (FIND.) > 0
REINPUT PLEASE ENTER NEW ID NUMBER, RECORD ALREADY EXISTS
END-IF
END

407

Atualizando e Excluindo Registros

Exemplo:
0010
0020
0030
0040
0050
0060
0070
0080
0090
0100
0110
0120
0130
0140
0150
0160
0170
0180
0190

***************************************************************
* ILUSTRA O USO DA DECLARAO UPDATE E DELETE
***************************************************************
DEFINE DATA
GLOBAL USING EMPLGDA
LOCAL
1 #LNAME
(A20)
1 #OPTION (A01)
1 #CTLVAR1 (C)
1 #CTLVAR2 (C) INIT <(AD=I CD=GR)>
1 #MESSAGE (A60)
END-DEFINE
REPEAT
INPUT
////PLEASE ENTER A LAST NAME: ==> #LNAME (AD=AILT_)
/ OR ENTER THE WORD QUIT (CD=RE)
IF #LNAME= THEN
REINPUT PLEASE ENTER A LAST NAME OR QUIT. MARK #LNAME
END-IF
408

Atualizando e Excluindo Registros

Exemplo:
0200
IF #LNAME = QUIT
0210
WRITE NOTITLE 10/6 YOU HAVE REQUESTED TO END YOUR SESSION *USER
0220
/ 6T HAVE A NICE DAY!
0230
STOP
0240
END-IF
0250 F1. FIND (1) EMPL-VIEW WITH NAME = #LNAME
0260
IF NO RECORDS FOUND
0270
REINPUT EMPLOYEES:1:NOT FOUND. RE-ENTER NAME OR QUIT. , #LNAME
0280
END-NOREC
0290
INPUT USING MAP CNTLMAP1
0300
DECIDE ON FIRST VALUE OF #OPTION
0310
VALUE Q
0320
ESCAPE BOTTOM
0330
VALUE U
0340
UPDATE (F1.)
0350
END OF TRANSACTION
0360
MOVE UPDATE DONE TO #MESSAGE
0370
MOVE (CD=RE AD=P) TO #CTLVAR2
409

Atualizando e Excluindo Registros

Exemplo:
0380
VALUE D
0390
DELETE(F1.)
0400
END OF TRANSACTION
0410
MOVE DELETE DONE TO #MESSAGE
0420
MOVE (CD=NE AD=P) TO #CTLVAR2
0430
NONE
0440
REINPUT CORRECT VALUES ARE D (DELETE), U (UPDATE), Q (QUIT).
0450
MARK *#OPTION
0460 END-DECIDE
0470 MOVE (AD=P) TO #CTLVAR1
0480 INPUT USING MAP CNTLMAP1
0490 RESET EMPL-VIEW #CTLVAR1 #CTLVAR2 #OPTION #MESSAGE
0500 END-FIND
0510 END-REPEAT
0520 END

410

Reduzindo o nmero de registros


em hold

No exemplo a seguir, se no usarmos a declarao GET,


todos os registros lidos seriam colocados em hold. Usando
o GET para fazer uma re-leitura somente daqueles registros
que satisfazem ao critrio estabelecido, somente esses
seriam considerados.
Essa tcnica necessita de uma lgica adicional para
assegurar a integridade dos dados entre as leituras.
A instruo GET no est disponvel para todos os DBMS.

411

Reduzindo o nmero de registros em hold

0010 ********************************************************************
0020 * ILUSTRA O USO DA DECLARAO GET PARA REDUZIR O NMERO DE REGISTROS
0030 ********************************************************************
0040 DEFINE DATA LOCAL
0050 1 CARS VIEW OF VEHICLES
0060 2 PERSONNEL-ID
0070 2 MAKE
0080 2 MODEL
0090 2 CLASS
0100 2 REG-NUM
0110 2 MAINT-COST (5)
0120 END-DEFINE
0130 READ CARS BY ISN
0140 IF CLASS = C
/* COMPANY CAR
0150
GET. GET CARS *ISN
/* RE-READ LAST RECORD READ
0160
MAINT-COST(*) := 0
/* NO MAINTENANCE IF COMPANY CAR
0170
UPDATE RECORD (GET.) /* REFER BACK TO THE RECORD OBTAINED WITH GET
0180
END TRANSACTION
0190 END-IF
0200 END-READ
0210 END

412

MDULO IX - Processamento Batch

Processamento Batch
-

Viso Geral do Processamento Batch (mainframe)


Instruo Define Work File
Instruo Write Work File
Instruo Read Work File

413

Viso Geral

Enter the
ID:___

PROCESSAMENTO BATCH

PROCESSAMENTO ONLINE
414

Viso Geral

Algumas funes na aplicao no exigem a interao do usurio para


que o controle seja passado ao Natural. A maioria das funes noiterativas requerem tempo de processamento alto e deveriam ser
executadas em modo batch, pois executar um programa que l e grava
centenas de milhes de registros ou que produz relatrios enormes torna
o tempo de resposta da mquina muito mais lento.

415

Viso Geral

Funes no-iterativas
Algumas razes para usar o processamento batch acontecem quando:
um programa executa uma classificao numerosa (sort);
seu programa executado noite sem a interferncia do usurio;
conjuntos de dados seqenciais so criados;
longos relatrios devem ser gerados.

416

Viso Geral

Como usar o Processamento Batch


Quando um programa Natural executado em modo batch, um ncleo
Natural separado inicializado para disponibilizar os recursos que
permitiro o uso das funes batch. Isso acontece quando um job
submetido. Assim o procedimento geral que voc deve seguir, envolve:
a submisso de um job batch;
o chamado do Natural batch e
a execuo de um programa Natural em modo batch.

417

Viso Geral

O que deve-se definir no job?


Entrada e sada dos datasets;
As impressoras de destino;
Os Work files;
O arquivo Adabas que armazena os programas do sistema
Natural;
A biblioteca de logon;
Os programas Natural a serem executados.

418

Viso Geral

O que so nomes de link?


So palavras reservadas que definem uma funo particular e variam
conforme a aplicao.
Parmetros Natural Batch
Funcionam da mesma forma que os parmetros online. Exemplo: PS
(Page Size), seve para controlar o tamanho da pgina que ser exibida.

419

Viso Geral

Nomes de link
Descrio

Nomes de Link-OS

Nomes de Link-OS

Primary Input

CMSYNIN

SYSRDR

Object Input

CMOBJIN

SYSIPT

Primary Report

CMPRINT

SYSLST

Additional Reports

CMPRTnn

SYS041

Work Files

CMWKFnn

420

SYS001SYS032

Viso Geral

Parmetros Natural Batch


NATPARM

Funo

Valor

INTENS

Intensidade p/ sada de relatrios

1-10

IM

Modo para entrada de terminal

F/D

PS

Tamanho da pgina

LS

Tamanho da linha

35-250

MT

Limite do tempo de CPU

No limit

MAXCL

Mximo de objetos eternos


chamados entre telas gravadas

No limit

MADIO*

Mximo de chamadas ao Adabas


entre gravaes.

No limit

* S faz sentido se voc estiver usando arquivos Adabas.


421

5-250

DEFINE WORK FILE

Sintaxe
DEFINE WORK FILE n operand1 [TYPE operand2]
Definio
usada para atribuir um nome a um arquivo de trabalho Natural. Isso
permite que voc construa ou altere as definies de um arquivo
dinamicamente dentro da sesso. Quando essa instruo for executada
e o arquivo j estiver aberto, ela provocar, implicitamente, o
fechamento do arquivo. Ele possui um nmero que o identifica. Esse
nmero varia de 1 at 32.

422

WRITE WORK FILE

Sintaxe
WRITE WORK [FILE] work-file-number [VARIABLE] operand1...
Definio
usada para gravar registros na seqncia fsica num arquivo. Em ambientes
mainframe s pode ser usada em modo batch sob COM-PLETE, TSO, CMS e
TIAM. possvel gravar registros com diferentes campos no mesmo work file
usando diferentes instrues WRITE WORK FILE. Nesse caso, a varivel de
entrada deve ser definida em todas as instrues WRITE WORK FILE.

423

READ WORK FILE

Sintaxe
READ WORK [FILE] work-file-number [ONCE]
RECORD operand1
[AND] [SELECT]

OFFSET n
FILLER nx operand2 ...

[GIVING LENGTH operand3]


AT [END] [OF] [FILE]
statement
END-ENDFILE
statement
END-WORK

424

READ WORK FILE

Definio
usada para ler dados de um arquivo seqencial no-Adabas. Os dados so
lidos na ordem fsica independente da forma como foram gravados. Em
ambientes mainframe s pode ser usada sob COM-PLETE, TSO, CMS e TIAM
ou em modo batch. Ao ser lido, o JCL deve ser fornecido.
Essa instruo provoca um loop de processamento, assim, os processos que
quebra automtica devem ser executados dentro do loop de leitura. Quando a
condio de fim de arquivo ocorre, o Natural automaticamente fecha o work file.

425

Exemplo

WRITE WORK FILE, READ WORK FILE, DEFINE WORK FILE


local
1 #registro (a50)

define work file 1 c:\w-trab\arq1.txt'

1 redefine #registro

read emp by city


move by name emp to #reg
write work file 1 #registro

2 #reg
3 cidade (a8)
3 filler 2x

end-read

3 nome (a20)
2 codigo_emp (n3)
1 emp view of employees
2 codigo_emp

.
read work file 1 [once] #registro
move by name #reg to emp

2 nome
2 cidade

store emp... end-transaction


end-work
426

APNDICE A

Editores do Mainframe
- Editor de Programa
- Editor da rea de Dados
- Editor de Mapa

427

EDITOR DO MAINFRAME

Editor de Programa
Para entrar no editor de programa do mainframe basta
selecionar a opo Create -> Object no menu principal e
depois informar o tipo e o nome do objeto. Uma outra
alternativa e entrar com o comando e (editing) p (program)
na linha de comando.

428

EDITOR DO MAINFRAME

19:55:30

*****

User CTDPS

- Development Functions -

Code
C
E
R
D
X
L
S
?
.
Code .. c

NATURAL

*****

2003-02-26
Library SYSTEM
Mode Reporting
Work area empty

Function
Create Object
Edit Object
Rename Object
Delete Object
Execute Program
List Object(s)
List Subroutines Used
Help
Exit
Type .. p
Name .. prog1___________________________

Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Menu Exit
Canc

429

EDITOR DO MAINFRAME

Comandos de linha
Marcar linhas .X, .Y;
Copiar linhas

.C(nn), .CX(nn), .CY(nn), .CX-Y(nn);

Mover linhas

.MX, .MY, .MX-Y;

Inserir linhas

.I, .I(nn), .I(pgm-name[,sss,nn]);

Excluir linhas .D, .D(nn);


Dividir uma linha .S;
Unir uma linha .J;
Cancelar todas as mudanas de uma linha L.
430

EDITOR DO MAINFRAME

Comandos Adicionais
ADD - Adiciona linhas em branco no fim ou no incio do
programa;
CLEAR - Limpa a rea de trabalho-fonte;
DELETE - Permite ao usurio escolher entre excluir o
cdigo-fonte, o cdigo-objeto ou ambos;
PURGE - Exclui o cdigo-fonte do programa;
SCRATCH - Exclui o cdigo objeto do programa;
LAST - Mostra os ltimos comandos emitidos com a
possibilidade de reexecuo.
431

EDITOR DO MAINFRAME

Comandos Adicionais
RENAME - Usado para dar um novo nome ao objeto;
LIST VIEW - Emite uma lista com os diversos tipos de
objetos. Quando apenas um objeto especificado, o
comando listar o contedo desse objeto;
SET TYPE - Troca o tipo de objeto Natural;
RENUMBER - Usado para renumerar as linhas do
programa-fonte;
STRUCT - Gera o fonte tabulado na rea de trabalho;
432

EDITOR DO MAINFRAME

Subcomandos do Editor
Excluir um conjunto de linhas:
DX, DY, DX-Y;
EX, EY, EX-Y.
Obter mais linhas para o programa:
ADD.
Cancelar as marcas X e Y:
RESET.
433

EDITOR DO MAINFRAME

Subcomandos do Editor
Renumerar o programa:
N.
Exibir/Repetir ltimo comando:
* ou *=.
Subcomandos de posio:
T, --; B, ++; +P, -P, +, -; +h, -H; +nnnn, -nnnn; nnnn;
X, Y.
434

EDITOR DO MAINFRAME

Subcomandos SCAN e CHANGE


O SCAN usado para procurar dados contidos na rea do
fonte. Sintaxe: SCAN[scan-value].
O CHANGE usado para pesquisar um valor digitado e
substituir cada ocorrncia localizada. Sintaxe:
CHANGEscandatareplacedata.

435

EDITOR DO MAINFRAME

Editor da rea de Dados


Para entrar no editor da rea de dados do mainframe basta
selecionar a opo Create -> Object no menu principal e
depois informar o tipo e o nome do objeto. Uma outra
alternativa e entrar com o comando e (editing) l (local), g
(global) ou p (parameter) na linha de comando.

436

EDITOR DO MAINFRAME

20:23:58
User CTDPS

***** NATURAL *****


- Development Functions -

Code
C
E
R
D
X
L
S
?
.
Code .. c

2003-02-26
Library SYSTEM
Mode Reporting
Work area empty

Function
Create Object
Edit Object
Rename Object
Delete Object
Execute Program
List Object(s)
List Subroutines Used
Help
Exit
Type .. l
Name .. local1__________________________

Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Menu Exit
Canc

437

EDITOR DO MAINFRAME

Descrio das colunas do editor da rea de Dados


Local
LOCAL1
Library SYSTEM
DBID
23 FNR
231
Command
> +
I T L Name
F Leng Index/Init/EM/Name/Comment
All - -------------------------------- - ---- ---------------------------------

Informao

Coluna

Campo de informao (no modificvel pelo usurio):


I

E=erro detectado
I=valores de inicializao definido
M=mscara de edio definida
S=mscara de edio e valores de inicializao definidos

438

EDITOR DO MAINFRAME

Informao

Coluna
Tipo de campo (type):
branco= campo elementar
G= campo grupo
P= campo grupo peridico
T

M= campo mltiplo
*= linha de comentrio
V= viso dos dados
C= constante
B= bloco de dados
R= campo redefinido
439

EDITOR DO MAINFRAME

Coluna
L
Name

Informao

Nvel do campo na estrutura de dados (level):1 a 9


Nome da varivel, do bloco, da view ou opo de FILLER (Nx)
0<n<25. Mnimo 3 caractere e mximo de 32 caracteres.

F
Length

Formato do campo.
Tamanho do campo. No preencher para formatos C, D, T e L.

Index/Init/EM

Contm comentrios (/*) ou definies tais como: inicializaes

Name/

(init <3>), mscaras de edies (EM=999.99) e definies de

Comment

tabelas (2,2).
440

EDITOR DO MAINFRAME

Comando .v(nome da DDM)


Permite puxar os campos e as respectivas definies de
uma DDM. Aps a seleo dos campos desejados
possvel alterar o nome da viso digitando o novo nome por
cima.
Local
LLL
Library DIANA
DBID
23 FNR
231
Command
> +
I T L Name
F Leng Index/Init/EM/Name/Comment
All - -------------------------------- - ---- --------------------------------. V (EMPLOYEES)

441

EDITOR DO MAINFRAME

Local
LLL
Library DIANA
DBID
23 FNR
231
View EMPLOYEES
I T L Name
F Leng Index/Init/EM/Name/Comment
------------------------------------------------------------------------------X
2 PERSONNEL-ID
A
8
G 2 FULL-NAME
X
3 FIRST-NAME
A
20
3 MIDDLE-I
A
1
X
3 NAME
A
20
2 MIDDLE-NAME
A
20
X
2 MAR-STAT
A
1
2 SEX
A
1
2 BIRTH
A
6
G 2 FULL-ADDRESS
M 3 ADDRESS-LINE
A
20 (1:191) /* MU-FIELD
X
3 CITY
A
20
3 ZIP
A
10
3 POST-CODE
A
10
X
3 COUNTRY
A
3
G 2 TELEPHONE
3 AREA-CODE
A
6
442

EDITOR DO MAINFRAME

Local
LLL
Library DIANA
Command
I T L Name
All - -------------------------------V 1 EMPL
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
2 MAR-STAT
2 CITY
2 COUNTRY

443

DBID

23 FNR

231
> +

F Leng Index/Init/EM/Name/Comment
- ---- --------------------------------EMPLOYEES
A
8
A
20
A
20 /* VALIDO SOMENTE NOMES PORTUGUE
A
1
A
20 /* CIDADES DE SAO PAULO
A
3

EDITOR DO MAINFRAME

Redefinio dos campos


Local
DIALDA1
Library DIANA
Command
I T L Name
All - -------------------------------V 1 EMPL
2 PERSONNEL-ID
2 FIRST-NAME
. r NAME
2 CITY
2 JOB-TITLE
2 SALARY
M 2 BONUS

444

DBID

23 FNR

231
> +

F Leng Index/Init/EM/Name/Comment
- ---- --------------------------------EMPLOYEES
A
8
A
20
A
20
A
20
A
25
P 9.0 (1:3)
P 9.0 (1:3,1:2)

EDITOR DO MAINFRAME

Local
DIALDA1
Library DIANA
Command
I T L Name
All - -------------------------------V 1 EMPL
2 PERSONNEL-ID
2 FIRST-NAME
2 NAME
R 2 NAME
3 #LETRA-INICIAL
2 CITY
2 JOB-TITLE
2 SALARY
M 2 BONUS

0010
0020
0030
0040
0050
0060
0070

DBID

231
> +

F Leng Index/Init/EM/Name/Comment
- ---- --------------------------------EMPLOYEES
A
8
A
20
A
20
/* REDEF. BEGIN : NAME
A
1 /* LETRA INICIAL DO SOBRENOME
A
20
A
25
P 9.0 (1:3)
P 9.0 (1:3,1:2)

DEFINE DATA
LOCAL USING DIALDA1
END-DEFINE
READ (10) EMPL
DISPLAY PERSONNEL-ID NAME CITY #LETRA-INICIAL
END-READ
END
445

23 FNR

EDITOR DO MAINFRAME

Editor de Mapa
Para entrar no editor de mapa do mainframe basta
selecionar a opo Create -> Object no menu principal e
depois informar o tipo de objeto m e o nome do objeto.
Uma outra alternativa e entrar com o comando e (editing) m
(map) na linha de comando. Voc ser direcionado para o
editor de mapa.

446

EDITOR DO MAINFRAME

20:23:58
User CTDPS

***** NATURAL *****


- Development Functions -

Code
C
E
R
D
X
L
S
?
.
Code .. c

2003-02-26
Library SYSTEM
Mode Reporting
Work area empty

Function
Create Object
Edit Object
Rename Object
Delete Object
Execute Program
List Object(s)
List Subroutines Used
Help
Exit
Type .. m
Name .. xxxmap1__________________________

Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Menu Exit
Canc

447

EDITOR DO MAINFRAME

17:25:27
User CTDPS

***** NATURAL MAP EDITOR *****


- Edit Map Code
---D
E
I
H
M
S
T
W
?
.

Code .. I

2003-03-05
Library SYSTEM

Function
--------------------------------Field and Variable Definitions
Edit Map
Initialize new Map
Initialize a new Help Map
Maintenance of Profiles & Devices
Save Map
Test Map
Stow Map
Help
Exit

Name .. XXXMAP1_

Profile .. SYSPROF_

Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help
Exit Test Edit

448

EDITOR DO MAINFRAME

Ao iniciar um novo mapa, voc cair numa tela que contm


as definies do mapa, tais como: tamanho da tela, caracter
de preenchimento, os tipos de delimitadores, se o mapa usa
algum layout, se usa varivel de controle, etc. Voc pode
definir as caractersticas do se mapa inicialmente ou depois
com o auxlio da tecla PF2.

449

EDITOR DO MAINFRAME

17:28:20

Define Map Settings for MAP

Delimiters
----------------Cls Att CD Del
T
D
BLANK
T
I
?
A
D
_
A
I
)
A
N
^
M
D
&
M
I
:
O
D
+
O
I
(

Format
--------------------------Page Size ...... 23
Line Size ...... 79
Column Shift ... 0 (0/1)
Layout ......... ________
dynamic ....... N (Y/N)
Zero Print ..... N (Y/N)
Case Default ... UC (UC/LC)
Manual Skip .... N (Y/N)
Decimal Char ... .
Standard Keys .. N (Y/N)
Justification .. L (L/R)
Print Mode ..... __
Control Var .... ________

2003-03-05
Context
-------------------------Device Check .... 4880
WRITE Statement
_
INPUT Statement
X
Help ____________________
as field default N (Y/N)

Automatic Rule Rank 1


Profile Name .... SYSPROF
Filler Characters
-----------------------Optional, Partial ....
Required, Partial ....
Optional, Complete ...
Required, Complete ...

Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help
Exit
Let

450

EDITOR DO MAINFRAME

Tela do editor de mapa


Ob _
.
.
.
.
.
.
001

Ob D CLS ATT DEL


CLS ATT DEL
.
T D
Blnk
T I
?
.
A D
_
A I
)
.
A N
^
M D
&
.
M I
:
O D
+
.
O I
(
.
--010---+----+----+---030---+----+----+---050---+----+----+---070---+----

Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Mset Exit Test Edit -+


Full <
>
Let

451

EDITOR DO MAINFRAME

Criao de um mapa bsico


O texto colocado no mapa ao digitarmos o delimitador de
texto + palavra;
Campos alfanumricos so colocados no mapa ao
digitarmos o delimitador de campo + X(n), onde n o
tamanho do campo;
Campos numricos so colocados no mapa ao digitarmos o
delimitador de campo + 9(n), delimitador de campo +
9999n ou delimitador de campo + 0000...n; onde 9 justifica
o campo esquerda e 0 direita;
campos recebam suas definies.
452

EDITOR DO MAINFRAME

Definindo os campos
Ob _
.
.
.
.
.
.
001

Ob D CLS ATT DEL


CLS ATT DEL
.
T D
Blnk
T I
?
.
A D
_
A I
)
.
A N
^
M D
&
.
M I
:
O D
+
.
O I
(
.
--010---+----+----+---030---+----+----+---050---+----+----+---070---+---novo menu principal

matricula:
nome:
idade:
n.o inscr:

)x(20)
)x(20)
)9(2)
)0(5)

Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Mset Exit Test Edit -+


Full <
>
Let

453

EDITOR DO MAINFRAME

Aps o ENTER
Ob _
.
.
.
.
.
.
001

Ob D CLS ATT DEL


CLS ATT DEL
.
T D
Blnk
T I
?
.
A D
_
A I
)
.
A N
^
M D
&
.
M I
:
O D
+
.
O I
(
.
--010---+----+----+---030---+----+----+---050---+----+----+---070---+---novo menu principal

matricula:
nome:
idade:
n.o inscr:

)XXXXXXXXXXXXXXXXXXXX
)XXXXXXXXXXXXXXXXXXXX
)99
)00000

Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help Mset Exit Test Edit -+


Full <
>
Let

454

EDITOR DO MAINFRAME

Ao tentar dar PF3 sem nomear os campos


17:56:46
Cmd
___
___
___
___

Field and Variable Definitions - Summary

2003-03-05

Field Name (Truncated)


Mod Format Ar Ru Lin Col
#001______________________________________________
A20
5 41
#002______________________________________________
A20
6 41
#003______________________________________________
N2
7 41
#004______________________________________________
N5
8 41

Definindo os respectivos nomes


17:56:46
Cmd
___
___
___
___

Field and Variable Definitions - Summary

2003-03-05

Field Name (Truncated)


Mod Format Ar Ru Lin Col
#MATRICULA________________________________________
A20
5 41
#NAME_____________________________________________
A20
6 41
#BIRTH____________________________________________
N2
7 41
#INSCRICAO________________________________________
N5
8 41
455

EDITOR DO MAINFRAME

Salvando e catalogando o mapa


Para salvar o mapa basta sair da tela de edio com PF3 e
escolher a opo S (Save Map) no menu da tela Natural
Map Editor. Para catalogar, escolha a opo W (Stow
Map).

456

EDITOR DO MAINFRAME

18:06:22
User CTDPS

***** NATURAL MAP EDITOR *****


- Edit Map Code
---D
E
I
H
M
S
T
W
?
.

Code .. W

2003-03-05
Library SYSTEM

Function
--------------------------------Field and Variable Definitions
Edit Map
Initialize new Map
Initialize a new Help Map
Maintenance of Profiles & Devices
Save Map
Test Map
Stow Map
Help
Exit

Name .. XXXMAP1_

Profile .. SYSPROF_

Command ===>
Enter-PF1---PF2---PF3---PF4---PF5---PF6---PF7---PF8---PF9---PF10--PF11--PF12--Help
Exit Test Edit
STOW command executed successfully.

457

EDITOR DO MAINFRAME

Testando o mapa
Voc poder testar o mapa diretamente na tela do editor de
mapa com a opo PF4, saindo da tela de edio com PF3 e
escolhendo a opo T (Test Map) no menu da tela Natural
Map Editor ou chamando o mapa a partir de um programa
atravs da instruo INPUT USING MAP <nome-do-mapa>.

novo menu principal

matricula:
nome:
idade:
n.o inscr:
458

____________________
____________________
__
_____

EDITOR DO MAINFRAME

Capturando os campos de outras reas de dados


Em vez de definir os campos, voc pode ainda pux-los de
outras reas com suas respectivas definies. Os tipos
vlidos so: (P) Programas, (V) View (DDM), (G) rea de
Dados Global, (L) rea de Dados Local e (M) Mapa. As (S)
Subrotinas, (N) Subprogramas e (H) Helprotinas s podero
exibir os dados se contiverem a instruo DEFINE DATA
com uma rea de Dados Local ou Parameter.
Basta levar o cursor primeira posio do campo, fornecer o
delimitador adequado e o nmero do campo que aparece na
parte superior tela.
459

EDITOR DO MAINFRAME

Ob P XXXPG1
Ob D CLS ATT DEL
CLS ATT DEL
. EMP
*V1
.
T D
Blnk
T I
?
1 NAME
A20
.
A D
_
A I
)
2 CITY
A20
.
A N
^
M D
&
3 SALARY
P9.0 .
M I
:
O D
+
4 PERSONNEL-ID
A8
.
O I
(
.
.
001
--010---+----+----+---030---+----+----+---050---+----+----+---070---+---MENU PRINCIPAL

IDENTIFICACAO:)4
NOME:)1
SALARIO:)3

460

EDITOR DO MAINFRAME

Aps o ENTER
Ob P XXXPG1
Ob D CLS ATT DEL
CLS ATT DEL
. EMP
*V1
.
T D
Blnk
T I
?
1 NAME
A20
.
A D
_
A I
)
2 CITY
A20
.
A N
^
M D
&
3 SALARY
P9.0 .
M I
:
O D
+
4 PERSONNEL-ID
A8
.
O I
(
.
.
001
--010---+----+----+---030---+----+----+---050---+----+----+---070---+---MENU PRINCIPAL

IDENTIFICACAO:)XXXXXXXX
NOME:)XXXXXXXXXXXXXXXXXXXX
SALARIO:)999999999

461

EDITOR DO MAINFRAME

Comandos do editor de mapas


Comandos de campo:
.M - move o campo para a posio do cursor;
.R - repete o campo na posio do cursor;
.C - centralizar o campo entre campos adjacentes;
.D - exclui o campo;
.T - trunca a linha a partir do campo marcado at o final da
linha.
462

EDITOR DO MAINFRAME

Comandos de linha:
..M, ..Mn, ..M* - move linha(s) para a posio do cursor;
..R, ..Rn - repete linha(s) na posio do cursor;
..C, ..Cn, ..C* - centraliza linha(s);
..D, ..Dn, ..D* - exclui linha(s);
..I, ..In, ..I* - insere linha(s) em branco;
..Fc - preenche espaos vazios na linha com o caracter c;
..S, ..Sn - divide a(s) linha(s) na posio do cursor;
..J, ..Jn, ..J* - une linhas.
463

EDITOR DO MAINFRAME

Uso das variveis do sistema


As variveis de sistema devem ser usadas com delimitador
do tipo O I (output intensified). Eis algumas delas:
*USER - A identificao do usurio;
*LIBRARY-ID - Nome da atual biblioteca;
*PROGRAM - Nome do programa/mapa em execuo;
*DATU - Data no formato americano;
*DAT4E - Data com os quatro dgitos para ano;
*TIME - Hora no formato HH:MM:SS.T.
464

EDITOR DO MAINFRAME

Regras de Processamento
Trata-se de um grupo de instrues anexadas a uma
varivel em um mapa externo. utilizada para realizar a
validao do campo ao qual est associada. Uma regra no
pode conter e instruo END.

465

EDITOR DO MAINFRAME

Como colocar regras em campos do mapa


Para associar uma regra a um campo, basta entrar com .P
sobre o delimitador do campo. Ao digitar enter, voc ser
direcionado para o editor de regras.
Para associar uma regra a uma PF, basta entrar com ..P no
incio de qualquer linha em branco do editor de mapa.
Para fechar o editor de regras basta digitar . Na linha de
comando.
O smbolo & utilizado na regra para representar o campo
para o qual a regra est sendo definida.
466

EDITOR DO MAINFRAME

Ob _
.
.
.
.
.
.
001

Ob D CLS ATT DEL


CLS ATT DEL
.
T D
Blnk
T I
?
.
A D
_
A I
)
.
A N
^
M D
&
.
M I
:
O D
+
.
O I
(
.
--010---+----+----+---030---+----+----+---050---+----+----+---070---+---MENU PRINCIPAL

IDENTIFICACAO:.pXXXXXXX
NOME:)XXXXXXXXXXXXXXXXXXXX
SALARIO:)99999

467

EDITOR DO MAINFRAME

Variables used in current map


#IDENT(A8)
#NOME(A20)
#SALARIO(N5)

Mod
U
U
U

Rule ________________________________ Field #IDENT


> .
> + Rank 0
S 3
L 1
Report Mode
ALL
....+....10...+....+....+....30...+....+....+....50...+....+....+....70.
0010 IF &=' '
0020 REINPUT 'campo deve ser preenchido!' MARK *&
0030 END-IF
0040
0050

468

EDITOR DO MAINFRAME

Testando o campo no mapa


MENU PRINCIPAL

IDENTIFICACAO: _________
NOME: ____________________
SALARIO: _____

campo deve ser preenchido!

469

EDITOR DO MAINFRAME

Utilizao de MU e PEs em mapas


O usurio pode definir uma tabela e colocar os campos MUs
e PEs dentro do mapa atravs de um programa que
contenha na rea de Dados Local todos os campos que
pretende utilizar, certificando-se do nmero de ocorrncias
para os campos repetidos.
Outra opo definir os campos no mapa e depois definir as
ocorrncias e dimenses atravs da tela de edio que pode
ser acessada digitando-se .A sobre o delimitador do campo
que pretende definir como uma tabela.

470

EDITOR DO MAINFRAME

Name #SALARIO
Upper Bnds 3_____ 1_____ 1_____
------------------------------------------------------------------------------Dimensions
Occurrences
Starting from
Spacing
0 . Index vertical
1__
________
0
Lines
1 . Index horizontal
3__
________
3
Columns
0 . Index (h/v) V
1__
________
0
Cls/Ls
001

--010---+----+----+---030---+----+----+---050---+----+----+---070---+---MENU PRINCIPAL

IDENTIFICACAO:)XXXXXXXX
NOME:)XXXXXXXXXXXXXXXXXXXX
SALARIO:.A9999

471

)99999

)99999

Exerccios

472

SISTEMA DE FUNCIONRIOS

GDA-F (*)

PMENU

MMENU

MHELP

LDA-F (+)

1
PINC

2
*+

PALT

3
*+

PEXC

HRO1

4
*+

PREL *

MHRO1

MIAE
HRO2
473

MHRO2

Exerccios

1) Criar uma rea de Dados Global chamada GDA-F que tenha a


varivel #MENSAGEM (A30).
2) Criar uma local externa de nome LDA-F com os seguintes
campos da DDM EMPLOYEES:
PERSONNEL-ID (codigo),
NAME (sobrenome), FIRST-NAME (nome),
SEX , CITY, JOB-TITLE (cargo),
SALARY (1:3) e
BONUS (1:3,1:2)
O nome da view deve ser alterada para FUNC

474

Exerccios

3) Criar o programa PREL.


a) Incluir em sua rea de dados a local LDA-F
utilizando o comando .I (nome-da-local)
b) Alterar o nmero de ocorrncias do salrio para uma s
ocorrncia e retirar o campo bonus
c) Ler a view utilizando o campo CITY como chave

475

Exerccios

d) Layout do relatrio PREL

476

Exerccios

e) Esquema de programao :

** programa de relatrio PREL


define data
local using LDA-F
end-define
set key pf3=%%
format ps=21
write title left
write trailer
read func by city
display
end-read
end

477

Exerccios

4) Criar o mapa MLAY e definir no perfil as dimenses da tela


(79 colunas x 23 linhas), com o seguinte layout:
XXXXXXXX

Definir para a PF3 a seguinte consistncia:


if *pf-key = PF3
input 12/15 fim de sistema tecle enter
478

stop end-if

Exerccios

5) Criar o mapa MMENU usando como layout o mapa MLAY.

479

Exerccios

Definir as seguintes consistncias no mapa MMENU:


Varivel #OPCAO (N1):
if not (#opcao = 1 thru 4)
reinput (cd=re ad=I) mark *#opcao alarm
end-if
Varivel #CODIGO (A8):
if #opcao = 1 thru 3
if #codigo =
reinput mark *#codigo alarm
end-if
fff. find number func with personnel-id = #codigo
end-find

480

Exerccios

Varivel #CODIGO (continuao) :


if *number (fff.) = 0 /* no encontrou o cdigo
if #opcao = 2 thru 3 /* alterao ou excluso
reinput ' mark *#codigo alarm
end-if
else

/* encontrou o cdigo

if #opcao = 1 /* incluso
reinput mark *#codigo alarm
end-if
end-if

481

Exerccios

Varivel #CIDADE-INI (A20):


if #opcao = 4 /* relatrio
if #cidade-ini =
reinput mark *#cidade-ini alarm
end-if
end-if
Varivel #CIDADE-FIN(a20):
if #opcao = 4 /* relatrio
<<idem #cidade-ini>>
if #cidade-fin < #cidade-ini
reinput mark *#cidade-fin alarm
end-if
<< verifique se existem cidades no intervalo fornecido>>
end-if
<< usar a instruo histogram>>
482

Exerccios

6) Criar o programa PMENU (menu principal) com o seguinte


esquema:
** programa menu principal PMENU
define data
global using gda-emp
local
1 variveis do mapa MMENU
end-define
set key pf3
input with text #mensagem using map mmenu
reset #mensagem

483

Exerccios

(continuao do programa PMENU)

decide on first value of #opcao


value 1 fetch 'pinc' #codigo
value 2 fetch 'palt' #codigo
value 3 fetch 'pexc' #codigo
value 4 fetch 'prel' #cidade-ini #cidade-fin
none ignore
end-decide
end

484

Exerccios

7) Alterar o programa PREL (relatrio) :

set key pf3=%% set key pf3=pmenu


inserir antes do read input #cidade-ini #cidade-fin
acrescentar a clusula starting from thru na instruo read
selecionar os registros que esto no intervalo das cidades
inserir no trmino do relatrio fetch pmenu

485

Exerccios

8) Criar o mapa MIAE usando como layout o mapa MLAY.

Obs: O primeiro campo a varivel #TITULO (A10), os outros campos


devero ser puxados da local LDA-F.
486

Exerccios

Outras observaes para o mapa MIAE :


A varivel #TITULO e o campo FUNC.PERSONNEL-ID devero ser protegidos (tipo
output protected), os demais campos devero ser do tipo output modifiable
No rodap do mapa (onde est situada a PF3 ) definir tambm a
PF5 MENU e a sua consistncia dever ser :
i f *pf-key = PF5
fetch pmenu
end-if
Fazer a consistncia do campo FUNC.SEX (M ou F)
Consistncia do campo FUNC.SALARY: Se o usurio preencher qualquer BONUS,
obrigar o preenchimento do campo SALARIO correspondente quele BONUS
Para os demais campos do tipo output modifiable , obrigar o preenchimento,
utilizando o & no lugar do nome do campo
Definir a varivel de controle #CONTROL para todos os campos do tipo output
modifiable

487

Exerccios

9) Fazer o programa de incluso PINC com o seguinte esquema:


** programa de incluso PINC
define data
global using gda-f
local using lda-f
local /* (outras variveis do mapa MIAE e seus init) end-define
set key pf3 pf5
input func.personnel-id /* para receber o cdigo vindo do PMENU
input using map MIAE
store func
end transaction
move Funcionrio includo com sucesso to #mensagem
fetch PMENU
end
488

Exerccios

10) Fazer o programa de alterao PALT com o seguinte esquema:


** programa de alterao PALT
define data /* igual ao programa PINC, s que mudando o ttulo
set key pf3 pf5
input func.personnel-id /* para receber o cdigo vindo do PMENU
find func with personnel-id = func.personnel-id
input using map MIAE
if #control modified
update
end transaction
move Funcionrio alterado com sucesso to #mensagem
else
backout transaction reset #mensagem end-if
end-find
fetch PMENU
end
489

Exerccios

11) Fazer o programa de excluso PEXC, copiando do programa


PALT e fazer os ajustes necessrios para a excluso.
Observaes:
Proteger a varivel de controle: move (ad=p) to #control
Depois da instruo INPUT USING MAP ... e antes de efetuar a
excluso, incluir a rotina :
input no erase 20/15 Confirme a excluso (S/N) ?: (cd=re ad=i)
#conf (ad=mt) /* defin-la na local interna com INIT <N>
if #conf = S
/* emitir o comando DELETE ,
/* END TRANSACTION
/* mover Funcionrio excludo com sucesso
/* para #MENSAGEM, caso contrrio, mover
/* Excluso no efetuada para #MENSAGEM
490

Exerccios

12) Criar o mapa MHELP com o tamanho de 5 linhas por 15 colunas.


Este mapa dever ser do tipo help text. Layout :

13) Editar o mapa MMENU, entrar no campo #OPCAO e colocar o


mapa MHELP na opo de Help Routine do campo
14) Testar o mapa MMENU colocando o caracter ? no campo #OPCAO

491

Exerccios

15) Criar o mapa MHRO1 conforme o layout :

Este mapa dever ter 6 linhas por 27 colunas ;


Deve conter 2 variveis: o array #A-CIDADE (A20/1:5) e #OPCAO
(N1)
O array #A-CIDADE dever ser tipo output protected
Fazer a consistncia para a varivel #OPCAO (valores vlidos de 1
a 5)
492

Exerccios

16) Criar a helprotina HRO1 conforme o esquema :


** helprotina HRO1
define data
parameter
1 #cidade (a20)
local
1 #a-cidade (a20/1:5) init (1) <SO PAULO> (2)
1 #opcao (n1)
end-define
define window janela
size 9 * 30
base 8 / 20
title Escolha a Cidade
control window
framed on
493

Exerccios

Continuao da helprotina HRO1


set window janela
input using map mhro1
move #a-cidade (#opcao) to #cidade
set window off
end
17) Editar o mapa MIAE, entrar no campo FUNC.CITY e colocar a
helprotina HRO1 na opo de Help Routine do campo.
18) Testar o mapa MIAE colocando o caracter ? no campo FUNC.CITY

494

Exerccios

19) Criar o mapa MHRO2 conforme o layout :

Este mapa dever ter 5 linhas por 30 colunas ;


Deve conter 2 arrays : #A-OPCAO (A1/1:5) e #A-CARGO (A25/1:5)
O array #A-CARGO dever ser tipo output protected
Fazer a consistncia para o array #A-OPCAO :
examine #a-opcao (*) for X giving number #i
if #i = 0 or #i > 1 /* fazer a consistncia devida

495

Exerccios

20) Criar a helprotina HRO2 conforme o esquema :


** helprotina HRO2
define data
parameter
1 #cargo (a25)
local
1 #a-opcao (a1/1:5)
1 #a-cargo (a25/1:5)
1 #i (i2)
1 func view of employees
2 job-title
end-define
496

Exerccios

Continuao da helprotina HRO2


** leitura dos 5 primeiros cargos
histogram (5) func for personnel-id starting from a
move *counter to #i
move job-title to #a-cargo (#i)
end-histogram
define window janela /* mesma definio da HRO2, ajustando o
/* tamanho e usando o ttulo
/* Marque o Cargo com X

497

Exerccios

Continuao da helprotina HRO2


*
set window janela
input using map mhro2
examine #a-opcao (*) for X giving index #i
move #a-cargo (#i) to #cargo
set window off
end
21) Editar o mapa MIAE, entrar no campo FUNC.JOB-TITLE e colocar a
helprotina HRO2 na opo de Help Routine do campo
22) Testar o mapa MIAE colocando o caracter ? no campo
FUNC.JOB-TITLE
498

Trmino do Curso

499

Você também pode gostar