【转载】ME21N采购订单新增页签增强

标签:
abapdbsap工具 |
分类: 增强 |

1、实现效果
根据客制化需求,要在采购订单中新增大量字段,所以要在界面上添加一个单独的页签。效果如下:
2、增强实现
2.1、增强结构
因为是在抬头上边添加,所以增强CI_EKKODB结构
2.2、函数组
仿照Function Group MEPOBADIEX建一个Function Group
2.3、增强实施
2.3.1、BADI:ME_GUI_PO_CUST
方法:SUBSCRIBE
method IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS. FIELD-SYMBOLS: LIKE LINE OF ch_mapping. LOOP AT ch_mapping ASSIGNING . CASE -fieldname. WHEN 'ZEJFL'. -metafield = mmmfd_cust_01. "抬头 * WHEN 'ZHEAD02'. -metafield = mmmfd_cust_02. * WHEN 'ZZ001'. -metafield = mmmfd_cust_03. "明细 * WHEN 'ZZ005'. -metafield = mmmfd_cust_04. * "自定义字段 * WHEN 'ZFIELD3'.-metafield = mmmfd_cust_05. ENDCASE. ENDLOOP. endmethod. 方法:TRANSPORT_FROM_MODELmethod IF_EX_ME_GUI_PO_CUST~SUBSCRIBE.
DATA: LS_SUBSCRIBERS TYPE MEPO_SUBSCRIBERS.
*1 抬头
IF IM_APPLICATION = 'PO' AND IM_ELEMENT = 'HEADER'.
CLEAR RE_SUBSCRIBERS[] .
CLEAR LS_SUBSCRIBERS.
LS_SUBSCRIBERS-NAME = SUBSCREEN_H."屏幕名称
LS_SUBSCRIBERS-DYNPRO = '9001'."函数组的屏幕编号
LS_SUBSCRIBERS-PROGRAM = 'SAPLZMMPO001'."调用的函数组
LS_SUBSCRIBERS-STRUCT_NAME = 'CI_EKKODB'."增强的结构
LS_SUBSCRIBERS-LABEL = '其他数据'."页签名称
LS_SUBSCRIBERS-POSITION = 30."页签处于的位置
LS_SUBSCRIBERS-HEIGHT = 7."页签高度
APPEND LS_SUBSCRIBERS TO RE_SUBSCRIBERS.
ENDIF.
*2
* IF IM_APPLICATION = 'PO' AND IM_ELEMENT = 'ITEM'.
* CLEAR RE_SUBSCRIBERS[] .
* CLEAR LS_SUBSCRIBERS.
* LS_SUBSCRIBERS-NAME = SUBSCREEN_I.
* LS_SUBSCRIBERS-DYNPRO = '9100'.
* LS_SUBSCRIBERS-PROGRAM = 'SAPLZMM003'.
* LS_SUBSCRIBERS-STRUCT_NAME = 'CI_EKPODB'.
* LS_SUBSCRIBERS-LABEL = 'Badi增强行项目屏幕'.
* LS_SUBSCRIBERS-POSITION = 24. "页签处于的位置
* LS_SUBSCRIBERS-HEIGHT = 4.
* APPEND LS_SUBSCRIBERS TO RE_SUBSCRIBERS.
* ENDIF.
endmethod.
METHOD IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_DYNP.
*1 抬头
*2 明细
*
*
*
*
方法:TRANSPORT_FROM_DYNP
METHOD IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_DYNP.
*1 抬头
*2 明细
*
*
*
*
*
*
*
方法:TRANSPORT_TO_MODEL
method IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_MODEL.
*1 抬头
*
*
*2 明细
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
2.3.2、BADI:ME_PROCESS_PO_CUST
到此处,ME23N就可以看到新增的页签,但是ME21N和ME22N看不到,还需要实现一个BADI:ME_PROCESS_PO_CUST的FIELDSELECTION_HEADER方法。
该BADI只能创建一个实施,如果已经有多个实施,将达不到效果。
method IF_EX_ME_PROCESS_PO_CUST~FIELDSELECTION_HEADER.
DATA:ex_data TYPE mepoheader.
*
*
endmethod.
对抬头和行项目输入数据的检查可放在方法:PROCESS_HEADER和PROCESS_ITEM中,激活即可。