バッチでSDSFを実行する

ISPF同様、SDSFもバッチで利用することができます。
DAパネルで表示されるジョブ一覧は、簡易版としてRMFモニターⅡの代わりにすることもできますし、特定のジョブのSYSOUT内容をバックグラウンドでコピーしたりできます。XWTRではSYSOUTはスプールからパージされてしまうので、MOVEではなくCOPYで処理したい時などは役に立ちます。

バッチSDSFの基本的なJCL

PARMで指定しているのは、ISFOUTに出力されるバッチ出力用画面の幅と長さです。例では60行120桁の画面サイズになります。ISFINに使いたいSDSFのコマンドを入力順に定義します。例ではPRE *を入力してから、DAパネルを表示します。実行中のすべてのジョブの一覧を作ることになります。

ジョブのSYSOUTを順次編成データセットにコピーする

ジョブのSYSOUTデータセットを順次編成データセットにコピーする例です。
アクション文字は++を使って入力できます。STコマンドとSELECTでターゲットのジョブを絞り込み、アクション文字「?」でSYSOUTリストを表示させたら、FILTERコマンドで目的のSYSOUTデータセットを絞り込んでいます。FINDコマンドは++コマンドでアクション文字を入力するために使用しています。
SYSOUTの内容が表示されたら、PTコマンドで順次データセットにコピーします。出力先データセットはDD名で指定しています。出力先データセットは可変長形式でもかまいません。DCB=(DSORG=PS,RECFM=VB,BLKSIZE=0,LRECL=258)一般的にSYSOUTは印刷データなので、行末空白が多く、同じ内容のデータなら固定長より可変長の方がスペース量を減らせます。

しかし、同じことがあなたのユーザーIDだとTSO/ISPFではできても、バッチでは上手く行かないかも知れません。もしPRE *コマンドがNOT AUTHORIZEDになったり、自ユーザーIDで始まるジョブしか選択できないなら、ISFPARMSをバッチ用にカスタマイズしてトライしてみます。

バッチSDSF用ISFPARMSを作る

①ISFPARMSパラメータ・ソースをSDSFライブラリからコピーする。

SDSFによって標準提供されているパラメータ・ソースであるISFPARMSをSDSFライブラリから、適当なデータセットにコピーします。ISFPARMSは以下のデータセットに入っています。名称はIBMの標準名ですが、導入先によっては名称が変更されている場合があります。
DSN=ISF.SISFSRC(メンバー名=ISFPARMS)

②コピーしたISFPARMSパラメータ・ソースを修正する。

ソース内の「SYSTEM PROGRAMMERS」用ISFGRP定義を探します。

ラベル名はISFSPROG、TSOAUTH=パラメータにACCTが含まれたISFGRP定義です(※ラベル名はSDSFのリリースレベルによっては変更されているかも知れません)。見つかった「SYSTEM PROGRAMMERS」用ISFGRP定義のISFGRPマクロで指定されているTSOAUTH=パラメータを以下のように修正します。

TSOAUTH=パラメータをTSOAUTH=(JCL)に変更します。変更したらSAVEします。
※修正するメンバーはコピーしたものです。修正前の定義をコメントで残す必要はありません。また修正後の定義はあなたのバッチSDSFでのみ使用される専用パラメータになるため、既存のTSOユーザーおよび他のバッチJOBによるSDSF呼び出しには影響を与えません。

ISFPARMSの詳細に関しては、IBM社のマニュアル「システム表示/検索機能(SDSF) オペレーションおよびカスタマイズ」を参照します。

③コピーしたISFPARMSパラメータ・ソースをアセンブルしてISFPARMSモジュールを生成する。

LKDステップのバインダーオプション「RENT」を忘れずに指定します。忘れるとバッチSDSFはS0C4でABENDします。またロードモジュールはSDSFの標準ロードモジュールライブラリー(ISF.SISFLOAD)など、センターで共通に使用するデータセットに絶対出力されないようにします。以前にカスタマイズしたJCLなどを再利用する際は十分に注意しなければなりません。ここで作成するISFPARMSモジュールはあなたがバッチでSDSFを使用する際にのみ使う専用のモジュールとなります。そのため出力先もあなたの専用モジュールライブラリーを用意して、そこへカスタマイズしたISFPARMSモジュールを出力するようにします。

④出力先ロードモジュールライブラリーをAPF登録する。

カスタマイズしたISFPARMSモジュールを格納したロードモジュールライブラリーはAPF許可されている必要があります。SYS1.PARMLIBのPROGパラメーター等で登録しますが、テストするならSETPROGコマンドで動的に追加すればいいでしょう。

SETPROG APF,ADD,DSN=your load module library,VOL=??????

カスタマイズしたISFPARMSモジュールを使ったバッチSDSFのJCL

今度はPREコマンドも有効になり、DAコマンドで全ジョブのアクティブリストが出力されます。