PDM の代わりに自社でいろいろなツールを開発している例はよく見られる。
しかし SEU 自身を自社独自にカスタマイズしている例は見たことがないが
実は SEU もユーザーでカスタマイズする方法が残されている。
それは SEU の出口プログラムを登録してカスタマイズする方法であるが
出口プログラムというと WRKREGINF (登録情報の処理)を思い出して
何やら大規模な修正のように思えるが WRKREGINF は使わなくても
簡単にカスタマイズできる方法がある。
IBM は SEU のカスタマイズ例として CC から CC のように
ユーザーが編集コードを追加するものと予想しているようであるが
そうではない。
ここでは Visual Studio のように SEU をオープンしたままで
コンパイルや実行できるようにしたい。
SEU はユーザーのカスタマイズのように F7 キー と F8キー が
ユーザー・カスタマイズ用に残されている。
したがって
F7: コンパイル
F8: 実行
のように機能キーを割り当てることができる。
SEU で F13キーを押してから次の画面にロール・アップすると
セッション省略時の値の 変更
選択項目を入力して,実行キーを押 してください。
メンバーの番号付け直しの省略時値 . Y Y=YES, N=NO
P= 前と同じ
このソース仕様タイプの大文字
入力の省略時の値 . . . . . . . . N Y=YES, N=NO
ユーザー出口プログラム . . . . . . EDTSRC *REGFAC, *NONE, 名前
ライブラリー . . . . . . . . . . QUATTRO 名前
のようにユーザー出口プログラムを指定することができる。
例えばこのようにユーザー出口プログラムを指定しておいて
F7キー を押すと指定したプログラム: QUATTRO/EDTSRC が呼び出されて実行される。
ユーザー出口プログラムはパラメータを持つことはできないが
SEU がユーザー・スペース : QTEMP/QSUSPC に情報を出力する。
SEU はつねにこのユーザー・スペースを出力するわけではなく
ユーザー出口プログラムが指定されているときだけに限る。
ユーザー・スペース : QTEMP/QSUSPC の情報は
( SEU のための ADTツール・セツト)
( https://www.ibm.com/support/knowledgecenter/en/ssw_i5_54/books/c0926050.pdf )
の中の
Appendix E. Referencing the User Space for User-Defined Line Command Programs
に書かれている。
その中でも、ユーザー・スペース : QTEMP/QSUSPC は
21 桁目より 10バイト …………. ソース・メンバー名
31 桁目より 10バイト …………. ソース・ファイル名
41 桁目より 10バイト …………. ソース・ライブラリー名
であることがわかれば英文のマニュアルを読まなくても済む。
参考までに上記のマニュアルに日本語版は存在しない。
現在、IBM i の API のマニュアルの大半は英文だけであるので
面倒でも英文を読む練習をする必要があるかも知れない。
ところで SEU で F7キー や F8キー に対応するユーザー出口プログラムを
開発したときに注意しておく重要な点がある。
SEU にユーザー出口プログラムからエラー・メッセージなどの情報を
SNDPGMMSG で送信して SEU 上に表示されれば非常にわかりやすく
使いやすいものになるのは当然である。
ここでユーザー出口プログラムから SEU にメッセージを送るには
1. QPSNDPM によるメッセージ送信
C****************************************************** C SNDMSG BEGSR C****************************************************** /FREE QMHSNDPM('EDT0001':'QEDTMSGF QUATTRO ':'EDTSRC': 6:'*INFO':'*': 2:RTNMSGKEY:QUSEC); /END-FREE C ENDSR
2. メッセージ・データによる送信はできない。
上記でわかるようにつねに EDT0001 というメッセージ ID を
SEU に送信している。
ユーザー出口プログラムでは EDT0001 にいろいろなメッセージを
CHGMSGD で更新してつねに EDT0001 だけを送信している。
例えば CPF9897 でメッセージ・データだけを変化させて
送信すればよいのだが、どうやら SEU のこの部分の
IBM の開発者は間違って RCVMSG ではなく
RTVMSG (メッセージ記述の検索)を使っているようなので RTVMSG では
メッセージ・データのあるメッセージを受け取ることができない。
チェックも甘かったようで IBM でも初心者が開発しているのだと
思えてしまう。