ホーム‎ > ‎Magic xpa‎ > ‎Magic xpa 新連載概要‎ > ‎

第156回 子タスクの編集内容が親タスクに反映されないのは何故

2021/03/02 2:46 に Masanobu Tanda が投稿   [ 2021/03/02 2:50 に更新しました ]
2021年2月28日

 今回の記事は、クラサバ、RIA、WebClient の各タスク共通のテーマで、トランザクションが関連した内容です。

 2階層構造の親子タスクを作り、親タスク、子タスクともに同じテーブルを使用するものとします。

 親タスクでデータの一覧を表示し、特定のレコードを編集したりするような場合に、子タスクをズームしてこれを行うというパターンがよくあります。ところがこのときに、子タスクで編集した内容を親タスクに戻って確認すると、子タスクで変更したはずのデータが親タスクのデータに反映されていないというケースがよく見受けられます。

 これには理論的な理由があるのですが、今回はこれをシングルユーザ環境で行った場合とマルチユーザ環境で行った場合の注意点を合わせて解説していきたいと思います。ここでは両者のいずれの場合も、Magic の「トランザクションキャッシュ」の動きが関係しています。

 理由がよく分からずに、安直に「レコード書込」イベントを発行して、修正した内容を強制的に保存してしまうという手法は得策ではありませんので、これを機会にその動作をご一緒に検証してまいりたいと思います。

 ここで使用するサンプルプログラムはクラサバのオンラインタスクですが、上でも述べましたように、このプログラムは RIA、あるいは WebClient のタスクに変換して動作させた場合でも、まったく同じように動作します。この一貫性が Magic の最大の武器のひとつであるとも言えます。

(以降、本編に続きます。本編ご購読のお申込みはこちらです)

第156回(2021年2月28日号)目次

1 親タスクのサンプル実行画面
2 子タスクのサンプル実行画面
3 子タスクでデータを修正
4 変更データが反映されない!
5 プログラムの再起動で反映!
6 Magic のトランザクションキャッシュ
7 親タスクのロジック
8 編集ボタンのイベント
9 フォーム上の編集ボタンのイベント
10 子タスクのロジック
11 フォーム上の終了ボタンのイベント
12 子タスクのトランザクションの設定
13 プログラムの再実行
14 親タスクのトランザクションキャッシュ
15 キャッシュをリロードするイベント
16 イベント発行のタイミング
17 プログラムの再実行
18 マルチユーザ環境における問題点
19 親子のトランザクションの再確認
20 子タスクのトランザクションの見直し