こんにちは。名古屋の加藤です。
前回に引き続きトランザクションスクリプトについてです。
今回はトランザクション確定・復帰について、もう少し詳しく見ていきたいと思います。
トランザクション復帰
「トランザクション復帰」のスクリプトステップは条件を指定すると、True の場合にトランザクションを復帰します。(条件を指定しないと「トランザクション復帰」のスクリプトステップを実行するとトランザクションが復帰されます)
下の2つのスクリプトステップは同じ意味になります。
「トランザクション復帰」については条件を指定できる、ということがわかりましたが、以下のような場合は「トランザクション確定」になるのか「トランザクション復帰」になるのか、というところが気になります。
今回は下記のポイントについて実際に検証してみました。
- デバッグ中に「トランザクションを開く」の後にスクリプトを停止したらどうなるのか。
- 「トランザクション復帰」の条件に 「Get ( 最終エラー ) <> 0」 などを指定した場合、どこまでのエラーが対象になるのか。
- サブスクリプトでエラーの場合はどうなるのか。
- 「ファイルを閉じる」のスクリプトステップでスクリプトが終了された場合、トランザクションは復帰されるが、「ウインドウを閉じる」のスクリプトステップを実行した結果、最後のウインドウを閉じた、という場合はどうなるか。
- 「トランザクションを開く」の後「トランザクション確定」に行くまでの間に、ファイルとの接続が切れてしまった場合はどうなるか。
デバッグ中に「トランザクションを開く」の後にスクリプトを停止したらどうなるのか
これは、スクリプトを停止した時点でトランザクションが復帰されました。
「トランザクション復帰」の条件に 「Get ( 最終エラー ) <> 0」 などを指定した場合、どこまでのエラーが対象になるのか
「トランザクションを開く」の後にエラーが発生した場合は「トランザクション復帰」したい場合が多いと思います。
ただ、エラーの内容によっては、必ずしも「トランザクション復帰」しないといけないわけではありません(例えば、検索をして該当するデータがなかったときでも、次の検索を実行したいというような場合)。
適切に「トランザクション復帰」するために、仕様を知ることは重要です。
少し話がそれましたので戻します。Get ( 最終エラー ) はこれまで通り、文字通り最後に発生したエラーが対象になります。
エラーコードによっては、エラーが発生した瞬間にトランザクション確定までスキップされ、トランザクション復帰するものもありますが、そうではないエラーコードの場合は、これまで通り丁寧にエラー処理をする必要があると言えます。
ここで頭に入れておいたほうがいいこととして以下の点があります。
- トランザクション処理中は「レコード/検索条件確定」と「レコード/検索条件復帰」は無視されます。
これらはすべて「トランザクション確定」の時に評価されるようです。
そして「トランザクション確定」までに開いたレコードは、開いたまま保持されます。
以下のスクリプトでは、日報テーブルの「日付」フィールドが空欄不可に設定されています。
また、エラーコード「301」(別のユーザがレコードを使用中です) の場合は、エラー発生時点ですぐさま「トランザクション確定」のスクリプトステップまで移動し、トランザクションが復帰されます。
サブスクリプトでエラーの場合はどうなるのか
サブスクリプトでも同じ様にエラーを取得してエラー処理することによってトランザクション復帰したりできます。
また、上に書いたようにエラーコード「301」の場合はサブスクリプトがそこで終了して呼び出し元のスクリプトの「トランザクション確定」のスクリプトステップまで移動し、トランザクションが復帰されます。
ということですので、サブスクリプトでエラーコード「301」が出た場合は、その後に書いてあるスクリプトはすべてスキップされます。
サブスクリプトでエラー発生時にログを書く、というようなことをしていた場合はログも書けません。このような場合は呼び出し元スクリプトに戻ってからエラーログを書くようにしましょう。
「ウインドウを閉じる」のスクリプトステップを実行した結果、最後のウインドウを閉じた、という場合はどうなるか
「ウインドウを閉じる」によって最後のウインドウが閉じられた場合は、ファイルが閉じられた時と同じようにトランザクションは復帰されます。
ファイルとの接続が切れてしまった場合はどうなるか
「トランザクション確定」の前に接続が切れた場合は、「トランザクション復帰」されます。
今回は以上です。
トランザクションシリーズはもう少し続く予定です。
最近下記リンク先への流入増大したいこともあり、
流入量が多いとブログの価値が高まりますます投稿を加速していきたいと思います。
リンク先を開いていただけると大変助かります。
Claris International Inc. (日本語)
ご協力いただけましたら幸いです。