原文: http://bbs.chinaunix.net/thread-942177-1-1.html
这两个关键字的作用是:比如记录很长,在画面上显示的时候1行显示不下,需要3行显示,而画面DDS定义了15行,如果不设置这个关系键字的话 ,一次只能显示5条记录的详细信息,定义了这个关键字之后,可以在画面设计的时候把主要的栏位放在第一行,程序进入执行的时候还是显示5条记录,但是按下对应的键可以只显示每条记录第一行的信息,一次就可以显示15条,再按下这个功能键之后又只显示这5条的详细记录 (第一次进入显示折叠还是详细信息,可以在设置SFLDROP的时候设置后面对应指示器可,如果不填表示按下这个键之后SFLDROP起作用,文件折叠;如果是Subfile initially folded . . . . . . SFLFOLD CA05 N05,表示不按05的时候文件折叠)
SFLDROP和SFLFOLD两个用法一样,不过功能相反(我做的是这样,不知道对不对) ,用的时候设置其中一个就够了.
1:创建SFL,DDS如下:
A*%%TS SD 20070529 182220 LYZ REL-V5R1M0 5722-WDS
A*%%EC
A DSPSIZ(24 80 *DS3)
A INDARA
A R A1 SFL
A*%%TS SD 20070526 154938 LYZ REL-V5R1M0 5722-WDS
A NAME1@ 10A O 8 5
A ID1@ 10S 0O 9 5
A VALID1@ 1A O 10 5
A R A1CTL SFLCTL(A1)
A*%%TS SD 20070529 182220 LYZ REL-V5R1M0 5722-WDS
A CA03(03 'EXIT')
A CA05(05 'DROP')
A CA04(04 'call keyinrr')
A 95 SFLDSP
A 85 SFLDSPCTL
A 75 SFLCLR
A SFLFOLD(CA05)
A SFLSIZ(9999)
A SFLPAG(0003)
A RCDNAM 10A H
A FLDNAM 10A H
A 5 27'画面折叠功能测试'
A COLOR(BLU)
A 5 56'F5折叠'
A COLOR(WHT)
A 6 7'NAME'
A 6 34'ID'
A 6 60'VALID'
A 7 4'==================================-
A =================================='
如果是通过17进入,画面设计的话,先建立一个SFL,然后在SFLCTL处输入8
第一步:General keywords . . . . . . . . 选择Y,执行,再翻页就看到
Subfile initially truncated . . . . SFLDROP (1)
Subfile initially folded . . . . . . SFLFOLD (2)
Use instead of Enter key . . . . . . SFLENTER
(1)(2)处设置要响应的指示器(我的程序中Subfile initially folded . . . . . . SFLFOLD CA05)
第二步:Select record keywords . . . . . 选择Y,执行
Indicator keywords . . . . . . . 再输入Y执行,定义记录级关键字
Type keywords and parameters, press Enter.
Conditioned keywords: CFnn CAnn CLEAR
HOME HELP HLPRTN
Unconditioned keywords: INDTXT VLDCMDKEY
Keyword Indicators/+ Resp Text
CA03 03 EXIT
CA05 05 DROP
到此画面设计完成。
RPG代码:
FTR1 IF E K DISK
FSFLT1 CF E WORKSTN
F SFILE(A1:RRN)
DRRN S 5 0
C DOU *IN03='1'
C IF *IN03='1'
C LEAVE
C ENDIF
C EXSR @LOAD
C IF RRN>0
C EVAL *IN95='1'
C ELSE
C EVAL *IN95='0'
C ENDIF
C EVAL *IN85='1'
C EXFMT A1CTL
C EVAL *IN85='0'
C ENDDO
C SETON LR
C @LOAD BEGSR
C Z-ADD 0 RRN
C EVAL *IN75='1'
C WRITE A1CTL
C EVAL *IN75='0'
C *LOVAL SETLL TR1
C DOU %EOF(TR1)
C READ RTR1
C IF NOT %EOF(TR1)
C EVAL NAME1@=NAME1
C EVAL ID1@=ID1
C EVAL VALID1@=VALID1
C EVAL RRN=RRN+1
C WRITE A1
C ENDIF
C IF RRN>9999
C LEAVE
C ENDIF
C ENDDO
C ENDSR
TR1的DDS:
A R RTR1
A NAME1 10
A ID1 10 0
A VALID1 1
A K ID1
以上代码测试通过执行
程序执行效果:
画面折叠功能测试 F5 折叠
NAME ID VALID
===============================================================
ABABABABAB
1212121212
Y
CDCDCDCDCD
3434343434
Y
EFEFEFEFEF
5656565656
Y
按下F5 之后:
画面折叠功能测试 F5 折叠
NAME ID VALID
==================================================================
ABABABABAB
CDCDCDCDCD
EFEFEFEFEF