Delphi/400からIBM i 上のCLやRPGを起動すると、
その処理が終わるまでPC側に制御が戻らないようにできています。
これは、IBM i 側で実行した処理の終了を確実に把握するために
必要なことなのですが、非常に時間のかかるバッチ処理を起動したい場合等では
クライアントのアプリケーションに長い間制御が戻らず、
フリーズしているように見える事になります。
そこで、IBM i 側の処理を起動したら、その結果を待たずに
Delphi/400側へ制御を戻すため、IBM i のSBMJOB(ジョブ投入)コマンドを利用します。
例えばTAS400コマンドのRemoteCmdメソッドを使用する場合は
以下のように記述することができます。XXXXが起動したいRPGプログラムだったとします。
AS4001.RemoteCmd('SBMJOB CMD(CALL XXXX)');
このように、Delphi/400から起動するJOB側は
SBMJOBコマンドを実行しJOBを投入するだけですぐに制御が戻ります。
そして起動された別のJOBでCALL XXXXという時間のかかる処理を行うことができます。
これを応用すると実行後制御が戻らなくなる電源断やIPL等も実行できます。
以下にIBM i の即時電源断(PWRDWNSYS)を行う例をあげます。言うまでもありませんが、
このコマンド実行後は速やかにDelphi/400の接続を切る必要があります。
AS4001.RemoteCmd('SBMJOB CMD(PWRDWNSYS OPTION(*IMMED))');
(ミガロ.情報マガジン「MIGARO News!!」Vol.043 2004年8月号より)