【Magic xpa 連載最新号のご案内】 2025年9月16日
Magic xpa 開発者ユーザの皆様へ
【1】 Magic xpa 連載のご案内
------------------------------------------------
Magic xpa の連載、「Magic xpa で作るイベントドリブン型プログラム」の第210回目「トランザクション超入門(その2)」を連載コーナーにアップいたしました。
https://www.tandacomp.com/ホーム/magic-連載コーナー
前回は、トランザクションの基本として、「レコードレベルのトランザクション」と「タスクレベルのトランザクション」の違いについて学びました。
今回は、「シングルタスクのトランザクション」と「階層構造のタスクのトランザクション」の仕組みについて学びます。
通常、伝票入力のプログラムを作成する場合、伝票のヘッダ入力を行う部分を親タスクとし、伝票の明細入力を行う部分をサブタスクとして作成するのが一般的です。
このとき、大抵の場合、個々の伝票は独立しており、1枚の伝票を作成するたびに「登録」か、あるいは「キャンセル」のいずれかを選択することになります。複数の伝票を入力したあげくに、すべてをキャンセルするということはめったにありません。したがって、この場合は親タスクのトランザクションを「レコードレベル」で行うのが一般的です。
これを意識した上で、1対Nの構造を持つプログラムのトランザクションを見ていきたいと思います。
下図はオーソドックスな伝票入力プログラムの実行画面です。ロジックを分かりやすくするために、あえて簡潔なレイアウトにしてあります(画面1)。

画面1 オーソドックスな伝票入力画面
この画面において伝票入力を進め、下図のように明細入力の3行目まで進んだとします(画面2)。

画面2 明細を3行くらい入力
この段階で、ふと間違いに気がついて、伝票を破棄したくなったとします。通常、トランザクションを使用していないプログラムですと、明細行でF3の削除キーを3回押して3レコードを削除し、さらにヘッダーに戻り、メニューのキャンセルを実行して、ヘッダーレコードを削除するという手間が必要となります。
※上記の例は、「物理トランザクション」を用いた場合、あるいは「トランザクション:なし」を指定した場合の例です。Magicに遅延トランザクションが導入されて以降は、単純構造の遅延トランザクションなら、メニューの「キャンセル」や「変更取消」からでもロールバックが実行できるようになっています。
そのため、トランザクションがまだあまり普及していなかった時代は、このような面倒を操作を省くためにワークファイル等を用いて、擬似的に仮入力の処理を行っていました。つまり、伝票入力を途中でキャンセルしたい場合は、ワークファイルのデータを破棄してやればよいという手法でした。
これが、Magicにもトランザクションの機能が実装されて以降は、事情がガラリと変わりました。ワークファイルを経由してデータを読み込んだり、書き戻したりする必要はまったくなくなり、タスクにあらかじめ組み込まれたトランザクションの機能を利用するだけで、同じことが実現できるようになったわけです。
では本当にそんなにうまくいくのでしょうか。疑心暗鬼の開発者の方も多いかと思いますので、実際のプログラムの動きを見ながら確認していきたいと思います。
上記の画面2において、明細の3行目までを入力したところで、いきなり「キャンセル」ボタンを押してみましょう。このボタンには、データをロールバックするという機能が実装されています。
すると、画面は次のように、一気に伝票入力前の状態に戻ります。ワークファイルは一切使用していないにも関わらず、明細の3レコードとヘッダーの1レコードが同時に画面から消えたことになります(画面3)。

画面3 一気に伝票が初期化された
これが、Magicのタスクに埋め込まれているトランザクションのデフォルトの動作です。ワークファイルを用いたプログラムを作った経験のある開発者の方なら、たったこれだけでも、どれだけの労力が節約できるかを実感いただけるかと思います(以降、本編に続く)。
目次
1. オーソドックスな伝票入力画面
2. ワークファイルを用いていた時代
3. ロールバック用のキャンセルボタン
4. トランザクションが埋め込まれている場所
5. 親タスクのトランザクション設定
6. 子タスクのトランザクション設定
7. トランザクションを独立させたい場合
8. キャンセルボタンの仕組み
9. ロールバックイベントの設定
10. イベントハンドラの設定
11. トランザクションのコミットは如何にして
12. 修正モードにおけるロールバック
13. タスク修正モード時のロールバック
14. 取消終了イベントとの違いは?
次回は、「トランザクション超入門(その3)」をお送りします。
購読期間中は現在掲載中の過去記事をすべて読むことができます。
皆様のお越しをお待ちいたしております。
-
確かにワークファイルを使った鑑、明細入力画面は、例えば見積明細500行を明細WFへ複写後、画面入力。
保存時は、実データへ書き込み、その前に明細削除などしているので効率が悪い面もあると思います。
1行編集するだけなのに、多数のレコードの書き込みが発生しているなど。
サインインしてコメントを残してください。
コメント
1件のコメント