今天关于报表的需求说仍不确定,下午就又看了下屏幕编程的程序。总结如下,先看个程序:
1.PBO里修改屏幕属性
PARAMETERS: TEST1(10) MODIF ID SC1,
TEST2(10) MODIF ID SC2,
TEST3(10) MODIF ID SC1,
TEST4(10) MODIF ID SC2.
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'SC1'.
SCREEN-INTENSIFIED = '1'.
MODIFY SCREEN.
CONTINUE.
ENDIF.
IF SCREEN-GROUP1 = 'SC2'.
SCREEN-INTENSIFIED = '0'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
这是一个在PBO事件中修改屏幕属性的例子,有几个地方需要注意,一是MODIF ID关键字,它的作用似乎是给选择屏幕字段分组,一个是SC1一个是SC2。然后用loop遍历屏幕如果是SC1组的话,那么就高亮显示,注意要有modify screen。SC2组则还原。screen这个结构体可以在研究下。
2. 屏幕上输入密码
还有个小例子关于屏幕上输入密码,如下:
PARAMETERS: p_pass TYPE string. "xuncode
*---------------------------------------------------------------------*
AT SELECTION-SCREEN OUTPUT.
LOOP AT SCREEN.
IF screen-name = 'P_PASS'.
screen-invisible = '1'.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
*---------------------------------------------------------------------*
*END-OF-SELECTION.
START-OF-SELECTION.
WRITE: / p_pass.
也是一个PBO事件,不过用的是name字段,而且将invisible属性设置为1.
3. 打包过程中遇到的问题
今天和伯珩一起给470系统打内核补丁,打包的一些问题是basis的问题就不说了。期间有一个和传输请求有关,说function group lprf是repaired状态,想起来刚才刚才对它进行过修改,并进行了激活。但是传输请求并没有释放,只要用se10释放即可。
4.多屏幕编程
有时用代码进行多屏幕编程似乎更加方便,下面的代码是一个例子:
SELECTION-SCREEN BEGIN OF SCREEN 100 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-010.
PARAMETERS: p1(10) TYPE c,
p2(10) TYPE c,
p3(10) TYPE c.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN END OF SCREEN 100.
* SUBSCREEN 2
SELECTION-SCREEN BEGIN OF SCREEN 200 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-020.
PARAMETERS: q1(10) TYPE c,
q2(10) TYPE c,
q3(10) TYPE c.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN END OF SCREEN 200.
* SUBSCREEN 3
SELECTION-SCREEN BEGIN OF SCREEN 300 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-030.
PARAMETERS: r1(10) TYPE c,
r2(10) TYPE c,
r3(10) TYPE c.
SELECTION-SCREEN END OF BLOCK b3.
SELECTION-SCREEN END OF SCREEN 300.
* STANDARD SELECTION SCREEN
SELECTION-SCREEN: FUNCTION KEY 1,
FUNCTION KEY 2.
SELECTION-SCREEN: BEGIN OF TABBED BLOCK sub FOR 10 LINES,
END OF BLOCK sub.
INITIALIZATION.
sscrfields-functxt_01 = '上一屏'.
sscrfields-functxt_02 = '下一屏'.
sub-prog = sy-repid.
sub-dynnr = 100.
AT SELECTION-SCREEN.
CASE sy-dynnr.
WHEN 100.
IF sscrfields-ucomm = 'FC01'.
sub-dynnr = 300.
ELSEIF sscrfields-ucomm = 'FC02'.
sub-dynnr = 200.
ENDIF.
WHEN 200.
IF sscrfields-ucomm = 'FC01'.
sub-dynnr = 100.
ELSEIF sscrfields-ucomm = 'FC02'.
sub-dynnr = 300.
ENDIF.
WHEN 300.
IF sscrfields-ucomm = 'FC01'.
sub-dynnr = 200.
ELSEIF sscrfields-ucomm = 'FC02'.
sub-dynnr = 100.
ENDIF.
ENDCASE.
START-OF-SELECTION.
WRITE: / 'P1:', p1,'Q1:', q1, 'R1:', r1,
/ 'P2:', p2,'Q2:', q2, 'R2:', r2,
/ 'P3:', p3,'Q3:', q3, 'R3:', r3.
屏幕上的按钮是通过function key关键字,初始化是用了sscrfields结构体。屏幕上的按钮function code从左至右默认依次为FC01, FC02, FC03。如果不用代码写按钮的话,可以通过自己创建屏幕,在屏幕状态里如下:
application toolbar里设置即可。