Você está na página 1de 499

Natural Fundamentals

Contedo

Mdulo I - Introduo ao Natural ...................... Mdulo III - Funes Programticas ................. Mdulo IV Mapas ............................................ Mdulo VI Relatrios ...................................... Mdulo VIII - Atualizao a Base de Dados ....... Mdulo IX - Processamento Batch ..................... Apndice A - Editor do Mainframe ..................... Exerccios ..........................................................
2

3 78 193 333 399 413 427 472

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

Mdulo V - Acesso a Base de Dados ................... 267 Mdulo VII - Mapas de Help e Helprotinas ......... 386

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

1960

1970

1980

1990

2000

Cdigo de Mquina

COBOL

Linguagens de 4. gerao

Fim do TELEX

Cdigo Assembler
4

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 Natural Ncleo Natural

ADABAS

DBMS

Online Natural Buffer Pool


User User Work Work Area Area 1 2

Batch Natural Buffer Pool


User

...

Work Area

12

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 WRITE...

Comandos

LOGON RUN SAVE

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... HELP CHECK HELP USER 1234 HELP 0082 HELP LAST
26

Faz isto... 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

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
Global Data Area (GDA) Parameter Data Area (PDA) Local Data Area (LDA) ApplicationIndependent Variables (AIVs) Context

Funo
Define os dados que podem ser compartilhados por mltiplos objetos na aplicao. Referencia os dados que esto definidos tanto na GDA quanto na rea de dados local (LDA). Define os dados que podem ser usados somente pelo objeto. So variveis independentes de qualquer estrutura de dados especfica. Alguns a utilizam para permitir o acesso de subprogramas rea de dados global indiretamente. Usadas com o Natural RPC para variveis disponveis a 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 A N P I F B C D T L

Significado Alfanumrico Numrico (descompactado) Numrico (compactado) Inteiro Ponto Flutuante Binrio Atributo de Controle Data Hora Lgico

Tamanhos Permitidos 1-253 1-29 ou 1-27 (plataforma especfica) 1-29 ou 1-27 (plataforma especfica) 1, 2 ou 4 4 ou 8 1-126 (2)* (6)* (Armazenada como compactada de 4) (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 *NUMBER *COUNTER Nmero de registros

Contedo

Nmero de vezes que o loop foi executado

*PAGE-NUMBER Valor atualizado do nmero da pgina *LIBRARY-ID *PROGRAM *USER *LANGUAGE *CURSOR *ERROR-NR Nome da biblioteca Natural Nome do objeto Natural Identificao do usurio Idioma corrente (1 Ingls) (11 ou 38 Portugus) Posio do cursor Nmero de erro Natural
46

Variveis do Sistema

Nome *DATN *DATE *DATI *DATJ *DATX *TIME *TIMN *TIMX

Formato/Tamanho N8 A8 A8 A5 D A10 N7 T

Formato dos Contedos YYYYMMDD DD/MM/YY YY-MM-DD YYDDD Formato interno HH:MM:SS.T HHMMSST 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

Arquivo C

Arquivo D

DDM1

DDM2

DDM3

DDM5

DDM6 DDM7

DDM4

52

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 ? Se a rea de dados contm...
Muitos campos e/ou precisam estar centralizados. Definies de campos a serem compartilhados. Poucos campos e/ou usado somente por um objeto Natural.

Ento use...
Externa Externa Interna

GDA, PDA ou LDA? Se os dados...


So usados por vrios objetos Natural. So usados por apenas um objeto Natural. So passados por um objeto chamador.
54

O tipo mais indicado ...


GDA ou PDA LDA PDA

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

rea de Dados Interna

56

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 Valor 36732 Sada 367.32

Exemplo B Valor -530 Sada 005.30-

579

579

BLUE

B LUE

A19379

A 19379

BLUE

BLU..E

AAB01

AAB..01

58

Mscaras de Edio

Mscaras de Edio EM=HHH EM=H(3) EM=MM/DD/YY

Exemplo A Valor 100 Use *DATU Sada F1F0F0 01/05/96

Exemplo B Valor ABC Use *DATU Use *DAT4U Use *TIME FALSE Sada C1C2C3 02/30/96 02/30/1996 14.32.54.3 OFF

EM=MM/DD/YYYY Use *DAT4U 01/26/1999 EM=HH.II.SS.T EM=OFF/ON Use *TIME TRUE 08.54.12.7 ON

59

Mscaras de Edio

Mscaras para campos do tipo DATA Cdigo DD, ZD MM, ZM YYYY, YY, ZY WW, ZW JJJ, ZZJ NN, N(n) LL, L(n) R Dia Ms Nmero da semana Ano Dia juliano Nome do dia Nome do ms Ano em numerais romanos Descrio

60

Mscaras de Edio

Mscaras para campos do tipo HORA Cdigo T SS, ZS II, ZI HH, ZH AP Segundos Minutos Hora AM/PM Descrio Dcimos de segundo

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 #MONTH: 01

70

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 - ---- ------------------------------VEHICLES /* INTERN. /* LOCAL/GENERIC /* LOCAL/GENERIC /* LOCAL/GENERIC /* INTERN. /* INTERN.

A A A A N N

8 20 20 10 4.0 8.0

A A A

2 20 20

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 * *

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

77

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 IF/THEN/ELSE DECIDE REPEAT Descrio Testa a condio lgica e divide-se em uma ou duas operaes. Estrutura condicional de mltiplas opes. Usado para criar um processamento de loop. O loop continua at 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! 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.

Exemplo

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


Opes FIRST EVERY ANY Descrio
Para a checagem at a primeira condio verdadeira ser encontrada Checa todas as condies. Processa todas as condies verdadeiras. Processa a declarao se qualquer uma das condies especificadas for verdadeira. Processa as declaraes se todas as condies especificadas forem verdadeiras.

ALL

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 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

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

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 Field Exceeded?

no
Processing loop

yes

end

102

Controle de loop

REPEAT[UNTIL] Condio lgica no incio do loop.

Logical Condition

true
Processing loop

false

end

103

Controle de loop

REPEAT[WHILE] Condio lgica no fim do loop.

Processing loop

Logical Condition

true

false

end

104

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 1 2 3 4 5 IS IS IS IS IS 1.0000000 1.4142135 1.7320508 2.0000000 2.2360679

107

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 ESCAPE TOP ESCAPE BOTTOM[(r)] [IMMEDIATE]* ESCAPE ROUTINE [IMMEDIATE]

Ilustrao

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

Termina e sai do loop para o qual o label se refere. O processamento continua a partir da 1. declarao aps o loop. A rotina atual Natural abandona o controle. Para subrotinas, o processamento continua a partir da 1. declarao aps aquela usada para chamar a subrotina.

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 FALSE FALSE TRUE TRUE FALSE FALSE TRUE TRUE 1 INDEX = INDEX = INDEX = INDEX = INDEX = INDEX = INDEX = INDEX = INDEX = INDEX = 1 1 2 2 3 3 4 4 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 -1 n Descrio 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 GLOBAL USING GDA1 LOCAL 1 #PARM1 (A10) 1 #PARM2 (A10) END-DEFINE FETCH RETURN PGM2 #PARM1 #PARM2 END DEFINE DATA GLOBAL USING GDA1

GDA

LOCAL 1 #ARG1 (A10) 1 #ARG2 (A10) END-DEFINE

NATURAL Stack

INPUT #PARM1 #PARM2 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 ... 0080 ... 0190 0200 0360 ... FETCH PERSON #PERS-NUM #AGE MOVE BRYAN TO #NAME STACK TOP #NAME 30 STACK DATA SMITH ** SATCKING PROGRAM

STACK AFTER LINE 0080 SMITH STACK AFTER LINE 0200 BRYAN,30 SMITH STACK AFTER LINE 0360 100783,28 BRYAN,30 SMITH

126

Programas

Como a pilha recebe os dados


STACK AFTER LINE 0360
0010 0020 ... 0120 0130 ... 0200 INPUT #LASTNAME INPUT #PERS-NUM AGE INPUT #PERS-NAME #NUM ** INPUT PROGRAM ** PERSON

100783,28 BRYAN,30 SMITH STACK AFTER LINE 0130 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


DEFINE DATA END-DEFINE PERFORM XYZ ... DEFINE SUBROUTINE XYZ END-SUBROUTINE END

Subrotina Externa PGM1


DEFINE DATA... END-DEFINE READ... PERFORM SUBRT1 ... DEFINE DATA END-READ END-DEFINE END DEFINE SUBROUTINE SUBRT1 END-SUBROUTINE END

SUBRT1

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
DEFINE DATA END-DEFINE ... CALLNAT SBPGM1 argumentos END

SU PGM1
DEFINE DATA

PDA1 argumentos

PARAMETER USING PDA1 ... END-DEFINE ... 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 PF2 PF3 PF12
Esse cdigo inserido em tempo de compilao dentro do cdigo compilado.

DEFINE DATA END-DEFINE 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 Add Subtract Multiply Divide Parnteses Exponencial
143

Smbolo

+ * / () **

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

Operador
O resultado colocado:

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

-operador2 -operador3

DIVIDE #A INTO #B DIVIDE #A INTO #B GIVING #RESULT

COMPUTE[ROUNDED] {oper1}expresso aritmtica

* / + -

O resultado colocado: -operador1 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. COMPUTE #A = (#A + 1) + (#B / (#C * 8))

145

Calculando Valores

Operador
O resultado colocado: -operador2 -operador3 ADD 7 TO #FIELD1

Descrio
ADD[ROUNDED] oper1TO oper2[GIVING oper3]

ADD 3 TO #FIELD1 GIVING #RESULT

SUBTRACT[ROUNDED] oper1FROM oper2[GIVING oper3]

O resultado colocado: -operador2 -operador3 SUBTRACT #A FROM SALARY SUBTRACT #A FROM SALARY GIVING #NETPAY

MULTIPLY[ROUNDED] oper1BY oper2[GIVING oper3] O resultado colocado: -operador1 -operador3 MULTIPLY #A BY #B 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 1 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

LIMPANDO OS VALORES DAS VARIAVEIS:

0.00

0.00

0.00

0.00

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 MOVE LEFT/RIGHT JUSTIFIED

Copia substrings de um campo para uma varivel. Faz com que o dado seja posicionado esquerda/direita ou 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 1 03-01-16 16:06:34

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

158

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


Opo Descrio
Usado com a opo WITH DELIMITER. O delimitador colocado ALL SUBSTRING LEAVING NO SPACE WITH DELIMITER
160

campo alvo para cada branco que no transferido. Permite transferir parte de um campo. No haver brancos ou qualquer outro delimitador entre os campos. Haver um delimitador especial entre os campos.

Combinando e separando valores

Opo
FULL

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.

NUMERIC

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 ROBERT LILLY EDWARD B P C J JONES JONES JONES JONES JONES VIRGINIA J JONES MARSHA JONES ROBERT B JONES LILLY P 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


Opo
WITH INPUT 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

Descrio
Usa o caracter default de entrada como delimitador.

Combinando e separando valores

Opo
IGNORE REMAINDER RETAINED DELIMITERS

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

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


Clausula
EXAMINE PATTERN EXAMINE SUBSTRING EXAMINE TRANSLATE Transforma os dados de maiscula para minscula atravs de uma tabela de converso. Define uma poro do campo a ser examinada.

Descrio
Examina o campo atravs de um caracter padro.

170

Trabalhando com Strings

Clausula GIVING:
Clausula
GIVING NUMBER GIVING POSITION GIVING LEFT GIVING INDEX
171

Descrio
Nmero de ocorrncias do string.

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.

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 Data com Hora Data com Data Hora com Hora 173 Resultados Colocado no campo Data ou hora Colocado no campo Hora Colocado num campo P6 Colocado num campo P12

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:
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 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 NAME

176

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 uma-dimenso #FLD (A15/5) 1 2 3 4 5 Array de trs-dimenses #FLD(A15/4,5,3)


1 2 3 4
178

Array de duas-dimenses #FLD(A15/5,4) 1 2 3 4 5 1 2 3 4


1 2 3 4

1 2 3 4

Processamento de Array

ndices de array:
ndice
#ARRAY(1)

Descrio
1. ocorrncia de um array unidimensional.. Byte inicial onde o primeiro string foi encontrado.

#ARRAY(7:12)

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:
ndice Descrio

#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

Varivel
C*fieldname

Funo
Retorna o nmero de valores de um mltiplo e o 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) DISPLAY SERIE (1:#J) GR-ANO (1:#J) ASSIGN #HLD = SERIE (#K)

PE:EDUC

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 Controle do usurio Propsito O usurio deveria sempre estar seguro do controle da 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 Controle do usurio

Propsito O usurio deveria sempre estar seguro do controle da interface, e no o contrrio. Isso significa que voc deveria apresentar vrios opes de input e fornecer caminhos com rotas de sada. 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.

Consistncia

Atratividade

197

Construindo uma interface padro para o usurio

Objetivo Feedback

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

Recall

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. 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 Programa

Externo Mapa 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 Representao do Campo Alinhamento do Campo

Variaes Disponveis B = Blinking (flash on and off) I = Intensified (Negrito)

N = No display D = Default L = left-justified (default para campos alfanumricos)

R = right-justified (default para campos alfanumricos) Z = Zero print (imprime zeros de campos nmericos ) A = Campo de input(usurios podem digitar informaes)

Tipo de Campo

M = Campo Modifiable(usurios podem alterar as informaes que o Natural ir apresentar) O = Campo Output (usurios no podem alterar as informaes apresentadas pelo Natural).
205

Conceitos sobre Mapas

Atributo Tamanho das letras no Campo

Variaes Disponveis

T = Transforma tudo no campo para maiscula W = Transforma tudo no campo para minscula

Caracteres de Preenchimento

c = Qualquer caracter que voc escolher para preencher o campo (exemplo: _. O default o espao em branco.

206

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 DATSUN DATSUN DATSUN GIULIETTA 2.0 SPRINT GRAND PRIX QUADRIFOGLIO HORNET AMBASSADOR HORNET QUATRO QUATRO TURBO QUATRO TURBO 100 CD 80 S 300ZX CHERRY SUNNY O RELATORIO ESTA COMPLETO 1985 1984 1984 1977 1983 1977 1983 1983 1986 1982 1980 1986 1983 1981

211

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
... /*Exemplo 1 INPUT USING MAP MENUMAP ... /*Exemplo 2 INPUT WITH TEXT . ENTRE COM SUA OPO . MARK *#CHOICE ALARM . USING MAP MENUMAP . END 213

Mapa Externo
menumap
~~~~

~~~~~ ~ ~~~~ ~~~~~~ ~~~~

~~~~~~

menumap

~~~~

~~~~~ ~ ~~~~ ~~~~~~ ~~~~

ENTRE COM SUA OPO

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)

Meu Mapa

220

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
Nome do campo

Parmetro
s/p

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

Tamanho e Formato
229

s/p

Formato e tamanho. S podem ser alterados para campos criados originalmente no mapa.

Editando Campos do Mapa

Caracterstica
Definio de Atributos

Parmetro
AD

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 Controle Help HE CV 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.

230

Editando Campos do Mapa

Caracterstica
Help

Parmetro
HE

Propsito
Entre com HE=+ abre uma janela para que voc defina at 20 parmetros para 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 de processamento


231

s/p

Nmero atual de regras de processamento definidas para o campo

Editando Campos do Mapa

Caracterstica
Modo de Definio

Parmetro
s/p

Propsito
Indica como o campo foi definido: DATA SYS = selecionados a partir da DEFINE DATA; = varivel de sistema;

UNDEF = criada no mapa e assinalada com um nome dummy; USER VIEW = criada no mapa e definida atravs do editor do campo; = selecionada a partir da DDM.

232

Editando Campos do Mapa

Controlando a exibio do campo Tamanho do campo de exibio AL NL FL Mscara de edio Definio de cor Impresso de zeros EM Altera o tamanho de exibio dos campos mostrando somente as primeiras posies definidas pelo parmetro. Edita especificaes de mscaras dependendo do formato do campo. CD Campos podem ser exibidos com qualquer cor suportada pelo ambiente. Determina se os zeros sero impressos para campos numricos com dados nulos

ZP

233

Editando Campos do Mapa

Controlando a exibio do campo Posio do Sinal SG Determina se alocada ou no uma posio extra no inicio do campo para incluir o seu sinal. Permite alternar definies de caracter e a direo de impresso utilizadas.

Modo de Impresso

PM

234

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 C D I N U V Y 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 GR NE PI RE TU YE Blue Green Neutral Pink Red Turquoise 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 0 1-4 5-24 25-44 45-64

Regra de processamento Regra de Finalizao Regras Automticas Checagem de formato Checagem de valor para campos individuais Checagem de valores entre campos
254

Regras de Processamento

Rank 65-84 85-99

Regra de processamento Acesso ao banco 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 Program function keys 1-24 ENTER key CLEAR key Ligth pen (PA 1-3) (PF 1-24) (ENTR) (CLR) (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 Keyword OFF

Descrio Desativa todas as funes e retorna o controle ao monitor de TP do sistema. Reativa o nome do programa ou do comando definido para a funo. Faz com que todas as chaves tornem-se sensitivas, ou desativa qualquer definio anterior. Quando PFn pressionado, o help acionado. Tambm pode acionar help rotinas e mapas de help. Desativa a PFn.

ON ALL

PFn=HELP PFn=OFF

265

Instruo SET KEY

SET KEY Keyword PFn

Descrio

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 Operacional Human Resources DBMS

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

READ
SOLICITAO

REGISTRO RETORNADO

FIND
SOLICITAO

Employees Vehicles Etc.

SOLICITAO

SOLICITAO

GET

REGISTRO RETORNADO

CONTADOR RETORNADO

HISTOGRAM

272

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

TIPO DE CARRO -----------------------------1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1980 1980 1980 1985 1984 1982 1982 1982 1982 1980 1983 1986 1984 1984 1982 1982 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

COR

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

277

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

TIPO DE CARRO -----------------------------1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 1980 1980 1980 1985 1984 1982 1982 1982 1982 1980 1983 1986 1984 1984 1982 1982 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

COR

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

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

281

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

TIPO DE CARRO -----------------------------1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 1985 1984 1984 1977 1983 1977 1983 1983 1986 1982 1980 1984 1985 1984 1985 1984 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

COR

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

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

285

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 (AD=AIT'_')

288

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 ------------------------------------VIRGINIA JONES MARSHA JONES ROBERT JONES LILLY JONES EDWARD JONES MARTHA JONES LAUREL JONES KEVIN ... 290 SALE30 MGMT10 TECH10 MGMT10 TECH10 SALE00 SALE20 COMP12 20007500 20008400 20021100 20000800 20001100 20002000 20003400 30034045 CURRENT POSITION ------------------------MANAGER DIRECTOR PROGRAMMER SECRETARY DBA TRAINEE SALES PERSON 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 --------11700312 20000900 20021900

ANNUAL SALARY ---------60000 60000 60000

CURRENT POSITION ------------------------SYSTEMBERATER DIRECTOR DIRECTOR

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

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

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

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

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: ____________________

TIPO DE CARRO -----------------------------1 2 3 4 5 6 7 8 9 10 1983 1983 1983 1983 1983 1983 1983 1983 1983 1983 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

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

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:

38

307

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: 45

311

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 PERSONNEL ID --------50005800 50005600 50005500 50005300 50004900 NOME SALARIO

--------ADAM MORENO BLOND MAIZIERE CAOUDAL

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

316

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 -------------------FORD FORD FORD FORD FORD FORD FORD FORD FORD FORD FORD FORD FORD FORD FORD FORD FORD FORD 320

MODEL -------------------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

COLOR ---------BLUE BLUE BLUE BLUE BLUE BLUE BLUE BLUE BLUE BLUE BLUE BLUE BLUE BLUE BLUE BLUE BLUE BLUE

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

GHIA GHIA GHIA GHIA GHIA GHIA GHIA GHIA GHIA

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 1 LILLY 1 GREGORY JONES JONES

329

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 30034233 FORD FORD ESCORT ESCORT 1.3 BLACK GREEN 2 2

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 Orientao da sada Imprime ttulos das pginas automaticamente Imprime cabealhos automaticamente Estouro de linha permitido Espao permitido para os campos no relatrio

DISPLAY Coluna Sim Sim No Determinado pelo campo maior cabealho ou o prprio campo.

WRITE Linha Sim No Sim

Determinado pelo tamanho do campo.

337

Instrues DISPLAY e WRITE

Caractersticas

DISPLAY Controlado pelo parmetro Spacing Factor, mas pode ser sobreposto pelas notaes nX e nT. O padro um espao. Pula uma linha dentro da prpria coluna

WRITE Para obter mais que um espao deve-se usar a notao nX, nT, ou x/y.

Espao entre os campos

Uso da barra /

Inicia uma nova linha a partir da margem esquerda

Impresso de Arrays

Lista verticalmente Lista horizontalmente na coluna atravs da linha.

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

Cdigos Line Size

Parmetros

Valores

Disponvel p/ declarao(es)

LS

10-250

DISPLAY e WRITE

Default=tamanho do dispositivo PS Page Size Default=tamanho do dispositivo SF 1-30 Spacing Factor Alphanumeric Length default=1 1-tamanho da linha 1-tamanho da linha DISPLAY e WRITE DISPLAY 10-250 DISPLAY e WRITE

AL

NL

Numeric Length

DISPLAY e WRITE

340

Parmetros de Sesso

Cdigos

Parmetros

Valores Center, Left, e Rigth default=center

Disponvel p/ declarao(es)

HC

Header Centering

DISPLAY

FC

Filler Character

Qualquer caracter default=branco Qualquer caracter

DISPLAY

GC

Filler character for group headers Underlining character

DISPLAY

default=branco Qualquer caracter default=hfen DISPLAY

UC

DF

Date Format

S - ano com 2 dg. I - ano com 4 dg.

DISPLAY e WRITE

341

Parmetros de Sesso

Cdigos

Parmetros

Valores

Disponvel p/ declarao(es)

IS

Identical Supress

ON/OFF default=ON

DISPLAY, WRITE, FORMAT DISPLAY, WRITE, FORMAT

ES

Supresso de linhas em branco

ON/OFF default=OFF

342

Parmetros de Sesso

Hierrquia:

FIELD LEVEL

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 -------------------ALFA ROMEO GIULIETTA 2.0 ALFA ROMEO SPRINT GRAND PRIX ALFA ROMEO QUADRIFOGLIO AMERICAN MOTOR HORNET COR DO CARRO E MODELO DO ANO -------------VERMELHO 1985 ROT 1984 BLAU-MET. 1984 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 1 03-02-0514:50:23 LOCALIZACAO NAME DEPT -------------------- -------------------- ---ARLINGTON LORIE ELLIOT BRANDIN TECH SALE MGMT

ASHBOURNE

DALE BURTON

PROD TECH

351

Controle de Sada para Relatrios

Exemplo: NEWPAGE
Page 1 03-02-05 14:45:12 LOCALIZACAO NAME DEPT -------------------- -------------------- ---ARLINGTON LORIE ELLIOT BRANDIN TECH SALE MGMT

Page

03-02-05

14:47:43

LOCALIZACAO NAME DEPT -------------------- -------------------- ---ASHBOURNE DALE BURTON 352 PROD TECH

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:

22___

357

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 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

O NUMERO TOTAL DE REGISTROS PROCESSADOS:

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 USING Descrio Especifica at 10 campos de classificao. 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. Define qualquer funo do sistema Natural a ser avaliada no SORT.

GIVE

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

CURRENT POSITION -------------------- -------------------- ------------------------ALBUQUERQUE ANN ARBER ARGONNE ARLINGTON AUSTIN BALTIMORE BEDFORD BERKELEY BEVERLEY HILLS BIRMINGHAM BOSTON BOULDER BUFFALO CAMDEN 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

CITY

NAME

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 -------------------ALBUQUERQUE ALBUQUERQUE ALBUQUERQUE ALBUQUERQUE USA USA USA USA CURRENT POSITION ------------------------SECRETARY MANAGER MANAGER ANALYST MANAGER SALES PERSON ANALYST SECRETARY DBA PROGRAMMER ANNUAL SALARY ---------22000 34000 34000 41000 36000 30000 43000 16000 41500 35000

ANN ARBER USA ANN ARBER USA ANN ARBER USA ARGONNE USA ARGONNE USA ARLINGTON 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 MAX MIN NMIN OLD SUM TOTAL

Retorna essa informao Mdia de todos os valores para um campo. Mdia de todos os valores para um campo, com exceo dos nulos. Valor mximo de um campo. Valor mnimo de um campo. Valor mnimo de campo, com exceo dos nulos. Valor mais antigo do campo. Soma de todos os valores do campo. 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:

1111 Santos______________ NOME: Paula_______________ ?___________________ _ ESCOLHA A CIDADE 1 2 3 4 5 ARARAQUARA ITU POA PINDAMONHANGABA SANTANA DO PARNAIBA OPCAO: _ _________

SALARIO _________

BONUS ________ _________

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:

1111 SANTOS______________ NOME: PAULA_______________ ARARAQUARA__________ ?________________________ SELECIONE O CARGO COM 'X' _ _ _ _ _ ACCOUNTANT ACCOUNTING ACCOUNTING ACCOUNTING ADMIN.BASE

SALARIO _________

BONUS ________ _________

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.
Declarao STORE Descrio Adiciona um novo registro e valores ao campo do registro. 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. Exclui todo o registro. Para que o registro seja excludo, ele deve ser acessado e colocado em hold antes que a excluso ocorra.

UPDATE

DELETE

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
END TRANSACTION (ET) BACKOUT TRANSACTION (BT)

Descrio
Encerra as modificaes do banco. A localizao da declarao ET depende do DBMS. Desconsidera todas as modificaes a partir do ltimo ET.

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 Primary Input Object Input Primary Report Additional Reports Work Files Nomes de Link-OS CMSYNIN CMOBJIN CMPRINT CMPRTnn CMWKFnn Nomes de Link-OS SYSRDR SYSIPT SYSLST SYS041 SYS001SYS032

420

Viso Geral

Parmetros Natural Batch NATPARM INTENS IM PS LS MT MAXCL MADIO* Funo Intensidade p/ sada de relatrios Modo para entrada de terminal Tamanho da pgina Tamanho da linha Limite do tempo de CPU Mximo de objetos eternos chamados entre telas gravadas Mximo de chamadas ao Adabas entre gravaes. Valor 1-10 F/D 5-250 35-250 No limit No limit No limit

* S faz sentido se voc estiver usando arquivos Adabas.


421

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) 1 redefine #registro 2 #reg 3 cidade (a8) 3 filler 2x 3 nome (a20) 2 codigo_emp (n3) 1 emp view of employees 2 codigo_emp 2 nome 2 cidade

define work file 1 c:\w-trab\arq1.txt' read emp by city move by name emp to #reg write work file 1 #registro end-read . read work file 1 [once] #registro move by name #reg to emp 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

*****

NATURAL

*****

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

- Development Functions -

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

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 Mover linhas Inserir linhas .C(nn), .CX(nn), .CY(nn), .CX-Y(nn); .MX, .MY, .MX-Y; .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 -

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

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

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 - -------------------------------- - ---- ---------------------------------

Coluna

Informao Campo de informao (no modificvel pelo usurio):

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

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

Informao

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 Index/Init/EM Name/ Comment

Formato do campo. Tamanho do campo. No preencher para formatos C, D, T e L. Contm comentrios (/*) ou definies tais como: inicializaes (init <3>), mscaras de edies (EM=999.99) e definies de 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

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

443

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 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)

444

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

DBID

23 FNR

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)

0010 0020 0030 0040 0050 0060 0070

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

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 -

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

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

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 Code ---D E I H M S T W ? .

***** NATURAL MAP EDITOR ***** - Edit Map 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

2003-03-05 Library SYSTEM

Code .. I

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 Delimiters ----------------Cls Att CD Del T D BLANK T I ? A D _ A I ) A N ^ M D & M I : O D + O I (

Define Map Settings for MAP 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 Code ---D E I H M S T W ? .

***** NATURAL MAP EDITOR ***** - Edit Map 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

2003-03-05 Library SYSTEM

Code .. W

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 )99999 )99999

471

Exerccios

472

SISTEMA DE FUNCIONRIOS

GDA-F (*) LDA-F (+)

PMENU

MMENU

MHELP

1
PINC *+

2
PALT *+

3
PEXC *+

4
PREL *

HRO1 MIAE HRO2


473

MHRO1

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