【Magic xpa 連載最新号のご案内】 2025年10月6日
Magic xpa 開発者ユーザの皆様へ
【1】 Magic xpa 連載のご案内
------------------------------------------------
本日、Magic xpa の連載、「Magic xpa で作るイベントドリブン型プログラム」の第211回目「トランザクション超入門(その3)」を連載コーナーにアップいたしました。
https://www.tandacomp.com/ホーム/magic-連載コーナー
さて、ここまでで、「レコードレベルのトランザクション」と「タスクレベルのトランザクション」の違い、および「シングルタスクのトランザクション」と「階層構造のタスクのトランザクション」の仕組みについて学習しました。
今回は、「トランザクション超入門(その3)」として、「トランザクションのネスト」について学んでいきたいと思います。
トランザクションのネストというのは、トランザクション自体を階層構造にすることができるという機能です。本記事の「その1」と「その2」では、いずれも単一構造のトランザクションでプログラムを作成してきました。ここでは、それを階層構造にしたプログラムのサンプルを見ていきたいと思います。
なお、このトランザクションのネストという機能は、遅延トランザクションにおいてのみ可能な機能です。DBが持つ物理トランザクションでは、遅延から物理へのネストはできても、物理同士のネストはできません。Magicオリジナルの遅延トランザクションは、それだけ高度なトランザクションを実装したものであると言えます。
まず、その設定箇所がどこにあるのかを見ていきたいと思います。
画面1と画面2は、前回の第210回で見た、伝票入力プログラムの親タスクと子タスクのタスク特性です。トランザクションの設定は、いずれも「D=遅延」で「P=レコード前の前」になっていることを確認しておきます。

画面1 親タスクのトランザクション設定

画面2 子タスクのトランザクション設定
これを実行して、適当なデータを入力したときの画面が、次の画面でした(画面3)。

画面3 このプログラムを実行
そして、この状態で「キャンセル」ボタンを押すと、次のように親タスク、子タスクともに、同時にトランザクションがロールバックするという動きでした(画面4)。

画面4 親タスク子タスクともにロールバック
つまり、親タスクのトランザクションの配下で、子タスクのトランザクションも「運命共同体」にあったことを思い出しておいてください。これが単一階層のトランザクションの動きです。
では、このトランザクションをネスト遅延の構造にすると、どういう動きになるのでしょうか?(以降、本編に続く)
目次
1. ネスト遅延モードの設定箇所
2. これを実行した時の画面の再確認
3. トランザクションロールバックの確認
4. これをネスト構造の遅延にすると
5. 親のデータだけロールバックした
6. 明細入力だけロールバックしてみる
7. 親のロールバックも継続可能
8. まずは親データのロールバックから
9. キャンセルボタンで子は自動的にコミット
10. 子のデータだけロールバックする設定
11. 関数のパラメータが重要なポイント
次回は、「RIAで重複インデックスのエラーを表示には」をお送りします。
購読期間中は現在掲載中の過去記事をすべて読むことができます。
皆様のお越しをお待ちいたしております。
サインインしてコメントを残してください。
コメント
0件のコメント