DSN8IP2
ROUTER FOR SECONDARY SELECTION AND/OR DETAIL PROCESSIN CALLS SECONDARY SELECTION MODULES DSN8MPA CALLS DETAIL MODULES DSN8MPD DSN8MPE DSN8MPF CALLED BY DSN8IP1 (SQL1) .
DSN8IP2: PROC(COMMPTR) ; /* SQL 2 FOR IMS AND PLI */ 00010000
%PAGE; 00020000
/********************************************************************* 00030000
* * 00040000
* MODULE NAME = DSN8IP2 * 00050000
* * 00060000
* DESCRIPTIVE NAME = DB2 SAMPLE APPLICATION * 00070000
* SQL 2 COMMON MODULE * 00080000
* IMS * 00090000
* PL/I * 00100000
* ORGANIZATION APPLICATION * 00110000
* * 00120000
* LICENSED MATERIALS - PROPERTY OF IBM * 00130000
* 5695-DB2 * 00136000
* (C) COPYRIGHT 1982, 1995 IBM CORP. ALL RIGHTS RESERVED. * 00143000
* * 00150000
* STATUS = VERSION 4 * 00160000
* * 00170000
* FUNCTION = ROUTER FOR SECONDARY SELECTION AND/OR DETAIL PROCESSIN* 00180000
* CALLS SECONDARY SELECTION MODULES * 00190000
* DSN8MPA * 00200000
* CALLS DETAIL MODULES * 00210000
* DSN8MPD DSN8MPE DSN8MPF * 00220000
* CALLED BY DSN8IP1 (SQL1) * 00230000
* * 00240000
* NOTES = NONE * 00250000
* * 00260000
* * 00270000
* MODULE TYPE = BLOCK OF PL/I CODE * 00280000
* PROCESSOR = DB2 PRECOMPILER, PL/I OPTIMIZER * 00290000
* MODULE SIZE = SEE LINKEDIT * 00300000
* ATTRIBUTES = REUSABLE * 00310000
* * 00320000
* ENTRY POINT = DSN8IP2 * 00330000
* PURPOSE = SEE FUNCTION * 00340000
* LINKAGE = CALL DSN8IP2(COMMPTR) * 00350000
* INPUT = * 00360000
* * 00370000
* SYMBOLIC LABEL/NAME = COMMPTR * 00380000
* DESCRIPTION = POINTER TO COMMUNICATION AREA * 00390000
* * 00400000
* OUTPUT = * 00410000
* * 00420000
* SYMBOLIC LABEL/NAME = COMMPTR * 00430000
* DESCRIPTION = POINTER TO COMMUNICATION AREA * 00440000
* * 00450000
* EXIT-NORMAL = * 00460000
* * 00470000
* EXIT-ERROR = IF SQLERROR OR SQLWARNING, SQL WHENEVER CONDITION * 00480000
* SPECIFIED IN DSN8IP2 WILL BE RAISED AND PROGRAM * 00490000
* WILL GO TO THE LABEL DB_ERROR. * 00500000
* * 00510000
* * 00520000
* RETURN CODE = NONE * 00530000
* * 00540000
* ABEND CODES = NONE * 00550000
* * 00560000
* ERROR-MESSAGES = * 00570000
* DSN8062E-AN OBJECT WAS NOT SELECTED * 00580000
* DSN8066E-UNSUPPORTED PFK OR LOGIC ERROR * 00600000
* DSN8072E-INVALID SELECTION ON SECONDARY SCREEN * 00610000
* * 00620000
* EXTERNAL REFERENCES = * 00630000
* * 00640000
* ROUTINES/SERVICES = MODULES LISTED ABOVE * 00650000
* DSN8MPG - ERROR MESSAGE ROUTINE * 00660000
* * 00670000
* DATA-AREAS = * 00680000
* DSN8MPA - SECONDARY SELECTION FOR ORGANIZATION * 00690000
* DSN8MPAD - DECLARE ADMINISTRATIVE DETAIL * 00700000
* DSN8MPAE - CURSOR EMPLOYEE LIST * 00710000
* DSN8MPAL - CURSOR ADMINISTRATION LIST * 00720000
* DSN8MPA2 - DECLARE ADMINISTRATIVE DETAIL * 00730000
* DSN8MPCA - DECLARE SQL COMMON AREA * 00740000
* DSN8MPD - DEPARTMENT STRUCTURE DETAIL * 00750000
* DSN8MPDA - CURSOR ADMINISTRATION DETAIL * 00760000
* DSN8MPDH - CURSOR FOR DISPLAY TEXT FROM * 00770000
* TDSPTXT TABLE * 00780000
* DSN8MPDM - DECLARE DEPARTMENT MANAGER * 00790000
* DSN8MPDP - DELCLARE DEPARTMENT * 00800000
* DSN8MPDT - DECLARE DISPLAY TEXT * 00810000
* DSN8MPE - DEPARTMENT DETAIL * 00820000
* DSN8MPEM - DECLARE EMPLOYEE * 00830000
* DSN8MPED - DECLARE EMPLOYEE-DEPARTMENT * 00835000
* DSN8MPF - EMPLOYEE DETAIL * 00840000
* DSN8MPOV - DECLARE OPTION VALIDATION * 00850000
* * 00860000
* CONTROL-BLOCKS = * 00870000
* SQLCA - SQL COMMUNICATION AREA * 00880000
* * 00890000
* TABLES = NONE * 00900000
* * 00910000
* CHANGE-ACTIVITY = NONE * 00920000
* * 00930000
* * 00940000
* *PSEUDOCODE* * 00950000
* * 00960000
* THIS MODULE DETERMINES WHICH SECONDARY SELECTION AND/OR * 00970000
* DETAIL MODULE(S) ARE TO BE CALLED FOR THE IMS/PL1 ENVIRONMENT.* 00980000
* * 00990000
* WHAT HAS HAPPENED SO FAR?.............. THE SUBSYSTEM * 01000000
* DEPENDENT MODULE (IMS,CICS) (SQL 0) HAS READ THE * 01010000
* INPUT SCREEN, FORMATTED THE INPUT, AND PASSED CONTROL * 01020000
* TO SQL 1. SQL 1 PERFORMS VALIDATION ON THE SYSTEM DEPENDENT * 01030000
* FIELDS (MAJOR SYSTEM, ACTION, OBJECT, SEARCH CRITERIA). IF * 01040000
* ALL SYSTEM FIELDS ARE VALID, SQL 1 PASSED CONTROL TO THIS * 01050000
* MODULE. PASSED PARAMETERS CONSIST ONLY OF A POINTER WHICH * 01060000
* POINTS TO A COMMUNICATION CONTROL AREA USED TO COMMUNICATE * 01070000
* BETWEEN SQL 0 , SQL 1, SQL 2, AND THE SECONDARY SELECTION * 01080000
* AND DETAIL MODULES. * 01090000
* * 01100000
* WHAT IS INCLUDED IN THIS MODULE?............ * 01110000
* ALL SECONDARY SELECTION AND DETAIL MODULES ARE 'INCLUDED'. * 01120000
* ALL VARIABLES KNOWN IN THIS PROCEDURE ARE KNOWN IN THE * 01130000
* SUB PROCEDURES. ALL SQL CURSOR DEFINITIONS AND * 01140000
* SQL 'INCLUDES' ARE DONE IN THIS PROCEDURE. ALL CURSOR HOST * 01150000
* VARIABLES ARE DECLARED IN THIS PROCEDURE BECAUSE OF THE * 01160000
* RESTRICTION THAT CURSOR HOST VARIABLES MUST BE DECLARED BEFORE* 01170000
* THE CURSOR DEFINITION. * 01180000
* * 01190000
* PROCEDURE * 01200000
* IF ANSWER TO DETAIL SCREEN & DETAIL PROCESSOR * 01210000
* IS NOT WILLING TO ACCEPT AN ANSWER THEN * 01220000
* NEW REQUEST* * 01230000
* * 01240000
* ELSE * 01250000
* IF ANSWER TO A SECONDARY SELECTION THEN * 01260000
* DETERMINE IF NEW REQUEST. * 01270000
* * 01280000
* CASE (NEW REQUEST) * 01290000
* SUBCASE ('ACTION') * 01300000
* DETAIL PROCESSOR * 01310000
* RETURN TO SQL 1 * 01320000
* ENDSUB * 01330000
* * 01340000
* SUBCASE ('DISPLAY','ERASE','UPDATE') * 01350000
* CALL SECONDARY SELECTION * 01360000
* IF # OF POSSIBLE CHOICES IS ^= 1 THEN * 01370000
* RETURN TO SQL 1 * 01380000
* ELSE * 01390000
* CALL THE DETAIL PROCESSOR * 01400000
* RETURN TO SQL 1. * 01410000
* ENDSUB * 01420000
* * 01430000
* ENDCASE * 01440000
* * 01450000
* IF ANSWER TO SECONDARY SELECTION AND A SELECTION HAS * 01460000
* ACTUALLY BEEN MADE THEN * 01470000
* VALID SELECTION #? * 01480000
* IF IT IS VALID THEN * 01490000
* CALL DETAIL PROCESSOR * 01500000
* RETURN TO SQL 1 * 01510000
* ELSE * 01520000
* PRINT ERROR MSG * 01530000
* RETURN TO SQL 1. * 01540000
* * 01550000
* IF ANSWER TO SECONDARY SELECTION THEN * 01560000
* CALL SECONDARY SELECTION * 01570000
* RETURN TO SQL 1. * 01580000
* * 01590000
* IF ANSWER TO DETAIL THEN * 01600000
* CALL DETAIL PROCESSOR * 01610000
* RETURN TO SQL 1. * 01620000
* * 01630000
* END. * 01640000
* * 01650000
* *EXAMPLE- A ROW IS SUCCESSFULLY ADDED, THE OPERATOR RECEIVES * 01660000
* THE SUCCESSFULLY ADDED MESSAGE AND JUST HITS ENTER. * 01670000
*-------------------------------------------------------------------*/ 01680000
01690000
DCL DSN8MPG EXTERNAL ENTRY; 01700000
DCL LENGTH BUILTIN; 01710000
01720000
/* INCLUDE DECLARES */ 01730000
EXEC SQL INCLUDE DSN8MPCA; /*COMMUNICATION AREA BETWEEN MODULES */ 01740000
EXEC SQL INCLUDE SQLCA; /*SQL COMMUNICATION AREA */ 01750000
/* ORGANIZATION */ 01760000
EXEC SQL INCLUDE DSN8MPDP; /* DCLGEN FOR DEPARTMENT */ 01770000
EXEC SQL INCLUDE DSN8MPEM; /* DCLGEN FOR EMPLOYEE */ 01780000
EXEC SQL INCLUDE DSN8MPED; /* DCLGEN FOR EMPLOYEE-DEPARTMENT */ 01785000
EXEC SQL INCLUDE DSN8MPDM; /* DCLGEN FOR DEPARTMENT/MANAGER */ 01790000
EXEC SQL INCLUDE DSN8MPAD; /* DCLGEN FOR ADMINISTRATION DETAIL */ 01800000
EXEC SQL INCLUDE DSN8MPA2; /* DCLGEN FOR ADMINISTRATION DETAIL */ 01810000
/* PROGRAMMING TABLES */ 01820000
EXEC SQL INCLUDE DSN8MPOV; /* DCLGEN FOR OPTION VALIDATION */ 01830000
EXEC SQL INCLUDE DSN8MPDT; /* DCLGEN FOR DISPLAY TEXT TABLE */ 01840000
01850000
/* CURSORS */ 01860000
EXEC SQL INCLUDE DSN8MPAL; /* MAJSYS O - SEC SEL FOR DS AND DE */ 01870000
EXEC SQL INCLUDE DSN8MPAE; /* MAJSYS O - SEC SEL FOR EM */ 01880000
EXEC SQL INCLUDE DSN8MPDA; /* MAJSYS O - DETAIL FOR DS */ 01890000
EXEC SQL INCLUDE DSN8MPDH; /* PROG TABLES - DISPLAY HEADINGS */ 01900000
01910000
/********************************************************/ 01920000
/* ** FIELDS SENT TO MESSAGE ROUTINE */ 01930000
/********************************************************/ 01940000
01950000
DCL MODULE CHAR (07) INIT ('DSN8IP2'); 01960000
DCL OUTMSG CHAR (69); 01970000
01980000
/*********************************************************/ 01990000
/* SQL RETURN CODE HANDLING */ 02000000
/*********************************************************/ 02010000
02020000
EXEC SQL WHENEVER SQLERROR GO TO DB_ERROR; 02030000
EXEC SQL WHENEVER SQLWARNING GO TO DB_ERROR; 02040000
02050000
0 DCL UNSPEC BUILTIN; 02060000
DCL VERIFY BUILTIN; 02070000
02080000
/*********************************************************/ 02090000
/* INITIALIZATIONS */ 02100000
/*********************************************************/ 02110000
02120000
DSN8_MODULE_NAME.MAJOR='DSN8IP2'; 02130000
DSN8_MODULE_NAME.MINOR=' '; 02140000
02150000
/***********************************************************/ 02160000
/* DETERMINES WHETHER NEW REQUEST OR NOT */ 02170000
/***********************************************************/ 02180000
02190000
/* IF 'NO ANSWER POSSIBLE' SET BY DETAIL PROCESSOR THEN FORCE A */ 02200000
/* NEW REQUEST. */ 02210000
02220000
IF PCONVSTA.PREV = ' ' THEN 02230000
COMPARM.NEWREQ = 'Y'; 02240000
02250000
/* IF ANSWER TO SECONDARY SELECTION THEN DETERMINE IF REALLY A */ 02260000
/* NEW REQUEST. IT WILL BE CONSIDERED A NEW REQUEST IF POSITIONS*/ 02270000
/* 3 TO 60 ARE NOT ALL BLANK AND THE ENTERED DATA IF NOT 'NEXT' */ 02280000
02290000
IF COMPARM.NEWREQ = 'N' & PCONVSTA.PREV = 'S' & 02300000
SUBSTR(COMPARM.DATA,3,58) ^= ' ' & 02310000
COMPARM.DATA ^= 'NEXT' 02320000
THEN COMPARM.NEWREQ = 'Y'; 02330000
02340000
/***********************************************************/ 02350000
/* IF NEW REQUEST AND ACTION IS 'ADD' THEN */ 02360000
/* CALL DETAIL PROCESSOR */ 02370000
/* ELSE CALL SECONDARY SELECTION */ 02380000
/***********************************************************/ 02390000
02400000
IF COMPARM.NEWREQ='Y' THEN 02410000
DO; 02420000
IF COMPARM.ACTION = 'A' THEN 02430000
DO; 02440000
CALL DETAIL; /* CALL DETAIL PROCESSOR */ 02450000
GO TO EXIT; /* RETURN */ 02460000
END; 02470000
02480000
CALL SECSEL; /* CALL SECONDARY SELECTION */ 02490000
02500000
IF MAXSEL = 1 THEN /* IF NO. OF CHOICES = 1 */ 02510000
CALL DETAIL; /* CALL DETAIL PROCESSOR */ 02520000
GO TO EXIT; /* RETURN */ 02530000
END; 02540000
02550000
/* IF ANSWER TO SECONDARY SELECTION AND NOT A SCROLLING REQUEST */ 02560000
/* (INPUT NOT EQUAL TO 'NEXT') AND THE POSITIONS */ 02570000
/* 1 TO 2 IN INPUT DATA FIELD NOT EQUAL TO POSITIONS 1 TO 2 */ 02580000
/* IN OUTPUT DATA FIELD THEN SEE IF VALID SELECTION. */ 02590000
02600000
/***********************************************************/ 02610000
/* DETERMINES IF VALID SELECTION NUMBER */ 02620000
/***********************************************************/ 02630000
02640000
IF PCONVSTA.PREV ^= 'S' THEN GO TO IP201; /* TO SECONDARY SEL */ 02650000
02660000
IF PCONVSTA.MAXSEL < 1 THEN GO TO IP201; /* NO VALID CHOICES */ 02670000
02680000
IF COMPARM.DATA = 'NEXT' THEN GO TO IP201; /* SCROOL REQUEST*/ 02690000
02700000
IF SUBSTR(COMPARM.DATA,1,2) = SUBSTR(PCONVSTA.DATA,1,2) 02710000
THEN GO TO IP201; /* NO CHANGE ON INPUT SCREEN */ 02720000
02730000
IF SUBSTR(COMPARM.DATA,2,1) = ' ' THEN /* SECOND CHAR BLANK */ 02740000
IF VERIFY(SUBSTR(COMPARM.DATA,1,1),'123456789') = 0 THEN DO; 02750000
SUBSTR(COMPARM.DATA,2,1) = SUBSTR(COMPARM.DATA,1,1); 02760000
SUBSTR(COMPARM.DATA,1,1) = '0'; 02770000
END; 02780000
02790000
IF VERIFY(SUBSTR(COMPARM.DATA,1,2),'0123456789') = 0 & 02800000
SUBSTR(COMPARM.DATA,1,2) > '00' THEN 02810000
IF DATAP <= PCONVSTA.MAXSEL THEN DO; 02820000
COMPARM.NEWREQ = 'Y'; /* TELL DETAIL PROCESSOR NEW REQ */ 02830000
CALL DETAIL; /* CALL DETAIL PROCESSOR */ 02840000
GO TO EXIT; /* RETURN */ 02850000
END; 02860000
02870000
/* INVALID SELECTION NO. */ 02880000
/* PRINT ERROR MESSAGE */ 02890000
CALL DSN8MPG (MODULE, '072E', OUTMSG); 02900000
PCONVSTA.MSG = OUTMSG; 02910000
02920000
GO TO EXIT; /* RETURN */ 02930000
02940000
/***********************************************************/ 02950000
/* DETERMINES WHETHER SECONDARY SELECTION OR DETAIL */ 02960000
/***********************************************************/ 02970000
02980000
/* MUST BE ANY ANSWER TO EITHER SEC SEL OR DETAIL */ 02990000
IP201: 03000000
IF PCONVSTA.PREV = 'S' THEN 03010000
DO; 03020000
CALL SECSEL; /* CALL SECONDARY SELECTION */ 03030000
GO TO EXIT; /* RETURN */ 03040000
END; 03050000
IF PCONVSTA.PREV = 'D' THEN 03060000
DO; 03070000
CALL DETAIL; /* CALL DETAIL PROCESSOR */ 03080000
GO TO EXIT; /* RETURN */ 03090000
END; 03100000
03110000
/* LOGIC ERROR */ 03120000
CALL DSN8MPG (MODULE, '066E', OUTMSG); /* PRINT ERROR MESSAGE*/ 03130000
PCONVSTA.MSG = OUTMSG; 03140000
GO TO EXIT; 03150000
03160000
EXEC SQL INCLUDE DSN8MPXX; /* HANDLES SQL ERRORS */ 03170000
GO TO EXIT; /* RETURN */ 03180000
03190000
/************************************************************/ 03200000
/* CALLS SECONDARY SELECTION AND RETURNS TO SQL 1 */ 03210000
/* NOTE - SAME SECONDARY SELECTION MODULE FOR DS, DE AND EM */ 03220000
/************************************************************/ 03230000
03240000
SECSEL: PROC; /* CALL APPROPRIATE SECONDARY SELECTION MODULE */ 03250000
PCONVSTA.LASTSCR = 'DSN8001'; /* NOTE GENERAL SCREEN */ 03260000
IF COMPARM.OBJFLD='DS' | /* DEPARTMENT STRUCTURE*/ 03270002
03280000
COMPARM.OBJFLD='DE' | /* INDIVIDUAL DEPARTMENT*/ 03290002
03300000
COMPARM.OBJFLD='EM' THEN /* INDIVIDUAL EMPLOYEE */ 03310002
DO; 03320000
CALL DSN8MPA; 03330000
RETURN; 03340000
END; 03350000
/*MISSING SECONDARY SEL*/ 03360000
CALL DSN8MPG (MODULE, '062E', OUTMSG); /* PRINT ERROR MESSAGE*/ 03370000
PCONVSTA.MSG = OUTMSG; 03380000
GO TO EXIT; 03390000
END SECSEL; 03400000
03410000
/**********************************************************/ 03420000
/* CALLS DETAIL PROCESSOR AND RETURNS TO SQL 1 */ 03430000
/**********************************************************/ 03440000
03450000
DETAIL: PROC; /* CALL APPROPRIATE DETAIL MODULE */ 03460000
PCONVSTA.LASTSCR = 'DSN8002'; /* NOTE DETAIL SCREEN */ 03470000
03480000
IF COMPARM.OBJFLD='DS' THEN /* ADMINISTRATIVE */ 03490002
DO; /* DEPARTMENT STRUCTURE */ 03500000
CALL DSN8MPD; 03510000
RETURN; 03520000
END; 03530000
03540000
IF COMPARM.OBJFLD='DE' THEN /* INDIVIDUAL DEPARTMENT */ 03550002
DO; /* PROCESSING */ 03560000
CALL DSN8MPE; 03570000
RETURN; 03580000
END; 03590000
03600000
IF COMPARM.OBJFLD='EM' THEN /* INDIVIDUAL EMPLOYEE */ 03610002
DO; /* PROCESSING */ 03620000
CALL DSN8MPF; 03630000
RETURN; 03640000
END; 03650000
03660000
/*MISSING DETAIL MODULE*/ 03670000
CALL DSN8MPG (MODULE, '062E', OUTMSG); /* PRINT ERROR MESSAGE*/ 03680000
PCONVSTA.MSG = OUTMSG; 03690000
GO TO EXIT; /* RETURN */ 03700000
END DETAIL; 03710000
03720000
EXIT: RETURN; 03730000
/* ORGANIZATION */ 03740000
EXEC SQL INCLUDE DSN8MPA; /* SEC SEL - ADMIN STRUCTURE */ 03750000
EXEC SQL INCLUDE DSN8MPD; /* DETAIL - ADMIN STRUCTURE */ 03760000
EXEC SQL INCLUDE DSN8MPE; /* DETAIL - DEPARTMENTS */ 03770000
EXEC SQL INCLUDE DSN8MPF; /* DETAIL - EMPLOYEES */ 03780000
END; /* DSN8IP2 */ 03790000