お世話になります。1画面に2つのサブファイルを表示させています。照会画面なので入力項目は1つも無く両サブファイルは全て出力です。仮に画面上部にあるサブファイルをA、画面下部にあるサブファイルをBとします。A,Bそれぞれの現在表示している先頭RRNを取得したいのですがどうすれば良いでしょうか。当HPで「現在オープンしている画面サブファイル情報を取得するには?」を参照したのですが378-379(bin)で指定して取得した場合、A,Bのどちらの先頭RRNが取得できるのでしょうか。両方取得する事は可能でしょうか。
SFL が複数個、定義されている場合にはそのような疑問が生じるのは当然だと思います。予想としてはカーソルが位置づけられている SFL の属性が取り出されるのではないかと思われましたが結果は意外に異なっていました。調べてみるとTOPRRN( 378-379 ) は IBM マニュアルには「最も上のサブファィル表示域に現に表示されている最も低い相対レコード番号」を示すとあります。つまり複数の SFL が定義されている場合でも、一番上の SFL の TOPの RRN が示されているということを意味しています。また表示装置フィードバック域は 共通入出力フィードバック域 144バイト + 画面フィードバック域 80 バイトとして構成されていますが、画面フィードバック域 80 バイト は SFL の個数が増えても増えることがありませんでした。つまり2つ目の SFL の属性を示す情報はどこにもありません。従って結論としては ---------------------------------------------------- 最初の SFL の TOPRRN しか取り出すことしかできない。 ----------------------------------------------------ということになります。これは実際に検証してみた結果もTOPRRN( 378-379 )はつねに一番上の SFL の TOPRRN しか示してしませんでた。
IKDさん、回答ありがとうございました。私も色々テストしてみたのですが同じ結果でしたので、何とか下段のサブファイル情報を取得できないものかと質問した次第です。取得できないという事を前提に画面制御を設計したいと思います。お手数をおかけしました。
> お世話になります。> 1画面に2つのサブファイルを表示させています。> > 照会画面なので入力項目は1つも無く両サブファイルは全て出力です。> 仮に画面上部にあるサブファイルをA、画面下部にあるサブファイルをBとします。> A,Bそれぞれの現在表示している先頭RRNを取得したいのですがどうすれば良いでしょうか。> > 当HPで「現在オープンしている画面サブファイル情報を取得するには?」を参照したのですが> 378-379(bin)で指定して取得した場合、A,Bのどちらの先頭RRNが取得できるのでしょうか。> 両方取得する事は可能でしょうか。
出来るかもしれませんよ。以前、画面上半分と下半分でSFLを2つ使ったPGを作ったことがありますが、下半分(SFL002)は表示のみで上半分(SFL001)に入出力フィールドをもった画面でしたが、下半分にカーソルを持って行きカーソルのいる位置の行の内容を表示するPGをコールするというものでした。C* 画面出力 C MOVEA'1' *IN,82 82=> ON C WRITEDUMMY C WRITEGRD001 GRID-WRITE C WRITEGID001 GUID-WRITE C WRITECTL002 C EXFMTCTL001 C READ CTL002 91 RRN 検出 C MOVEA'0' *IN,82 PGは EXFMTCTL001 で止まってますよね、何かキーが押されたら READ CTL002 でSFL002 の相対レコード番号を読むのですが、画面ファイルは下記のように書いてます。A*CONTROL2 RECORD................................................. A R CTL002 SFLCTL(SFL002) OVERLAY PROT A SFLCSRRRN(&H#RRN2) A SFLSIZ(9) SFLPAG(8) BLINK ここで H#RRN2 でSFL002 に CHAIN をかけるとその行の内容を引き出せました。****************************************************************なのでEXFMTCTL001 のすぐ下で一回検出して READ CTL002 の下で再度検出するように書けばどうでしょうか?****************************************************************このPGではカーソルのいる位置の相対レコード番号を検出する為に SFLCSRRRN キーワードを使っているので下記の『<=この部分』は書いておりませんが、その画面での先頭RRNの検出だけでいいのであれば下記の2箇所の『<=この部分』を書けばいいと思います。FCRD011FMCF E WORKSTN KINFDS INF <=この部分 F RRN KSFILE SFL001 F RRN KSFILE SFL002 F* IINF DS I B 370 3710CURSOR I B 378 3790RRN <=この部分すみません、操作を間違ってしまいました上のが消せません。この掲示板パスワードを入力しないで書き込むと消せないんですね。