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.
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
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)
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.
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.
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