Natural Fundamentals
Conteúdo Módulo I - Introdução ao Natural ...................... 3 Módulo II - Área de Dados ........
MÓDULO I - Introdução ao Natural Unidade A - Introdução à Linguagem de 4.ª geração e ao Natural - Introdução à Linguagem...
Introdução à tecnologia de 4.ª geração 1950 1960 1970 1980 1990 2000 Código ...
Introdução à tecnologia de 4.ª geração 5
Introdução à tecnologia de 4.ª geraçãoAs empresas dependentes das linguagens de alto nívelenfrentavam alguns problemas, ta...
Introdução à tecnologia de 4.ª geraçãoAs linguagens de 4.ª geração foram desenvolvidas parasimplificar a computação.Em vez...
Linguagem de 4.ª geração e Natural O Natural é um ambiente de desenvolvimento para produção orientada de tecnologia de 4.ª...
Linguagem de 4.ª geração e Natural • Construct (Gerador de Aplicações); • Predict (Documetação – Dicionário de Dados; • En...
Bibliotecas do Natural Onde o Natural armazena as aplicações criadas pelo usuário? • Após a criação ou modificação de um o...
Bibliotecas do Natural Onde o Natural armazena as bibliotecas? • As bibliotecas do Natural são armazenadas numa estrutura ...
Ambiente Operacional do Natural Ambiente Operacional Natural Núcleo Núcleo...
Ambiente Operacional do NaturalO Natural funciona tanto em modo online como em modo“batch”, mas para executar um programa ...
User Work AreasCada vez que você aciona o Natural, uma área é alocadapara você. Trata-se de uma área de armazenamentotempo...
MÓDULO I - Introdução ao NaturalUnidade B - O que envolve a construção de aplicações Natural- Tipos de objetos Natural e E...
Tipos de Objetos Natural e EditoresHá três grupos principais de objetos Natural:• Objetos Programáticos: Programas (P), Su...
Modo Estruturado vs. Modo Report• Modo Report É útil para a criação de programas simples e pequenos, que não envolvem da...
Modularização O principal motivo para o uso de módulos nas aplicações é devido à facilidade da manutenção. Os vários siste...
ModularizaçãoModelo não-modular Um objeto 19
Modularização Modelo modular 20
MÓDULO I - Introdução ao Natural Unidade C - Visão Geral do Natural - Instruções e Comandos do Natural - Visão Geral ...
Instruções e Comandos Natural O Natural responde a dois tipos de declarações primarias: as instruções e os comandos. As in...
Instruções e Comandos Natural Instruções Comandos READ… ...
MÓDULO I - Introdução ao NaturalUnidade D - O Help do Natural- Help online- Documentação 24
Help OnlineO Help online do Natural fornece informações sobre: • instruções; • variáveis de sistema; • funções do...
Help OnlinePara acessar o help basta digitar a palavra ‘help’ na linha decomando ou ‘?’, ou ainda, pressionar a tecla chav...
Help Online Há vários manuais de documentação sobre o Natural e eles podem variar de acordo com a plataforma que você está...
MÓDULO II - Área de DadosUnidade A - Visão Geral dos Tipos de Dados Disponíveis- Área de Dados- Variáveis do Sistema e...
Data Areas Área de Dados FunçãoGlobal Data Area Define os dados que podem ser c...
Data Areas Área de Dados Interna vs. Externa As áreas de dados podem ser criadas internamente nas linhas de código do seu ...
Data Areas 0010 ****************************************************************** 0020 * EXEMPLO DE DEFINICAO DA AREA...
Data AreasÁrea de Dados GlobalO objetivo da área de dados global é compartilhar dadosentre os objetos Natural. Os objetos ...
Data Areas Vantagens no uso da Global Data Area A vantagem de usar a GDA é que você não precisa definir a passagem de parâ...
Data Areas Lembre-se! • As GDAs só podem ser criadas como estruturas externas; ...
Data AreasParameter Data AreaUma área de parameter é usada para definir elementos dedados que um subprograma, subrotina ou...
Data Areas Lembre-se! • A PDA deve definir todos os campos que estão sendo passado...
Data Areas Lembre-se! • Os parâmetros são passados para um subprograma/routine por...
Data Areas 0010 ****************************************************************** 0020 * EXEMPLO DO USO DA PARAMETER DAT...
Data Areas 0010 ************************************************************* 0020 * EXEMPLO DE UM SUBPROGRAMA QUE R...
Data Areas Local Data Area A área de dados local define os campos que serão utilizados por um objeto específico. Elas pode...
Data Areas Lembre-se! • Em tempo de execução, os dados locais são usados somente p...
Variáveis definidas pelo usuários Se você precisa definir campos diferentes dos encontrados na DDM, defina-os como u...
Variáveis definidas pelo usuários Lembre-se! • Como os demais campos, você deve criar as ...
Variáveis definidas pelo usuários Formato Significado Tamanhos Permitidos A ...
Variáveis do SistemaAs variáveis do sistema contém as informaçõesatualizadas do sistema, tais como: o nome da bibliotecaco...
Variáveis do Sistema Nome Conteúdo *NUMBER Número de registros *COUNTER N...
Variáveis do Sistema Nome Formato/Tamanho Formato dos Conteúdos *DATN ...
Arquivos do Banco de Dados e DDMsArquivo Físico vs. Arquivo LógicoOs dados são armazenados no seu banco em arquivosfísicos...
Arquivos do Banco de Dados e DDMsData Definition Module (DDM)Trata-se de uma visão lógica do arquivo físico. A DDMdefine o...
Arquivos do Banco de Dados e DDMs Data Definition Module (DDM) As seguintes informações estão armazenadas na DDM para cada...
Arquivos do Banco de Dados e DDMs • Supressão de campos no ADABAS; • Situação do campo Descritor/Chave; • Observaçõe...
Arquivos do Banco de Dados e DDMs Database Physical Files ...
Programmatic user Views e Data AreasO que são Programmatic user Views?Trata-se de um subconjunto da DDM, que irá definir o...
Escolhendo a Área de DadosPara escolher corretamente a Área de Dados devemos levar emconsideração a função e o propósito e...
MÓDULO II - Área de DadosUnidade B - Definição de Dados- Área de Dados Interna- Área de Dados Externa- Movendo Defin...
Área de Dados InternaVocê usa o editor de programa para criar a área de dadosinterna. Quando você codifica o seu programa,...
Edição de Máscaras A edição de máscara permite que você mude o formato de exibição de um campo sem mudar o formato e taman...
Máscaras de Edição Máscaras Exemplo A Exemplo B de Edição Valor Saída Val...
Máscaras de Edição Máscaras Exemplo A Exemplo B de Edição Valor Saída Valo...
Máscaras de Edição Máscaras para campos do tipo DATA Código Descrição DD, Z...
Máscaras de Edição Máscaras para campos do tipo HORA Código Descrição T ...
Máscaras de Edição Exemplo de máscara para o formato DATA : DEFINE DATA LOCAL 1 #BIRTH (D) INIT <*DATX> END-DEFINE WRITE #...
Valores IniciaisValores de inicialização (INIT) podem ser atribuídos aos campos da áreade dados interna. Ao defini-los voc...
Exemplo0010 ******************************************************************0020 * ILUSTRA O USO DO EDIT MASK E DOS ...
ExemploContinuação0230 1 #DATE (D) INIT <*DATX>0240 1 #TIME (T) INIT <*TIMX>0250 1 #REPE...
ExemploSaída: #COLOR: T U R Q U O I S E #SSN: 123-45-6789 #DATE: 02-10-02 18:00:50 #MONTH: ...
Redefinição de CamposO Natural permite a redefinição de um grupo ou de umúnico campo da área de dados interna. Uma das raz...
Notação FILLER nX O FILLER é uma opção da cláusula REDEFINE paradefinir o números de bytes que preenchem os campos queestã...
Exemplo0010 ******************************************************0020 * ILUSTRA DECLARACAOREDEFINE COM A OPCAO DE FIL...
ExemploSaída: MAKE: VW DATE-ACQ: 19860115 #MONTH: 01 70
Área de Dados ExternaNo editor da área de dados, você pode definir qualquer tipo de campo,assim como no editor de programa...
Área de Dados Externa Lembre-se! • Campos do banco de dados não podem ser movidos ou ...
Opção FILLER na Área de Dados Externa A opção FILLER também está disponível na área de dados externa, no entanto, não é ...
Movendo Definições de DadosUma das decisões que você precisará tomar ao definir osseus dados será a escolha da área de dad...
Comando Generate E esse comando permite que você mova as definições contidas no editor da área de dados para o editor do p...
Comando .I(xxxxxxxx)(somente para Nat. Mainframe)Esse comando permite que você mova as definições contidas no editordo pro...
Exemplo I T L Name F Leng Index/Init/EM/Name/Comment All - -------------------------------- ...
MÓDULO III - Funções Programáticas Unidade A - Processamento Condicional - Introdução - Tomando uma decisão - Co...
IntroduçãoCondição LógicaPara aplicar funções que envolvem o processamento condicional a seusprogramas, você pode usar qua...
Tomando uma decisãoInstrução IFEssa instrução define uma condição lógica que é executadaem função da condição associada a ...
Tomando uma decisão Lembre-se! • Você pode usar expressões aritméticas com IF. • A c...
Tomando uma decisão Lembre-se! • Você pode combinar vários operadores booleanos ...
Tomando uma decisão Lembre-se! • Você pode usar a opção SUBSTRING para comparar ...
Tomando uma decisão Lembre-se! • Você pode consultar posições selecionadas um ...
Tomando uma decisão Lembre-se! • Você pode verificar se um valor termina com um ...
Tomando uma decisão Lembre-se! • Campos numéricos também podem ser verificados ...
Tomando uma decisão Lembre-se! • Instruções que são embutidas dentro de outras instruç...
Tomando uma decisão 0010 ************************************************************************ 0020 * ILUSTRA O USO DA...
Tomando uma decisão 0200 IF #PID= 0210 ESCAPE BOTTOM 0220 END-IF 0230 FIND EMPL WITH PERSONNEL-ID = #PID 0240...
Tomando uma decisão Lembre-se! • A opção MODIFIED é usada para testar o conteúdo de um ca...
Tomando uma decisãoInstrução DECIDEA instrução DECIDE permite a execução de múltiplas opçõesnum processamento condicional....
Tomando uma decisão Exemplo - DECIDE FOR DECIDE FOR FIRST CONDITION WHEN #FUNCTION =‘A’ AND #PARM =‘X’ PERFORM ROUTIN...
Tomando uma decisão Exemplo - DECIDE ONDECIDE ON FIRST VALUE OF *PF-KEY VALUE ‘PF1’ PERFORM ROUTINE-UPD VALUE ‘PF2’ ...
Tomando uma decisão Declaração DECIDE - OPÇÕES Opções Descrição FIRST Para a checage...
Tomando uma decisão IF vs. DECIDE FOR Como regra geral, o número máximo de IF aninhados num programa é três, pois a depura...
Tomando uma decisãoExemplo com uso da instrução IF:0010 ****************************************************************...
Tomando uma decisão 0210 IF MAR-STAT = S THEN 0220 IF SEX = M THEN 0230 #STATUS := THIS MAN IS SINGLE 0240 ...
Tomando uma decisão Exemplo com uso da instrução DECIDE: 0010 **********************************************************...
Tomando uma decisão 0210 WHEN NONE 0220 #STATUS := STATUS IS UNKNOWN 0230 END-DECIDE 0240 DISPLAY NOTITLE 0250 10...
Tomando uma decisão PERSONNEL NAME MARITAL STATUS ID --------- -----------------...
Controle de loopProcessos de RepetiçãoO Natural fornece duas instruções para ajudar a controlar oprocessamento de loop: FO...
Controle de loop FOR O número exato de repetições é conhecido de antemão. Counter no ...
Controle de loop REPEAT[UNTIL] Condição lógica no início do loop. Logical true Condition ...
Controle de loop REPEAT[WHILE] Condição lógica no fim do loop. Processing loop Logical true ...
Controle de loop Processos de Repetição Se você não definir condição lógica alguma, a saída do loop, com a instrução REPEA...
Controle de loopExemplosNesse primeiro exemplo, a instrução FOR é usada paraincrementar o valor de #INDEX de 1 até 5 a fim...
Controle de loop Saída: THE SQUARE ROOT OF 1 IS 1.0000000 THE SQUARE ROOT OF 2 IS 1.4142135 ...
Controle de loopExemplosNesse segundo exemplo, o REPEAT é usado pararepetidamente permitir que os usuários entrem com umPE...
Controle de loop 0120 REPEAT 0130 INPUT ENTER A PERSONNEL ID #PERS-NR 0140 IF #PERS-NR = 0150 ESCAPE BOTTOM 0160...
Controle de loopExemplosNesse terceiro exemplo, a opção UNTIL do REPEAT é usada para sair doloop quando #X tiver o valor 6...
Controle de loop Saída: #X: 1 #X: 2 #X: 3 #X: 4 #X: 5 #X: 6 111
Controle de loop Finalizando os processamentos de loop • ESCAPE - Finaliza a execução de um processamento de loop baseado ...
Controle de loopFinalizando os processamentos de loop Declaração Ilustração Descrição ESCAPE Re...
Controle de loopFinalizando os processamentos de loopDeclaração Ilustração Descrição ...
Variáveis LógicasO que são variáveis lógicas?Quando o valor de um campo pode ser definido comoverdadeiro/falso, você pode ...
Variáveis LógicasMáscaras de ediçãoPara tornar o uso das variáveis lógicas mais significativo, a edição demáscara EM=FALSE...
Controle de loop Saída: Page 1 TRUE INDEX = 1 TRUE INDEX = 1 FALSE INDEX = 2 FALSE...
MÓDULO III - Funções Programáticas Unidade B - Usando os objetos Natural efetivamente - Programas - Subrotinas - Sub...
ProgramasOs programas são fundamentais para qualquer aplicação.Desde que tenham uma área de dados interna, não precisamde ...
ProgramasA pilha do Natural (stack)A pilha do Natural é uma porção da área de trabalho usadapara guardar informações para ...
Programas Controlando pilha • Usando os objetos programáveis você pode carregar comandos e/ou dados na pilha; • Você...
Programas Passando dados Quando você estiver passando dados de um programa para outro, lembre-se dos seguintes pontos em r...
Programas GDA (Global Data Area) • Inclua o mesmo nome de GDA em ambos objetos- o chamado e o chamador; • Os dados d...
Programas ExemploDEFINE DATA DEFINE DATA GLOBAL USING GDA1 ...
Programas Carregando a pilha • Você pode carregar a pilha usando o comando EXECUTE; • Com as declarações FETH e FETCH ...
Programas Como a pilha recebe os dados 0010 ** SATCKING PROGRAM STACK AFTER LINE 0080 ... ...
Programas Como a pilha recebe os dados STACK AFTER LINE 0360 0010 ** INPUT PROGRAM 002...
SubrotinasAs subrotinas são tipicamente usadas para carregar funçõesespecificas em seu sistema. Você tem dois tipos desubr...
Subrotinas Subrotinas Externas • São codificadas como um objeto separado; • Podem ser acessadas por múltiplos objetos....
Subrotinas Subrotinas Externas • Tudo que você codifica entre as declarações DEFINE SUBROUTINE e END-SUBROUTINE é cons...
Subrotinas Subrotina Interna Subrotina Externa PGM1 PGMA DEFINE DATA...
Subrotinas Prós e contras das subrotinas internas Prós • Auxilia a modularização interna do objeto; • O teste e a dep...
Subrotinas Prós e contras das subrotinas externas Prós • Auxilia a padronização do sistema; • Mantém os módulos com t...
Subrotinas Prós e contras das subrotinas externas Contras • O teste e a depuração envolve muitos objetos; • Aumen...
SubprogramasSubprogramas vs. SubrotinasEm vez de chamar uma subrotina, você pode chamar umsubprograma. Basta emitir a decl...
Subprogramas PGM1 SU PGM1 DEFINE DATA … DE...
Subprogramas Lembre-se! • Os subprogramas fornecem um meio mais eficiente de comparti...
Subprogramas Lembre-se! • Se parâmetros são passados por valor (by value), é o valor ...
CopycodeCom o copycode você pode inserir rotinas especiais dentrodo seu objeto em tempo de compilação em vez de ter quecod...
Copycode Lembre-se! • Você não pode ter a declaração END em seu copycode; ...
Copycode Lembre-se! • O copycode aumenta o tamanho do objeto compilado que o utiliza. ...
MÓDULO III - Funções Programáticas Unidade C - Manipulação de Dados - Calculando valores - Atribuindo valores - Comb...
Calculando ValoresOperadores aritméticosCada operador deve ser precedido por um caracter branco para não serconfundido com...
Calculando Valores Ordem do processamento Os cálculos aritméticos possuem vários operadores para serem processados dentro ...
Calculando Valores Operador Descrição DIVIDE[ROUNDED] oper1 INTO o...
Calculando Valores Operador Descrição ADD[ROUNDED] oper1…TO...
Atribuição de valoresRESETEssa instrução devolve à variável o valor nulo ou seu valororiginal. Os seguintes elementos pode...
Atribuição de valores Exemplo 0010 ************************************************************** 0020 * ILUSTRA O U...
Atribuição de valores Saída: Page 1 03-01-16 15:50:38 DEPOIS DE TER DIVIDI...
Atribuição de valoresRESET com arraysAo fazer uso da instrução RESET com arrays, índices devemser fornecidos. Quando o “as...
Atribuição de valoresExemplo0010 ************************************************************************0020 * ILUSTR...
Atribuição de valoresMOVE vs. ASSIGNEssa instrução copia um valor para dentro de uma variável. A palavraASSIGN pode ser om...
Atribuição de valores Exemplo: 0010 ******************************************************* 0020 * ILUSTRA O USO DA DE...
Atribuição de valores Saída: YEAR MAKE MODEL ----- -------------------- -------------------- 19...
Atribuição de valores Opções da instrução MOVE Opção Descrição Pode s...
Atribuição de valores Opções da instrução MOVE Opção Descrição ...
Atribuição de valores Exemplo da opção MOVE EDITED 0010 *************************************************************** ...
Atribuição de valores Saída: Page 1 03-01-16 16:06:34 #NUMERIC-RESULT: 960120...
Combinando e separando valoresCOMPRESSA instrução COMPRESS combina os valores de dois ou maiscampos em um único campo alfa...
Combinando e separando valores Opções da declaração COMPRESS Opção Descrição ...
Combinando e separando valores Opção Descrição FULL Os valores dos campos fontes ...
Combinando e separando valores Exemplo: 0010 ************************************************************** 0020 * ILU...
Combinando e separando valores Saída: FIRST-NAME MIDDLE-I NAME #FULL-NAME --------------------...
Combinando e separando valoresSEPARATEA instrução SEPARATE divide o conteúdo de um campoalfanumérico em dois ou mais campo...
Combinando e separando valores Opções da declaração SEPARATE Opção Descrição WITH INP...
Combinando e separando valores Opção Descrição IGNORE Evita mensagens de erro quan...
Combinando e separando valores Exemplo: 0010 ************************************************************ 0020 * ILUST...
Combinando e separando valores Saída: #PRODUCT-NAME: ENTIRE APPC SERVER #PRODUCT-CATEGORY: ENTIRE 168
Trabalhando com StringsEXAMINEA instrução EXAMINE varre o conteúdo de um campoalfanumérico ou de um array a procura de um ...
Trabalhando com StringsOpções da instrução EXAMINE Clausula Descrição EXAMINE ...
Trabalhando com StringsClausula GIVING: Clausula Descrição GIVING Número de...
Trabalhando com Strings Exemplo: EXAMINE #TELE FOR PATTERN ‘(…)’ GIVING NUMBER #NUMBER EXAMINE #NAME FOR ‘ ‘ GIVING NUMBER...
Trabalhando com Data e HoraNo natural os campos Data e Hora têm seus próprios formatos: D paradata e T pata hora. Quando o...
Trabalhando com Data e Hora Exemplo: 0010 *************************************************************** 0020 * ILU...
Trabalhando com Data e Hora Exemplo: 0190 READ (10) EMPL BY NAME FROM A 0200 MOVE EDITED #LEAVE-START-A TO #START-DATE (...
Trabalhando com Data e Hora Saída: NAME PERSONNEL LEAVE LEAVE LEAVE I...
Processamento de ArrayArrays são tabelas multi-dimensionais com dois ou maisdados logicamente relacionados e identificados...
Processamento de ArrayArray de uma-dimensão Array de duas-dimensões #FLD (A15/5) ...
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
Natural Fundamentals - Consist
of 499

Natural Fundamentals - Consist

Curso de Natural da Consist
Published on: Mar 3, 2016
Published in: Technology      
Source: www.slideshare.net


Transcripts - Natural Fundamentals - Consist

  • 1. Natural Fundamentals
  • 2. Conteúdo Módulo I - Introdução ao Natural ...................... 3 Módulo II - Área de Dados ................................. 28 Módulo III - Funções Programáticas ................. 78 Módulo IV – Mapas ............................................ 193 Módulo V - Acesso a Base de Dados ................... 267 Módulo VI – Relatórios ...................................... 333 Módulo VII - Mapas de Help e Helprotinas ......... 386 Módulo VIII - Atualização a Base de Dados ....... 399 Módulo IX - Processamento Batch ..................... 413 Apêndice A - Editor do Mainframe ..................... 427 Exercícios .......................................................... 472 2
  • 3. MÓDULO I - Introdução ao Natural Unidade A - Introdução à Linguagem de 4.ª geração e ao Natural - Introdução à Linguagem de 4.ª Geração - O que torna o Natural tão atraente - Bibliotecas - Ambiente operacional Natural - User Work Areas 3
  • 4. Introdução à tecnologia de 4.ª geração 1950 1960 1970 1980 1990 2000 Código Linguagens Fim de de do COBOL Máquina 4.ª geração TELEX Código Windows Assembler 4
  • 5. Introdução à tecnologia de 4.ª geração 5
  • 6. Introdução à tecnologia de 4.ª geraçãoAs empresas dependentes das linguagens de alto nívelenfrentavam alguns problemas, tais como:• O desenvolvimento de uma aplicação levava muito tempopara ser concluída, as vezes, anos;• As modificações e manutenções nos aplicativos eramdemoradas e muito caras;• O processo de depuração de erros era extremamentetedioso. 6
  • 7. Introdução à tecnologia de 4.ª geraçãoAs linguagens de 4.ª geração foram desenvolvidas parasimplificar a computação.Em vez dos códigos de máquina, dos códigos assembler edas linguagens de alto nível do passado, foi adotada paraas 4GL comandos mais textuais em inglês, com poucasinstruções, de fácil manutenção e capaz de acessar obanco de dados diretamente. 7
  • 8. Linguagem de 4.ª geração e Natural O Natural é um ambiente de desenvolvimento para produção orientada de tecnologia de 4.ª geração e um poderoso ambiente portável de execução. A SAGA oferece outros produtos que, junto com Natural funcionam como um completo sistema de informação de software. Entre eles: • ADABAS C; • ADABAS D (Relacional); • Natural Engineering Workbench; • Natural for Windows; 8
  • 9. Linguagem de 4.ª geração e Natural • Construct (Gerador de Aplicações); • Predict (Documetação – Dicionário de Dados; • Entire Connection (Emulação e Transferência de dados); • Super Natural (Data Query); • EntireX (integrador de aplicações); • Natural Web (internet / intranet). 9
  • 10. Bibliotecas do Natural Onde o Natural armazena as aplicações criadas pelo usuário? • Após a criação ou modificação de um objeto, você deve armazená-lo numa biblioteca, caso contrário, você perderá todo seu trabalho ao finalizar a sessão. • Ao armazenar um objeto, ambos, o código fonte e o código 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
  • 11. Bibliotecas do Natural Onde o Natural armazena as bibliotecas? • As bibliotecas do Natural são armazenadas numa estrutura do banco de dados ou diretórios (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 convenção, o nome da biblioteca deve ter até oito caracteres, sendo o primeiro, alfanumérico. 11
  • 12. Ambiente Operacional do Natural Ambiente Operacional Natural Núcleo Núcleo Natural Natural ADABAS DBMS Online Natural “Batch” Natural Buffer Pool Buffer Pool User User User Work Work Work Area Area ... Area 1 2 12
  • 13. Ambiente Operacional do NaturalO 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 ambienteoperacional Natural:• Núcleo Natural;• Natural Buffer Pool• As áreas de trabalho do usuário (user work areas)• Arquivos para roll-ins/roll-outs das threads (mainframe) e• Systems Files 13
  • 14. User Work AreasCada vez que você aciona o Natural, uma área é alocadapara você. Trata-se de uma área de armazenamentotemporária composta de vários buffers.Cada buffer é alocado para um propósito especifico. Há um,por exemplo, que armazena o código fonte do seu objetoNatural. Há um outro que, durante a execução de umprograma, retêm os valores dos dados para os campos queestão sendo utilizados.Os nomes dos buffers em sua área de trabalho irão variarem função da plataforma utilizada (MVS, Open VMS,Windows ou Unix). 14
  • 15. MÓDULO I - Introdução ao NaturalUnidade B - O que envolve a construção de aplicações Natural- Tipos de objetos Natural e Editores- Modo Estruturado vs. Modo Report- Modularização 15
  • 16. Tipos de Objetos Natural e EditoresHá três grupos principais de objetos Natural:• Objetos Programáticos: 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 têm o seu próprio editor, que éaberto quando você escolhe o tipo de objeto com o qualvocê irá trabalhar. 16
  • 17. Modo Estruturado vs. Modo Report• Modo Report É útil para a criação de programas simples e pequenos, que não envolvem dados complexos e/ou lógica de programação.• Modo Estruturado É usado em aplicações complexas, fornecendo uma estrutura clara e bem-definida do programa. • Esses programas são mais fáceis de serem lidos, facilitando também sua manutenção; • Todos os campos usados no programa são definidos numa única localização. 17
  • 18. Modularização O principal motivo para o uso de módulos nas aplicações é devido à facilidade da manutenção. Os vários sistemas de aplicações com que você trabalha possui diferentes exigências. Em vez de tentar programar todas essas funções em um único e grande programa, é mais fácil agrupar essas funções em pequenos módulos. Isto exige um planejamento antecipado. 18
  • 19. ModularizaçãoModelo não-modular Um objeto 19
  • 20. Modularização Modelo modular 20
  • 21. MÓDULO I - Introdução ao Natural Unidade C - Visão Geral do Natural - Instruções e Comandos do Natural - Visão Geral 21
  • 22. Instruções e Comandos Natural O Natural responde a dois tipos de declarações primarias: as instruções e os comandos. As instruções são usadas para codificar o seu programa, e os comandos para gerenciar o ambiente. • Instruções Dividem-se em cinco grupos funcionais: Definição de dados, acesso aos dados, manipulação de dados, modificação de dados e exibição de dados. • Comandos Executam funções da sessão 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
  • 23. Instruções e Comandos Natural Instruções Comandos READ… LOGON… DISPLAY… RUN FIND… SAVE WRITE... Define programas Natural Gerencia o ambiente Natural Executa funções de sessão 23
  • 24. MÓDULO I - Introdução ao NaturalUnidade D - O Help do Natural- Help online- Documentação 24
  • 25. Help OnlineO Help online do Natural fornece informações sobre: • instruções; • variáveis de sistema; • funções do sistema; • comandos; • editores; • utilitários; • parâmetros da sessão; • comandos de terminal; • mensagens do sistemas e mensagens definidas pelo usuário. 25
  • 26. Help OnlinePara acessar o help basta digitar a palavra ‘help’ na linha decomando ou ‘?’, ou ainda, pressionar a tecla chave paraessa função (geralmente PF1). No caso do NaturalWindows, para acessar o help basta clicar na barra demenus o item Help.Se você souber exatamente que tipo de auxílio solicitar,poderá dirigir-se diretamente para a tela de help específicaseguida do parâmetro que foi solicitado. Por exemplo: Este comando... Faz isto... HELP CHECK Explica o comando Natural ‘CHECK’ HELP USER 1234 Exibe a mensagem de usuário completa do erro n.º 1234 HELP 0082 Exibe a mensagem Natural completa n.º 0082 HELP LAST Exibe o texto do última comando 26
  • 27. Help Online Há vários manuais de documentação 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; • User’s Guide e • Programmer’s Guide. Além disso, a SAGA disponibiliza via CD-ROM uma documentação eletrônica contendo todos os manuais citados acima e suas respectivas atualizações. 27
  • 28. MÓDULO II - Área de DadosUnidade A - Visão Geral dos Tipos de Dados Disponíveis- Área de Dados- Variáveis do Sistema e Definidas pelo Usuário- Dados do Banco- Escolhendo a Área de Dados 28
  • 29. Data Areas Área de Dados FunçãoGlobal Data Area Define os dados que podem ser compartilhados por múltiplos(GDA) objetos na aplicação.Parameter Data Area Referencia os dados que estão definidos tanto na GDA quanto(PDA) na área de dados local (LDA).Local Data Area Define os dados que podem ser usados somente pelo objeto.(LDA)Application- São variáveis independentes de qualquer estrutura de dadosIndependent específica. Alguns a utilizam para permitir o acesso deVariables (AIVs) subprogramas à área de dados global indiretamente.Context Usadas com o Natural RPC para variáveis disponíveis a múltiplos subprogramas remotos com uma conversação. 29
  • 30. Data Areas Área de Dados Interna vs. Externa As áreas de dados podem ser criadas internamente nas linhas de código do seu programa, ou externamente, e acessadas quando forem necessárias. Você pode ter múltiplas PDAs e LDAs, mas somente uma GDA por aplicação. 30
  • 31. Data Areas 0010 ****************************************************************** 0020 * EXEMPLO DE DEFINICAO DA AREA DE DADOS GLOBAL, PARAMETER, * 0030 * LOCAL EXTERNA E LOCAL INTERNA * 0040 * NOME DO PROGRMA : PEXEMPLO * 0050 ****************************************************************** 0060 DEFINE DATA 0070 GLOBAL USING MAINGLOB 0080 PARAMETER 0090 1 #PARM1 (A10) 0100 1 #PARM2 (A20) 0110 LOCAL USING LDA1 0120 LOCAL 0130 1 PEOPLE VIEW OF EMPLOYEES 0140 2 PERSONNEL-ID 0150 2 NAME 0160 1 #DATA (A6) 0170 END-DEFINE 31
  • 32. Data AreasÁrea de Dados GlobalO objetivo da área de dados global é compartilhar dadosentre os objetos Natural. Os objetos que podemcompartilhar dados globais são: • Programas; • Subrotinas e • Helprotinas. 32
  • 33. Data Areas Vantagens no uso da Global Data Area A vantagem de usar a GDA é que você não precisa definir a passagem de parâmetros do objeto chamador para o chamado. Além disso, ela fornece dados para vários programas com muito menos espaço que as áreas de dados individuais dos programas (usa-se a área ESIZE). 33
  • 34. Data Areas Lembre-se! • As GDAs só podem ser criadas como estruturas externas; • A GDA deve ser o objeto mais antigo da aplicação. Caso você precise criar uma GDA numa aplicação existente ou modificá-la, todos os demais objetos deverão ser recompilados; • Deve haver apenas uma GDA por aplicação; • Múltiplas GDAs podem ser usadas dentro de uma aplicação somente quando usada conjuntamente com subprogramas. • Programas, subrotinas e rotinas de help podem acessar a GDA. 34
  • 35. Data AreasParameter Data AreaUma área de parameter é usada para definir elementos dedados que um subprograma, subrotina ou uma help rotinausa para receber e retornar dados para um módulochamador. Ela pode ser definida internamente noprograma ou ser um módulo externo. Os objetos quepodem usar uma PDA são: • Subprogramas; • Helprotinas e • Subrotinas Externas. 35
  • 36. Data Areas Lembre-se! • A PDA deve definir todos os campos que estão sendo passados para ela; • Os campos devem ser definidos na seqüência exata, com os mesmos formatos e tamanhos que foram definidos no objeto chamador (a não ser que se use a cláusula by value). Os nomes dos campos podem ser diferentes no objeto chamador. Isto permite ao objeto ser usado por diferentes aplicações; • User views não podem ser definidas na PDA. 36
  • 37. Data Areas Lembre-se! • Os parâmetros são passados para um subprograma/routine por referência (conforme seus endereços). A opção BY VALUE, significa que os valores atuais dos parâmetros são passados e não apenas o endereço, assim, formato e tamanho não precisam coincidir; Exemplo: Define data parameter #NAME (A20) BY VALUE • A cláusula BY VALUE RESULT faz com que os parâmetros sejam passados por valor em ambas as direções (no envio e no recebimento). 37
  • 38. 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 parâmetros para a PDA 0180 DISPLAY NAME PERSONNEL-ID SALARY (1) #TAX DEPT 0190 END-READ 0200 END 38
  • 39. Data Areas 0010 ************************************************************* 0020 * EXEMPLO DE UM SUBPROGRAMA QUE RECEBE PARAMETROS * 0030 * NOME DO SUBPROGRAMA: SUBPEXEM * 0040 ************************************************************* 0050 DEFINE DATA 0060 PARAMETER 0070 1 #SALARY (P9) PDA 0080 1 #TAX (P6.3) 0090 END-DEFINE 0100 * 0110 COMPUTE #TAX = #SALARY * .045 0120 END 39
  • 40. Data Areas Local Data Area A área de dados local define os campos que serão utilizados por um objeto específico. Elas podem ser definidas internamente ou como um módulo externo. Diferentes objetos podem usar as definições de uma LDA, mas não podem compartilhar os dados em tempo de execução. Em tempo de execução os valores dos dados são retidos num buffer da sua área de trabalho. 40
  • 41. Data Areas Lembre-se! • Em tempo de execução, os dados locais são usados somente pelo objeto que define a LDA. Dois objetos programáticos podem compartilhar as definições de uma LDA, mas não 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 espaço de seu buffer. 41
  • 42. Variáveis definidas pelo usuários Se você precisa definir campos diferentes dos encontrados na DDM, defina-os como user-defined variables. Há três importantes razões para o uso desse tipo de campo: 1. Exibir informações geradas pelo usuário; 2. Para armazenagem intermediária de dados; 3. Para criar contadores. Toda variável definida pelo usuário deve ter nome e formato. 42
  • 43. Variáveis definidas pelo usuários Lembre-se! • Como os demais campos, você deve criar as user-defined variables dentro da estrutura da instrução DEFINE DATA, ou então numa área de dados externa; • Defina primeiro o formato de um campo e depois o tamanho; • Costuma-se iniciar as variáveis definidas pelo usuário com o caracter (#); • Os nomes dos campos podem ter entre 1-32 caracteres. 43
  • 44. Variáveis definidas pelo usuários Formato Significado Tamanhos Permitidos A Alfanumérico 1-253 N Numérico (descompactado) 1-29 ou 1-27 (plataforma específica) P Numérico (compactado) 1-29 ou 1-27 (plataforma específica) I Inteiro 1, 2 ou 4 F Ponto Flutuante 4 ou 8 B Binário 1-126 C Atributo de Controle (2)* D Data (6)* (Armazenada como compactada de 4) T Hora (12)* (Armazenada como compactada de 7) L Lógico (1)* * Os números entre parênteses indicam valores que você não pode alterar, portanto, para essas variáveis, não é preciso definir o tamanho. 44
  • 45. Variáveis do SistemaAs variáveis do sistema contém as informaçõesatualizadas do sistema, tais como: o nome da bibliotecacorrente, do usuário e do terminal, etc.A variável de sistema é facilmente reconhecida pois oprimeiro caracter é um asterisco(*). Data e HoraEssas variáveis contém a data e a hora em váriosformatos. Você pode exibi-las através das declaraçõesDISPLAY, WRITE e MOVE. Veja o exemplo: WRITE *DATE *TIME 01/01/96 12:00:00.9 45
  • 46. Variáveis do Sistema Nome Conteúdo *NUMBER Número de registros *COUNTER Número de vezes que o loop foi executado *PAGE-NUMBER Valor atualizado do número da página *LIBRARY-ID Nome da biblioteca Natural *PROGRAM Nome do objeto Natural *USER Identificação do usuário *LANGUAGE Idioma corrente (1 – Inglês) (11 ou 38 – Português) *CURSOR Posição do cursor *ERROR-NR Número de erro Natural 46
  • 47. Variáveis do Sistema Nome Formato/Tamanho Formato dos Conteúdos *DATN N8 YYYYMMDD *DATE A8 DD/MM/YY *DATI A8 YY-MM-DD *DATJ A5 YYDDD *DATX D Formato interno *TIME A10 HH:MM:SS.T *TIMN N7 HHMMSST *TIMX T Formato internoPara cada variável de sistema DATA corresponde outra que inclui o ano com 4 dígitos, exemplo:*DAT4E, *DAT4I, *DAT4J. 47
  • 48. Arquivos do Banco de Dados e DDMsArquivo Físico vs. Arquivo LógicoOs dados são armazenados no seu banco em arquivosfísicos (tabelas). Para acessar esses arquivos com umadas velhas linguagens de programação, você deveescrever rotinas de acesso, checar os return codes eextrair os dados antes de processá-los.Com o Natural esse processo tedioso foi eliminado. Elepode usar arquivos lógicos e criar esse acesso para você. 48
  • 49. Arquivos do Banco de Dados e DDMsData Definition Module (DDM)Trata-se de uma visão lógica do arquivo físico. A DDMdefine os campos do banco que vão ser usados noprograma. Os campos de uma DDM podem compreendertodos os campos definidos no arquivo do banco, ouapenas um subconjunto desses campos.Dependendo do seu DBMS, seu sistema pode ter mais queuma DDM por arquivo.O uso de DDMs também promove independência dosdados nos programas. 49
  • 50. Arquivos do Banco de Dados e DDMs Data Definition Module (DDM) As seguintes informações estão armazenadas na DDM para cada campo: • Tipo de campo (grupo, elementar, MU e/ou PE); • Nível do campo na estrutura; • Nome do campo no banco; • Nome do campo no Natural; • Formato; • Tamanho; 50
  • 51. Arquivos do Banco de Dados e DDMs • Supressão de campos no ADABAS; • Situação do campo Descritor/Chave; • Observações e/ou comentários. 51
  • 52. 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 DDM4 DDM7 52
  • 53. Programmatic user Views e Data AreasO que são Programmatic user Views?Trata-se de um subconjunto da DDM, que irá definir oscampos que seu objeto Natural irá usar.Instrução Define DataVocê define sua programmatic user view na área de dadosdentro da instrução DEFINE DATA. Para verificar a sintaxeapropriada para essa instrução, veja o exemplo: DEFINE DATA LOCAL 1 cars view of vehicles /* cars é a user view e vehicles é a DDM END-DEFINE 53
  • 54. Escolhendo a Área de DadosPara escolher corretamente a Área de Dados devemos levar emconsideração a função e o propósito e cada uma delas. Observe atabela abaixo: Interna ou Externa ? Se a área de dados contém... Então use...Muitos campos e/ou precisam estar centralizados. ExternaDefinições de campos a serem compartilhados. ExternaPoucos campos e/ou é usado somente por um objeto Natural. Interna GDA, PDA ou LDA? Se os dados... O tipo mais indicado é...São usados por vários objetos Natural. GDA ou PDASão usados por apenas um objeto Natural. LDASão passados por um objeto chamador. PDA 54
  • 55. MÓDULO II - Área de DadosUnidade B - Definição de Dados- Área de Dados Interna- Área de Dados Externa- Movendo Definições de Dados- DBMS- Modelos de Banco de Dados 55
  • 56. Área de Dados InternaVocê usa o editor de programa para criar a área de dadosinterna. Quando você codifica o seu programa, énecessário definir dentro da declaração DEFINE DATAtodos 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 Área de Dados Interna 2 COLOR 1 #NAME (A20) END-DEFINE … 56
  • 57. Edição de Máscaras A edição de máscara permite que você mude o formato de exibição de um campo sem mudar o formato e tamanho do próprio campo. As principais razões para usar uma máscara de edição são: • Mudar a aparência da informação que vai ser exibida; • Remover dados desnecessários de um campo; • Economizar espaço de armazenamento. 57
  • 58. Máscaras de Edição Máscaras Exemplo A Exemplo B de Edição Valor Saída Valor SaídaEM=999.99- 36732 367.32 -530 005.30-EM=9(3).9(2)-EM=ZZZZZ9 0 0 579 579EM=Z(5)9(1)EM=X^XXXXX BLUE B LUE A19379 A 19379EM=X(1)X(5)EM=XXX..XX BLUE BLU..E AAB01 AAB..01EM=X(3)..X(2) 58
  • 59. Máscaras de Edição Máscaras Exemplo A Exemplo B de Edição Valor Saída Valor SaídaEM=HHH 100 F1F0F0 ABC C1C2C3EM=H(3)EM=MM/DD/YY Use *DATU 01/05/96 Use *DATU 02/30/96EM=MM/DD/YYYY Use *DAT4U 01/26/1999 Use *DAT4U 02/30/1996EM=HH.II.SS.T Use *TIME 08.54.12.7 Use *TIME 14.32.54.3EM=OFF/ON TRUE ON FALSE OFF 59
  • 60. Máscaras de Edição Máscaras para campos do tipo DATA Código Descrição DD, ZD Dia MM, ZM Mês YYYY, YY, ZY Número da semana WW, ZW Ano JJJ, ZZJ Dia juliano N…N, N(n) Nome do dia L…L, L(n) Nome do mês R Ano em numerais romanos 60
  • 61. Máscaras de Edição Máscaras para campos do tipo HORA Código Descrição T Décimos de segundo SS, ZS Segundos II, ZI Minutos HH, ZH Hora AP AM/PM 61
  • 62. Máscaras de Edição Exemplo de máscara para o formato DATA : DEFINE DATA LOCAL 1 #BIRTH (D) INIT <*DATX> END-DEFINE WRITE #BIRTH (EM=NNNNNNNN’, ’LLLLLLLLLL’ ‘DD’th’) END Saída: Monday, September 28th 62
  • 63. Valores IniciaisValores de inicialização (INIT) podem ser atribuídos aos campos da áreade dados interna. Ao defini-los você estará sobrescrevendo o valor nuloque é o default de um campo. Para campos alfanuméricos, o valor nulodefault é ‘ ‘(branco) , para campos numéricos é (0), para variáveislógicas´, FALSE e para as variáveis de controle, (AD=D). Lembre-se! • Os valores de inicialização para campos alfanuméricos devem estar entre apóstrofes; • As variáveis de sistema podem ser usadas para inicializar variáveis definidas pelo usuário; • Valores de inicialização para ocorrências de array devem ser separados por vírgula, ou os índices devem ser especificados para definir os valores iniciais de cada ocorrência do array. 63
  • 64. Exemplo0010 ******************************************************************0020 * ILUSTRA O USO DO EDIT MASK E DOS INIT0030 ******************************************************************0040 DEFINE DATA0050 LOCAL0060 1 #COLOR (A10) INIT <TURQUOISE>0070 (EM=X X X X^X^X^X^X^X)0080 1 #SSN (N9) (EM=999-99-9999)0090 1 #MONTH (A3/12) INIT <JAN,FEV,MAR,ABR,MAI,JUN,0100 JUL,AGO,SET,OUT,NOV,DEZ>0110 1 #COUNTRY-MENU (9)0120 2 #SELECT (N1) INIT <1,2,3,4,5,6,7,8,9>0130 2 #COUNTRY-TEXT (A20)0140 INIT (1) <AUSTRALIA>0150 (2) <CANADA>0160 (3) <INGLATERRA>0170 (4) <FRANCA>0180 (5) <ALEMANHA>0190 (6) <JAPAO>0200 (7) <ESPANHA>0210 (8) <ESTADOS UNIDOS>0220 (9) <IOGUSLAVIA> 64
  • 65. ExemploContinuação0230 1 #DATE (D) INIT <*DATX>0240 1 #TIME (T) INIT <*TIMX>0250 1 #REPEAT (L) INIT <TRUE>0260 END-DEFINE0270 *0280 #SSN := 1234567890290 *0300 WRITE NOTITLE0310 / 10T = #COLOR (CD=YE)0320 // 10T = #SSN (CD=GR)0330 // 10T = #DATE #TIME (CD=PI)0340 // 10T = #MONTH(1:12)(CD=RE)/0350 *0360 DISPLAY NOHDR #COUNTRY-MENU (*)0370 END 65
  • 66. ExemploSaída: #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 AUSTRALIA 2 CANADA 3 INGLATERRA 4 FRANCA 5 ALEMANHA 6 JAPAO 7 ESPANHA 8 ESTADOS UNIDOS 9 IOGUSLAVIA 66
  • 67. Redefinição de CamposO Natural permite a redefinição de um grupo ou de umúnico campo da área de dados interna. Uma das razõespara redefinir campos é a necessidade de usar trechos decampos, tais como o ano, o mês e/ou o dia de um campoDATA-ACQ, por exemplo.A cláusula para redefinição de campos é REDEFINE. Elairá definir os trechos que compõem o campo a serredefinido. Esses trechos também podem ser camposdefinidos pelo usuário ou um FILLER (bytes que não têmnenhum significado específico para o objeto em questão). 67
  • 68. Notação FILLER nX O FILLER é uma opção da cláusula REDEFINE paradefinir o números de bytes que preenchem os campos queestão sendo redefinidos. É importante lembrar que quandose usa essa notação, não é preciso especificar qualquerformato e tamanho entre os parênteses - a notação nXbasta. 68
  • 69. Exemplo0010 ******************************************************0020 * ILUSTRA DECLARACAOREDEFINE COM A OPCAO DE FILLER0030 ******************************************************0040 DEFINE DATA0050 LOCAL0060 1 CAR VIEW OF VEHICLES0070 2 PERSONNEL-ID0080 2 MAKE0090 2 DATE-ACQ0100 2 REDEFINE DATE-ACQ0110 3 FILLER 4X0120 3 #MONTH (A2)0130 3 FILLER 2X0140 END-DEFINE0150 *0160 FIND (1) CAR WITH PERSONNEL-ID = 111001060170 WRITE NOTITLE / 10T = MAKE0180 / 10T = DATE-ACQ 5X = #MONTH0190 END-FIND0200 END 69
  • 70. ExemploSaída: MAKE: VW DATE-ACQ: 19860115 #MONTH: 01 70
  • 71. Área de Dados ExternaNo editor da área de dados, você pode definir qualquer tipo de campo,assim como no editor de programa. Se você estiver definindo umauser-variable, entre com o número do nível, o nome, formato etamanho diretamente. Se for usar campos da DDM, você deve usar umcomando para “puxar” os campos selecionados. O Natural traz oscampos com seus respectivos nomes, tamanhos e formatosautomaticamente para você.Além da DDM, os dados podem ser inseridos na sua área de dadosexterna usando o comando .I(xxxxxxxx) (válido somente para o editorNatural no mainframe), a partir dos seguintes objetos: Mapas,Programas, Subprogramas, Subrotinas e Helprotinas.Dependendo de como o seu sistema está parametrizado, o naturalpoderá dar um nome default à sua user-view; para sobrescrever essenome, basta digitar o nome de sua preferência sobre o campo. 71
  • 72. Área de Dados Externa Lembre-se! • Campos do banco de dados não podem ser movidos ou copiados; • Os formatos e tamanhos dos campos do banco de dados não podem ser mudados; • Os campos do banco dados não podem ser renomeados; • Os campos do banco de dados podem ser redefinidos usando a instrução REDEFINE; • Os valores de inicialização não podem ser definidos para campos do banco de dados. 72
  • 73. Opção FILLER na Área de Dados Externa A opção FILLER também está disponível na área de dados externa, no entanto, não é preciso mencionar a keyword FILLER quando usar essa opção, nem o formato e tamanho. I T L Name F Leng Index/Init/EM/Name/Comment All - -------------------------------- - ---- ------------------------------- -- V 1 VEHICLES-VIEW VEHICLES 2 PERSONNEL-ID A 8 /* INTERN. 2 MAKE A 20 /* LOCAL/GENERIC 2 MODEL A 20 /* LOCAL/GENERIC 2 COLOR A 10 /* LOCAL/GENERIC 2 YEAR N 4.0 /* INTERN. 2 DATE-ACQ N 8.0 /* INTERN. R 2 DATE-ACQ 3 4X 3 #MONTH A 2 3 2X 1 #START-MAKE A 20 1 #END-MAKE A 20 73
  • 74. Movendo Definições de DadosUma das decisões que você precisará tomar ao definir osseus dados será a escolha da área de dados. Além disso,pode haver a necessidade de mover as definições dosdados de uma área externa para uma área de dadosinterna (ou vice-versa). Há dois comandos para isso: • Generate - Usado para mover as definições de uma área de dados externa para uma área de dados interna. • I(xxxxxxxx)- Usado para mover as definições de uma área de dados interna para uma área de dados externa (válido somente para o editor Natural no mainframe). 74
  • 75. Comando Generate E esse comando permite que você mova as definições 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 definições são colocadas na LDA do copycode. Para aproveitar essas definições num programa, basta digitar o comando SET TYPE “P” para mudar o tipo de objeto de copycode para programa. 75
  • 76. Comando .I(xxxxxxxx)(somente para Nat. Mainframe)Esse comando permite que você mova as definições contidas no editordo programa para uma área de dados externa. Antes de inserir essasdefinições, devemos nos certificar que o objeto que contém os dados aserem “puxados” foi previamente catalogado.Emitir o comando .I(<nome do objeto>) na última linha editada da áreade dados, ou então na primeira linha do editor, caso não haja nenhumcampo editado.Selecione os campos que deseja incluir na área de dados através deuma das seguintes opções: • All local variables and parameters • All local variables • Only internally defined local variables • All parameters • Only internally defined parameters 76
  • 77. Exemplo I T L Name F Leng Index/Init/EM/Name/Comment All - -------------------------------- - ---- ------------------------------ V 1 CARS VEHICLES 2 REG-NUM A 15 /* LOCAL FORMAT 2 PERSONNEL-ID A 8 /* INTERN. 2 MAKE A 20 /* LOCAL/GENERIC 2 MODEL A 20 /* LOCAL/GENERIC 2 COLOR A 10 /* LOCAL/GENERIC 2 COLOUR A 10 /* LOCAL/GENERIC 2 YEAR N 4.0 /* INTERN. * /* INSERTED FROM SANPGM01 1 #OPTION A 1 * /* INSERTED FROM SANMAP01 V 1 EMPL EMPLOYEES 2 PERSONNEL-ID A 8 * /* END OF SANMAP01 * /* END OF SANPGM01 77
  • 78. MÓDULO III - Funções Programáticas Unidade A - Processamento Condicional - Introdução - Tomando uma decisão - Controle de loop - Variável lógica - Resumo 78
  • 79. IntroduçãoCondição LógicaPara aplicar funções que envolvem o processamento condicional a seusprogramas, você pode usar qualquer uma das declarações abaixo. Condição Lógica Descrição IF/THEN/ELSE Testa a condição lógica e divide-se em uma ou duas operações. DECIDE Estrutura condicional de múltiplas opções. Usado para criar um processamento de loop. O loop continua até REPEAT que uma certa condição seja satisfeita, ou até que um determinado número de iterações tenha sido completado. Usado para criar um processamento de loop. O loop continua até FOR que um certo número de iterações tenha sido completado. 79
  • 80. Tomando uma decisãoInstrução IFEssa instrução define uma condição lógica que é executadaem função da condição associada a ela. A declaração IFcontém 3 componentes: • IF - condição lógica que deve ser encontrada; • THEN - instrução a ser executada caso a condição seja verdadeira; • ELSE - (opcional) instrução a ser executada caso a condição seja falsa. 80
  • 81. Tomando uma decisão Lembre-se! • Você pode usar expressões aritméticas com IF. • A cláusula ELSE não é essencial. • Valores em campos alfanuméricos podem ser checados para um formato e tamanho específicos, para que você saiba se pode ou não converter o valor para usá-lo em outro formato. Os formatos válidos para conversão são: N, F, D, T, P, I. Use a função VAL para mover o valor para um campo de outro formato. Exemplo IF #ALPHA IS (N5,3) THEN #NUM := VAL(#ALPHA) END-IF 81
  • 82. Tomando uma decisão Lembre-se! • Você pode combinar vários operadores booleanos dentro de uma única instrução IF. A ordem em que os operadores são 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
  • 83. Tomando uma decisão Lembre-se! • Você pode usar a opção SUBSTRING para comparar parte de um campo alfanumérico. Exemplo IF SUBSTRING (#DATE,1,2) GT ‘12’ REINPUT ‘MÊS INCORRETO PARA A MÁSCARA (MMDDYYYY) END-IF 83
  • 84. Tomando uma decisão Lembre-se! • Você pode consultar posições selecionadas um campo de acordo com um conteúdo específico usando a opção 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
  • 85. Tomando uma decisão Lembre-se! • Você pode verificar se um valor termina com um caracter específico. No exemplo abaixo, a condição será verdadeira tanto se houver um ‘E’ na última posição 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
  • 86. Tomando uma decisão Lembre-se! • Campos numéricos também 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
  • 87. Tomando uma decisão Lembre-se! • Instruções que são embutidas dentro de outras instruções são chamadas nested (aninhadas). Instruções IF podem ser aninhadas desde que uma condição leve a outra e assim por diante. • Instruções com as clausulas THEN ou ELSE, podem por sua vez, conter outras declarações IF/THEN/ELSE. Essa alternativa de aninhar cria vários caminhos que possibilitam a execução do programa. 87
  • 88. Tomando uma decisão 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
  • 89. Tomando uma decisão 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
  • 90. Tomando uma decisão Lembre-se! • A opção MODIFIED é usada para testar o conteúdo de um campo que recebeu atributos dinamicamente foi modificado durante a execução de uma instrução INPUT. • No primeiro input do mapa, as variáveis de controle são sempre referenciadas com o status “NOT MODIFIED” na declaração INPUT.Sempre que o conteúdo de um campo (que está ligado a uma variável de controle) é modificado, a variável de controle recebe o status “MODIFIED”. 90
  • 91. Tomando uma decisãoInstrução DECIDEA instrução DECIDE permite a execução de múltiplas opçõesnum processamento condicional. Assim como o IF, vocêavalia a condições lógicas ou valores de um campo. O tipode avaliação irá determinar o tipo de declaração DECIDE quevocê usará. Há duas formas básicas: • DECIDE FOR - refere-se a um ou mais campos. • DECIDE ON - baseia-se nos valores de uma única variável. 91
  • 92. Tomando uma decisão 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
  • 93. Tomando uma decisão Exemplo - DECIDE ONDECIDE 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 IGNOREEND-DECIDE 93
  • 94. Tomando uma decisão Declaração DECIDE - OPÇÕES Opções Descrição FIRST Para a checagem até a primeira condição verdadeira ser encontrada EVERY Checa todas as condições. Processa todas as condições verdadeiras. ANY Processa a declaração se qualquer uma das condições especificadas for verdadeira. Processa as declarações se todas as condições especificadas forem ALL verdadeiras. Opção obrigatória em todas declarações. É processada se nenhuma NONE condição for verdadeira. A palavra IGNORE indica que nenhuma ação adicional é exigida se nenhuma condição for verdadeira. 94
  • 95. Tomando uma decisão IF vs. DECIDE FOR Como regra geral, o número máximo de IF aninhados num programa é três, pois a depuração de ifs aninhados é difícil, Portanto, é aconselhável para mais de três níveis o uso da instrução 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
  • 96. Tomando uma decisãoExemplo com uso da instrução IF:0010 ************************************************************************0020 * ILUSTRACAO O USO DA DECLARACAO IF0030 ************************************************************************0040 DEFINE DATA LOCAL0050 1 PERSON VIEW OF EMPLOYEES0060 2 PERSONNEL-ID0070 2 NAME0080 2 MAR-STAT0090 2 SEX0100 1 #STATUS (A25)0110 END-DEFINE0120 *0130 READ PERSON BY NAME0140 IF MAR-STAT = M THEN0150 IF SEX = M THEN0160 #STATUS := THIS MAN IS MARRIED0170 ELSE0180 #STATUS := THIS WOMAN IS MARRIED0190 END-IF0200 ELSE 96
  • 97. Tomando uma decisão 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
  • 98. Tomando uma decisão Exemplo com uso da instrução DECIDE: 0010 ************************************************************************ 0020 * ILUSTRACAO O USO DA DECLARACAO DECIDE FOR 0030 ************************************************************************ 0040 DEFINE DATA LOCAL 0050 1 PERSON VIEW OF EMPLOYEES 0060 2 PERSONNEL-ID 0070 2 NAME 0080 2 MAR-STAT 0090 2 SEX 0100 1 #STATUS (A25) 0110 END-DEFINE 0120 * 0130 READ PERSON BY NAME 0140 DECIDE FOR FIRST CONDITION 0150 WHEN MAR-STAT=M AND SEX=M 0160 #STATUS := THIS MAN IS MARRIED 0170 WHEN MAR-STAT=M AND SEX=F 0180 #STATUS := THIS WOMAN IS MARRIED 0190 WHEN MAR-STAT=S AND SEX=M 0200 #STATUS := THIS MAN IS SINGLE 98
  • 99. Tomando uma decisão 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
  • 100. Tomando uma decisão PERSONNEL NAME MARITAL STATUS ID --------- -------------------- ------------------------- 1234567 STATUS IS UNKNOWN 99990000 STATUS IS UNKNOWN 55555551 STATUS IS UNKNOWN 44444444 STATUS IS UNKNOWN 95555551 STATUS IS UNKNOWN 60008339 ABELLAN THIS MAN IS SINGLE 30000231 ACHIESON THIS MAN IS SINGLE 50005800 ADAM THIS WOMAN IS MARRIED 20009800 ADKINSON STATUS IS UNKNOWN 20012700 ADKINSON STATUS IS UNKNOWN 20013800 ADKINSON THIS MAN IS MARRIED 20019600 ADKINSON THIS MAN IS MARRIED 20008600 ADKINSON STATUS IS UNKNOWN 20005700 ADKINSON THIS MAN IS SINGLE 20011000 ADKINSON THIS MAN IS MARRIED 11300313 AECKERLE THIS WOMAN IS MARRIED 20013600 AFANASSIEV THIS MAN IS SINGLE 20023500 AFANASSIEV STATUS IS UNKNOWN 100
  • 101. Controle de loopProcessos de RepetiçãoO Natural fornece duas instruções para ajudar a controlar oprocessamento de loop: FOR e REPEAT.• FOR - Inicia um loop que é executado um número exato de vezes. Umcampo de controle é usado para contar o número de iterações. O valordesse campo é incrementado num certo valor (chamado STEP) cada vezque o loop é processado. Esse campo deve ser referenciado dentro doloop.• REPEAT - Você especifica uma ou mais instruções, que devem serexecutadas repetidamente. Você pode ainda, definir uma condição lógicapara que as instruções sejam executadas somente se a condição forencontrada. Nesse caso, você deverá usar as clausulas UNTIL ouWHILE. Elas podem ser definidas no início ou no fim do loop. 101
  • 102. Controle de loop FOR O número exato de repetições é conhecido de antemão. Counter no Field Processing loop Exceeded? yes end 102
  • 103. Controle de loop REPEAT[UNTIL] Condição lógica no início do loop. Logical true Condition Processing loop false end 103
  • 104. Controle de loop REPEAT[WHILE] Condição lógica no fim do loop. Processing loop Logical true Condition false end 104
  • 105. Controle de loop Processos de Repetição Se você não definir condição lógica alguma, a saída do loop, com a instrução REPEAT, deverá ser feita usando uma das seguintes instruções: ESCAPE, STOP ou TERMINATE. 105
  • 106. Controle de loopExemplosNesse primeiro exemplo, a instrução FOR é usada paraincrementar o valor de #INDEX de 1 até 5 a fim de criar umrelatório das raízes quadradas dos números 1 ao 5. 0010 ************************************************************ 0020 * ILUTSRA O USO DA DECLARACAO FOR NUM LOOP DE PROCESSAMENTO 0030 ************************************************************ 0040 DEFINE DATA 0050 LOCAL 0060 1 #INDEX (I1) 0070 1 #ROOT (N2.7) 0080 END-DEFINE 0090 * 0100 FOR #INDEX 1 TO 5 0110 COMPUTE #ROOT = SQRT(#INDEX) 0120 WRITE NOTITLE THE SQUARE ROOT OF #INDEX IS #ROOT 0130 END-FOR 0140 END 106
  • 107. Controle de loop Saída: THE SQUARE ROOT OF 1 IS 1.0000000 THE SQUARE ROOT OF 2 IS 1.4142135 THE SQUARE ROOT OF 3 IS 1.7320508 THE SQUARE ROOT OF 4 IS 2.0000000 THE SQUARE ROOT OF 5 IS 2.2360679 107
  • 108. Controle de loopExemplosNesse segundo exemplo, o REPEAT é usado pararepetidamente permitir que os usuários entrem com umPERSONNEL-ID por vez até não ser mais necessário entrarcom nenhum ID (ou seja, quando o usuário deixa o embranco).0010 ************************************************************************0020 * ILUTSRA O USO DA DECLARACAO REPEAT0030 ************************************************************************0040 DEFINE DATA0050 LOCAL0060 1 EMPLOY-VIEW VIEW OF EMPLOYEES0070 2 PERSONNEL-ID0080 2 NAME0090 1 #PERS-NR (A8)0100 END-DEFINE0110 * 108
  • 109. 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 Saída: NO RECORDS FOUND ENTER A PERSONNEL ID 23 109
  • 110. Controle de loopExemplosNesse terceiro exemplo, a opção UNTIL do REPEAT é usada para sair doloop quando #X tiver o valor 6. Note que a a opção UNTIL pode sercolocada no início 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
  • 111. Controle de loop Saída: #X: 1 #X: 2 #X: 3 #X: 4 #X: 5 #X: 6 111
  • 112. Controle de loop Finalizando os processamentos de loop • ESCAPE - Finaliza a execução de um processamento de loop baseado na condição lógica. Há três opções para essa declaração: ESCAPE TOP, ESCAPE BOTTOM e ESCAPE ROUTINE. • STOP - É usada para finalizar a execução de uma aplicação inteira Natural. • TERMINATE - É semelhante à instrução STOP no que se refere a parar a aplicação inteira. Além disso, essa instrução sai do ambiente Natural. 112
  • 113. Controle de loopFinalizando os processamentos de loop Declaração Ilustração Descrição ESCAPE Retorna ao topo do loop e inicia o processamento TOP da próxima iteração. ESCAPE Termina e sai do loop para o qual o label se BOTTOM[(r)] refere. O processamento continua a partir da 1.ª [IMMEDIATE]* declaração após o loop. ESCAPE A rotina atual Natural abandona o controle. Para subrotinas, o processamento continua a partir da ROUTINE 1.ª declaração após aquela usada para chamar a [IMMEDIATE] subrotina. 113
  • 114. Controle de loopFinalizando os processamentos de loopDeclaração Ilustração Descrição Finaliza o programa/aplicação e retorna o controle STOP ao Natural. Finaliza o programa/aplicação e sai do Natural. TERMINATEObservação: Se a opção IMMEDIATE for utilizada, ambos, a última declaração AT BREAK eAT END OF DATA são executadas antes da saída do loop. 114
  • 115. Variáveis LógicasO que são variáveis lógicas?Quando o valor de um campo pode ser definido comoverdadeiro/falso, você pode lhe designar o formato L para ocampo. O uso da variável lógica em seu programa permiteque você o referencie da seguinte maneira: 0010 DEFINE DATA 0020 LOCAL 0030 1 #ROUTINE-DONE (L) INIT <TRUE> 0040 END-DEFINE 0050 . 0060 . 0070 . 0080 IF #ROUTINE-DONE = TRUE 0090 THEN ... 0100 END-IF 0110 END 115
  • 116. Variáveis LógicasMáscaras de ediçãoPara tornar o uso das variáveis lógicas mais significativo, a edição demáscara EM=FALSE/TRUE pode ser definida. Essa edição pode sertrocada por OFF/ON, NO/YES, REJECT/ACCEPT. 0010 DEFINE DATA 0020 LOCAL 0030 1 #SWITCH (L) INIT <TRUE> 0031 1 #INDEX (I1) 0040 END-DEFINE 0060 FOR #INDEX 1 5 0070 WRITE #SWITCH (EM=FALSE/TRUE) 5X INDEX = #INDEX 0070 WRITE #SWITCH (EM=FALSE/TRUE) 5X INDEX = #INDEX 0071 SKIP 1 0080 IF #SWITCH = TRUE 0090 MOVE FALSE TO #SWITCH 0100 ELSE 0110 MOVE TRUE TO #SWITCH 0120 END-IF 0130 END-FOR 0140 END 116
  • 117. Controle de loop Saída: Page 1 TRUE INDEX = 1 TRUE INDEX = 1 FALSE INDEX = 2 FALSE INDEX = 2 TRUE INDEX = 3 TRUE INDEX = 3 FALSE INDEX = 4 FALSE INDEX = 4 TRUE INDEX = 5 TRUE INDEX = 5 117
  • 118. MÓDULO III - Funções Programáticas Unidade B - Usando os objetos Natural efetivamente - Programas - Subrotinas - Subprogramas - Copycode 118
  • 119. ProgramasOs programas são fundamentais para qualquer aplicação.Desde que tenham uma área de dados interna, não precisamde qualquer outro objeto para ser executado. Nas grandesaplicações, no entanto, eles servem como navegador etambém podem ser usados para chamar outros objetos.Instrução FECTCHUm programa pode chamar outro através da instruçãoFETCH ou FETCH RETURN. A diferença entre eles é que adeclaração FETCH RETURN retorna ao programa chamadore o outro não. 119
  • 120. ProgramasA pilha do Natural (stack)A pilha do Natural é uma porção da área de trabalho usadapara guardar informações para uso futuro. Os dados sãoacessados por um objeto através da instrução INPUT. O usoda pilha para compartilhar dados é mais lento que o uso daGDA. No entanto a pilha permite a passagem de dadosatravés de outras aplicações, o que não acontece com aGDA. 120
  • 121. Programas Controlando pilha • Usando os objetos programáveis 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 através da variável de sistema *DATA. Essa variável pode assumir os seguintes valores: Valor Descrição 0 A pilha está vazia -1 O topo da pilha contém um comando n O topo da pilha contém n elementos 121
  • 122. Programas Passando dados Quando você estiver passando dados de um programa para outro, lembre-se dos seguintes pontos em relação à GDA e a pilha: Pilha (Stack) • A pilha passa dados via lista de argumentos; • Os dados da pilha são recebidos no programa chamador dia declaração INPUT; • Informações limitadas podem ser passadas em uma única entrada da. 122
  • 123. 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á disponível para o programa chamado; • A GDA é mais eficiente e flexível que a pilha. 123
  • 124. Programas ExemploDEFINE DATA DEFINE DATA GLOBAL USING GDA1 GLOBAL USING GDA1 GDALOCAL LOCAL1 #PARM1 (A10) 1 #ARG1 (A10)1 #PARM2 (A10) 1 #ARG2 (A10)… …END-DEFINE END-DEFINE… NATURAL …FETCH RETURN ‘PGM2’ #PARM1 #PARM2 Stack INPUT #PARM1 #PARM2… …END END 124
  • 125. Programas Carregando a pilha • Você pode carregar a pilha usando o comando EXECUTE; • Com as declarações FETH e FETCH RETURN; • Com a declaração STACK • Essa declaração, por “default” coloca os dados na base da pilha no modo delimiter. Limpando a Pilha • Você pode limpar a pilha através da declaração 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
  • 126. Programas Como a pilha recebe os dados 0010 ** SATCKING PROGRAM STACK AFTER LINE 0080 ... SMITH 0080 STACK DATA ‘SMITH’ ... STACK AFTER LINE 0200 0190 MOVE ‘BRYAN’ TO #NAME BRYAN,30 0200 STACK TOP #NAME 30 SMITH … 0360 FETCH ‘PERSON’ #PERS-NUM #AGE STACK AFTER LINE 0360 ... 100783,28 BRYAN,30 SMITH 126
  • 127. Programas Como a pilha recebe os dados STACK AFTER LINE 0360 0010 ** INPUT PROGRAM 0020 ** ‘PERSON’ 100783,28 ... BRYAN,30 0120 INPUT #PERS-NUM AGE SMITH 0130 INPUT #PERS-NAME #NUM ... STACK AFTER LINE 0130 0200 INPUT #LASTNAME SMITH … 127
  • 128. SubrotinasAs subrotinas são tipicamente usadas para carregar funçõesespecificas em seu sistema. Você tem dois tipos desubrotinas disponíveis no Natural:Subrotinas Internas • São codificadas dentro do objeto; • Está disponível somente para esse objeto; • Têm acesso à GDA e a LDA do objeto nos qual foi codificada, assim como aos dados passados ao usar-se a PDA. 128
  • 129. Subrotinas Subrotinas Externas • São codificadas como um objeto separado; • Podem ser acessadas por múltiplos objetos. O que constitui uma subrotina PERFORM subroutine-name ... DEFINE SUBROUTINE subroutine-name (processing statements) END-SUBROUTINE … 129
  • 130. Subrotinas Subrotinas Externas • Tudo que você codifica entre as declarações DEFINE SUBROUTINE e END-SUBROUTINE é considerado parte da subrotina. Qualquer processamento de loop iniciado dentro de uma subrotina deve ser fechado antes da declaração END-DEFINE. • A declaração PERFORM é usada para chamar tanto a subrotina interna quanto a externa. Ela busca o nome da subrotina definido na declaração DEFINE SUBROUTINE e não o nome do objeto. 130
  • 131. Subrotinas Subrotina Interna Subrotina Externa PGM1 PGMA DEFINE DATA DEFINE DATA... … END-DEFINE END-DEFINE READ... PERFORM XYZ PERFORM SUBRT1 SUBRT1 ... ... DEFINE SUBROUTINE XYZ DEFINE DATA END-READ … … … END-SUBROUTINE END-DEFINE END … DEFINE SUBROUTINE SUBRT1 END … END-SUBROUTINE … END 131
  • 132. Subrotinas Prós e contras das subrotinas internas Prós • Auxilia a modularização interna do objeto; • O teste e a depuração fica confinado a um objeto apenas; • Melhor performance de todos os módulos. Contras • O objeto no qual está inserido irá possuir um número maior de linhas de código; • Não é reutilizável e não pode ser compartilhado por outros objetos. 132
  • 133. Subrotinas Prós e contras das subrotinas externas Prós • Auxilia a padronização do sistema; • Mantém os módulos com tamanhos manipuláveis; • Acesso à GDA e a PDA; • Facilidade nas funções de segurança; • Compartilhável entre os outros objetos da aplicação; • Permite o uso do XREF. 133
  • 134. Subrotinas Prós e contras das subrotinas externas Contras • O teste e a depuração envolve muitos objetos; • Aumenta o uso do buffer pool; • Os dados compartilhados através da GDA ou da pilha limita a reutilização e o controle da interface. 134
  • 135. SubprogramasSubprogramas vs. SubrotinasEm vez de chamar uma subrotina, você pode chamar umsubprograma. Basta emitir a declaração CALLNAT.Os subprogramas diferem das subrotinas na forma comocompartilham os dados no objeto chamador. Ossubprogramas só podem acessar os dados através de umconjunto de parâmetros definidos na PDAs; as subrotinaspodem acessar os dados através da GDA e da PDA. 135
  • 136. Subprogramas PGM1 SU PGM1 DEFINE DATA … DEFINE DATA END-DEFINE … ... PDA1 PARAMETER USING PDA1 CALLNAT ‘SBPGM1’ ... argumentos argumentos END-DEFINE … ... … END END 136
  • 137. Subprogramas Lembre-se! • Os subprogramas fornecem um meio mais eficiente de compartilhar dados que a pilha, uma vez que os dados são meramente referenciados e não passados; • Os subprogramas passam apenas referências para os dados definidos em suas GDA ou PDA; • Por “default”, um parâmetro é passado por referência para um subprograma/subrotina, ou seja, é transferido pelo seu endereço. Um campo definido como parâmetro numa declaração CALLNAT/PERFORM deve ter o mesmo formato/tamanho que o campo correspondente; 137
  • 138. Subprogramas Lembre-se! • Se parâmetros são passados por valor (by value), é o valor atual do parâmetro que é passado e não o endereço, logo o campo do subprograma não precisa ter o mesmo formato e tamanho que o parâmetro da declaração CALLNAT/PERFORM; • Se os valores dos parâmetros que foram modificados no subprograma devem ser retornados ao programa chamador você tem que definir esses campos como BY VALUE RESULT. 138
  • 139. CopycodeCom o copycode você pode inserir rotinas especiais dentrodo seu objeto em tempo de compilação em vez de ter quecodificar essas linhas repetidamente.A declaração usada para incorporar o copycode ao seuobjeto é INCLUDE. PGM1 COPYC1 SET KEY PF1 DEFINE DATA PF2 … Esse código é inserido em PF3 tempo de compilação dentro END-DEFINE do código compilado. … … PF12 INCLUDE COPYC1 … 139 END
  • 140. Copycode Lembre-se! • Você não pode ter a declaração END em seu copycode; • Copycode é salvo, nunca catalogado; • O copycode não pode ser checado; • O copycode não pode conter um trecho de outra declaração (só pode conter uma ou mais declarações completas); • O teste e a depuração pode ser difícil; • Se você modifica um copycode, você deve recompilar todos os objetos que o utiliza. 140
  • 141. Copycode Lembre-se! • O copycode aumenta o tamanho do objeto compilado que o utiliza. O tamanho do código fonte não sofre aumento; • Valores podem ser inseridos dinamicamente dentro do copycode usando-se a notação &n&. 141
  • 142. MÓDULO III - Funções Programáticas Unidade C - Manipulação de Dados - Calculando valores - Atribuindo valores - Combinando e separando valores - Trabalhando com Strings - Trabalhando com Data e Time - Processamento de arrays 142
  • 143. Calculando ValoresOperadores aritméticosCada operador deve ser precedido por um caracter branco para não serconfundido com o nome da variável. Os seguintes símbolos são usadoscomo operadores: Operador Símbolo Add + Subtract - Multiply * Divide / Parênteses () Exponencial ** 143
  • 144. Calculando Valores Ordem do processamento Os cálculos aritméticos possuem vários operadores para serem processados dentro de uma única declaração. Para assegurar a exatidão desses cálculos, a seguinte ordem deve ser seguida: 1. Parênteses; 2. Exponencial; 3. Multiplicação/Divisão (da esquerda para direita); 4 Adição/Subtração (da esquerda para direita). 144
  • 145. Calculando Valores Operador Descrição DIVIDE[ROUNDED] oper1 INTO oper2[GIVING oper3] [REMAINDER oper4] O resultado é colocado: / -operador2 DIVIDE #A INTO #B -operador3 DIVIDE #A INTO #B GIVING #RESULT COMPUTE[ROUNDED] {oper1}…expressão aritmética O resultado é colocado: * -operador1 COMPUTE #A = (#A + 1) + (#B / (#C * 8)) / Notas: - Use os parênteses para agrupar operações complexas; + - A palavra chave “COMPUTE” é opcional em report mode; - - A palavra chave “COMPUTE” não é usada com a notação “:=“; - A função DIVIDE é sempre ROUNDED. 145
  • 146. Calculando Valores Operador Descrição ADD[ROUNDED] oper1…TO oper2[GIVING oper3] O resultado é colocado: + -operador2 ADD 7 TO #FIELD1 -operador3 ADD 3 TO #FIELD1 GIVING #RESULT SUBTRACT[ROUNDED] oper1…FROM oper2[GIVING oper3] O resultado é colocado: - -operador2 SUBTRACT #A FROM SALARY -operador3 SUBTRACT #A FROM SALARY GIVING #NETPAY MULTIPLY[ROUNDED] oper1…BY oper2[GIVING oper3] * O resultado é colocado: -operador1 MULTIPLY #A BY #B -operador3 MULTIPLY #B BY 6 GIVING #YTD 146
  • 147. Atribuição de valoresRESETEssa instrução devolve à variável o valor nulo ou seu valororiginal. Os seguintes elementos podem ser atualizados como RESET: • Campos elementares de qualquer formato Natural válido; • Arrays; • Campos de grupo; • Variáveis do sistema; • Toda user view ou campos do banco dentro dessas views. 147
  • 148. Atribuição de valores Exemplo 0010 ************************************************************** 0020 * ILUSTRA O USO DA DECLARACAO RESET INITIAL 0030 ************************************************************** 0040 DEFINE DATA 0050 LOCAL 0060 1 #A (P4.2)INIT <119.2> 0070 1 #B (P4.2)INIT <17> 0080 1 #C (P4.2) 0090 1 #D (P4.2) 0100 END-DEFINE 0110 DIVIDE #B INTO #A GIVING #C REMAINDER #D 0120 WRITE // DEPOIS DE TER DIVIDIDO #B DE #A: 40T #A #B #C #D 0130 RESET INITIAL #A #B #C #D 0140 WRITE // RETORNANDO AOS VALORES INICIAIS: 40T #A #B #C #D 0150 RESET #A #B #C #D 0160 WRITE // LIMPANDO OS VALORESDAS VARIAVEIS: 40T #A #B #C #D 0170 END 148
  • 149. Atribuição de valores Saída: 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
  • 150. Atribuição de valoresRESET com arraysAo fazer uso da instrução RESET com arrays, índices devemser fornecidos. Quando o “asterisco” é informado[ ex.:#ARRAY(*)], todo array é atualizado com nulo ou com seusvalores iniciais. Mas quando o índice é informado [ex.:#ARRAY(2:5)], somente as ocorrências apontadas sãoatualizadas. 150
  • 151. Atribuição de valoresExemplo0010 ************************************************************************0020 * ILUSTRA O USO DA DECLARACAO RESET0030 ************************************************************************0040 DEFINE DATA0050 LOCAL0060 1 #A (A30) INIT <BUILDING NATURAL APPLICATIONS>0070 1 #B (P3.2)0080 1 #C (I4)0090 1 #ARRAY (A4/12)0100 1 #GRP0110 2 #GRP-F-1 (A10)0120 2 #GRP-F-2 (N5)0130 1 PERSON VIEW OF EMPLOYEES0140 2 NAME0150 2 BIRTH0160 2 CITY0170 END-DEFINE0180 RESET #A #B #C #ARRAY(*) #GRP PERSON0190 END 151
  • 152. Atribuição de valoresMOVE vs. ASSIGNEssa instrução copia um valor para dentro de uma variável. A palavraASSIGN pode ser omitida se usarmos a notação “:=“. Ambas as formassão válidas: ASSIGN #MAKE = ‘FORD’ #MAKE := ‘FORD’A instrução MOVE também copia um valor para dentro de uma variável.Se os valores que estão sendo movidos têm um formato diferente davariável que está recebendo, o Natural primeiro converte o dado antes decopiá-lo. MOVE ‘FORD’ TO #MAKE 152
  • 153. Atribuição de valores Exemplo: 0010 ******************************************************* 0020 * ILUSTRA O USO DA DECLARACAO ASSIGN 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 #MAKE(A20) 0110 END-DEFINE 0120 * 0130 ASSIGN #MAKE = FORD /* MOVE ‘FORD’ TO #MAKE seria a outra alternativa 0140 FIND CARS WITH MAKE=#MAKE 0150 DISPLAY NOTITLE YEAR MAKE MODEL 0160 END-FIND 0170 END 153
  • 154. Atribuição de valores Saída: YEAR MAKE MODEL ----- -------------------- -------------------- 1982 FORD SIERRA 1980 FORD CAPRI 1980 FORD ESCORT 1980 FORD CAPRI 1980 FORD CAPRI 1980 FORD FIESTA 1980 FORD ESCORT 1985 FORD ESCORT LASER 1983 FORD TRANSIT 1978 FORD GRANADA 1984 FORD SIERRA 2.0 1986 FORD SCORPIO 2.0 I GL 1984 FORD FIESTA XR2 1985 FORD SIERRA L TURNIER 1986 FORD ESCORT XR3I ... 154
  • 155. Atribuição de valores Opções da instrução MOVE Opção Descrição Pode ser usado quando o valor a ser recebido é uma variável MOVE ROUNDED numérica. O valor é arredondado antes de ser movido. Copia o valor de acordo com o formato da máscara de MOVE EDITED edição (EM=). Copia individualmente campos de uma estrutura de dados para MOVE BY NAME outra baseada no nome do campo sem levar em consideração sua posição. 155
  • 156. Atribuição de valores Opções da instrução MOVE Opção Descrição Copia o valor para dentro de uma variável até que ela esteja MOVE ALL totalmente preenchida. A opção UNTIL limita o número de posições. Copia o conteúdo de um campo de uma estrutura para outra MOVE BY POSITION baseada na posição que ela ocupa. O mesmo número de campos devem existir em cada estrutura. MOVE SUBSTRING Copia substrings de um campo para uma variável.MOVE LEFT/RIGHT Faz com que o dado seja posicionado à esquerda/direita ou JUSTIFIED justificado quando é movido para a variável que recebe. 156
  • 157. Atribuição de valores Exemplo da opção MOVE EDITED 0010 *************************************************************** 0020 * ILUSTRA O USO DA DECLARACAO ASSIGN 0030 *************************************************************** 0040 DEFINE DATA LOCAL 0050 1 #DATEA-RESULT (D) 0060 1 #NUMERIC-RESULT (N6) 0070 1 #ALPHA-DATEA (A8) INIT <96/01/20> 0110 END-DEFINE 0120 * 0130 MOVE EDITED #ALPHA-DATE TO #NUMERIC-RESULT (EM=99/99/99) 0140 WRITE = #NUMERIC-RESULT = #ALPHA-DATE 0150 ** 0160 MOVE EDITED #ALPHA-DATE TO #DATE-RESULT (EM=YY/MM/DD) 0170 WRITE = #DATE-RESULT = #ALPHA-DATE 0180 ** 0190 END 157
  • 158. Atribuição de valores Saída: 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
  • 159. Combinando e separando valoresCOMPRESSA instrução COMPRESS combina os valores de dois ou maiscampos em um único campo alfanumérico.Se o campo que irá receber o conteúdo dos valorescomprimidos for maior que o conteúdo combinado o restanteé preenchido com brancos.Se o campo que irá receber o conteúdo for menor, o valorserá truncado. Zeros à esquerda em campos numéricos ebrancos entre campos alfanuméricos são suprimidos quandocombinados. Se os zeros à esquerda forem necessários, ocampo numérico deve ser redefinido como alfanumérico. 159
  • 160. Combinando e separando valores Opções da declaração COMPRESS Opção Descrição Usado com a opção WITH DELIMITER. O delimitador é colocado ALL campo alvo para cada branco que não é transferido. SUBSTRING Permite transferir parte de um campo. LEAVING NO Não haverá brancos ou qualquer outro delimitador entre os SPACE campos. WITH Haverá um delimitador especial entre os campos. DELIMITER 160
  • 161. Combinando e separando valores Opção Descrição FULL Os valores dos campos fontes são combinados para incluir todos os brancos e zeros.. NUMERIC Pontos e sinais no campo fonte serão transferidos para o campo alvo. 161
  • 162. Combinando e separando valores Exemplo: 0010 ************************************************************** 0020 * ILUSTRA O USO DA DECLARACAO COMPRESS 0030 ************************************************************** 0040 DEFINE DATA LOCAL 0050 1 VIEWEMP VIEW OF EMPLOYEES 0060 2 FIRST-NAME 0070 2 MIDDLE-I 0080 2 NAME 0090 1 #FULL-NAME (A20) 0100 END-DEFINE 0110 ** 0120 READ (5) VIEWEMP BY NAME STARTING FROM JONES 0130 COMPRESS FIRST-NAME MIDDLE-I NAME INTO #FULL-NAME 0140 DISPLAY NOTITLE FIRST-NAME MIDDLE-I NAME #FULL-NAME 0150 SKIP 1 0160 END-READ 0170 END 162
  • 163. Combinando e separando valores Saída: FIRST-NAME MIDDLE-I NAME #FULL-NAME -------------------- -------- -------------------- -------------------- VIRGINIA J JONES VIRGINIA J JONES MARSHA JONES MARSHA JONES ROBERT B JONES ROBERT B JONES LILLY P JONES LILLY P JONES EDWARD C JONES EDWARD C JONES 163
  • 164. Combinando e separando valoresSEPARATEA instrução SEPARATE divide o conteúdo de um campoalfanumérico em dois ou mais campos ou em múltiplasocorrências de um array.Se você não especificar um delimitador, qualquer caracterdiferente de letra ou número será tratado como tal. Aseparação ocorre sempre que um delimitador é encontrado. 164
  • 165. Combinando e separando valores Opções da declaração SEPARATE Opção Descrição WITH INPUT Usa o caracter default de entrada como delimitador. DELIMITER WITH Define o delimitador que será usado DELIMITER para separar. Brancos são ignorados. LEFT Brancos entre o delimitador e o próximo caracter não branco JUSTIFIED são removidos no campo alvo. GIVING Retorna o número de campos alvo que receberam dados durante NUMBER a separação. 165
  • 166. Combinando e separando valores Opção Descrição IGNORE Evita mensagens de erro quando você define um número de REMAINDER campos alvo menor que o esperado. RETAINED Posiciona os delimitadores indicados dentro dos campos alvos DELIMITERS SUBSTRING Define a porção do campo a ser processada 166
  • 167. Combinando e separando valores Exemplo: 0010 ************************************************************ 0020 * ILUSTRA O USO DA DECLARACAO SEPARATE 0030 ************************************************************ 0040 DEFINE DATA LOCAL 0050 1 #PRODUCT-NAME (A40) INIT <ENTIRE APPC SERVER> 0060 1 #PRODUCT-CATEGORY (A10) /* EX.: NATURAL, ADABAS, ENTIRE 0070 END-DEFINE 0080 * 0090 SEPARATE #PRODUCT-NAME INTO #PRODUCT-CATEGORY IGNORE 0100 WRITE NOTITLE 0110 // 4X = #PRODUCT-NAME / = #PRODUCT-CATEGORY 0120 END 167
  • 168. Combinando e separando valores Saída: #PRODUCT-NAME: ENTIRE APPC SERVER #PRODUCT-CATEGORY: ENTIRE 168
  • 169. Trabalhando com StringsEXAMINEA instrução EXAMINE varre o conteúdo de um campoalfanumérico ou de um array a procura de um string. Há duasformas para essa instrução:ABSOLUTE - Qualquer ocorrência do string é procurada.WITH DELIMITERS - As ocorrências devem ser delimitadaspor brancos ou por um caracter especial.Opção DELETE/REPLACEUse essas opções para excluir ou substituir cada valor dooperando1 que é idêntico ao operando2. 169
  • 170. Trabalhando com StringsOpções da instrução EXAMINE Clausula Descrição EXAMINE Examina o campo através de um caracter padrão. PATTERN EXAMINE Define uma porção do campo a ser examinada. SUBSTRING EXAMINE Transforma os dados de maiúscula para minúscula através TRANSLATE de uma tabela de conversão. 170
  • 171. Trabalhando com StringsClausula GIVING: Clausula Descrição GIVING Número de ocorrências do string. NUMBER GIVING Byte inicial onde o primeiro string foi encontrado. POSITION GIVING Tamanho final do valor do campo examinado após todas as LEFT exclusões e substituições terem sido feitas.. GIVING Índice do array onde a primeira ocorrência do string foi encontrada. INDEX 171
  • 172. 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
  • 173. Trabalhando com Data e HoraNo natural os campos Data e Hora têm seus próprios formatos: D paradata e T pata hora. Quando os definimos, basta indicar seus formatos.Internamente eles são definidos como campos numéricos compactados(P6 e P12).Combinando camposÉ possível fazer cálculos com esses campos. A tabela abaixo mostra osformatos recomendados para os campos de destino. Combinação de formatos Resultados Numérico(I,n,P) com D ou T Colocado no campo Data ou hora Data com Hora Colocado no campo Hora Data com Data Colocado num campo P6 Hora com Hora Colocado num campo P12 173
  • 174. Trabalhando com Data e Hora Exemplo: 0010 *************************************************************** 0020 * ILUSTRA O USO DA DE CAMPOS DATA 0030 *************************************************************** 0040 DEFINE DATA LOCAL 0050 1 EMPL VIEW OF EMPLOYEES 0060 2 NAME 0070 2 PERSONNEL-ID 0080 2 LEAVE-START (1) 0090 2 REDEFINE LEAVE-START 0100 3 #LEAVE-START-A (A6) 0110 2 LEAVE-END (1) 0120 2 REDEFINE LEAVE-END 0130 3 #LEAVE-END-A(A6) 0140 1 #LEAVE-DUE (P6) 0150 1 #START-DATE (D) 0160 1 #END-DATE (D) 0170 END-DEFINE 0180 * 174
  • 175. 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
  • 176. Trabalhando com Data e Hora Saída: NAME PERSONNEL LEAVE LEAVE LEAVE ID START END DUE -------------------- --------- ---------- ---------- ------- ABELLAN 60008339 1998/11/04 1998/11/09 1 ACHIESON 30000231 1998/12/27 1998/12/31 1 ADAM 50005800 1999/08/01 1999/08/31 1 ADKINSON 20009800 1998/02/22 1998/02/23 1 ADKINSON 20012700 1998/01/02 1998/01/03 1 ADKINSON 20013800 1998/01/12 1998/01/12 1 ADKINSON 20019600 1998/01/02 1998/01/03 1 ADKINSON 20008600 1998/01/12 1998/01/12 1 ADKINSON 20005700 1998/01/12 1998/01/12 1 ADKINSON 20011000 1998/01/02 1998/01/03 1 176
  • 177. Processamento de ArrayArrays são tabelas multi-dimensionais com dois ou maisdados logicamente relacionados e identificados através deum único nome. Arrays podem ser usadas para: • Armazenar dados para serem processados mais tarde; • Processar dados numa ordem seqüencial; • Guardar múltiplos valores em um único campo; • Auxiliar em cálculos matemáticos. 177
  • 178. Processamento de ArrayArray de uma-dimensão Array de duas-dimensões #FLD (A15/5) #FLD(A15/5,4) 1 1 2 2 3 3 4 4 5 5Array de três-dimensões 1 2 3 4 5 #FLD(A15/4,5,3) 1 1 1 2 2 2 3 3 3 4 4 4 178 1 2 3 4 5 1 2 3 4 5 1 2 3 4 5

Related Documents