[TRANSACTION](トランザクション範囲定義)
アクセス定義ファイルを使用して操作画面をカスタマイズしている場合、トランザクションとして扱う範囲を指定します。
トランザクションとして定義した範囲の処理を終了するときに、処理状態が正常(NORMAL)の場合はトランザクションのコミットを、処理状態が正常以外の場合はトランザクションのロールバックを行います。
形式
[TRANSACTION] ・・・ [BEGIN] ・・・ [END] [TRANSACTION_END]
指定する値
トランザクションの処理を記述します。
注意事項
トランザクション処理を終了するかどうかは、トランザクション処理を終了するタグである[TRANSACTION_END]、またはトランザクション処理を途中で抜ける組み込み関数$BREAKで、参照した終了状態によって判定されます。終了状態が「NORMAL」の場合は直前にコミットします。「NORMAL」以外のときはコミットしません(ロールバックします)。
アクセス定義ファイルの終了状態は、タグや組み込み関数の実行によって随時更新されます。トランザクション中に終了状態の更新を伴う処理を複数指定した場合、最後に指定した終了状態を基に、データベースのコミットまたはロールバックが実行されます。
そのため、[TRANSACTION_END]タグおよび組み込み関数$BREAKでその直前にコミットする場合は、$SETSTATUSで「NORMAL」を明示的に指定してください。また、コミットしない(ロールバックする)場合は、「NORMAL」以外を明示的に指定してください。
なお、トランザクション処理は階層化できません。
記述例
トランザクション処理の記述例を次に示します。
[TRANSACTION] [APPEND] AssetInfo [DATA] AssetInfo.AssetID = '10000' AssetInfo.AssetNo = '10000' AssetInfo.AssetWorkKind = '001' AssetInfo.AssetKind = '001' AssetInfo.AssetBranchNo = '0' [SET_VALUE] STATUS = $GETSTATUS() [IF] STATUS = NORMAL [THEN] ##処理1 [APPEND] InstalledInfo [DATA] InstalledInfo.InstalledID = '10000' InstalledInfo.AssetID = '10000' [SET_VALUE] STATUS = $GETSTATUS() [IF] STATUS = NORMAL [THEN] ##処理2 [SET_VALUE] MSG = 'TRANSACTION : COMMIT' $ECHO(MSG) [ELSE] ##処理3 [SET_VALUE] MSG = 'TRANSACTION : ROLLBACK' $ECHO(MSG) [IF_END] [ELSE] ##処理4 [SET_VALUE] MSG = 'TRANSACTION : ROLLBACK' $ECHO(MSG) [IF_END] [TRANSACTION_END]
上記の処理では、次のように例外処理が実行されます。
-
資産ID「10000」の追加に失敗した場合
コメントの「##処理4」に遷移します。[APPEND]の終了状態が正常以外のため、[TRANSACTION]〜[TRANSACTION_END]のトランザクションをロールバックして終了します。このため、すべてのデータベースへの要求が無効となります。
-
資産ID「10000」の追加に成功した場合
コメントの「##処理1」に遷移します。インストールソフトウェア情報に、資産ID「10000」、インストールID「10000」を登録します。
-
資産ID「10000」の追加に成功し、インストールID「10000」の追加に失敗した場合
コメントの「##処理3」に遷移します。[APPEND]の終了状態が正常以外のため、[TRANSACTION]〜[TRANSACTION_END]のトランザクションをロールバックして終了します。このため、すべてのデータベースへの要求が無効となります。
-
資産ID「10000」、インストールID「10000」の追加に成功した場合
コメントの「##処理2」に遷移します。[APPEND]の終了状態が正常のため、すべてのデータベースへの要求が有効となります。