Natural / ADABAS
Vinay.S
Agenda
Natural Overview PART 1 - ESSENTIAL CONCEPTS PART 2 - ESSENTIAL SYNTAX PART 3 - ESSENTIAL TOOLS
Page 1
Natural Overview
PART 1 - ESSENTIAL CONCEPTS Programs and subprograms Subroutines - in-line subroutines & external subroutines Copycode Data definitions Local data Local Data Areas (LDAs) Parameter data Parameter Data Areas (PDAs) Global data Global Data Areas (GDAs) Maps PF keys Help routines Libraries
Page 2
Natural Overview
PART 2 - ESSENTIAL SYNTAX Structure of executable modules
Data definition
Report - Edit masks , write, display, newpage, at top of page, page number Data manipulation Input and output Flow control Sequential files Exiting a routine or loop System variables
Page 3
Natural Overview
PART 3 - ESSENTIAL TOOLS
NATURAL environment
Development facilities menu
Program Editor Data Area Editor Map Editor Help Routine Editor SAMPLE JCL
Page 4
What is NATURAL?
NATURAL is a programming language developed and marketed
by Software AG.
NATURAL supports Rapid Application Development to RDBMS
environments with applications that are portable, scaleable and interoperable across multiple computing platforms.
Applications developed using NATURAL are modular, which
contributes to its success as a tool for Rapid Application Development. In general, each module is created, maintained and stored independently of any others.
Page 5
PART 1 - ESSENTIAL CONCEPTS
Programs The simplest type of module is a program. A program may be free-standing or may call lower level modules, such as subprograms and subroutines, that also contain executable code. A NATURAL program can execute in either batch or on-line mode, with full access to database files.
Data definition
DEFINE DATA . END-DEFINE READ Control logic
IF
PERFORM subroutine_1 END-IF END-READ DEFINE subroutine_1. ** Comments END-SUBROUTINE
Page 6
END END statement
PART 1 - ESSENTIAL CONCEPTS
Subprograms Common logic (i.e. logic needed by multiple modules or multiple applications) is coded in subprograms so that it can be called as needed. For flexibility, parameter data can be passed directly between a subprogram and the calling routine. Using subprograms effectively avoids redundant code, so makes application maintenance easier.
Page 7
PART 1 - ESSENTIAL CONCEPTS
Subroutines Subroutines are used to code discreet sub-functions to simplify logic and improve the readability and maintainability of the code. There are 2 types of subroutines: in-line subroutines external subroutines In-line subroutines A program or subprogram will typically contain one or more in-line subroutines. External subroutines An external subroutine is the same as an in-line subroutine, except that it exists independently (in a module of type subroutine) and can be called from any other module.
Page 8
PART 1 - ESSENTIAL CONCEPTS
Data definition DEFINE DATA
.
END-DEFINE
READ Control logic IF PERFORM POPULATE-AUDIT-FIELDS. END-IF END-READ DEFINE SUBROUTINE POPULATE-AUDIT-FIELDS
...
END-SUBROUTINE END END statement
Page 9
PART 1 - ESSENTIAL CONCEPTS
Copycode Copycode modules contain lines of source code that can be invoked at compilation time into programs, subprograms or external subroutines by means of an in-line INCLUDE statement.
Page 10
PART 1 - ESSENTIAL CONCEPTS
Copycode example
INCLUDE IVAUDTC1 UPDATE-VIEW ** COPYCODE IVAUDTC1 ************************************** BEGIN &1&.AUDIT-TIME := *TIMX &1&.AUDIT-PROGRAM := *PROGRAM &1&.AUDIT-USER := *USER ADD 1 TO &1&.AUDIT-COUNTER ** COPYCODE IVAUDTC1 **************************************** END ** COPYCODE IVAUDTC1 ************************************** BEGIN UPDATE-VIEW.AUDIT-TIME := *TIMX UPDATE-VIEW.AUDIT-PROGRAM := *PROGRAM UPDATE-VIEW.AUDIT-USER := *USER ADD 1 TO UPDATE-VIEW.AUDIT-COUNTER ** COPYCODE IVAUDTC1 **************************************** END *
Page 11
PART 1 - ESSENTIAL CONCEPTS
Defining data
In NATURAL there are 2 ways to define data: in-line data definitions data definition modules There are 3 types of data definition modules: local data areas (LDAs)
parameter data areas (PDAs)
global data areas (GDAs)
Page 12
PART 1 - ESSENTIAL CONCEPTS
DEFINE DATA Record structures LOCAL 1 CLNT-REC /* CLIENT RECORD 2 CLIENT-ID (N8) 2 LAST-NAME (A20) 2 FIRST-NAME (A20) 2 MIDDLE-INITIAL (A1) END-DEFINE
Page 13
PART 1 - ESSENTIAL CONCEPTS
INIT clause
DEFINE DATA LOCAL . 1 #DAYS (P3) INIT<60> 1 #MESSAGE (A50) INIT<WE APPRECIATE YOUR BUSINESS> 1 #FOLLOW-UP (L) INIT<TRUE> . END-DEFINE
Page 14
PART 1 - ESSENTIAL CONCEPTS
CONST clause
DEFINE DATA LOCAL . 1 #DAYS (P3) CONST<60> 1 #MESSAGE (A50) CONST<WE APPRECIATE YOUR BUSINESS> 1 #SUPPRESS-FOLLOW-UP (L) CONST<TRUE> . END-DEFINE
Page 15
PART 1 - ESSENTIAL CONCEPTS
In-line data definitions
DEFINE DATA LOCAL 1 CLNT-REC /* CLIENT RECORD 2 CLIENT-ID (N8) 2 LAST-NAME (A20) 2 FIRST-NAME (A20) 2 MIDDLE-INITIAL (A1) . END-DEFINE
** PROGRAM EXAMPLE DEFINE DATA LOCAL USING CLNT-PDA /* PDA FOR SUBPROGRAM CLIENT . END-DEFINE CALLNAT CLIENT CLNT-PDA END /* EXAMPLE
Page 16
PART 1 - ESSENTIAL CONCEPTS
Data definition modules LDA DEFINE DATA . LOCAL USING CLNT-PDA /* PDA FOR SUBPROGRAM CLIENT LOCAL 1 #SUBTOTAL (P7.2) . END-DEFINE
Page 17
PART 1 - ESSENTIAL CONCEPTS
Data definition using a PDA Any data required by a subprogram must be passed as a parameter. DEFINE DATA PARAMETER USING CLNT-PDA /* PDA FOR SUBPROGRAM CLIENT LOCAL 1 #INDEX (P3) END-DEFINE
Page 18
PART 1 - ESSENTIAL CONCEPTS
Data definition using a GDA DEFINE DATA GLOBAL USING INVDATA /* GDA FOR INVOICING APPLICATION LOCAL USING INVREDEF /* LDA REDEFINING INVOICING GDA . END-DEFINE For global data there is nothing equivalent to in-line definition.
Programs and external subroutines (including any in-line subroutines within them) have direct access to global data, whereas subprograms (including any in-line subroutines within them) do not. An application, batch or on-line, can utilize a global data area (GDA) to store common data that is needed throughout the application. Since the data is stored in memory, access is very efficient.
Page 19
PART 1 - ESSENTIAL CONCEPTS
Arrays DEFINE DATA LOCAL . 1 #SHORT-NAME (A3/1:12) CONST<JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG ,SEP,OCT,NOV,DEC) . 1 #MONTH-NBR (P2) . END-DEFINE . #MONTH := #SHORT-NAME(#MONTH-NBR) 2DA 1 #DOLLARS(P7.2/1:5,1:12) /* 5 DEPARTMENTS, 12 MONTHS
Page 20
PART 1 - ESSENTIAL CONCEPTS
Maps Map modules represent screen or report definitions.
Page 21
PART 1 - ESSENTIAL CONCEPTS
INPUT statement - INPUT USING MAP
In on-line applications, INPUT USING MAP is the normal way to display data to the user and to receive input data, using a pre-defined screen layout represented by a map module.
INPUT
USING MAP 'IVCLNTM1'
Page 22
PART 1 - ESSENTIAL CONCEPTS
DEFINE DATA LOCAL 1 #MAP 2 #ACTION (A1) 2 CLIENT-ID (N8) 2 BILLING-NAME (A40) 2 BILLING-ADDRESS (A40/1:3) 2 #AUDIT-TIME (A19) 2 AUDIT-USER (A8) 2 AUDIT-PROGRAM (A8) 1 #MSG-1 (A75) CONST<Enter action code and client ID> 1 #MSG-2 (A75) CONST<No client with specified ID> END-DEFINE INPUT WITH TEXT #MSG-1 MARK *#MAP.#ACTION USING MAP 'IVCLNTM1'
Page 23
PART 1 - ESSENTIAL CONCEPTS
PF keys
User input via a map is terminated by pressing ENTER or a function
key (also known as a program function key, or PF key for short). These are so called because the function (i.e. purpose) of each key varies depending on the program. Generally they are known as PF1 through PF24 and PA1 through PA3.
PF1 invokes help PF3 terminates PF7 scrolls up PF8 scrolls down
Page 24
PART 1 - ESSENTIAL CONCEPTS
*PF-KEY (SET KEY PF7=OFF PF8=OFF)
SET KEY PF3
INPUT USING MAP IVCLNTM2
DECIDE ON FIRST VALUE OF *PF-KEY VALUE PF3 ESCAPE ROUTINE
VALUE PF7
PERFORM SCROLL-UP VALUE PF8 PERFORM SCROLL-DOWN
VALUE ENTR
PERFORM PROCESS-INPUT NONE END-DECIDE
Page 25
PART 1 - ESSENTIAL CONCEPTS
Helproutines A helproutine may take the form of a map module or a special kind of executable module, similar to a subprogram. Helproutines are used only in on-line applications and are only executed if invoked by the user. Invocation occurs when the user enters a help character (? by default) into the first character position of a map field or presses the help key (PF1 by convention).
Page 26
PART 1 - ESSENTIAL CONCEPTS
Libraries
NATURAL modules are arranged in libraries. Any
number of libraries can exist and generally each application will have its own library.
Page 27
PART 1 - ESSENTIAL CONCEPTS -
SUMMARY
Page 28
PART 1 - ESSENTIAL CONCEPTS
Page 29
PART 2 - ESSENTIAL SYNTAX -
Data manipulation
:= (becomes equal to) #DOLLARS(#DEPT-NBR,#MONTH-NBR) := #INVOICE-AMT
ADD ADD 30 TO #DUE-DATE
RESET RESET #LAST-NAME #FIRST-NAME. SUBTRACT SUBTRACT 30 from #Amount MOVE MOVE EDITED #INVOICE-AMT (EM=ZZZZZZ9.99-) TO #PRINT-LINE.#INV-AMT COMPRESS COMPRESS #DEPT-NBR - #CLIENT-ID-ALPHA
INTO #MESSAGE LEAVING NO SPACE. The resulting string would be 4-00031722.
EXAMINE EXAMINE REPLACE EXAMINE DELETE EXAMINE GIVING LENGTH EXAMINE GIVING POSITION EXAMINE GIVING INDEX
Page 30
PART 2 - ESSENTIAL SYNTAX
Flow control
IF IF #CORP-NBR = 1 ... END-IF DECIDE ON DECIDE ON FIRST VALUE OF #CORP-NBR VALUE 1 #CORP-NAME := Northern Enterprises VALUE 2 NONE IGNORE END-DECIDE
Page 31
PART 2 - ESSENTIAL SYNTAX
FOR FOR #DEPT-NBR = 1 TO 5 END-FOR
REPEAT REPEAT UNTIL #INDEX GE #MAX-INDEX ..END-REPEAT
PERFORM PERFORM CALC-AMOUNTS-DUE
DEFINE SUBROUTINE CALC-AMOUNTS-DUE
************************************************************** ** Calculates amount(s) due. **************************************************************
END-SUBROUTINE /* CALC-AMOUNTS-DUE
Page 32
PART 2 - ESSENTIAL SYNTAX
CALLNAT
DEFINE DATA LOCAL USING IVINSTA1 /* PDA FOR SUBPROGRAM IVINSTN1 LOCAL . 1 RECEIVABLE VIEW OF RECEIVABLE 2 CLIENT-ID 2 PRODUCT-ID 2 QUANTITY 2 TOTAL-PRICE 2 PAID-AMOUNT 2 C*BILL-DATE . END-DEFINE
IVINSTA1.TOTAL-PRICE := RECEIVABLE.TOTAL-PRICE
IVINSTA1.NBR-INSTALLMENTS := RECEIVABLE.C*BILL-DATE CALLNAT 'IVINSTN1' IVINSTA1
Page 33
PART 2 - ESSENTIAL SYNTAX
STO P STOP causes application execution to cease.
Exiting a routine or loop
. FOR #INSTALLMENT-NBR = 1 TO INVOICE.NBR-INSTALLMENTS IF INVOICE.DUE-AMOUNT(#INSTALLMENT-NBR) = 0 ESCAPE TOP END-IF . END-FOR END-WORK
Page 34
ESCAPE TOP ESCAPE BOTTOM ESCAPE ROUTINE
READ WORK FILE 1 INVOICE
PART 2 - ESSENTIAL SYNTAX
*DATX *TIMX *ISN *COUNTER *USER *PROGRAM *PAGE-NUMBER
Page 35
PART 2 - ESSENTIAL SYNTAX
Report
Edit masks MOVE EDITED #INVOICE-AMT (EM=ZZZZZZ9.99-) TO #INV-AMT Display DISPLAY #DEPT-NBR #DOLLARS(#DEPT-NBR) Write DISPLAY statements are generally used only for casual output, e.g. during debugging. For more formatted output, such as a report, WRITE statements are generally preferred. WRITE #DEPT-NBR 7X
#DOLLARS(#DEPT-NBR) (EM=Z,ZZZ,ZZ9.99)
Page 36
PART 2 - ESSENTIAL SYNTAX
NEWPAGE statement The NEWPAGE statement allows you to force a new page. As with WRITE, DISPLAY, etc. a report number can optionally be specified.
At top of page AT TOP OF PAGE (0) WRITE (0) 57X Processing Report END-TOPPAGE
Page number AT TOP OF PAGE (0) WRITE (0) 57X Processing Report 23X Page *PAGE-NUMBER(0) END-TOPPAGE
Page 37
PART 2 - ESSENTIAL SYNTAX
Sequential files READ
DEFINE DATA . 1 INVOICE 2 CLIENT-ID (N8) 2 BILLING-NAME (A40) 2 BILLING-ADDRESS (A40/3) 2 PRODUCT-ID (N6) 2 PRODUCT-NAME (A20) . END-DEFINE . READ WORK FILE 1 INVOICE .
.
END-WORK
Page 38
PART 2 - ESSENTIAL SYNTAX
Sequential files WRITE
DEFINE DATA 1 INVOICE 2 CLIENT-ID (N8) 2 BILLING-NAME (A40) 2 BILLING-ADDRESS (A40/3) 2 PRODUCT-ID (N6) 2 PRODUCT-NAME (A20) 2 QUANTITY (N3) 2 TOTAL-PRICE (N7.2) 1 RECEIVABLE VIEW OF RECEIVABLE 2 CLIENT-ID 2 UNPAID-FLAG
2 PRODUCT-ID
2 QUANTITY 2 TOTAL-PRICE END-DEFINE.
Page 39
PART 2 - ESSENTIAL SYNTAX
Sequential files WRITE .continued
. READ RECEIVABLE BY UNPAID-FLAG
RESET INVOICE MOVE BY NAME RECEIVABLE TO INVOICE WRITE WORK FILE 1 INVOICE
END-READ
Page 40
PART 3 - ESSENTIAL TOOLS
NATURAL Environment The NATURAL environment includes a set of integrated tools. Tools allow you to create/maintain/compile source code, scan/replace text within source code and execute object code.
Page 41
PART 3 - ESSENTIAL TOOLS
Development facilities menu
Page 42
PART 3 - ESSENTIAL TOOLS
NATURAL Program Editor
Page 43
PART 3 - ESSENTIAL TOOLS
NATURAL Data Area Editor
The Data Area Editor is used to create and maintain LDAs, PDAs and GDAs.
Page 44
PART 3 - ESSENTIAL TOOLS
NATURAL Map Editor
Page 45
PART 3 - ESSENTIAL TOOLS
Page 46
PART 3 - ESSENTIAL TOOLS
Map Profile Maintenance
Page 47
PART 3 - ESSENTIAL TOOLS
Define Map Settings for MAP
Page 48
Sample Jcl to run Natural program
//VORD0669 EXEC PGM=XDBMNATB,REGION=5000K, // PARM='INTENS=1,MT=0,MADIO=0,MAXCL=0,AUTO=ON,IM=D,DU=ON,WORKBLK=0' //STEPLIB DD DSN=SYS3.NATPROD.LOAD,DISP=SHR // // DD DSN=SYS3.ADABAS.PROD.LOAD,DISP=SHR DD DSN=NAVL.OPR.LOADLIB,DISP=SHR
//DDCARD DD DSN=SYS3.ADABAS.PARMLIB(NATPRD),DISP=SHR //SYSOUT DD SYSOUT=* //SYSUDUMP DD SYSOUT=*,FREE=CLOSE //CMWKF01 DD DSN=NAVL.HVP.ORD.VORD0669.EXTRACT, // DCB=(LRECL=210,BLKSIZE=0,RECFM=FB),
//
// //
SPACE=(CYL,(5,2),RLSE),
DISP=(NEW,CATLG,DELETE), UNIT=SYSDA
//CMSYNIN DD *
VORD0669
Page 49
FIN /*
Version control
PAC (PREDICT APPLICATION CONTROL) For version control.
Page 50
Page 51
Imagination
Action
Joy