Example: Unique notify object for each program

Using a single, unique notify object for each job allows use of an externally described commit identification even though there might be multiple users of the same program.

In the following examples, a database file is used as a notify object and it is used only by this program.

The program has two database files (PRDMSTP and PRDLOCP) that must be updated for receipts to inventory. The display file used by the program is named PRDRCTD. A database file, PRDRCTP, is used as the notify object. This notify object is defined to the program as a file and is also used as the definition of a data structure for the notify function.

Note: By using the code examples, you agree to the terms of the Code license and disclaimer information.

DDS for physical file PRDLOCP

SEQNBR *... ... 1 ... ... 2 ... ... 3 ... ... 4 ... ... 5 ... ... 6 ... ... 7
 
  1.00      A          R PRDLOCR                   TEXT('Location record')
  2.00      A            PRODCT         3          COLHDG('Product' 'Number')
  3.00      A            LOCATN         6          COLHDG('Location')
  4.00      A            LOCAMT         5  0       COLHDG('Location' 'Amount')
  5.00      A                                      EDTCDE(Z)
  6.00      A          K PRODCT
  7.00      A          K LOCATN

DDS for display file PRDRCTD

SEQNBR *... ... 1 ... ... 2 ... ... 3 ... ... 4 ... ... 5 ... ... 6 ... ... 7 ..
 
  1.00      A                                      REF(PRDMSTP)
  2.00      A          R PROMPT
  3.00      A                                      CA03(98 'End of program')
  4.00      A                                      SETOFF(71 'RESTART')
  5.00      A                                 1  20'PRODUCT RECEIPTS'
  6.00      A                                 3   2'Quantity'
  7.00      A            QTY           3  OI     +1
  8.00      A                                    +6'Product'
  9.00      A            PRODCT   R        I     +1
 10.00      A  61                                  ERRMSG('No record +
 11.00      A                                      found in the +
 12.00      A                                      master file' 62)
 13.00      A                                    +6'Location'
 14.00      A            LOCATN   R        I     +1REFFLD(LOCATN PRDLOCP)
 15.00      A  62                                  ERRMSG('No record +
 16.00      A                                      found in the +
 17.00      A                                      location file' 62)
 18.00      A                                 9   2'Last Transaction'
 19.00      A  71                                +6'This is restart +
 20.00      A                                       information'
 21.00      A                                      DSPATR(HI BL)
 22.00      A                                12   2'Quantity'
 23.00      A                                12  12'Product'
 24.00      A                                12  23'Location'
 25.00      A                                12  35'Description'
 26.00      A            LSTPRD   R          14  15REFFLD(PRODCT)
 27.00      A            LSTLOC   R          14  26REFFLD(LOCATN *SRC)
 28.00      A            LSTQTY   R          14   5REFFLD(QTY *SRC)
 29.00      A                                      EDTCDE(Z)
 30.00      A            LSTDSC   R          14  35REFFLD(DESCRP)

DDS for notify object and externally described data structure (PRDRCTP)

SEQNBR *... ... 1 ... ... 2 ... ... 3 ... ... 4 ... ... 5 ... ... 6 ... ... 7 ..
 
  1.00      A                                      LIFO
  2.00      A                                      REF(PRDMSTP)
  3.00      A          R PRDRCTR
  4.00      A            USER          10
  5.00      A            PRODCT    R
  6.00      A            DESCRP    R
  7.00      A            QTY            3  0
  8.00      A            LOCATN    R               REFFLD(LOCATN PRDLOCP)
  9.00      A          K USER

The program processes the notify object as follows:

The processing for this program prompts the user for a product number, a location, and a quantity:

This process is outlined in the following figure. The user name is passed to the program to provide a unique record in the notify object.

Program flow


Program flow

The following example is about the RPG source code. The notify object (file PRDRCTP) is used as a normal file at the beginning and end of the program, and is also specified as the notify object in the CL (STRCMTCTL command) before calling the program.

RPG source

SEQNBR *... ... 1 ... ... 2 ... ... 3 ... ... 4 ... ... 5 ... ... 6 ... ... 7 ..
 
  1.00      FPRDMSTP UF  E           K        DISK         KCOMIT
  2.00      FPRDLOCP UF  E           K        DISK         KCOMIT
  3.00      FPRDRCTD CF  E                    WORKSTN
  4.00      F*
  5.00      F* The following file is the specific notify object for this pgm.
  6.00      F*      It is accessed only in a restart situation and at the
  7.00      F*        end of the program to delete any records.  The records
  8.00      F*        are written to the notify object by Commitment Control.
  9.00      F*
 10.00      FPRDRCTP UF  E           K        DISK
 11.00      ICMTID     E DSPRDRCTP  
 12.00      C           *ENTRY    PLIST
 13.00      C                     PARM           USER10 10
 14.00      C                     MOVE USER10    USER
 15.00      C*
 16.00      C*  Check for restart information - get last rcd per user
 17.00      C*    PRDRCTP file access path is in LIFO sequence
 18.00      C*
 19.00      C           USER      CHAINPRDRCTR             20     Not found
 20.00      C  N20                DO                              Restart
 21.00      C                     EXSR MOVLST                     Move to last
 22.00      C                     SETON                    71     Restart
 23.00      C                     END
 24.00      C*
 25.00      C*  Basic processing loop
 26.00      C*
 27.00      C           L00P      TAG
 28.00      C                     EXFMTPROMPT
 29.00      C   98                GOTO END                        End of pgm
 30.00      C           PRODCT    CHAINPRDMSTR             61     Not found
 31.00      C   61                GOTO L00P
 32.00      C           KEY       KLIST
 33.00      C                     KFLD           PRODCT
 34.00      C                     KFLD           LOCATN
 35.00      C           KEY       CHAINPRDLOCR             62     Not found
 36.00      C   62                DO
 37.00      C                     EXCPTRLSMST                     Release lck
 38.00      C                     GOTO L00P
 39.00      C                     END
 40.00      C                     ADD  QTY       ONHAND           Add
 41.00      C                     ADD  QTY       LOCAMT
 42.00      C                     UPDATPRDMSTR                    Update
 43.00      C                     UPDATPRDLOCR                    Update
 44.00      C*  
 45.00      C*  Commit and move to previous fields
 46.00      C*
 47.00      C           CMTID     COMIT
 48.00      C                     EXSR MOVLST                     Move to last
 49.00      C                     GOTO L00P
 50.00      C*
 51.00      C*  End of program processing
 52.00      C*
 53.00      C           END       TAG
 54.00      C                     SETON                    LR
 55.00      C*56.00      C*  Delete any records in the notify object
 57.00      C*
 58.00      C           DLTLP     TAG
 59.00      C           USER      CHAINPRDRCTR             20     Not found
 60.00      C  N20                DO
 61.00      C                     DELETPRDRCTR                    Delete
 62.00      C                     GOTO DLTLP
 63.00      C                     END
 64.00      C*
 65.00      C*  Move to -Last Used- fields for operator feedback
 66.00      C*
 67.00      C           MOVLST    BEGSR
 68.00      C                     MOVE PRODCT    LSTPRD
 69.00      C                     MOVE LOCATN    LSTLOC
 70.00      C                     MOVE QTY       LSTQTY
 71.00      C                     MOVE DESCRP    LSTDSC
 72.00      C                     ENDSR
 73.00      OPRDMSTR E                RLSMST
Related concepts
Example: Use a transaction logging file to start an application
Example: Single notify object for all programs