RPG

312. SEU をカスタマイズしてみよう

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 の情報は

IBM i マニュアル : Application Development ToolSet for AS/400 Source Entry Utility
( 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 でも初心者が開発しているのだと
思えてしまう。