僕は、37年間勤めた職場で、ずっとAS/400を使ってきた。 ところが、その間、サブファイルは使ってこなかった。
サブファイルとは、検索結果などの複数の明細を、画面に一覧表示するための仕組みだ。[1]
AS/400歴は長い。でも、サブファイルについては、これから経験を積むところなのである(笑)。
今回、そのサブファイルで、商品名を表示しようとしていた。
一画面に12件を表示する一覧がある。二ページ目の二件目で商品コードを入力し、RPGのプログラムへ処理を戻す。商品名を調べて、その行に表示する。
そのとき、二ページ目を表示したままにしたい。
今回、考えたかったのは、商品名を補う処理に加えて、表示し直すときの現在地だった。
画面の中身を更新することと、どこから見せるかを決めること。この二つを、分けて考える。
まず、画面の二行目と、一覧全体の二件目は違う。
先頭から12件ずつ表示する単純な例なら、こうなる。
| 位置 | サブファイル内の番号 |
|---|---|
| 二ページ目の先頭 | 13 |
| 二ページ目の二件目 | 14 |
この、サブファイルの中で何番目かを表すのが、相対レコード番号、RRNである。商品コードとは別の番号だ。
表示位置を指定するためのキーワードに、SFLRCDNBRがある。指定したRRNを含むページを表示し、*TOPを付ければ、そのレコードを先頭にできる。[2]
だから、この例で13番をページの先頭にしたいなら、SFLRCDNBR(*TOP)の項目に13を渡す、という考え方になる。
今見ている先頭を受け取るには、SFLSCROLLも使える。Enterでプログラムに戻ると、表示中の先頭のRRNが返る。その値を、次に表示するときの位置指定に使う。[3]
どの行の商品名を補うか。そして、どの行を画面の先頭にするか。
同じ一覧の話でも、持っておきたい情報が少し違う。
なお、この説明は、複数ページ分のレコードを読み込んだサブファイルを想定している。中身を入れ替えたり並べ直したりするなら、戻す番号が今の一覧でも有効かを確かめる必要がある。
これは、そんな表示位置の仕組みを、あらためて整理した話だ。
入力した商品コードに、商品名が付く。そのまま同じページで続きを入力できる。使う人には、その流れが自然であってほしい。
大きな機能の話ではない。でも、こういう「そのまま続けられる」を、画面を作るときには考えておきたい。
商品名を補う話をしていたのに、先に補充が必要だったのは、僕のサブファイルの経験だった(笑)。
参考資料
[1] IBM i 7.5:SFLキーワード
[2] IBM i 7.5:SFLRCDNBRキーワード
[3] IBM i 7.5:SFLSCROLLキーワード
資料確認:2026年10月15日。仕組みを説明する一例で、実機での改修完了を報告するものではありません。