背景:客户主数据中增加一个试图,保存客户、物料体系
步骤:
1.TCODE:SPRO进入后台配置,添加选项卡
2.实现BADI、创建实施类
3.新建函数组ZXD01、屏幕1000
4.编写屏幕流以及相关代码
屏幕流:
PROCESS BEFORE OUTPUT.
MODULE TC_CHANGE_TC_ATTR.
LOOP AT GT_KHWLTX WITH CONTROL TC CURSOR TC-CURRENT_LIN E.
MODULE TC_GET_LINES.
ENDLOOP.
PROCESS AFTER INPUT.
LOOP AT GT_KHWLTX.
CHAIN.
FIELD GT_KHWLTX-MATNR.
FIELD GT_KHWLTX-MAKTX.
FIELD GT_KHWLTX-ZSYSTEM.
MODULE TC_MODIFY ON CHAIN-REQUEST.
ENDCHAIN.
FIELD GT_KHWLTX-MATNR MODULE GET_MAKTX ON CHAIN-INPUT. FIELD GT_KHWLTX-MANDT MODULE TC_MARK ON REQUEST.
ENDLOOP.
MODULE TC_USER_COMMAND.
相关代码:
TABLES:KNA1.
FIELD-SYMBOLS:
CONSTANTS: C_ZSYSTEM(24) VALUE '(SAPMF02D)KNA1-ZSYSTEM'.
ASSIGN (C_ZSYSTEM) TO
KNA1-ZSYSTEM =
IF SEL_FALG IS INITIAL.
ASSIGN ('(SAPMF02D)KNA1-KUNNR') TO
SELECT * INTO CORRESPONDING FIELDS OF TABLE GT_KHWLTX FR OM ZXD01_2 WHERE KUNNR =
SEL_FALG = 'X'.
ENDIF.
IF ( SY-TCODE = 'XD03' OR SY-TCODE = 'VD03' OR SY-TCODE = 'FD03') AND SY-UCOMM <> 'ENTR'.
LOOP AT SCREEN.
IF SCREEN-GROUP1 = 'GP1'.
SCREEN-INPUT = 0.
MODIFY SCREEN.
ENDIF.
ENDLOOP.
DATA: COLS LIKE LINE OF TC-COLS.
LOOP AT TC-COLS INTO COLS WHERE SCREEN-NAME = 'GT_KHWLT X-MATNR' OR SCREEN-NAME = 'GT_KHWLTX-ZSYSTEM'.
COLS-SCREEN-INPUT = 0.
MODIFY TC-COLS FROM COLS.
ENDLOOP.
ENDIF.
DESCRIBE TABLE GT_KHWLTX LINES TC-LINES.
TC-LINES = LINES( GT_KHWLTX ) + 20.
5.相关BADI
CUSTOMER_ADD_DATA
CUSTOMER_ADD_DATA_CS
6.相关方法:
IF_EX_CUSTOMER_ADD_DATA~SAVE_DATA “保存数据
IF_EX_CUSTOMER_ADD_DATA~CHECK_DATA_CHANGED ”标示是否数据有更改
IF_EX_CUSTOMER_ADD_DATA~CHECK_ADD_ON_ACTIVE “激活选项卡(屏幕组)
IF_EX_CUSTOMER_ADD_DATA_CS~GET_DATA "向结构传输自定义字段值IF_EX_CUSTOMER_ADD_DATA_CS~GET_TAXI_SCREEN ”绑定增强相关的函数组和屏幕
7.BADI的实现代码示例
1) IF_EX_CUSTOMER_ADD_DATA~SAVE_DATA “保存数据
METHOD IF_EX_CUSTOMER_ADD_DATA~SAVE_DATA.
FIELD-SYMBOLS:
DATA:T_ZXD01_1 TYPE ZXD01_1,
GT_ZXD01_1 TYPE TABLE OF ZXD01_1,
DY_OUT TYPE REF TO DATA,
DY_OUT_WA TYPE REF TO DATA.
ASSIGN ('(SAPLZXD01)GT_KHWLTX[]') TO
CHECK
ASSIGN DY_OUT->* TO
CREATE DATA DY_OUT_WA LIKE LINE OF
ASSIGN DY_OUT_WA->* TO
LOOP AT
MOVE-CORRESPONDING
T_ZXD01_1-KUNNR = I_KUNNR.
APPEND T_ZXD01_1 TO GT_ZXD01_1.
ENDLOOP.
DELETE FROM ZXD01_1 WHERE KUNNR = I_KUNNR.
MODIFY ZXD01_1 FROM TABLE GT_ZXD01_1.
ENDMETHOD.
2) IF_EX_CUSTOMER_ADD_DATA~CHECK_DATA_CHANGED ”标示是否数据有更改
METHOD IF_EX_CUSTOMER_ADD_DATA~CHECK_DATA_CHANGED.
E_CHANGED = 'X'.
ENDMETHOD.
3) IF_EX_CUSTOMER_ADD_DATA~CHECK_ADD_ON_ACTIVE “激活选项卡(屏幕组)
METHOD IF_EX_CUSTOMER_ADD_DATA~CHECK_ADD_ON_ACTIVE.
IF I_SCREEN_GROUP = 'ZK'.
E_ADD_ON_ACTIVE = 'X'.
ENDIF.
ENDMETHOD.
4) IF_EX_CUSTOMER_ADD_DATA_CS~GET_DATA "向结构传输自定义字段值
METHOD IF_EX_CUSTOMER_ADD_DATA_CS~GET_DATA.
CONSTANTS: ZSYSTEM(24) VALUE '(SAPLZXD01)KNA1-ZSYSTEM'.
FIELD-SYMBOLS:
ASSIGN (ZSYSTEM) TO
IF SY-SUBRC = 0.
S_KNA1-ZSYSTEM =
ENDIF.
ENDMETHOD.
5) IF_EX_CUSTOMER_ADD_DATA_CS~GET_TAXI_SCREEN ”绑定增强相关的函数组和屏幕
METHOD IF_EX_CUSTOMER_ADD_DATA_CS~GET_TAXI_SCREEN.
IF I_TAXI_FCODE = 'ZBECUS01'.
E_SCREEN = '1000'.
E_PROGRAM = 'SAPLZXD01'.
E_HEADERSCREEN_LAYOUT = ''.
ENDIF.
ENDMETHOD.
8.最终效果图