DSN8CC2

ROUTER FOR SECONDARY SELECTION AND/OR DETAIL PROCESSING CALLS SECONDARY SELECTION MODULES DSN8MCA DSN8MCM CALLS DETAIL MODULES DSN8MCD DSN8MCE DSN8MCF DSN8MCT DSN8MCV DSN8MCW DSN8MCX DSN8MCZ CALLED BY DSN8MC1 (SQL1) .

       IDENTIFICATION DIVISION.
      *------------------------
       PROGRAM-ID. DSN8CC2.

      ************* DSN8CC2 - COMMON MODULE FOR CICS - COBOL***********
      *                                                               *
      *   MODULE NAME = DSN8CC2                                       *
      *                                                               *
      *   DESCRIPTIVE NAME = DB2  SAMPLE APPLICATION                  *
      *                      SQL 2 COMMON MODULE                      *
      *                      CICS                                     *
      *                      COBOL                                    *
      *                                                               *
      *Licensed Materials - Property of IBM                           *
      *5605-DB2                                                       *
      *(C) COPYRIGHT 1982, 2010 IBM Corp.  All Rights Reserved.       *
      *                                                               *
      *STATUS = Version 10                                            *
      *                                                               *
      *                                                               *
      *                                                               *
      *   FUNCTION = ROUTER FOR SECONDARY SELECTION AND/OR            *
      *                         DETAIL PROCESSING                     *
      *              CALLS SECONDARY SELECTION MODULES                *
      *                    DSN8MCA DSN8MCM                            *
      *              CALLS DETAIL MODULES                             *
      *                    DSN8MCD DSN8MCE DSN8MCF                    *
      *                    DSN8MCT DSN8MCV DSN8MCW DSN8MCX DSN8MCZ    *
      *              CALLED BY DSN8MC1 (SQL1)                         *
      *                                                               *
      *   NOTES =  NONE                                               *
      *                                                               *
      *                                                               *
      *   MODULE TYPE =                                               *
      *      PROCESSOR   = DB2 PRECOMPILER, CICS TRANSLATOR,          *
      *                    VS COBOL                                   *
      *      MODULE SIZE = SEE LINKEDIT                               *
      *      ATTRIBUTES  = REUSABLE                                   *
      *                                                               *
      *   ENTRY POINT = DSN8CC2                                       *
      *      PURPOSE = SEE FUNCTION                                   *
      *      LINKAGE = NONE                                           *
      *      INPUT   =                                                *
      *                                                               *
      *                SYMBOLIC LABEL/NAME = COMMPTR                  *
      *                DESCRIPTION         = POINTER TO COMMAREA      *
      *                                      (COMMUNICATION AREA)     *
      *                                                               *
      *      OUTPUT  =                                                *
      *                                                               *
      *                SYMBOLIC LABEL/NAME = COMMPTR                  *
      *                DESCRIPTION         = POINTER TO COMMAREA      *
      *                                      (COMMUNICATION AREA)     *
      *                                                               *
      *   EXIT-NORMAL =  RETURN CODE 0 NORMAL COMPLETION              *
      *                                                               *
      *   EXIT-ERROR =                                                *
      *            IF SQLERROR OR SQLWARNING, SQL WHENEVER CONDITION  *
      *            SPECIFIED IN DSN8CC2 WILL BE RAISED AND PROGRAM    *
      *            WILL GO TO THE LABEL DB-ERROR.                     *
      *                                                               *
      *                                                               *
      *      RETURN CODE = NONE                                       *
      *                                                               *
      *                                                               *
      *      ABEND CODES = NONE                                       *
      *                                                               *
      *      ERROR-MESSAGES =                                         *
      *         DSN8062E-AN OBJECT WAS NOT SELECTED                   *
      *         DSN8066E-UNSUPPORTED PFK OR LOGIC ERROR               *
      *         DSN8072E-INVALID SELECTION ON SECONDARY SCREEN        *
      *                                                               *
      *   EXTERNAL REFERENCES = NONE                                  *
      *      ROUTINES/SERVICES = 10 MODULES LISTED ABOVE              *
      *         DSN8MCG    -   ERROR MESSAGE ROUTINE                  *
      *                                                               *
      *      DATA-AREAS =                                             *
      *         DSN8MCA    -   SECONDARY SELECTION FOR ORGANIZATION   *
      *         DSN8MCAD   -   DECLARE ADMINISTRATION DETAIL          *
      *         DSN8MCAE   -   CURSOR EMPLOYEE LIST                   *
      *         DSN8MCAL   -   CURSOR ADMINISTRATION LIST             *
      *         DSN8MCA2   -   DECLARE ADMINISTRATION DETAIL          *
      *         DSN8MCCA   -   COMMON AREA                            *
      *         DSN8MCC2   -   COMMON AREA PART 2                     *
      *         DSN8MCD    -   DEPARTMENT STRUCTURE DETAIL            *
      *         DSN8MCDA   -   CURSOR ADMINISTRATION DETAIL           *
      *         DSN8MCDH   -   CURSOR FOR DISPLAY TEXT FROM           *
      *                        TDSPTXT TABLE                          *
      *         DSN8MCDM   -   DECLARE DEPARTMENT MANAGER             *
      *         DSN8MCDP   -   DECLARE DEPARTMENT                     *
      *         DSN8MCDT   -   DECLARE DISPLAY TEXT                   *
      *         DSN8MCE    -   DEPARTMENT DETAIL                      *
      *         DSN8MCEM   -   DECLARE EMPLOYEE                       *
      *         DSN8MCED   -   DECLARE EMPLOYEE-DEPARTMENT            *
      *         DSN8MCF    -   EMPLOYEE   DETAIL                      *
      *         DSN8MCOV   -   DECLARE OPTION VALIDATION              *
      *         DSN8MCXX   -   ERROR HANDLER                          *
      *                                                               *
      *      CONTROL-BLOCKS =                                         *
      *         SQLCA      -   SQL COMMUNICATION AREA                 *
      *                                                               *
      *   TABLES = NONE                                               *
      *                                                               *
      *   CHANGE-ACTIVITY =                                           *
      *   - ADD NEW VARIABLES FOR REFERENTIAL INTEGRITY          V2R1 *
      *   - 10/18/2005  PK03311  INITIALIZE UNINITIALIZED STORAGE @01 *
      *                                                               *
      *  *PSEUDOCODE*                                                 *
      *                                                               *
      * THIS MODULE DETERMINES WHICH SECONDARY SELECTION AND/OR       *
      * DETAIL MODULE(S) ARE TO BE CALLED IN THE CICS/COBOL           *
      * ENVIRONMENT.                                                  *
      *                                                               *
      * WHAT HAS HAPPENED SO FAR?.............THE SUBSYSTEM           *
      * DEPENDENT MODULE (IMS,CICS,TSO) OR (SQL 0) HAS                *
      * READ THE INPUT SCREEN, FORMATTED THE INPUT AND PASSED CONTROL *
      * TO SQL 1. SQL 1 PERFORMS VALIDATION ON THE SYSTEM DEPENDENT   *
      * FIELDS (MAJOR SYSTEM, ACTION, OBJECT, SEARCH CRITERIA). IF    *
      * ALL SYSTEM FIELDS ARE VALID SQL 1 PASSED CONTROL TO THIS      *
      * MODULE. PASSED PARAMETERS CONSIST ONLY OF A POINTER WHICH     *
      * POINTS TO A COMMUNICATION CONTROL AREA USED TO COMMUNICATE    *
      * BETWEEN SQL 0 , SQL 1, SQL 2 AND THE SECONDARY SELECTION      *
      * AND DETAIL MODULES.                                           *
      *                                                               *
      *WHAT IS INCLUDED IN THIS MODULE?.............                  *
      * ALL SECONDARY SELECTION AND DETAIL MODULES ARE 'INCLUDED'.    *
      * ALL VARIABLES KNOWN IN THIS PROCEDURE ARE KNOWN IN THE        *
      * SUB PROCEDURES. ALL SQL CURSOR DEFINITIONS AND                *
      * SQL 'INCLUDES' ARE DONE IN THIS PROCEDURE. BECAUSE OF THE     *
      * RESTRICTION THAT CURSOR HOST VARIABLES MUST BE DECLARED BEFORE*
      * THE CURSOR DEFINITION ALL CURSOR HOST VARIABLES ARE DECLARED  *
      * IN THIS PROCEDURE.                                            *
      *                                                               *
      * PROCEDURE                                                     *
      *    IF ANSWER TO DETAIL SCREEN AND DETAIL PROCESSOR            *
      *    IS NOT WILLING TO ACCEPT AN ANSWER THEN                    *
      *                    NEW REQUEST*                               *
      *                                                               *
      *    ELSE                                                       *
      *           IF ANSWER TO A SECONDARY SELECTION THEN             *
      *                    DETERMINE IF NEW REQUEST.                  *
      *                                                               *
      *                                                               *
      *                                                               *
      *    CASE (NEW REQUEST)                                         *
      *                                                               *
      *           SUBCASE ('ADD')                                     *
      *                   DETAIL PROCESSOR                            *
      *                   RETURN TO SQL 1                             *
      *           ENDSUB                                              *
      *                                                               *
      *           SUBCASE ('ERASE','DISPLAY','UPDATE')                *
      *                   CALL SECONDARY SELECTION                    *
      *                   IF # OF POSSIBLE CHOICES IS ^= 1 THEN       *
      *                          RETURN TO SQL 1                      *
      *                   ELSE                                        *
      *                          CALL THE DETAIL PROCESSOR            *
      *                          RETURN TO SQL 1                      *
      *           ENDSUB                                              *
      *                                                               *
      *    ENDCASE                                                    *
      *                                                               *
      *    IF ANSWER TO SECONDARY SELECTION AND A SELECTION HAS       *
      *    ACTUALLY BEEN MADE THEN                                    *
      *                IF IT IS A VALID SELECTION NUMBER THEN         *
      *                      CALL DETAIL PROCESSOR                    *
      *                      RETURN TO SQL 1                          *
      *                END                                            *
      *                                                               *
      *                ELSE                                           *
      *                      PRINT ERROR MSG                          *
      *                      RETURN TO SQL 1                          *
      *                END.                                           *
      *                                                               *
      *    IF ANSWER TO SECONDARY SELECTION THEN                      *
      *             CALL SECONDARY SELECTION                          *
      *             RETURN TO SQL 1                                   *
      *    END.                                                       *
      *                                                               *
      *    IF ANSWER TO DETAIL THEN                                   *
      *             CALL DETAIL PROCESSOR                             *
      *             RETURN TO SQL 1                                   *
      *    END.                                                       *
      *                                                               *
      *    RETURN TO SQL 1.                                           *
      *                                                               *
      * END.                                                          *
      *                                                               *
      *   *EXAMPLE- A ROW IS SUCCESSFULLY ADDED, THE OPERATOR RECEIVES*
      *    THE SUCCESSFULLY ADDED MESSAGE AND JUST HITS ENTER.        *
      *---------------------------------------------------------------*


       ENVIRONMENT DIVISION.
      *---------------------

       DATA DIVISION.
      *-------------
       WORKING-STORAGE SECTION.

      ***************************************
      *  FIELDS SENT TO MESSAGE ROUTINE     *
      ***************************************
        01 MSGCODE                PIC X(04).

        01 OUTMSG                 PIC X(69).

      ***************************************
      *  NULL INDICATOR                     *
      ***************************************
        01 NULLIND1               PIC S9(4) COMP-4.
        01 NULLIND2               PIC S9(4) COMP-4.
        01 NULLIND3               PIC S9(4) COMP-4.
        01 NULLIND4               PIC S9(4) COMP-4.
        01 NULLIND5               PIC S9(4) COMP-4.
        01 NULLARRY.
           03  NULLARRY1  PIC S9(4) USAGE COMP OCCURS 13 TIMES.

           EXEC SQL INCLUDE SQLCA END-EXEC.

           EXEC SQL INCLUDE DSN8MCC2 END-EXEC.
           EXEC SQL INCLUDE DSN8MCDP END-EXEC.
           EXEC SQL INCLUDE DSN8MCEM END-EXEC.
           EXEC SQL INCLUDE DSN8MCDM END-EXEC.
           EXEC SQL INCLUDE DSN8MCAD END-EXEC.
           EXEC SQL INCLUDE DSN8MCA2 END-EXEC.
           EXEC SQL INCLUDE DSN8MCOV END-EXEC.
           EXEC SQL INCLUDE DSN8MCDT END-EXEC.
           EXEC SQL INCLUDE DSN8MCED END-EXEC.

        01  CONSTRAINTS.
            03  PARM-LENGTH       PIC S9(4) COMP-4.
            03  REF-CONSTRAINT    PIC X(08).
            03  FILLER            PIC X(62).
        01  MGRNO-CONSTRAINT      PIC X(08)  VALUE 'RDE     '.

       LINKAGE SECTION.
       01  DFHCOMMAREA.
           EXEC SQL INCLUDE DSN8MCCA END-EXEC.


       PROCEDURE DIVISION.
      *------------------
           EXEC SQL INCLUDE DSN8MCAE END-EXEC.
           EXEC SQL INCLUDE DSN8MCAL END-EXEC.
           EXEC SQL INCLUDE DSN8MCDH END-EXEC.
           EXEC SQL INCLUDE DSN8MCDA END-EXEC.

      ***********************************************************
      *  SQL RETURN CODE HANDLING                               *
      ***********************************************************
           EXEC SQL WHENEVER SQLERROR   GO TO DB-ERROR END-EXEC
           EXEC SQL WHENEVER SQLWARNING GO TO DB-ERROR END-EXEC.

      ***********************************************************
      *  INITIALIZATIONS                                        *
      ***********************************************************
           MOVE 'DSN8CC2' TO MAJOR.
           MOVE  SPACES   TO MINOR.
      * INIT AREA INCLUDED BY DSN8MCDP                              @01
           MOVE SPACES TO PDEPT.
      * INIT AREA INCLUDED BY DSN8MCEM                              @01
           MOVE SPACES TO PEMP.
      * INIT AREA INCLUDED BY DSN8MCDM                              @01
           MOVE SPACES TO PDEPMGR.
      * INIT AREA INCLUDED BY DSN8MCAD                              @01
           MOVE SPACES TO PASTRDET.
      * INIT AREA INCLUDED BY DSN8MCA2                              @01
           MOVE SPACES TO PASTRDE2.
      * INIT AREA INCLUDED BY DSN8MCOV                              @01
           MOVE SPACES TO POPTVAL.
      * INIT AREA INCLUDED BY DSN8MCDT                              @01
           MOVE SPACES TO PDSPTXT.
      * INIT AREA INCLUDED BY DSN8MCED                              @01
           MOVE SPACES TO PEMPDPT1.

      ***********************************************************
      *  DETERMINES WHETHER NEW REQUEST OR NOT                  *
      ***********************************************************
       IC200B.

           IF PREV OF PCONVSTA = ' ' THEN
              MOVE 'Y' TO NEWREQ OF COMPARM.

           IF NEWREQ OF COMPARM = 'N' AND PREV OF PCONVSTA = 'S'
              AND DATA01 NOT = ' '
              AND PFKIN  NOT = '08'
              THEN MOVE 'Y' TO NEWREQ OF COMPARM.

           IF NEWREQ OF COMPARM NOT = 'Y' THEN
              GO TO IC2010.

      ***********************************************************
      *  IF NEW REQUEST AND ACTION IS 'ADD' THEN                *
      *       CALL DETAIL PROCESSOR                             *
      *  ELSE CALL SECONDARY SELECTION                          *
      ***********************************************************
           IF ACTION OF INAREA = 'A' THEN
      *                                      **DETAIL PROCESSOR
              GO TO DETAIL0.
      *                                      **SECONDARY SELECTION
           PERFORM SECSEL THRU END-SECSEL.
      *                                       **IF NO. OF CHOICES = 1
      *                                       **GO TO DETAIL PROCESSOR
           IF MAXSEL = 1 THEN
              GO TO DETAIL0.
           GO TO EXITO.
      ***********************************************************
      *  DETERMINES IF VALID SELECTION NUMBER                   *
      ***********************************************************
       IC2010.
      *                                     **VALID SELECTION NO. GIVEN
           IF PREV OF PCONVSTA NOT = 'S' OR
              MAXSEL < 1 OR
              PFKIN  = '08' OR
              DATA2 = DATO2 THEN
              GO TO IC201.

      *                                        **DETAIL SELECTION GIVEN
           IF DAT1 NUMERIC AND DAT2 = ' ' THEN
              MOVE DAT1 TO DAT2
              MOVE '0' TO DAT1.
           IF DATA2 NUMERIC
              AND DATA2 > '00' AND DATA2 NOT > MAXSEL THEN
              MOVE 'Y' TO NEWREQ OF COMPARM
              GO TO DETAIL0.
      *                                      **INVALID SELECTION NO.
      *                                      **PRINT ERROR MESSAGE
           MOVE '072E' TO MSGCODE.
           CALL 'DSN8MCG' USING MAJOR MSGCODE OUTMSG.
           MOVE OUTMSG TO MSG OF OUTAREA.
           GO TO EXITO.

      ***********************************************************
      *  DETERMINES WHETHER SECONDARY SELECTION OR DETAIL       *
      ***********************************************************
       IC201.
      *                                           **SECONDARY SELECTION
           IF PREV OF PCONVSTA = 'S' THEN
              PERFORM SECSEL THRU END-SECSEL
              GO TO EXITO
           ELSE

      *                                           **DETAIL PROCESSOR
              IF PREV OF PCONVSTA = 'D' THEN GO TO DETAIL0.

      *                                           **LOGIC ERROR
      *                                           **PRINT ERROR MESSAGE
           MOVE '066E' TO MSGCODE.
           CALL 'DSN8MCG' USING MAJOR MSGCODE OUTMSG.
           MOVE OUTMSG TO MSG OF OUTAREA.
           GO TO EXITO.

      *                                           **HANDLES ERRORS
           EXEC SQL INCLUDE DSN8MCXX END-EXEC.
           GO TO EXITO.

      ***********************************************************
      *  CALLS SECONDARY SELECTION AND RETURNS TO SQL 1         *
      ***********************************************************
       SECSEL.
           MOVE 'DSN8001' TO LASTSCR IN PCONVSTA.
      *                                          **ADMINISTRATIVE
      *                                          **DEPARTMENT STRUCTURE
           IF OBJFLD OF INAREA = 'DS' THEN
              PERFORM DSN8MCA THRU END-DSN8MCA
           ELSE
      *                                         **INDIVIDUAL DEPARTMENT
      *                                         **PROCESSING
              IF OBJFLD OF INAREA = 'DE' THEN
                 PERFORM DSN8MCA THRU END-DSN8MCA
              ELSE
      *                                         **INDIVIDUAL EMPLOYEE
      *                                         **PROCESSING
                 IF OBJFLD OF INAREA = 'EM' THEN
                    PERFORM DSN8MCA THRU END-DSN8MCA
                 ELSE

      *                                        **ERROR MESSAGE
      *                                        **MISSING SECONDARY SEL
                    MOVE '062E' TO MSGCODE
                    CALL 'DSN8MCG' USING MAJOR MSGCODE OUTMSG
                    MOVE OUTMSG TO MSG OF OUTAREA
                    GO TO EXITO.
       END-SECSEL.

      ***********************************************************
      *  CALLS DETAIL PROCESSOR AND RETURNS TO SQL 1            *
      ***********************************************************
       DETAIL0.
           MOVE 'DSN8002' TO LASTSCR IN PCONVSTA.
      *                                         **ADMINISTRATIVE
      *                                         **DEPARTMENT STRUCTURE
           IF OBJFLD OF INAREA = 'DS' THEN
              PERFORM DSN8MCD THRU END-DSN8MCD
           ELSE
      *                                         **INDIVIDUAL DEPARTMENT
      *                                         **PROCESSING
              IF OBJFLD OF INAREA = 'DE' THEN
                 PERFORM DSN8MCE THRU END-DSN8MCE
              ELSE
      *                                         **INDIVIDUAL EMPLOYEE
      *                                         **PROCESSING
                 IF OBJFLD OF INAREA = 'EM' THEN
                    PERFORM DSN8MCF THRU END-DSN8MCF
                 ELSE

      *                                        **ERROR MESSAGE
      *                                        **MISSING DETAIL MODULE
                    MOVE '062E' TO MSGCODE
                    CALL 'DSN8MCG' USING MAJOR MSGCODE OUTMSG
                    MOVE OUTMSG TO MSG OF OUTAREA.
           GO TO EXITO.

      *                                         **RETURNS TO SQL 1
       EXITO.
           EXEC CICS RETURN END-EXEC.

           EXEC SQL INCLUDE DSN8MCA END-EXEC.
           EXEC SQL INCLUDE DSN8MCD END-EXEC.
           EXEC SQL INCLUDE DSN8MCE END-EXEC.
           EXEC SQL INCLUDE DSN8MCF END-EXEC.
           GOBACK.