文档库 最新最全的文档下载
当前位置:文档库 › SAP客户主数据屏幕增强

SAP客户主数据屏幕增强

SAP客户主数据屏幕增强
SAP客户主数据屏幕增强

背景:客户主数据中增加一个试图,保存客户、物料体系

步骤:

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: TYPE ANY TABLE,

TYPE ANY.

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 IS ASSIGNED.

ASSIGN DY_OUT->* TO .

CREATE DATA DY_OUT_WA LIKE LINE OF .

ASSIGN DY_OUT_WA->* TO .

LOOP AT INTO .

MOVE-CORRESPONDING TO T_ZXD01_1.

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: TYPE ANY.

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.最终效果图

相关文档