1.需求
(1)自定义的数据库表
(2)屏幕
(3)屏幕上的按钮说明
2.实现效果
3.实现程序
(1)程序框架
gui状态:
(2)屏幕绘制
(3)程序代码
(3.1)逻辑流部分
PROCESS BEFORE OUTPUT."PBO;界面显示之前:取数、隐藏、必输等
MODULE STATUS_0100."可用于创建GUI标题和状态
* MODULE SET_VALUES."屏幕初始值设置
MODULE SET_ELEMENTS."复选框显示和隐藏
PROCESS AFTER INPUT."PAI;界面显示之后:回车或按钮点击之后的操作
"屏幕创建日期和时间的填充
MODULE SET_TIME_VALUE.
"性别的值
MODULE SET_SEX_VALUE.
"数据检查
* "1.单一字段的检查
* FIELD GV_XXX MODULE CHECK_XXX ON
*REQUEST.":检查GV_XXX字段,当值或属性发生改变时,执行MODULE
"2.多个字段的检查
CHAIN."在CHAIN中的每个字段的值或属性发生变化时,均要执行module
FIELD GS_STU-ZSCHOOL.
FIELD GS_STU-ZCODE.
FIELD GS_STU-ZNAME.
MODULE CHECK_CODE ON CHAIN-REQUEST.
ENDCHAIN.
MODULE USER_COMMAND_0100."执行按钮的操作
(3.2)主程序部分:ZL_20211011_DIALOG_TEST
*&---------------------------------------------------------------------*
*& Report ZL_20211011_DIALOG_TEST
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZL_20211011_DIALOG_TEST.
INCLUDE ZL_20211011_DIALOG_TEST_TOP."变量声明
INCLUDE ZL_20211011_DIALOG_TEST_O01."PBO MODULES
INCLUDE ZL_20211011_DIALOG_TEST_I01."PAI MODULES
INCLUDE ZL_20211011_DIALOG_TEST_F01."FORM
(3.3)TOP部分:ZL_20211011_DIALOG_TEST_TOP
*&---------------------------------------------------------------------*
*& 包含 ZL_20211011_DIALOG_TEST_TOP
*&---------------------------------------------------------------------*
TYPES :BEGIN OF GY_STU,
MANDT TYPE ZSTU_TRAIN-ZSCHOOL,
ZSCHOOL TYPE ZSTU_TRAIN-ZSCHOOL, "学校代码
ZCODE TYPE ZSTU_TRAIN-ZCODE, "学生代码
ZNAME TYPE ZSTU_TRAIN-ZNAME, "姓名
ZSEX TYPE ZSTU_TRAIN-ZSEX, "班级
ZCLASS TYPE ZSTU_TRAIN-ZCLASS, "性别
ZAGE TYPE ZSTU_TRAIN-ZAGE, "年龄
ZTARIN TYPE ZSTU_TRAIN-ZTARIN, "培训时间
ZCRDT TYPE ZSTU_TRAIN-ZCRDT, "创建日期
ZCRTM TYPE ZSTU_TRAIN-ZCRTM, "创建时间
END OF GY_STU.
TYPES:TT_STU TYPE STANDARD TABLE OF GY_STU.
DATA:GT_STU TYPE TT_STU.
DATA:GS_STU TYPE GY_STU.
* 复选按钮 选中赋值为X 不选为空
DATA GV_JOIN TYPE C LENGTH 1.
* 单选按钮 选中赋值为X 不选为空
DATA GV_RB01 TYPE C LENGTH 1.
DATA GV_RB02 TYPE C LENGTH 1.
(3.4)PBO 模块:ZL_20211011_DIALOG_TEST_O01
*&---------------------------------------------------------------------*
*& 包含 ZL_20211011_DIALOG_TEST_O01
*&---------------------------------------------------------------------*
.
*&---------------------------------------------------------------------*
*& Module SET_ELEMENTS OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE SET_ELEMENTS OUTPUT.
IF GV_JOIN = 'X'."显示
ELSE."隐藏
LOOP AT SCREEN.
* 使用SCREEN中元素分组设置
IF SCREEN-GROUP3 = 'TIM'.
* 使用SCREEN元素名称判断
* IF SCREEN-NAME = 'GV_RB01'.
* SCREEN-INVISIBLE = '1'."0 :否定(不可见) 1:肯定
* MODIFY SCREEN.
* ENDIF.
SCREEN-INVISIBLE = '1'."0 :否定(不可见) 1:肯定
SCREEN-INPUT = '0'."隐藏区域中的输入框设置成不可输入
MODIFY SCREEN.
ENDIF.
ENDLOOP.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text 创建GUI标题和状态
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
SET PF-STATUS '0100'."按钮:0100为自行创建的一组按钮
SET TITLEBAR '0100'."0100为自行创建的gui标题的code
ENDMODULE.
(3.5)PAI 模块:ZL_20211011_DIALOG_TEST_I01
*&---------------------------------------------------------------------*
*& 包含 ZL_20211011_DIALOG_TEST_I01
*&---------------------------------------------------------------------*
.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text 自定义的按钮 :适用于屏幕上或者工具栏的
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
CASE SY-UCOMM.
WHEN 'BACK'.
LEAVE TO SCREEN 0 .
WHEN 'EXIT' OR 'CANL'.
LEAVE PROGRAM.
WHEN 'SAVE'.
PERFORM SAVE_INFO.
ENDCASE.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SET_TIME_VALUE INPUT
*&---------------------------------------------------------------------*
* text 屏幕上创建日期和时间填充
*----------------------------------------------------------------------*
MODULE SET_TIME_VALUE INPUT.
GS_STU-ZCRDT = SY-DATUM."创建日期
GS_STU-ZCRTM = SY-UZEIT."创建时间
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module CHECK_CODE INPUT
*&---------------------------------------------------------------------*
* text 字段检查
*----------------------------------------------------------------------*
MODULE CHECK_CODE INPUT.
DATA LS_STU TYPE ZSTU_TRAIN.
"判断学校/学生代码/姓名是否为空
IF GS_STU-ZSCHOOL IS INITIAL
or GS_STU-ZCODE IS INITIAL
or GS_STU-ZNAME IS INITIAL.
MESSAGE '学校/学生代码/姓名均不能为空!' TYPE 'I' DISPLAY LIKE 'E'.
ENDIF.
"判断是否已经在表中存在
SELECT SINGLE ZSCHOOL ZCODE
FROM ZSTU_TRAIN
INTO CORRESPONDING FIELDS OF LS_STU
WHERE ZSCHOOL = GS_STU-ZSCHOOL
AND ZCODE = GS_STU-ZCODE.
IF SY-SUBRC = 0.
MESSAGE '信息表中存在相同的数据!' TYPE 'I' DISPLAY LIKE 'E'.
ENDIF.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SET_SEX_VALUE INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE SET_SEX_VALUE INPUT.
IF GV_RB01 = 'X'.
GS_STU-ZSEX = '女'.
ELSEIF GV_RB02 = 'X'.
GS_STU-ZSEX = '男'.
ENDIF.
ENDMODULE.
(3.6)FORM 部分:ZL_20211011_DIALOG_TEST_F01
*&---------------------------------------------------------------------*
*& 包含 ZL_20211011_DIALOG_TEST_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form SAVE_INFO
*&---------------------------------------------------------------------*
* text 数据存入表中
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM SAVE_INFO .
INSERT ZSTU_TRAIN FROM GS_STU.
IF SY-SUBRC = 0.
MESSAGE '保存成功!' TYPE 'I' DISPLAY LIKE 'E'.
ENDIF.
ENDFORM.