条件付きコミットメント制御の指定

コミットメント制御下にあるファイルのオープンの判断を実行時に行うよう に、プログラムを書くことができます。 条件付きコミットメント制御を実行することによって、 同じプログラムの 2 バージョン、すなわちコミットメント制御下で操作するものと、そうでないも のの 2 つを作成し、保存する必要がなくなります。

COMMIT キーワードには、条件付きコミットメント制御を指定できる 任意指定パラメーターがあります。 問題のファイルのファイル仕様書のキーワードの項に COMMIT キーワード を入力します。ILE RPG コンパイラーは暗黙に、パラメーターとして指定されたものと同じ名前の、1 バイトの文字フィールドを定義します。パラメーターが '1' に設定されている場合には、 ファイルはコミットメント制御の下で実行されます。

COMMIT キーワード・パラメーターは、ファイルのオープンより前に設定しなけ ればなりません。 プログラムを呼び出した時に値を渡すか、あるいはプログラム中で明示的に '1' に設定することによって、パラメーターを設定することができます。

共用オープンの場合には、問題のファイルが既にオープンされている場合に は、COMMIT キーワード・パラメーターは、たとえ '1' に設定されていても 効力を持ちません。

図 177 は、条件付きコミットメント制御を示す例です。

図 177. 条件付きコミットメント制御の使用例
*.. 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*