0

我正在制作一个显示文件,其中包含由单个页面子文件创建的单个选择列表。通过这个实现,我发现了两个问题。

第一个是当我在加载显示文件时第一次按Enter选择一个选项时,RPGLE中的READADC操作将返回正确的值(它返回子文件记录中的字符串)。当我再次按下 Enter 并选择了不同的选项时,返回了上一次 Enter 按下的值。在随后的轮次中,它一直返回它之前的选择值。我在程序中的第一个之后添加了第二个 READADC,只是为了看看会发生什么,并发现两个 READADC 都返回了值。第一个返回之前选择的值,第二个返回我当前选择的值。

第二个问题是多次选择相同的选项不起作用,即它只在第一次起作用,如果我立即尝试再次选择它,它没有响应。

我已将相同的逻辑应用于另一个由加载所有子文件组成的单个选择列表,它没有任何这些问题。是不是说单页子文件不适合做单选列表?

这是子文件的 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

这是一个工作示例。我怀疑你没有清除选择控制字段。

 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 回答
0

READADC 行为完全符合预期。Read Changed 的​​“已更改”部分读取称为修改数据标签的内容。如果用户对子文件记录进行了更改 - 包括空格键在内的任何更改 - 都会为该记录设置 MDT。这意味着如果用户触摸多条记录,则会设置多个 MDT。典型的用途是将 READADC 置于一个循环中,以便 RPG 程序处理每个接触的记录。至于为什么 MDT 没有被关闭,你在使用SFLNXTCHG吗?

不确定第二个问题;发布您正在使用的 DDS 和 RPG。

于 2012-08-28T15:44:18.167 回答