処理フロー: バッチタスクの基本フロー

バッチタスクの基本フロー図

図はバッチタスクの基本フローです。
タスク前処理とタスク後処理は、そのタスクの開始時と終了時に必ず1回ずつ実行されます。
これは、オンラインタスクと同じなのですが、異なるのはレコード処理の方です。

まず、レコードメインは処理フローには入りません。
項目の宣言のみに使われるので、使えるコマンドは「セレクト」と「リンク」だけです。
コールや項目更新やエラーなどの処理系コマンドはレコードメインでは使えません。

次にレコード前処理とレコード後処理について考えてみましょう。
データはタスク特性のメインテーブルとインデックスに従って、1件ずつ読み込まれます。
読み込むタイミングはオンラインタスク同様に「レコード前処理の前」です。
読み込まれたデータは、レコード前処理→レコード後処理を連続で通り、「レコード後処理の後」にデータベースに書き込まれます。
オンラインタスクと違って、レコード後処理の分岐はありません。
ですから、バッチタスクにおいてはレコード前処理とレコード後処理の役割には区別がない、とも言えます。
個人的ルールとしては、バッチタスクではレコード後処理にコマンドを集めて、レコード前処理は使わないようにしています。

SQLではテーブル処理が中心となるので、複数レコードをまとめてDBMSの中で更新するケースが多いと思いますが、 Magicの場合は、「レコード1件ずつ」の処理が基本となります。
これは、OracleやMS_SQL_Serverを使う場合でも同様です。
それだと処理速度が遅くて実用に耐えないと判断したら、「SQLコマンド」を直接発行する方法に組み替えます。
使い方は、埋め込みSQLを参照してください。
ただ、後からのプログラム修正を考えると直接SQLは最終手段と考えた方が良さそうです。