Previous Topic: Step 3: Define the DialogsNext Topic: Dialog RESD2


Dialog RESD1

Dialog RESD1 reads input records and acts as a mainline routine, passing control (by means of the application structure) to dialogs RESD2 and ARCD4, as required by the application. RESD1 also writes erroneous input records to a suspense file.

The dialog definition for RESD1 is illustrated below:

The premap process, mapin operation, and response process are shown below.

Dialog RESD1: Premap Process

!**********************************************************************
!*RESD1-PM                                                            *
!*  -EXECUTED AT THE BEGINNING OF THE APPLICATION WHEN                *
!*   DLG RESD1 BEGINS EXECUTION.                                      *
!*  -PERFORMS APPLICATION INITIALIZATION, THEN READS THE FIRST        *
!*   INPUT RECORD.                                                    *
!**********************************************************************
CALL INIT.
READ TRANSACTION.
!
!
!*************************************************
!*SUBROUTINE INIT                                *
!*-INITIALIZE WORK-ARC-ID, WHICH CONTAINS        *
!* THE ID OF THE MOST RECENTLY READ ARCHIVED     *
!* EMPLOYEE RECORD.                              *
!*-SET UP FOR TRANSACTION REPORT.                *
!*************************************************
DEFINE INIT.
  MOVE 0 TO WORK-ARC-ID.
  MOVE DATE TO WORK-DATE-YYMMDD.
  MOVE WORK-YY1 TO WORK-YY2.
  MOVE WORK-MM1 TO WORK-MM2.
  MOVE WORK-DD1 TO WORK-DD2.
  MOVE WORK-DATE-MMDDYY TO REPORT-DATE.
  MOVE 55 TO WORK-LINE-CTR.
  GOBACK.

Dialog RESD1: Mapin Operation

External field                  Internal field
INPUT-ID.......................>INPUT-ID

Dialog RESD1: Response Process

!**********************************************************************
!*RESD1-RESPONSE                                                      *
!*  -EXECUTED AFTER DLG RESD1'S MAPIN OPERATION.  DEFAULT RESPONSE    *
!*   PROCESS FOR RESD1.                                               *
!*  -PERFORMS MAINLINE PROCESSING OF INPUT RECORD.                    *
!**********************************************************************
READY USAGE-MODE UPDATE.
!
!
!*************************************************
!*-TERMINATE APPLICATION ON AN EOF CONDITION     *
!*************************************************
IF $EOF
  DO.
  WRITE LOG TEXT '***EOF ON INPUT***'.
  LEAVE APPLICATION.
  END.
!
!
!*************************************************
!*-INPUT-ID CONTAINS THE ID OF THE EMP REC       *
!* TO BE RESTORED.                               *
!*-ATTEMPT TO RETRIEVE THE RECORD FROM THE       *
!* DATABASE.                                     *
!*-IF THE RECORD ALREADY EXISTS, CALL AN         *
!* ERROR ROUTINE.                                *
!*-ON ANY OTHER ERROR, TERMINATE THE APP.        *
!*************************************************
MOVE INPUT-ID TO EMP-ID-0415.
OBTAIN CALC EMPLOYEE.
IF DB-STATUS-OK
  CALL ERRRTN.
IF DB-REC-NOT-FOUND
  NEXT COMMAND.
ELSE
  IF DB-ANY-ERROR
    ABORT TEXT 'DB ERROR ON EMPLOYEE OBTAIN'.
!
!
!*************************************************
!*-WORK-ARCFILE-STATUS IS SET TO EOF WHEN        *
!* THE ARCHIVE FILE HAS REACHED THE EOF.         *
!*-NOTFND IS A SUBROUTINE THAT IS CALLED         *
!* WHEN THE EMP REC TO BE RESTORED CANNOT BE     *
!* FOUND IN THE ARCHIVE FILE.                    *
!*-IF WORK-ARCFILE-STATUS = EOF, CALL NOTFND.    *
!*************************************************
IF WORK-ARCFILE-STATUS = 'EOF'
  CALL NOTFND.
!
!
!*************************************************
!*-PASS CONTROL TO FUNCTION F2, WHICH            *
!* EXECUTES DIALOG RESD2.                        *
!*-F2 (RESD2) AND F3 (RESD3), WHICH IS A VALID   *
!* FUNCTION FROM F2, READ THE ARCHIVE FILE       *
!* AND ATTEMPT TO RESTORE THE EMP REC AND ITS    *
!* ASSOCIATED COVERAGE RECS.  IF THE EMP REC     *
!* CANNOT BE FOUND, THESE DIALOGS SET WORK-      *
!* STATUS TO 'NOT FOUND'.                        *
!*************************************************
MOVE 'R2' TO AGR-CURRENT-RESPONSE.
MOVE SPACES TO WORK-STATUS.
EXECUTE NEXT FUNCTION.
!
!
!*************************************************
!*-IF THE REQUESTED EMP REC WAS NOT FOUND,       *
!* CALL THE NOTFND ERROR ROUTINE.                *
!*-IF THE RECORD WAS FOUND AND RESTORED,         *
!* CALL THE FOUND ROUTINE.                       *
!*************************************************
IF WORK-STATUS = 'NOT FOUND'
  CALL NOTFND.
ELSE
  CALL FOUND.
!
!
!*************************************************
!*SUBROUTINE ERRRTN                              *
!*-CALLED WHEN THE REQUESTED EMP REC IS          *
!* ALREADY ON THE DATABASE.                      *
!*-SET UP FOR TRANSACTION REPORT, THEN           *
!* PASS CONTROL TO FUNCTION F4 (DLG ARCD4),      *
!* WHICH, ALONG WITH ARCD5, WRITES A REPORT      *
!* LINE.                                         *
!*-SET INPUT-ID OF THE INPUT MAP IN ERROR.       *
!*-ISSUE WRITE TRANSACTION COMMAND, WHICH        *
!* WRITES THE INPUT RECORD TO THE SUSPENSE       *
!* FILE, THEN READS THE NEXT INPUT RECORD.       *
!*************************************************
DEFINE ERRRTN.
  MOVE 'EMPLOYEE ALREADY ON DATABASE' TO REPORT-STATUS.
  MOVE INPUT-ID TO REPORT-ID.
  MOVE EMP-LAST-NAME-0415 TO REPORT-LNAME.
  MOVE EMP-FIRST-NAME-0415 TO REPORT-FNAME.
  MOVE 'R4' TO AGR-CURRENT-RESPONSE.
  EXECUTE NEXT FUNCTION.
  MODIFY MAP TEMP FOR (INPUT-ID) EDIT ERROR.
  WRITE TRANSACTION.
!
!
!*************************************************
!*SUBROUTINE NOTFND                              *
!*-CALLED WHEN THE REQUESTED EMP REC IS          *
!* NOT ON THE ARCHIVE FILE.  (NOTE THAT THE      *
!* APPL. ASSUMES THAT THE INPUT FILE AND         *
!* ARCHIVE FILE ARE BOTH ORDERED BY EMP ID.)     *
!*-SET UP FOR TRANSACTION REPORT, THEN           *
!* PASS CONTROL TO FUNCTION F4 (DLG ARCD4),      *
!* WHICH, ALONG WITH ARCD5, WRITES A REPORT      *
!* LINE.                                         *
!*-SET INPUT-ID OF THE INPUT MAP IN ERROR.       *
!*-ISSUE WRITE TRANSACTION COMMAND, WHICH        *
!* WRITES THE INPUT RECORD TO THE SUSPENSE       *
!* FILE, THEN READS THE NEXT INPUT RECORD.       *
!*************************************************
DEFINE NOTFND.
  MOVE 'EMPLOYEE NOT FOUND' TO REPORT-STATUS.
  MOVE INPUT-ID TO REPORT-ID.
  MOVE SPACES TO REPORT-LNAME.
  MOVE SPACES TO REPORT-FNAME.
  MOVE 'R4' TO AGR-CURRENT-RESPONSE.
  EXECUTE NEXT FUNCTION.
  MODIFY MAP TEMP FOR (INPUT-ID) EDIT ERROR.
  WRITE TRANSACTION.
!
!
!*************************************************
!*SUBROUTINE FOUND                               *
!*-CALLED WHEN THE REQUESTED EMP REC HAS BEEN    *
!* FOUND ON THE ARCHIVE FILE AND RESTORED.       *
!*-SET UP FOR TRANSACTION REPORT, THEN           *
!* PASS CONTROL TO FUNCTION F4 (DLG ARCD4),      *
!* WHICH, ALONG WITH ARCD5, WRITES A REPORT      *
!* LINE.                                         *
!*-READ THE NEXT INPUT RECORD.                   *
!*************************************************
DEFINE FOUND.
  MOVE 'EMPLOYEE RESTORED' TO REPORT-STATUS.
  MOVE INPUT-ID TO REPORT-ID.
  MOVE EMP-LAST-NAME-0415 TO REPORT-LNAME.
  MOVE EMP-FIRST-NAME-0415 TO REPORT-FNAME.
  MOVE 'R4' TO AGR-CURRENT-RESPONSE.
  EXECUTE NEXT FUNCTION.
  READ TRANSACTION.