ジョブログ出力の自動化について
Question
IBM i で一通りの操作を実施した後、ログをスプールに出力するために通常はサインオフ前に DSPJOBLOG OUTPUT(*PRINT) コマンドを入力して操作を終えています。
サインオフする際に、このジョブログ出力操作を自動化する手段を教えてください。
SIGNOFFコマンドのジョブログパラメータを *LIST に変更すれば実現できそうですが、この方法だとすべてのユーザーに対して適用されてしまう懸念があります。
特定のユーザーに絞って適用できる代替手段はありますでしょうか?
Answer
ご懸念の通り、SIGNOFFコマンド自体のパラメータを変更する方法はすべてのプロファイルに影響を及ぼし、スプールが大量に生成されてしまうためお勧めしかねます。
代替案として、「出口点プログラム」を活用する方法が考えられます。
この仕組みを利用して、サインオフ時に「ジョブ実行属性」を抽出し、特定のユーザー(例:USER01やUSER02など)だった場合にのみジョブログを出力するようプログラム側で指定・振り分けを行います。
【出口点プログラムのサンプル】
以下はユーザー:USER01またはUSER02だった場合にジョブログを出力するサンプルです。
PGM PARM(&IN_DATA &OUT_CMD &OUT_LEN)
/* IBM iから強制的に渡される3つのパラメーター受け皿 */
DCL VAR(&IN_DATA) TYPE(*CHAR) LEN(4000)
DCL VAR(&OUT_CMD) TYPE(*CHAR) LEN(32000)
DCL VAR(&OUT_LEN) TYPE(*INT) LEN(4)
DCL VAR(&USER) TYPE(*CHAR) LEN(10)
/* 1. 現在サインオフしようとしているユーザー名を取得 */
RTVJOBA USER(&USER)
/* 2. 対象の特定ユーザーだった場合、ジョブログを印刷 */
IF COND((&USER *EQ 'USER01') *OR (&USER *EQ 'USER02')) +
THEN(DO)
CHGJOB LOG(4 0 *SECLVL) LOGOUTPUT(*JOBEND)
DSPJOBLOG OUTPUT(*PRINT)
ENDDO
/* 3. 本来の「SIGNOFF」コマンド実行*/
ICHGVAR VAR(&OUT_CMD) VALUE('SIGNOFF')
CHGVAR VAR(&OUT_LEN) VALUE(7) /* 「SIGNOFF」の文字数 */
ENDPGM
【出口点プログラムの登録・確認方法】
作成した出口点プログラム(仮に QGPL/SIGNOFF_EX とします)を登録するには、以下のコマンドを実行します。
ADDEXITPGM EXITPNT(QIBM_QCA_CHG_COMMAND) FORMAT(CHGC0100) PGMNBR(*LOW) PGM(QGPL/SIGNOFF_EX) PGMDTA(*JOB *CALC 'SIGNOFF QSYS ')
正常に登録できたかどうかは、以下のコマンドで確認できます。
WRKREGINF QIBM_QCA_CHG_COMMAND
上記コマンドを実行し、一覧の一番最後の項目に登録したプログラムが追加されているか確認してください。
(※その他、特定プロファイルユーザーがサインオフコマンドを実行した場合には毎度ジョブログが出力されることになるため、状況に応じてスプールを整理する運用も併せてご検討ください。)
by . 大熊猫橋
