ILE COBOL Programmer's Guide

Example of Using Commitment Control

Figure 102 illustrates a possible usage of commitment control in a banking environment. The program processes transactions for transferring funds from one account to another. If no problems occur during the transaction, the changes are committed to the database file. If the transfer cannot take place because of improper account number or insufficient funds, a ROLLBACK is issued to cancel the changes.

Figure 100. Example of Use of Commitment Control -- Account Master File DDS


 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
      A* ACCOUNT MASTER PHYSICAL FILE -- ACCTMST
      A
      A                                      UNIQUE
      A          R ACCNTREC
      A            ACCNTKEY       5S
      A            NAME          20
      A            ADDR          20
      A            CITY          20
      A            STATE          2
      A            ZIP            5S
      A            BALANCE       10S 2
      A          K ACCNTKEY

Figure 101. Example of Use of Commitment Control -- Prompt Screen DDS


 ....+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
      A* PROMPT SCREEN FILE NAME 'ACCTFMTS'
      A*
      A                                   (1)INDARA
      A          R ACCTPMT
      A                                      TEXT('CUSTOMER ACCOUNT PROMPT')
      A
      A                                      CA01(15 'END OF PROGRAM')
      A                                      PUTRETAIN OVERLAY
      A                                  1  3'ACCOUNT MASTER UPDATE'
      A                                  3  3'FROM ACCOUTN NUMBER'
      A            ACCTFROM       5Y 0I  3 23CHECK(ME)
      A  99                                  ERRMSG('INVALID FROM ACCOUNT +
      A                                      NUMBER' 99)
      A  98                                  ERRMSG('INSUFFICIENT FUNDS IN FROM +
      A                                      ACCOUNT' 98)
      A                                  4  3'TO ACCOUNT NUMBER'
      A            ACCTTO         5Y 0I  4 23CHECK(ME)
      A  97                                  ERRMSG('INVALID TO ACCOUNT +
      A                                      NUMBER' 97)
      A                                  5  3'AMOUNT TRANSFERRED'
      A            TRANSAMT      10Y02I  5 23
      A          R ERRFMT
      A  96                              6  5'INVALID FILE STATUS'
      A  95                              7  5'INVALID KEY IN REWRITE'
      A  94                              8  5'EOF CONDITION IN READ'

Figure 102. Example of Use of Commitment Control


 5722WDS V5R3M0  030905 LN  IBM ILE COBOL            CBLGUIDE/ACCOUNT     ISERIES1   03/09/15 13:53:23        Page      2
                                     S o u r c e
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S COPYNAME   CHG DATE
     1     000100 IDENTIFICATION DIVISION.
     2     000200 PROGRAM-ID.     ACCOUNT.
     3     000300 ENVIRONMENT DIVISION.
     4     000400 CONFIGURATION SECTION.
     5     000500 SOURCE-COMPUTER. IBM-ISERIES.
     6     000600 OBJECT-COMPUTER. IBM-ISERIES.
     7     000700 INPUT-OUTPUT SECTION.
     8     000800 FILE-CONTROL.
     9     000900     SELECT ACCOUNT-FILE  ASSIGN TO DATABASE-ACCTMST
    11     001000         ORGANIZATION IS INDEXED
    12     001100         ACCESS IS DYNAMIC
    13     001200         RECORD IS EXTERNALLY-DESCRIBED-KEY
    14     001300         FILE STATUS IS ACCOUNT-FILE-STATUS.
    15     001400     SELECT DISPLAY-FILE ASSIGN TO WORKSTATION-ACCTFMTS-SI  (1)
    17     001500         ORGANIZATION IS TRANSACTION.
           001600*********************************************************************
    18     001700 I-O-CONTROL.
    19     001800     COMMITMENT CONTROL FOR ACCOUNT-FILE.  (2)
           001900*********************************************************************
    20     002000 DATA DIVISION.
    21     002100 FILE SECTION.
    22     002200 FD  ACCOUNT-FILE.
    23     002300 01  ACCOUNT-RECORD.
           002400     COPY DDS-ALL-FORMATS OF ACCTMST.
    24    +000001       05  ACCTMST-RECORD PIC X(82).                                          <-ALL-FMTS
          +000002*    I-O FORMAT:ACCNTREC   FROM FILE ACCTMST    OF LIBRARY CBLGUIDE           <-ALL-FMTS
          +000003*                                                                             <-ALL-FMTS
          +000004*THE KEY DEFINITIONS FOR RECORD FORMAT  ACCNTREC                              <-ALL-FMTS
          +000005*  NUMBER               NAME                RETRIEVAL       ALTSEQ            <-ALL-FMTS
          +000006*   0001   ACCNTKEY                         ASCENDING         NO              <-ALL-FMTS
    25    +000007       05  ACCNTREC      REDEFINES ACCTMST-RECORD.                            <-ALL-FMTS
    26    +000008           06 ACCNTKEY              PIC S9(5).                                <-ALL-FMTS
    27    +000009           06 NAME                  PIC X(20).                                <-ALL-FMTS
    28    +000010           06 ADDR                  PIC X(20).                                <-ALL-FMTS
    29    +000011           06 CITY                  PIC X(20).                                <-ALL-FMTS
    30    +000012           06 STATE                 PIC X(2).                                 <-ALL-FMTS
    31    +000013           06 ZIP                   PIC S9(5).                                <-ALL-FMTS
    32    +000014           06 BALANCE               PIC S9(8)V9(2).                           <-ALL-FMTS
           002500
    33     002600 FD  DISPLAY-FILE.
    34     002700 01  DISPLAY-REC.
           002800     COPY DDS-ALL-FORMATS OF ACCTFMTS.
    35    +000001       05  ACCTFMTS-RECORD PIC X(20).                                         <-ALL-FMTS
          +000002*  INPUT FORMAT:ACCTPMT    FROM FILE ACCTFMTS   OF LIBRARY CBLGUIDE           <-ALL-FMTS
          +000003*                          CUSTOMER ACCOUNT PROMPT                            <-ALL-FMTS
    36    +000004       05  ACCTPMT-I     REDEFINES ACCTFMTS-RECORD.                           <-ALL-FMTS
    37    +000005           06 ACCTFROM              PIC S9(5).                                <-ALL-FMTS
    38    +000006           06 ACCTTO                PIC S9(5).                                <-ALL-FMTS
    39    +000007           06 TRANSAMT              PIC S9(8)V9(2).                           <-ALL-FMTS
          +000008* OUTPUT FORMAT:ACCTPMT    FROM FILE ACCTFMTS   OF LIBRARY CBLGUIDE           <-ALL-FMTS
          +000009*                          CUSTOMER ACCOUNT PROMPT                            <-ALL-FMTS
          +000010*      05  ACCTPMT-O     REDEFINES ACCTFMTS-RECORD.                           <-ALL-FMTS
          +000011*  INPUT FORMAT:ERRFMT     FROM FILE ACCTFMTS   OF LIBRARY CBLGUIDE           <-ALL-FMTS
 5722WDS V5R3M0  030905 LN  IBM ILE COBOL                 CBLGUIDE/ACCOUNT         ISERIES1   03/09/15 13:53:23        Page      3
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S COPYNAME   CHG DATE
          +000012*                                                                             <-ALL-FMTS
          +000013*      05  ERRFMT-I      REDEFINES ACCTFMTS-RECORD.                           <-ALL-FMTS
          +000014* OUTPUT FORMAT:ERRFMT     FROM FILE ACCTFMTS   OF LIBRARY CBLGUIDE           <-ALL-FMTS
          +000015*                                                                             <-ALL-FMTS
          +000016*      05  ERRFMT-O      REDEFINES ACCTFMTS-RECORD.                           <-ALL-FMTS
           002900
    40     003000 WORKING-STORAGE SECTION.
    41     003100 77  ACCOUNT-FILE-STATUS           PIC X(2).
    42     003200 77  IND-ON                        PIC 1    VALUE B"1".
    43     003300 77  IND-OFF                       PIC 1    VALUE B"0".
    44     003400 01  DISPFILE-INDICS.
           003500     COPY DDS-ALL-FORMATS-INDIC OF ACCTFMTS.  (3)
    45    +000001       05  ACCTFMTS-RECORD.                                                   <-ALL-FMTS
          +000002*  INPUT FORMAT:ACCTPMT    FROM FILE ACCTFMTS   OF LIBRARY CBLGUIDE           <-ALL-FMTS
          +000003*                          CUSTOMER ACCOUNT PROMPT                            <-ALL-FMTS
    46    +000004           06 ACCTPMT-I-INDIC.                                                <-ALL-FMTS
    47    +000005                07 IN15             PIC 1  INDIC 15.                          <-ALL-FMTS
          +000006*                          END OF PROGRAM                                     <-ALL-FMTS
    48    +000007                07 IN97             PIC 1  INDIC 97.                          <-ALL-FMTS
          +000008*                          INVALID TO ACCOUNT NUMBER                          <-ALL-FMTS
    49    +000009                07 IN98             PIC 1  INDIC 98.                          <-ALL-FMTS
          +000010*                          INSUFFICIENT FUNDS IN FROM ACCOUNT                 <-ALL-FMTS
    50    +000011                07 IN99             PIC 1  INDIC 99.                          <-ALL-FMTS
          +000012*                          INVALID FROM ACCOUNT NUMBER                        <-ALL-FMTS
          +000013* OUTPUT FORMAT:ACCTPMT    FROM FILE ACCTFMTS   OF LIBRARY CBLGUIDE           <-ALL-FMTS
          +000014*                          CUSTOMER ACCOUNT PROMPT                            <-ALL-FMTS
    51    +000015           06 ACCTPMT-O-INDIC.                                                <-ALL-FMTS
    52    +000016                07 IN97             PIC 1  INDIC 97.                          <-ALL-FMTS
          +000017*                          INVALID TO ACCOUNT NUMBER                          <-ALL-FMTS
    53    +000018                07 IN98             PIC 1  INDIC 98.                          <-ALL-FMTS
          +000019*                          INSUFFICIENT FUNDS IN FROM ACCOUNT                 <-ALL-FMTS
    54    +000020                07 IN99             PIC 1  INDIC 99.                          <-ALL-FMTS
          +000021*                          INVALID FROM ACCOUNT NUMBER                        <-ALL-FMTS
          +000022*  INPUT FORMAT:ERRFMT     FROM FILE ACCTFMTS   OF LIBRARY CBLGUIDE           <-ALL-FMTS
          +000023*                                                                             <-ALL-FMTS
          +000024*          06 ERRFMT-I-INDIC.                                                 <-ALL-FMTS
          +000025* OUTPUT FORMAT:ERRFMT     FROM FILE ACCTFMTS   OF LIBRARY CBLGUIDE           <-ALL-FMTS
          +000026*                                                                             <-ALL-FMTS
    55    +000027           06 ERRFMT-O-INDIC.                                                 <-ALL-FMTS
    56    +000028                07 IN94             PIC 1  INDIC 94.                          <-ALL-FMTS
    57    +000029                07 IN95             PIC 1  INDIC 95.                          <-ALL-FMTS
    58    +000030                07 IN96             PIC 1  INDIC 96.                          <-ALL-FMTS
           003600
    59     003700 PROCEDURE DIVISION.
    60     003800 DECLARATIVES.
           003900 ACCOUNT-ERR-SECTION SECTION.
           004000     USE AFTER STANDARD EXCEPTION PROCEDURE ON ACCOUNT-FILE.
           004100 ACCOUNT-ERR-PARAGRAPH.
    61     004200     IF ACCOUNT-FILE-STATUS IS NOT EQUAL "23" THEN
    62     004300         MOVE IND-ON TO IN96 OF ERRFMT-O-INDIC  (4)
           004400     ELSE
    63     004500         MOVE IND-ON TO IN95 OF ERRFMT-O-INDIC  (5)
           004600     END-IF
    64     004700     WRITE DISPLAY-REC FORMAT IS "ERRFMT"
           004800          INDICATORS ARE ERRFMT-O-INDIC
 5722WDS V5R3M0  030905 LN  IBM ILE COBOL                 CBLGUIDE/ACCOUNT         ISERIES1   03/09/15 13:53:23        Page      4
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S COPYNAME   CHG DATE
           004900     END-WRITE
    65     005000     CLOSE DISPLAY-FILE
           005100           ACCOUNT-FILE.
    66     005200     STOP RUN.
           005300
           005400 DISPLAY-ERR-SECTION SECTION.
           005500     USE AFTER STANDARD EXCEPTION PROCEDURE ON DISPLAY-FILE.
           005600 DISPLAY-ERR-PARAGRAPH.
    67     005700     MOVE IND-ON TO IN94 OF ERRFMT-O-INDIC
    68     005800     WRITE DISPLAY-REC FORMAT IS "ERRFMT"
           005900          INDICATORS ARE ERRFMT-O-INDIC
           006000     END-WRITE
    69     006100     CLOSE DISPLAY-FILE
           006200           ACCOUNT-FILE.
    70     006300     STOP RUN.
           006400 END DECLARATIVES.
           006500
           006600 MAIN-PROGRAM SECTION.
           006700 MAINLINE.
    71     006800     OPEN I-O DISPLAY-FILE
           006900          I-O ACCOUNT-FILE.
    72     007000     MOVE ZEROS TO ACCTPMT-I-INDIC
           007100                   ACCTPMT-O-INDIC.
    73     007200     PERFORM WRITE-READ-DISPLAY.
    74     007300     PERFORM VERIFY-ACCOUNT-NO UNTIL IN15 EQUAL IND-ON.
    75     007400     CLOSE DISPLAY-FILE
           007500           ACCOUNT-FILE.
    76     007600     STOP RUN.
           007700
           007800 VERIFY-ACCOUNT-NO.
    77     007900     PERFORM VERIFY-TO-ACCOUNT.
    78     008000     IF IN97 OF ACCTPMT-O-INDIC EQUAL IND-OFF THEN
    79     008100         PERFORM VERIFY-FROM-ACCOUNT.
    80     008200     PERFORM WRITE-READ-DISPLAY.
           008300
           008400 VERIFY-FROM-ACCOUNT.
    81     008500     MOVE ACCTFROM TO ACCNTKEY.
    82     008600     READ ACCOUNT-FILE
    83     008700         INVALID KEY MOVE IND-ON TO IN99 OF ACCTPMT-O-INDIC
           008800     END-READ
    84     008900     IF IN99 OF ACCTPMT-O-INDIC EQUAL IND-ON THEN  (6)
           009000*
    85     009100         ROLLBACK
           009200*
           009300     ELSE
    86     009400         PERFORM UPDATE-FROM-ACCOUNT
           009500     END-IF.
           009600
           009700 VERIFY-TO-ACCOUNT.
    87     009800     MOVE ACCTTO TO ACCNTKEY.
    88     009900     READ ACCOUNT-FILE
    89     010000         INVALID KEY MOVE IND-ON TO IN97 OF ACCTPMT-O-INDIC  (7)
           010100     END-READ
    90     010200     IF IN97 OF ACCTPMT-O-INDIC EQUAL IND-ON THEN
           010300*
 5722WDS V5R3M0  030905 LN  IBM ILE COBOL                 CBLGUIDE/ACCOUNT         ISERIES1   03/09/15 13:53:23        Page      5
  STMT PL SEQNBR -A 1 B..+....2....+....3....+....4....+....5....+....6....+....7..IDENTFCN  S COPYNAME   CHG DATE
    91     010400         ROLLBACK  (8)
           010500*
           010600     ELSE
    92     010700         PERFORM UPDATE-TO-ACCOUNT
           010800     END-IF.
           010900
           011000 UPDATE-TO-ACCOUNT.
    93     011100     ADD TRANSAMT TO BALANCE.
    94     011200     REWRITE ACCOUNT-RECORD.
           011300
           011400 UPDATE-FROM-ACCOUNT.
    95     011500     SUBTRACT TRANSAMT FROM BALANCE.
    96     011600     REWRITE ACCOUNT-RECORD.
    97     011700     IF BALANCE IS LESS THAN 0 THEN
    98     011800         MOVE IND-ON TO IN98 OF ACCTPMT-O-INDIC
           011900*
    99     012000         ROLLBACK  (9)
           012100*
           012200     ELSE
           012300*
   100     012400         COMMIT  (10)
           012500*
           012600     END-IF.
           012700
           012800 WRITE-READ-DISPLAY.
   101     012900     WRITE DISPLAY-REC FORMAT IS "ACCTPMT"
           013000         INDICATORS ARE ACCTPMT-O-INDIC  (11)
           013100     END-WRITE
   102     013200     MOVE ZEROS TO ACCTPMT-I-INDIC
           013300                   ACCTPMT-O-INDIC.
   103     013400     READ DISPLAY-FILE RECORD
           013500         INDICATORS ARE ACCTPMT-I-INDIC
           013600     END-READ.
           013700
           013800
                           * * * * *   E N D   O F   S O U R C E   * * * * *

(1)
A separate indicator area is provided for the program.

(2)
The COMMITMENT CONTROL clause specifies files to be placed under commitment control. Any files named in this clause are affected by the COMMIT and ROLLBACK verbs.

(3)
The Format 2 COPY statement with the indicator attribute INDIC, defines data description entries in WORKING-STORAGE for the indicators to be used in the program.

(4)
IN96 is set if there is an invalid file status.

(5)
IN95 is set if there is an INVALID KEY condition on the REWRITE operation.

(6)
IN99 is set if the entered account number is invalid for the account from which money is being transferred.

(7)
IN97 is set if the entered account number is invalid for the account to which money is being transferred.

(8)
If an INVALID KEY condition occurs on the READ, a ROLLBACK is used and the record lock placed on the record after the first READ is released.

(9)
If the transfer of funds is not allowed (an indicator has been set), the ROLLBACK statement is processed. All changes made to database files under commitment control are canceled.

(10)
If the transfer of funds was valid (no indicators have been set), the COMMIT statement is processed, and all changes made to database files under commitment control become permanent.

(11)
The INDICATORS phrase is required for options on the work station display that are controlled by indicators.


[ Top of Page | Previous Page | Next Page | Table of Contents | Index ]