The NATURAL sample program returns one or many records within a range from the Employee file.
For more information on how to use Adabas/Natural programs with the iWay Transaction Adapter for CICS, see Using Adabas/Natural Programs.
On Windows, the Natural sample program is located in:
C:\Program Files\iWay7\etc\samples\cics\natural
The following supporting files are provided:
The text version of the source code file is included below for your review:
/****************************************************************/ /* AASNATN - SAMPLE NATURAL PROGRAM FOR IWAY CICS ADAPTER. */ /* RETURN ONE OR MANY RECORDS WITHIN A RANGE FROM THE EMPLOYEE */ /* FILE. */ /* */ /* NATURAL PROGRAMS RUNNING WITH THE IWAY CICS ADAPTER ARE */ /* INVOKED INDIRECTLY VIA THE PROXY PROGRAM, AASNATC. */ /* */ /* ALL ACCESS TO INPUT/OUTPUT BUFFERS ARE HANDLED BY CALLS TO */ /* THE DATA MOVER PROGRAM, AASSUBC, DESCRIBED BELOW. */ /* */ /* COMMUNICATION WITH THE DATA MOVER PROGRAMS REQUIRE THE */ /* CONTROL BLOCK: */ /* 1 #REQUEST-PARMS */ /* 2 #FUNCTION (A2) GT,PT,LC,LI */ /* 2 #OFFSET (I2) DATA OFFSET OF INPUT/OUTPUT */ /* 2 #LENGTH (I2) LENGTH OF DATA TO GET OR PUT */ /* 2 #RESPONSE-CODE (I4) */ /* 2 #ERR-MESSAGE (A72) */ /* */
/* THE IMPLEMENTED FUNCTIONS ARE: */ /* GT - GET INPUT BY OFFSET. */ /* THE OFFSET MUST BE SET TO 0 FOR THE FIRST CALL ONLY!! */ /* THE OFFSET IS INCREMENTED FOLLOWING EACH CALL BY THE */ /* DATA MOVER PROGRAM */ /* THE LENGTH OF THE REQUESTED DATA MUST BE PROVIDED FOR */ /* EACH CALL. IT SHOULD MATCH THE LENGTH OF THE AREA */ /* PROVIDED TO RECEIVE THE INPUT DATA */ /* IE: MOVE #FUNC-GT TO #FUNCTION */ /* MOVE 8 TO #LENGTH */ /* MOVE 0 TO OFFSET - FIRST CALL ONLY */ /* CALL 'AASSUBC' #FUNCTION #EMP-NUM1 */ /* */ /* WHERE #EMP-NUM1 IS AN EIGHT BYTE FIELD */ /* */ /* PT - PUT OUTPUT BY OFFSET */ /* THE OFFSET MUST BE SET TO 0 FOR THE FIRST CALL ONLY!! */ /* THE OFFSET IS INCREMENTED FOLLOWING EACH CALL BY THE */ /* DATA MOVER PROGRAM */ /* THE LENGTH OF THE REQUESTED DATA MUST BE PROVIDED FOR */ /* EACH CALL. IT SHOULD MATCH THE LENGTH OF THE AREA */ /* PROVIDED CONTAINING THE OUTPUT DATA */ /* IE: MOVE #FUNC-PT TO #FUNCTION */ /* MOVE 8 TO #LENGTH */ /* MOVE 0 TO OFFSET - FIRST CALL ONLY */ /* CALL 'AASSUBC' #FUNCTION #EMP-NUM1 */ /* */ /* WHERE #EMP-NUM1 IS AN EIGHT BYTE FIELD */ /* */ /* LI - GET LENGTH OF INPUT DATA */ /* UPDATES THE #LENGTH FIELD WITH THE TOTAL LENGTH OF ALL*/ /* INPUT PARMS. NO OTHER PARMS ARE NEEDED */ /* IE: MOVE #FUNC-LI TO #FUNCTION */ /* CALL 'AASSUBC' #FUNCTION */ /* */ /* */ /* LC - GET LENGTH OF COMMAREA USED TO SEND DATA. */ /* UPDATES THE #LENGTH FIELD WITH THE COMMAREA LENGTH. */ /* NO OTHER PARMS ARE NEEDED */ /* IE: MOVE #FUNC-LC TO #FUNCTION */ /* CALL 'AASSUBC' #FUNCTION */ /* */ /* IMPLEMENTED RESPONSE-CODES: */ /* 0 - OPERATION COMPLETED SUCCESSFULLY */ /* 4 - ENDDATA - OFFSET EXCEEDS END OF INPUT DATA. */ /* INDICATES NO FURTHER INPUT IS AVAILABLE */ /* 8 - ENDBUFF - OFFSET + LENGTH IS GREATER THEN COMMAREA */ /* */ /* NOTE: */ /* ALWAYS USE THE FIRST FIELD OF A GROUP WHEN CALLING */ /* DATA MOVER PROGRAMS. NOTICE ALL CALLS ARE MADE WITH */ /* #FUNCTION NOT #REQUEST-PARMS. */ /* */ /* ALL INPUT PARMS MUST BE PROCESSED BEFORE OUTPUT. */ /*--------------------------------------------------------------*/ DEFINE DATA LOCAL 1 #FUNC-TYPE 2 #FUNC-GT (A2) INIT<'GT'> 2 #FUNC-PT (A2) INIT<'PT'> 2 #FUNC-LC (A2) INIT<'LC'> 2 #FUNC-LI (A2) INIT<'LI'> 1 #REQUEST-PARMS 2 #FUNCTION (A2) /*GT,PT,LC,LI 2 #OFFSET (I2) /*DATA OFFSET OF INPUT/OUTPUT 2 #LENGTH (I2) /*LENGTH OF DATA TO GET OR PUT 2 #RESPONSE-CODE (I4) 2 #ERR-MESSAGE (A72) 1 #PARMS 2 #EMP-NUM1 (A8) 2 #EMP-NUM2 (A8) 1 EMPLOY-VIEW VIEW OF EMPLOYEES1 2 PERSONNEL-ID 2 FIRST-NAME 2 NAME 2 MAR-STAT 2 SEX 2 BIRTH 2 DEPT 2 JOB-TITLE 2 CURR-CODE(1:5) 2 SALARY(N9/1:5) 1 #ERROR-PARMS 2 #NATPROG (A8) 2 #NATMSG (A65) 2 #NATERR (A7) END-DEFINE /* USE LI FUNCTION TO THE GET LENGTH OF INPUT PARAMETERS */ MOVE #FUNC-LI TO #FUNCTION CALL 'AASSUBC' #REQUEST-PARMS IF #LENGTH LT 16 /*REQUIRED FOR THIS PROGRAM*/ THEN TERMINATE END-IF /* USE GET FUNCTION TO RETRIEVE DATA PARMS */ MOVE 8 TO #LENGTH MOVE 0 TO #OFFSET MOVE #FUNC-GT TO #FUNCTION CALL 'AASSUBC' #FUNCTION #EMP-NUM1 CALL 'AASSUBC' #FUNCTION #EMP-NUM2 MOVE 0 TO #OFFSET MOVE 147 TO #LENGTH MOVE #FUNC-PT TO #FUNCTION FIND ALL EMPLOY-VIEW WITH PERSONNEL-ID = #EMP-NUM1 THRU #EMP-NUM2 IF NO RECORDS FOUND MOVE *PROGRAM TO #NATPROG MOVE ' REQUESTED EMPLOYEE NUMBERS NOT IN THE DATABASE' TO #NATMSG MOVE 80 TO #LENGTH MOVE #FUNC-PT TO #FUNCTION CALL 'AASSUBC' #FUNCTION #NATPROG TERMINATE END-NOREC CALL 'AASSUBC' #FUNCTION PERSONNEL-ID END-FIND ON ERROR MOVE *PROGRAM TO #NATPROG DECIDE FOR FIRST CONDITION WHEN *ERROR-NR = 1106 MOVE ' EMPLOYEE NUMBER IS TOO LARGE. 8 BYTES IS ' TO #NATMSG MOVE 'THE MAX' TO #NATERR WHEN *ERROR-NR = 3061 MOVE ' INVALID EMPLOYEE NUMBER RANGE SPECIFIED ' TO #NATMSG MOVE ' ' TO #NATERR WHEN NONE MOVE ' HAS DETECTED THE FOLLOWING ERROR NUMBER: ' TO #NATMSG MOVE *ERROR-NR TO #NATERR END-DECIDE MOVE 80 TO #LENGTH CALL 'AASSUBC' #FUNCTION #NATPROG TERMINATE END-ERROR END
iWay Software |