Example: Code for a standard commit processing program

The standard commit (STDCMT) processing program performs the functions required to communicate with a single notify object used by all applications.

While the commitment control function automatically writes an entry to the notify object, a user-written standard program must process the notify object. The standard program simplifies and standardizes the approach.

The program is written to verify the parameters that were passed and perform the appropriate action as follows:

O=Open
The calling program requests the notify object file be kept open on return. Because the notify object is opened implicitly by the RPG program, the program must not close it. Indicator 98 is set so that the program returns with LR off to keep the program's work areas and leaves the notify object open so it can be called again without excess overhead.
C=Close
The calling program has determined that it no longer needs the notify object and requests a close. Indicator 98 is set off to allow a full close of the notify object.
R=Read
The calling program requests that a record with matching key fields be read and passed back. The program uses the passed key fields to attempt to retrieve a record from NFYOBJP. If duplicate records exist for the same key, the last record is returned. The return code is set accordingly and, if the record existed, it is passed back in the data structure CMTID.
W=Write
The calling program requests a record to be written to the notify object to allow the calling program to start again the next time it is called. The program writes the contents of the passed data as a record in NFYOBJP.
D=Delete
The calling program requests that records for this matching key be deleted. This function is typically performed at the successful completion of the calling program to remove any information about starting again. The program attempts to delete any records for passed key fields. If no records exist, a different return code is passed back.
S=Search
The calling program requests a search for a record for a particular user regardless of which program wrote it. This function is used in the program for sign-on to indicate that starting again is required. The program uses only the user name as the key to see if records exist. The return code is set appropriately, and the contents of the last record for this key (if it exists) are read and passed back.

The following example shows the standard commit processing program, STDCMT.

Standard commit processing program

Note: By using the code example, you agree to the terms of the Code license and disclaimer information.
SEQNBR *... ... 1 ... ... 2 ... ... 3 ... ... 4 ... ... 5 ... ... 6 ... ... 7 ..
 
  1.00      FNFYOBJP UF  E           K        DISK                      A
  2.00      ICMTID       DS
  3.00      I                                        1  10 UNQUSR
  4.00      I                                       11  20 UNQPGM
  5.00      I                                       21 220 BIGFLD
  6.00      C           *ENTRY    PLIST
  7.00      C                     PARM           RQSCOD  1
  8.00      C                     PARM           RTNCOD  1
  9.00      C                     PARM           CMTID 220
 10.00      C            UNQUSR   CABEQ*BLANKS   BADEND         H1 Invalid
 11.00      C            UNQPGM   CABEQ*BLANKS   BADEND         H2 Invalid
 12.00      C*
 13.00      C*  'O' for Open
 14.00      C*
 15.00      C            RQSCOD   IFEQ 'O'                         Open
 16.00      C                     SETON                     98    End LR
 17.00      C                     GOTO END
 18.00      C                     END
 19.00      C*
 20.00      C*  'C' for Close
 21.00      C*
 22.00      C            RQSCOD   IFEQ 'C'                         Close
 23.00      C                     SETOF                     98
 24.00      C                     GOTO END
 25.00      C                     END
 26.00      C*
 27.00      C*  'R' for Read - Get last record for the key
 28.00      C*
 29.00      C            RQSCOD   IFEQ 'R'                        Read
 30.00      C            KEY      KLIST
 31.00      C                     KFLD           UNQUSR
 32.00      C                     KFLD           UNQPGM
 33.00      C            KEY      CHAINNFYOBJR              51    Not found
 34.00      C   51                MOVE '0'       RTNCOD
 35.00      C   51                GOTO END
 36.00      C                     MOVE '1'       RTNCOD            Found
 37.00      C            LOOPl    TAG
 38.00      C            KEY      READENFYOBJR                  20 EOF
 39.00      C   20                GOTO END
 40.00      C                     GOTO LOOP1
 41.00      C                     END
 42.00      C*
 43.00      C*  'W' FOR Write
 44.00      C*
 45.00      C            RQSCOD   IFEQ 'W'                         Write
 46.00      C                     WRITENFYOBJR
 47.00      C                     GOTO END
 48.00      C                     END
 49.00      C*
 50.00      C*  'D' for Delete - Delete all records for the key
 51.00      C*
 52.00      C           RQSCOD    IFEQ 'D'                         Delete
 53.00      C           KEY       CHAINNFYOBJR              51    Not found
 54.00      C   51                MOVE '0'       RTNCOD
 55.00      C   51                GOTO END
 56.00      C                     MOVE '1'       RTNCOD            Found
 57.00      C           LOOP2     TAG
 58.00      C                     DELETNFYOBJR
 59.00      C           KEY       READENFYOBJR                  20 EOF
 60.00      C  N20                GOTO LOOP2
 61.00      C                     GOTO END
 62.00      C                     END
 63.00      C*
 64.00      C*  'S' for Search for the last record for this user
 65.00      C*              (Ignore the -Program- portion of the key)
 66.00      C*
 67.00      C           RQSCOD    IFEQ 'S'                        Search
 68.00      C           UNQUSR    SETLLNFYOBJR                 20 If equal
 69.00      C  N20                MOVE '0'       RTNCOD
 70.00      C  N20                GOTO END
 71.00      C                     MOVE '1'       RTNCOD           Found
 72.00      C           LOOP3     TAG
 73.00      C           UNQUSR    READENFYOBJR                 20 EOF
 74.00      C  N20                GOTO LOOP3
 75.00      C                     GOTO END
 76.00      C                     END
 77.00      C*
 78.00      C*  Invalid request code processing
 79.00      C*
 80.00      C                     SETON                     H2    Bad RQS code
 81.00      C                     GOTO BADEND
 82.00      C*
 83.00      C*  End of program processing
 84.00      C*
 85.00      C           END       TAG
 86.00      C  N98                SETON                     LR
 87.00      C                     RETRN
 88.00      C* BADEND tag is used then fall thru to RPG cycle error return
 89.00      C           BADEND    TAG
Related concepts
Example: Use a standard processing program to decide whether to restart the application