ワークデータの数行が消える
お世話になります。
該当タスクの概要としては、発注情報の登録を行うプログラムで、テーブルのワークデータ(Memoryデータベース)を編集し、登録ボタンを押すとワークデータを本データに書き込むというシンプルな作りです。
不具合については、数行のワークデータを入力したのにも関わらず、登録したら最初の1行、ないしは最初の2行しか登録されておらず、それ以降の行は消えてしまうというものです。これはクライアント側でのみ発生しており、私の環境でも何度かテストしましたが確認できませんでした。
不具合報告を受け、登録ボタンを押した後の本データへの書き込み時にエラーが起こっていると思い、各ステップでのデータのログを取るようにしたのですが、登録ボタンを押した直後の登録イベント開始時点で、既にワークデータが1行のみになっていました。ただ、テーブルにはちゃんと全ての行が表示されていたようです。
最近クライアントのサーバとPCが総入れ替えになり、その後に上記の不具合が起こるようになったので、そこに原因があるとは思うのですが、Memoryデータベースへの書き込みなのでネットワーク的な要因とは考えられず、原因がわからないので悩んでいます。サーバ・PCの入れ替えまで1年ほど運用しておりましたが、上記の不具合は起こりませんでした。また、不具合は必ず起こるとは限りません。クライアント側にもテストをお願いしましたが、5回ほど試しても不具合は起こりませんでした。再現性がなく、原因の特定が難しいです。
どういった原因が考えられますでしょうか?ご教授いただけますと幸いです。
よろしくお願いいたします。
Magic xpa 4.8です。
-
KMさん、
Memoryテーブルはコンテキストごとに管理されますので、なんらかの拍子に途中でコンテキストIDが変わってしまっているのかもしれませんね。
コンテキストIDが変わってしまっていないかどうか、画面にIDを表示させながらテスト実行してみてはいかがでしょうか?
-
Tandaさん
コメントありがとうございます。
Memoryテーブルがそのような仕様だとは知りませんでした。
コンテキストIDもログに残してみようと思います。
-
KMさん、
はい、MemoryテーブルはMagicの開発版で実行した時と、Magicの実行版で実行した時とで、コンテキストの取り扱いが変わりますので、実際の動作検証は複数台のMagic実行版を起動して、マルチユーザの環境で確認したほうが確実ですよ。
-
KMさん、
ちなみに、参考までの情報ですが、ワークテーブルを使用する方式より、Magicの新機能である「遅延トランザクション」の機能を使用したほうが、プログラムがはるかに簡潔になりますよ。
-
KMさん、
追伸ですが、既存のプログラムを書き換えるというのは大変な作業になりますので、将来的になんらの機会があればでいいですので、遅延トランザクションを使用するという方式も試してみられるといいですよ。
「遅延トランザクションを使ってみて、目から鱗でした!」という感想をたくさん頂いてます。
-
Tandaさん
遅延トランザクション…フォーラムで何度か目にすることはありましたが、実際に試したことはありませんでした。とても魅力的なので学習してみようと思います。いつも有益な情報ありがとうございます。
-
KMさん、
遅延トランザクションの機能がなかった頃は、タスク特性の「トランザクションモード」がデフォルトで「P=物理」だったのですが、今や完全にデフォルトで「D=遅延」になっています(画像参照)。
物理トランザクションはDBが持つありきたりの機能ですが、遅延トランザクションは、Magic社の天才グループが何年も掛けて編み出した独自の手法ですので、今やどこにも例を見ないような高機能になっています。
ぜひ試してみてください。
-
補足です。
以前は遅延トランザクションのトレーニングは「RIA」のコースに含まれていたのですが、今は遅延トランザクションはクラサバにもWebClientにも適用可能ということで、独立して切り離された形の1日コースになっています。ベテラン講師が「目から鱗の知識」をいっぱい教えてくれますよ。
サインインしてコメントを残してください。
コメント
8件のコメント