これはなかなか誰にもわからないテクニックなので
備忘録としてもパネル・グループの開発者としても
わからない難問の解決方法なので
ぜひ紹介しておきたい。
社内でもこれは解決に苦労した案件である。
最初に次のようなパネル・グループの表示があったとする。
追加レコードの入力欄の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ではこんなものかも知れない。
※この改良で画面は非常に落ち着いて見やすくなった。
製品化するにはカーソルの位置やログされるメッセージにも最新の注意を払っている。
少しでも不便さや見苦しい点はないかと注意している。
機能だけでなく使い勝手や操作性も製品の評価につながることは言うまでもない。
