PANEL グループ

29. オプション入力にカーソルを位置づけるには?

これはなかなか誰にもわからないテクニックなので
備忘録としてもパネル・グループの開発者としても
わからない難問の解決方法なので
ぜひ紹介しておきたい。
社内でもこれは解決に苦労した案件である。
 
 
最初に次のようなパネル・グループの表示があったとする。
追加レコードの入力欄のOPT(=■■)にカーソルを位置づけるには
のようにすれば良いだろうか?
何もしなければ最初の入力欄(=白色)にカーソルがセットされてしまうので
多くの場合、いちいちカーソルをOPT(=■■)に移動する作業から始めなければ
ならない。これではエンド・ユーザーから「面倒だ」とのクレームが
入ることが予想される。

[オプション入力のパネル・グループ]

WRKMBRAI                    AI によるメンバー処理                             
                                                                              
ファイル . . . :   QRPGLESRC                                                  
ライブラリー . . :   QTRSRC              位置指定 . . . . .            __________       
                                                                              
オプションを入力して、実行キーを押してください。                              
  1=AI による生成   2=SEU 編集   3=AI 編集   5=AI 文書化   6=AI デバッグ      
  14= コンパイル    15= モジュール作成                                        
                                                                              
OPT   メンバ      タイプ    テキスト                                          
■■                                                                              
     @HINSHU     RPGLE      品種マスターの登録                                
     @JUCHU      RPGLE      受注入力                       YYYYNYYY1322713201 
     @JUCHU2     RPGLE      受注入力                                          
     @SFL1       RPGLE      商品マスター照会                                  
     @SFL2       RPGLE      仕入先マスター照会                                
     @SHOHIN     RPGLE      商品マスターの登録             YYYYNYYY1322713201 
     @SHOHIN#    RPGLE      商品マスターの登録                                
     @SHOHIN2    RPGLE      商品マスターの登録                                
     @SHOHIN21   RPGLE      商品マスター照会                                  
     @SHOINC     RPGLE      商品マスター照会                                  
                                                                      続く ...
F3= 終了   F5= 最新表示   F12= 取消し                                         
(C) COPYRIGHT OFFICE QUATTRO 2026.                                            

[解説]

APIで明細行の最初の明細行のリスト・ハンドルを取ってそこにセットすれば
良いように見えるが最初のリスト・ハンドルは入力行ではなく
明細行の先頭のハンドルが取得されてしまう。
従ってそこにカーソルをセットしたとしても最初の行の

  @HINSHU  RPGLE  品種マスターの登録

の行にカーソルが位置づけられてしまう。
このOPTの入力行のリスト・ハンドルをDMPCLPGMによってダンプ出力で調べてみると
実は EXTE という名前の固定値であることがわかった。
従ってOPT行へのカーソルの位置づけは

0086.00 /*( SET_CURSOR の変数 )*/                                             
0087.00              DCL        VAR(&FSTHND) TYPE(*CHAR) LEN(4)               
0088.00              DCL        VAR(&CSRVAR) TYPE(*CHAR) LEN(10) +            
0089.00                           VALUE('OPT       ')                         
0090.00              DCL        VAR(&CSRPOS) TYPE(*CHAR) LEN(2) VALUE(X'0001')
0091.00              DCL        VAR(&CSRLST) TYPE(*CHAR) LEN(10) +            
0092.00                           VALUE('SFL       ')                         
0093.00              DCL        VAR(&CSRNAME) TYPE(*CHAR) LEN(10) +           
0094.00                           VALUE('          ')                         
 :
205.00  /*-------------------------------------*/                            
206.00  /*  QUIDSPP: パネルの表示              */                            
207.00  /*-------------------------------------*/                            
208.00  DSPLY:      CALL       PGM(QUIDSPP) PARM(&HANDLE &FNCTON &PANEL +    
209.00                           &AGAIN &APIERR &USRTSK &STACK &UIMMSG +     
210.00                           &MSGKEY &CSROPT &LASLST &ERRLST &WAITTIME)  
 :
0322.00          /******************************/                            
0323.00              SUBR       SUBR(SET_CURSOR)                             
0324.00          /******************************/                            
0325.00              CHGVAR     VAR(%BIN(&DTALEN)) VALUE(1024)               
0326.00              CALL       PGM(QUIGETLE) PARM(&HANDLE &VARDTA &DTALEN + 
0327.00                           'SFLRCD    ' 'SFL       ' 'HNDL' 'Y' +     
0328.00                           '                    ' 'EXTE' 'N' +        
0329.00                           &FSTHND &APIERR)                           
0330.00              CHGVAR     VAR(&CSROPT) VALUE('P')                      
0331.00              CHGVAR     VAR(%BIN(&DTALEN)) VALUE(36)                 
0332.00              CHGVAR     VAR(&VARDTA) VALUE(&CSRVAR *CAT &CSRPOS +    
0333.00                           *CAT &CSRLST *CAT &FSTHND *CAT &CSRNAME)   
0334.00              CHGVAR     VAR(&VARRCD) VALUE('CSRPOSRCD ')             
0335.00              CALL       PGM(QUIPUTV) PARM(&HANDLE &VARDTA &DTALEN +  
0336.00                           &VARRCD &APIERR)                           
0337.00              ENDSUBR                                                 

のように EXTE のリスト・ハンドルにハンドル指定でセットすれば
求める入力行へのカーソル・セットが可能になる。
 
 
これはIBMマニュアルにも記述は見つからなかった。
AI : Copilot と Google Geminiにも相談したがいずれのAIも解決できなかった。
無料のAIではこんなものかも知れない。
 

※この改良で画面は非常に落ち着いて見やすくなった。
製品化するにはカーソルの位置やログされるメッセージにも最新の注意を払っている。
少しでも不便さや見苦しい点はないかと注意している。
機能だけでなく使い勝手や操作性も製品の評価につながることは言うまでもない。