新規投稿 記事一覧 ホーム
●ご利用方法,ご利用に際しての規約はこちらをお読みください。
こちらからの投稿は、先頭に表示されているコメントへの返信になります。
サブファイルの先頭RRNの取得について シャリース さん [ 9月27日(木) 8時16分 ]

    お世話になります。
    1画面に2つのサブファイルを表示させています。

    照会画面なので入力項目は1つも無く両サブファイルは全て出力です。
    仮に画面上部にあるサブファイルをA、画面下部にあるサブファイルをBとします。
    A,Bそれぞれの現在表示している先頭RRNを取得したいのですがどうすれば良いでしょうか。

    当HPで「現在オープンしている画面サブファイル情報を取得するには?」を参照したのですが
    378-379(bin)で指定して取得した場合、A,Bのどちらの先頭RRNが取得できるのでしょうか。
    両方取得する事は可能でしょうか。

    RE:サブファイルの先頭RRNの取得について IKD さん [ 9月27日(木) 13時13分 ]

      SFL が複数個、定義されている場合にはそのような疑問が生じるのは
      当然だと思います。
      予想としてはカーソルが位置づけられている SFL の属性が取り出されるのでは
      ないかと思われましたが結果は意外に異なっていました。

      調べてみるとTOPRRN( 378-379 ) は IBM マニュアルには
      「最も上のサブファィル表示域に現に表示されている最も低い相対レコード番号」
      を示すとあります。
      つまり複数の SFL が定義されている場合でも、一番上の SFL の TOPの RRN が
      示されているということを意味しています。
      また表示装置フィードバック域は

       共通入出力フィードバック域 144バイト + 画面フィードバック域 80 バイト

      として構成されていますが、画面フィードバック域 80 バイト は SFL の個数が
      増えても増えることがありませんでした。
      つまり2つ目の SFL の属性を示す情報はどこにもありません。
      従って結論としては

          ----------------------------------------------------
         最初の SFL の TOPRRN しか取り出すことしかできない。
           ----------------------------------------------------

      ということになります。
      これは実際に検証してみた結果もTOPRRN( 378-379 )はつねに
      一番上の SFL の TOPRRN しか示してしませんでた。

      RE:諦めます。ありがとうございました。 シャリース さん [ 9月28日(金) 9時49分 ]

        IKDさん、回答ありがとうございました。
        私も色々テストしてみたのですが同じ結果でしたので、
        何とか下段のサブファイル情報を取得できないものかと質問した次第です。

        取得できないという事を前提に画面制御を設計したいと思います。
        お手数をおかけしました。

    RE:諦めます。ありがとうございました。 YOTOO さん [ 10月11日(木) 15時51分 ]

      > お世話になります。
      > 1画面に2つのサブファイルを表示させています。
      > 
      > 照会画面なので入力項目は1つも無く両サブファイルは全て出力です。
      > 仮に画面上部にあるサブファイルをA、画面下部にあるサブファイルをBとします。
      > A,Bそれぞれの現在表示している先頭RRNを取得したいのですがどうすれば良いでしょうか。
      > 
      > 当HPで「現在オープンしている画面サブファイル情報を取得するには?」を参照したのですが
      > 378-379(bin)で指定して取得した場合、A,Bのどちらの先頭RRNが取得できるのでしょうか。
      > 両方取得する事は可能でしょうか。

    RE:もしかすると出来るかも。 YOTOO さん [ 10月11日(木) 17時50分 ]

      出来るかもしれませんよ。
      以前、画面上半分と下半分で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          <=この部分


      すみません、操作を間違ってしまいました上のが消せません。
      この掲示板パスワードを入力しないで書き込むと消せないんですね。 

お名前
パスワード
e-mailアドレス
タイトル
ホームページ
アドレス