文章目录
创建经典BADI 实施BADI 创建屏幕
定义GUI 运行结果 程序代码
创建经典BADI
实施BADI
创建屏幕
绘制屏幕
定义GUI
运行结果
程序代码
* & -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - *
* & Report ZRP_BADITEST
* &
* & -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - *
* &
* &
* & -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - *
REPORT ZRP_BADITEST .
DATA : OK_CODE LIKE SY - UCOMM .
DATA : PROGRAM TYPE PROGRAM ,
DYNPRO TYPE DYNNR .
DATA : REF_BADI_INTERFACE TYPE REF TO ZIF_EX_BADI_DEFINED .
CALL SCREEN 100.
* & -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - *
* & Module STATUS_0100 OUTPUT
* & -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - *
* text
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- *
MODULE STATUS_0100 OUTPUT .
DATA ACT_IMP_EXISTING .
SET PF - STATUS '100' .
* SET TITLEBAR 'xxx' .
IF REF_BADI_INTERFACE IS INITIAL .
CALL METHOD CL_EXITHANDLER => GET_INSTANCE
EXPORTING
EXIT_NAME = 'ZBADI_DEFINED'
"如果未找到BADI 实现或有实现但未激活时,ref_badi_interface是否可以接受NULL (即 INITIAL )
"一般设置为空,在为空时,如果未实现或未激活时,还是会返回一个代理实现,这样后面程序运行不
"会出错,否则设置为X 时,在未实现或未激活时,ref_badi_interface不会有值,则如果通过它调用
"方法时,会抛异常
NULL_INSTANCE_ACCEPTED = ' '
IMPORTING
ACT_IMP_EXISTING = ACT_IMP_EXISTING "实现是否已激活
CHANGING
INSTANCE = REF_BADI_INTERFACE .
ENDIF .
IF ACT_IMP_EXISTING < > 'X' .
MESSAGE 'BADI实现没有被激活' TYPE 'I' .
"EXIT .
ENDIF .
CALL METHOD CL_EXITHANDLER => GET_PROG_AND_DYNP_FOR_SUBSCR
EXPORTING
EXIT_NAME = 'ZBADI_DEFINED' "BADI 出口名,即BADI 定义名
CALLING_DYNPRO = '0100' "主调屏幕号
CALLING_PROGRAM = 'ZRP_BADITEST' "主调屏幕所属程序
* FLT_VAL =
SUBSCREEN_AREA = 'SUB_SCREEN' "主调屏幕中的增强子屏幕区域名
IMPORTING
CALLED_DYNPRO = DYNPRO
CALLED_PROGRAM = PROGRAM .
WRITE : '' .
ENDMODULE . " STATUS_0100 OUTPUT
* & -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - *
* & Module USER_COMMAND_0100 INPUT
* & -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- - *
* text
* -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- *
MODULE USER_COMMAND_0100 INPUT .
CASE OK_CODE .
WHEN 'FC1' .
MESSAGE '普通菜单' TYPE 'I' .
"只要BADI 实现激活后,才会出现菜单,即可以点击,才可能走这里的逻辑
WHEN '+BADI' .
MESSAGE '增强菜单' TYPE 'I' .
WHEN 'BUT1' .
"如果BADI 未实现或实现但未激活时,只要 cl_exithandler => get_instance
"时,设置输入参数 null_instance_accepted = ' ' ,ref_badi_interface
"就会指向一个代理实现类,调用不会抛异常,但只是个空的方法,什么作用
"也不会有
ENDCASE .
ENDMODULE . " USER_COMMAND_0100 INPUT