屏幕上的元素与程序实现通信,是通过在屏幕上定义name与程序中变量同名的元素来实现的。
如下面的例子所示:
程序中定义了五个变量,fld1,fld2,fld3,fld4,action。这五个变量分别对应屏幕上的五个输入输出字段。
这五个输入输出字段的name属性分别为 fld1、fld2、fld3、fld4、action。 所以,我们在PAI中对变量action的修改就会反应到屏幕上的action字段上。而且,在PAI中可以直接从变量fld1、fld2..中得到用户在屏幕上的输入值。
另外,本例子还蕴含的知识点是,通过不同的message类型控制程序的执行流程。
比如,我们如果弹出的message是E错误类型的,那么后续的PAI是不会被执行的,在这个程序中的表现就是action的值没有被改变;如果弹出的message是W警告和S成功类型的,那么后续的PAI会被执行,在这个程序中的表现就是action的值被改变了。
REPORT ytest12.
DATA: ok_code type sy-ucomm,
save_ok type sy-ucomm.
data: fld1(20)typec,
fld2(20)typec,
fld3(20)typec,
fld4(20)typec,
action(50)typec.
CALL SCREEN 100.
*&---------------------------------------------------------------------*
*& Module CHECK1 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE check1 INPUT.
"当输入Fld1 = 'FLD1'时提示错误,而且不执行PAI
if fld1 = 'FLD1'.
message e005(YMESS)with'FLD1 error'.
endif.
"当输入fld1 = 'FLD11'时弹出窗口提示,执行PAI
if fld1 = 'FLD11'.
message i005(Ymess)with'FLD1 warning'.
endif.
"当输入fld1 = 'FLD111'时输出成功,执行PAI
if fld1 = 'FLD111'.
message s005(Ymess)with'FLD1 ok'.
endif.
ENDMODULE. " CHECK1 INPUT
*&---------------------------------------------------------------------*
*& Module CHECK2 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE check2 INPUT.
if fld3 = 'FLD3'.
message e005(ymess)with'FLD3 error'.
endif.
if fld3 = 'FLD33'.
message i005(ymess)with'FLD3 warning'.
endif.
if fld3 = 'FLD333'.
message s005(ymess)with'FLD3 OK'.
endif.
ENDMODULE. " CHECK2 INPUT
*&---------------------------------------------------------------------*
*& Module CHECK3 INPUT
*&---------------------------------------------------------------------*
* text当FLD2的第一个字符是*时,执行该module
*----------------------------------------------------------------------*
MODULE check3 INPUT.
message i005(ymess)with'FLD2* warning'.
ENDMODULE. " CHECK3 INPUT
*&---------------------------------------------------------------------*
*& Module CANCEL INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE cancel INPUT.
leave PROGRAM.
ENDMODULE. " CANCEL INPUT
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_0100 INPUT.
save_ok = ok_code.
clear ok_code.
case save_ok.
when 'EXIT'.
leave program.
endcase.
action = ''.
CONCATENATE fld1 fld2 fld3 fld4 into action .
ENDMODULE. " USER_COMMAND_0100 INPUT