オンラインとバッチタスク
オンラインとバッチタスクでは、トランザクション処理に対応した4つのモード設定があります。
D=遅延 |
データ操作(DML)ステートメントが一時的にキャッシュに保存され、すぐには物理データベースに送信されません。他のユーザはそのデータにアクセスすることはできません。このトランザクションが終了した時点で、トランザクション間に記録された様々な処理コマンドによってデータベースが更新されます。データベースの更新は、[更新レコードの識別]特性の設定内容に従って実行されます。キャッシュに蓄積されたすべてのDMLステートメントはすぐに実行され、トランザクションはクローズされます。修正内容がコミットされる前に、選択されたデータが修正された場合、エラーメッセージが表示され、更新内容が失われます。この場合、更新処理をやり直すしか方法はありません。更新されたデータが遅延トランザクション内にある場合、失われる可能性があることに注意してください。 DMLステートメントが失敗した場合、Magic xpaはトランザクション全体をまとめて再送します。 遅延トランザクションでは、親タスクと子タスクで同じトランザクションを共有します。子タスクのレベルでロールバックした場合、子タスク内での更新はロールバックされ、親タスクの変更は更新されます。子タスクの変更を親タスクと独立させたい場合、ネスト遅延トランザクションを使用してください。 例外:遅延トランザクションは、ローカルデータソースではにサポートされません。 |
||
N=ネスト遅延 |
遅延トランザクションが追加作成されます。タスクが終了すると、ネスト遅延トランザクションは親の遅延トランザクションに従ってコミットされます。親/子タスクにおいて、子タスクで行われる変更は、親タスクから独立しています。 Magic xpaは、ネストトランザクションを実装するためにデータベースに直接指示を出すことはありません。ネスト機能はMagic xpa自体によって行われます。 |
||
W=親と同じ |
タスクは、動作中のトランザクション内で実行されます。
|
||
P=物理 |
物理トランザクションでは以下のように動作します。
ほとんどのデータベースのDDLコマンド(例えば、CREATEやDROP、ALTER)は、自動的にトランザクションを開始し終了します。DDLコマンドを発行すると直ぐに、データベースによって自動COMIMTが発行されます。トランザクションの最中にDDLを使用することは避けてください。たとえば、テーブルはトランザクション中に作成したりドロップしないようにしてください。
|
注意: |
|
リッチクライアントタスク
リッチクライアントタスクでは、以下のモードが選択できます。
W=有効な遅延トランザクション内 |
デフォルト。このモードは、上記の遅延トランザクションモードと同じような動作になります。このモードで定義されたタスクを実行すると、([トランザクション開始]特性に基づいて)以下のようにトランザクションが開始されます。
親タスクのトランザクションがロールバックされると、子タスクのトランザクションもロールバックされます。 1つの親タスクに対して、子タスク内で多くのトランザクションを開くことができるため、注意して使用しなければなりません。一度に複数のタスクレベルのロールバックするには、正当な理由がない限り、「新規の遅延トランザクション」を指定した方がより安全です。 |
N=新規の遅延トランザクション |
このモードは、上記のネスト遅延トランザクションモードと同じような動作になります。このモードで定義されたタスクを実行すると、([トランザクション開始]特性に基づいて)以下のようにトランザクションが開始されます。
|
O=なし |
Magic xpaは、タスクのためにトランザクションを開始しません。データの保存を行わないタスク上でのみ使用しなければなりません。これによって、子タスク内でトランザクションをバンドルする、トランザクション・ラッパを開くようなことを防止します。バックグラウンドで使用するメイン画面やフレームを作成する場合は、これを使用してください。 |
注意: |
|
オフラインタスク
ローカルデータソースでは、物理トランザクションとして動作します。ローカルデータソースを含むすべてのタスクは、同じトランザクション内で動作します。
ローカルデータのコミットは、トランザクションを開いたタスクで行ってください。トランザクションが兄弟タスクでも開始されている場合、これらのタスクのデータもコミットされます。
ローカルデータソースを持つタスクをロールバックした場合、以下をロールバックします。
ローカルデータソースを持つすべてのタスク。
親タスクの遅延トランザクション