JCLをサブミットして実行後のジョブSYSOUTを読み込み表示するISPFエディター編集マクロ

JCLをサブミットして実行後のジョブSYSOUTを読み込み表示するISPFエディター編集マクロ

「REXXからバッチジョブをサブミットして実行後のジョブログを読み込む」の記事で紹介した、JCLをサブミットして実行結果を取得するREXXサンプルを応用したISPFエディターのJOBマクロです。エディターの編集パネルでSUBコマンドを入力すると編集中のデータをJCLとしてサブミットすることができますが、このマクロ「JOB」は、JCLのサブミットに加え実行したジョブの終了を待ち合わせて実行後のジョブのSYSOUTデータを全て読み込んでISPFブラウザーで表示するところまでを一気に行います。
複数のジョブを選択しながら内容を表示するならSDSFを直接使う必要がありますが、編集中のJCLで実行するジョブの実行結果だけを確認するのであればこのマクロも便利です。実際に使う時は、エディターのコマンド行で「SUB」の代わりに「JOB」と入力するだけです。

①REXXプログラム「JOB」をCLISTメンバーとして登録する

任意の区分データセットに下記のREXXプログラムをメンバー名JOBで登録します。できれば「userid.CLIST」のDSNで区分データセットを作るといいです(後述のTSO EXコマンドが簡単になる)。今後はREXXプログラミングも学習してみようとするなら「userid.CLIST」のDSNで作っておくと便利です。

SYSOUT出力量が多いジョブを実行することがわかっている場合は、52行目のALLOCコマンドのTRACKSオプションをCYLINDERSに変更したり、割当て数を増やすといいでしょう。さもないとREXX execは実行中にx37ABENDしてしまいます(ABENDしなかった場合でもx37状態になれば途中までしか出力結果は表示されない)
JOBマクロはTSOセッション内(フォアグラウンド)で直接実行しますから、実行に長時間掛かるジョブのJCLサブミットには向きません。また、SYSOUTの出力量が多いと作業用データセットへのコピー処理に時間が掛かるため、その場合も無応答時間が長くなります。JOBマクロは、ちょっとしたバッチ処理の実行作業を効率よく進めるためには有用ですが、長時間ジョブや大量出力ジョブであればSDSFで実行状況をモニタリングした方がいいでしょう。
ジョブの実行や出力量が予想以上に多く時間が掛かっている時は、ATTNキーを押せばREXX execの処理を途中でキャンセルすることもできます「REXX execを強制的に終了させる(備忘録)」を参照)。なお、何度も処理をキャンセルした場合は、未解放の作業用データセットが残ってしまっているので、DDLISTユーティリティーでJCLINxとJOBOUTxのDD名を解放するかTSOをログオンし直します。同時起動許容数は8にしているので、並行して8のISPFセッションで同時使用できますが、処理途中でキャンセルした場合は起動許容数がその分減っていきます。

※マクロ実行中は非プロンプト・モードになるので、JOBステートメントが無い場合のジョブ名サフィックス文字の入力を促すプロンプトは表示されません。ユーザーID+Xのジョブ名でサブミットされます(表示されるIKJ56701Iメッセージを参照)

②編集マクロとしてテストを行う

  1. 任意のISPFパネル上で下記のコマンドを実行する
  2. ALTLIB ACTコマンドは何もメッセージが出なければ正しく実行できています。ALTLIB DISPコマンドの表示結果で、ApplicationレベルのCLISTライブラリーが追加されているかを確認できます。

  3. 適当なJCLをエディターで開きSUBの代わりにJOBコマンドを実行する
  4. テストなので実行時間の短い単純なジョブで試すといいでしょう。JCLが実行されると下記のメッセージが表示されます。***の表示を待って実行キーを押します。

  5. ISPFブラウザーが起動されてサブミットしたジョブの実行結果が表示される
  6. ジョブのSYSOUT内容等を確認したら、PF3で終了して元のエディター画面に戻ります。

③CLISTライブラリーをSYSPROCまたはSYSEXECに連結する(※テストだけで終えるならこれ以降の作業は不要)

①で登録したREXX編集マクロは、JCL編集画面で「JOB」コマンドとして実行します。そのため、CLISTライブラリーをSYSPROCまたはSYSEXECのDD名で割り振られてデータセットに連結するため割り振り直します。ALTLIBコマンドを使ってCLISTライブラリーをアクティブにする方法では、画面分割で新しいISPFセッションが起動する度にエディター起動前にALTLIBコマンドを実行しなければならず面倒です。
ISPFエディターの編集マクロやREXX exec、CLISTは共用するのであれば、元々のSYSPROC(またはSYSEXEC)に連結されるライブラリーに入れてしまうのが簡単です。しかし、個人的に使うものであれば共用ではなく個人のライブラリー・データセットに入れることになるので、自分のTSOユーザー空間だけでSYSPROC(またはSYSEXEC)に連結する方法を考えねばなりません。以下はその一例です。なお、マクロ名は使いやすくするためにSUBに対してJOBと同じ3文字で付けています(JCLをサブミットするコマンドSUBに対して、ジョブを実行して結果まで表示するのでコマンドJOB)。マクロのコマンド名は8文字以内であれば、元のISPFコマンドと被らなければ任意の名前に変更できます。

  1. TSOログオンパネルの自動実行コマンドを控える
  2. 画面下方のCommandフィールドの内容を控えます。この例では「ISPF PANEL(ISR@PRIM)」です。

  3. 現在のSYSPROCライブラリーを控える(DDLISTコマンドを実行)
  4. 任意のISPFパネルでDDLISTコマンドを実行します。DD名SYSPROCで連結されているDSNを控えます。ISPFとSDSFだけを使っているのであれば、ほとんどの場合ユーザー用ライブラリーとISP.SISPCLIBだけで十分ですが、どれを外すと何に影響が出るのかがわからない場合は、面倒でも全部控えます。

  5. CLISTライブラリー連結用CLISTを作成する
  6. 上記の内容でCLISTを作成します。自分のCLISTライブラリー(userid.CLIST)に適当なメンバー名で作成します(ここではADDCLIBとします)。元々ログオンパネルで何のコマンドも指定されていなければ、最後の行にコマンドを追加する必要はありません。WRITEステートメントだけで終えます。

  7. TSOログオンパネルの自動実行コマンドを変更する
  8. 画面下方のCommandフィールドの内容を変更します。ログオン時にuserid.CLISTがSYSPROCライブラリーに連結されて割り振り直され、元々の自動実行コマンドが実行されます。CLISTを間違えて上手く動かなかった場合は、ログオンパネルの自動実行コマンドを元に戻せばログオンできます。

普段何気なくあるいは当たり前のように使っているISPFやSDSFですが、REXXやCLISTによって様々な独自機能を追加することもできます。上記のJOBコマンドも、REXXプログラミングの応用例の1つです。

④作業用データセットをSMS管理にする場合(※オプション作業)

TSOのユーザーIDと同じ名前で始まる(第1修飾子がTSOユーザーIDと同じ)データセットがSMS管理されるシステムの場合は、必要であればREXXプログラムの中で使用する作業用データセットの割り振りもSMS管理データセット用に修正します。

REXXソースコードJOBの最初の処理であるddnjclinのALLOCコマンド(48~49行目)のパラメーターを上記のように変更します。48行目のCATALOGをDELETEに変え、49行目のSPACEパラメーターの後にSTORCLASを追加します。また、59行目の「ADDRESS TSO “ALLOC DD(“ddnjclin”) DSN(“dsnjclin”) SHR DELETE REUSE”」の行を削除します。

関連マニュアル、資料

  • z/OS TSO/E REXX 解説書(SA88-5453)
  • z/OS TSO/E REXX ユーザーズ・ガイド(SA88-8636)
  • z/OS SDSF ユーザーズ・ガイド(SC43-4152)
  • z/OS REXXおよびz/OS UNIX System Servicesの使い方(SA88-8644)
  • IBM Redbook:Implementing REXX Support in SDSF(SG24-7419)
  • z/OS TSO/E コマンド解説書(SA88-7049)
  • z/OS ISPF 編集と編集マクロ(SC43-2669)