「知らない人は知らないが、知ってる人なら知っている」って感じで、今回からIBM iに関する知識の小ネタをお伝えしたいと思います。
第1回は、画面(DSS)周りのカーソル制御関連です。
① 画面のカーソルを入力項目のみに移動させる
画面上のカーソルを、入力領域のみに移動させることで、矢印キーでのフィールド移動を可能にできる。
このような場合は、画面DDSにキーワード CSRINPONLYを指定する。
② 画面のカーソルの移動先を自由に設定する
画面上のカーソルの動きは通常、右→左、上→下の順で移動するが、この順序を無視して、自由に移動先を設定する。
このような場合は、画面DDSにキーワード FLDCSRPRGを指定する。
このサンプルでは、カーソルはD1C0D1→D1COD3→D1COD2→D1COD1と移動する。
③ サブファイル画面のカーソルの動きを上から下へと移動させる
サブファイル画面上のカーソルの動きは通常、右→左の順で移動するが、この順序を無視して、上→下の順序で移動させる。
このような場合は、画面DDSにキーワード SFLCSRPRGを指定する。ただし、このキーワードはSFLLINと同時には指定できない。
④ 画面上のカーソルの位置情報を取得する
画面の項目検索POP-UP画面等をCALLする際、カーソルが検索対象項目にある場合にのみ実行したい。
このような場合は、画面DDSにキーワード RTNCSRLOCを指定することで、現在のカーソルのあるフェールド名を取得できる。
この例では、カーソルが D1KUBNにあった場合は、以下のようにセットされる。
D#RECDには”#FMT10″
D#FELDには”D1KUBN”
ちなみにフェールド外では、値はセットされない。
RPG側でのコーディングは、以下のようになる。
⑤ サブファイル上のカーソル位置のサブファイル相対レコード番号を取得する
サブファイル上にカーソルを移動して、実行(ファンクション)キーを押すことで、カーソル位置のサブファイルレコード内容を使用して処理を実行したい。
このような場合は、画面DDSにキーワード SFLCSRRRNを指定することで、現在のカーソルのある相対レコード番号が取得できる。
今回は以上です。1つでも、「こんなことができるんだ~」と役に立てれば、うれしく思います。今後も小ネタシリーズとして、いろいろな技をお伝えしていきます。