条件付きコミットメント制御の指定
コミットメント制御下にあるファイルのオープンの判断を実行時に行うよう に、プログラムを書くことができます。 条件付きコミットメント制御を実行することによって、 同じプログラムの 2 バージョン、すなわちコミットメント制御下で操作するものと、そうでないも のの 2 つを作成し、保存する必要がなくなります。
COMMIT キーワードには、条件付きコミットメント制御を指定できる 任意指定パラメーターがあります。 問題のファイルのファイル仕様書のキーワードの項に COMMIT キーワード を入力します。ILE RPG コンパイラーは暗黙に、パラメーターとして指定されたものと同じ名前の、1 バイトの文字フィールドを定義します。パラメーターが '1' に設定されている場合には、 ファイルはコミットメント制御の下で実行されます。
COMMIT キーワード・パラメーターは、ファイルのオープンより前に設定しなけ ればなりません。 プログラムを呼び出した時に値を渡すか、あるいはプログラム中で明示的に '1' に設定することによって、パラメーターを設定することができます。
共用オープンの場合には、問題のファイルが既にオープンされている場合に は、COMMIT キーワード・パラメーターは、たとえ '1' に設定されていても 効力を持ちません。
図 1 は、条件付きコミットメント制御を示す例です。
図 1. 条件付きコミットメント制御の使用例
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... *
FFilename++IPEASFRlen+LKlen+AIDevice+.Keywords+++++++++++++++++++++++
FMASTER UF E K DISK COMMIT(COMITFLAG)
FTRANS UF E K DISK COMMIT(COMITFLAG)
*.. 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 ...+... 7 ...+... *
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
* COMITFLAG = '1' の場合にはファイルはコミットメント制御の下で
* オープンされます。
* それ以外の場合はコミットメント制御の下ではオープンされません。
C *ENTRY PLIST
C PARM COMITFLAG
C :
C :
*
* 一連の命令が正常に完了した場合には COMMIT 命令を使用し、
* 正常に完了しなかった場合は変更をロールバックします。
* ファイルがコミットメント制御用にオープンされている
* (例 COMITFLAG = '1') 場合は、COMIT または ROLBK だけを出します。
*
C UPDATE MAST_REC 90
C UPDATE TRAN_REC 91
C IF COMITFLAG = '1'
C IF *IN90 OR *IN91
C ROLBK
C ELSE
C COMMIT
C ENDIF
C ENDIF
C*