0

単一ページのサブファイルによって作成された単一の選択リストを使用して表示ファイルを作成しています。この実装では、2つの問題が見つかりました。

1つ目は、表示ファイルがロードされたときにEnterキーを押してオプションを初めて選択したときに、RPGLEのREADC操作が正しい値を返すことです(サブファイルレコードの文字列を返します)。別のオプションを選択してEnterキーをもう一度押すと、前のEnterキーを押したときの値が返されました。その後のターンでは、直前の選択値を返し続けました。プログラムの最初のREADCの後に2番目のREADCを追加して、何が起こるかを確認したところ、両方のREADCが値を返すことがわかりました。最初のものは前の選択からの値を返し、2番目は私が現在選択した値を返しました。

2番目の問題は、同じオプションを複数回選択しても機能しなかったことです。つまり、最初にしか機能せず、すぐにもう一度選択しようとしても応答しませんでした。

すべてのサブファイルをロードすることで作成された別の単一の選択リストに同じロジックを適用しましたが、これらの問題は発生しませんでした。単一ページのサブファイルが単一選択リストの作成に適していないことを意味しますか?

サブファイルのDDSは次のとおりです。

A                R ITFMAT02
A                  S1OPTN          50 A 6 11
A                R ITFMAT01
A                                           SFLCLT(ITFMAT02)
A 27                                        SFLDSP
A 28                                        SFLCLR
A 29                                        SFLEND
A                                           CF12(12)
A                                           SFLSNGCHC(*AUTOSLT)

RPGLEのメインループは次のとおりです。

C        *IN12     DOWEQ       *OFF
C                  EXFMT       ITFMAT01
C        *IN12     IFEQ        *ON
C                  LEAVE
C                  ENDIF
C                  READC       ITFMAT02
C                  MOVEL       S0OPTN         W1OPTN
                     .
                     .
                     .
C                  ENDDO                     
4

2 に答える 2

0

READCの動作は期待どおりです。Read Changedの「Changed」部分は、ModifiedDataTagと呼ばれるものを読み取ります。ユーザーがサブファイルレコードに変更を加えると(スペースバーを含むすべての変更)、MDTはそのレコードに対してオンに設定されます。これは、ユーザーが複数のレコードに触れると、複数のMDTがオンに設定されることを意味します。典型的な使用法は、RPGプログラムがタッチされた各レコードを処理するためにREADCをループに入れることです。MDTがオフになっていない理由については、使用していSFLNXTCHGますか?

2番目の問題についてはよくわかりません。使用しているDDSとRPGを投稿してください。

于 2012-08-28T15:44:18.167 に答える
0

これが実際の例です。選択制御フィールドをクリアしていないのではないかと思います。

 A*
 A          R ITFMAT02                  SFL
 A            CTL            1Y 0H      SFLCHCCTL
 A            S1OPTN        50A     6 11
 A*
 A          R ITFMAT01
 A                                      SFLCTL(ITFMAT02)
 A  27                                  SFLDSP
 A N28                                  SFLDSPCTL
 A  28                                  SFLCLR
 A  29                                  SFLEND
 A                                      SFLSIZ(15)
 A                                      SFLPAG(05)
 A                                      CF12(12)
 A                                      SFLSNGCHC(*AUTOSLT)
 A            SFLRRN         4S 0H      SFLRCDNBR(CURSOR)
 A                                  1 30'Title'
 A            CHOICE         4S 0   3  1
 A                                  4  5'Choose one'

そしてRPG。私は通常、固定形式で作業しませんが、既存のスタイルを反映しようとしました。

 fsotest    cf   e             workstn
 f                                     SFILE(itfmat02:RRN)

 c* clear sfl
 c                   z-add     1             sflrrn
 c                   setoff                                       272829
 c                   seton                                        28
 c                   write     itfmat01
 c                   setoff                                       28
 c* load sfl
 c     1             do        9             rrn               4 0
 c                   movel     rrn           s1optn
 c                   write     itfmat02
 c                   seton                                        27
 c                   enddo

 C     *IN12         DOWEQ     *OFF
 C                   EXFMT     ITFMAT01

 C     *IN12         IFEQ      *ON
 C                   LEAVE
 C                   ENDIF

 C                   READC     ITFMAT02                               80
 C  n80              do
 C                   movel     rrn           choice
 C                   z-add     0             ctl
 C                   update    itfmat02
 C                   enddo
 C                   ENDDO

 c                   seton                                        lr
于 2012-08-28T18:01:55.710 に答える