コミットメント制御下にあるファイルのオープンの判断を実行時に行うよう に、プログラムを書くことができます。 条件付きコミットメント制御を実行することによって、 同じプログラムの 2 バージョン、すなわちコミットメント制御下で操作するものと、そうでないも のの 2 つを作成し、保存する必要がなくなります。
COMMIT キーワードには、条件付きコミットメント制御を指定できる 任意指定パラメーターがあります。 問題のファイルのファイル仕様書のキーワードの項に COMMIT キーワード を入力します。ILE RPG コンパイラーは暗黙に、パラメーターとして指定されたものと同じ名前の、1 バイトの文字フィールドを定義します。パラメーターが '1' に設定されている場合には、 ファイルはコミットメント制御の下で実行されます。
COMMIT キーワード・パラメーターは、ファイルのオープンより前に設定しなけ ればなりません。 プログラムを呼び出した時に値を渡すか、あるいはプログラム中で明示的に '1' に設定することによって、パラメーターを設定することができます。
共用オープンの場合には、問題のファイルが既にオープンされている場合に は、COMMIT キーワード・パラメーターは、たとえ '1' に設定されていても 効力を持ちません。
図 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*
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.