ME21N 采购订单新增页签增强
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~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.
"--------------------@斌将军--------------------
定义相关属性

方法:MAP_DYNPRO_FIELDS
"--------------------@斌将军--------------------
method IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS.
FIELD-SYMBOLS: <mapping> LIKE LINE OF ch_mapping. LOOP AT ch_mapping ASSIGNING <mapping>.
CASE <mapping>-fieldname.
WHEN 'ZEJFL'. <mapping>-metafield = mmmfd_cust_01. "抬头
* WHEN 'ZHEAD02'. <mapping>-metafield = mmmfd_cust_02.
* WHEN 'ZZ001'. <mapping>-metafield = mmmfd_cust_03. "明细
* WHEN 'ZZ005'. <mapping>-metafield = mmmfd_cust_04.
* "自定义字段
* WHEN 'ZFIELD3'.<mapping>-metafield = mmmfd_cust_05.
ENDCASE.
ENDLOOP.
endmethod.
"--------------------@斌将军--------------------
方法:TRANSPORT_FROM_MODEL
"--------------------@斌将军--------------------
method IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_MODEL.
DATA: ls_header TYPE REF TO if_purchase_order_mm,
ls_mepoheader TYPE mepoheader,
ls_item TYPE REF TO if_purchase_order_item_mm,
ls_mepoitem TYPE mepoitem.
*1 抬头
IF im_name = subscreen_h.
mmpur_dynamic_cast ls_header im_model.
IF ls_header IS NOT INITIAL.
ls_mepoheader = ls_header->get_data( ).
MOVE-CORRESPONDING ls_mepoheader TO dynp_data_pbo_h.
ENDIF.
ENDIF.
*2 明细
* IF im_name = subscreen_i.
* mmpur_dynamic_cast ls_item im_model.
* IF ls_item IS NOT INITIAL.
* ls_mepoitem = ls_item->get_data( ).
* MOVE-CORRESPONDING ls_mepoitem TO dynp_data_pbo_i.
* ENDIF.
* ENDIF.
endmethod.
"--------------------@斌将军--------------------
方法:TRANSPORT_TO_DYNP
"--------------------@斌将军--------------------
METHOD IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_DYNP.
CASE IM_NAME.
*1 抬头
WHEN SUBSCREEN_H.
call function 'ZMMPO001_PUSH'
EXPORTING
IM_DYNP_DATA = DYNP_DATA_PBO_H.
*2 明细
* WHEN subscreen_i.
* CALL FUNCTION 'ZMMPO002_PUSH'
* EXPORTING
* im_dynp_data = dynp_data_pbo_i.
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
"--------------------@斌将军--------------------
方法:TRANSPORT_FROM_DYNP
"--------------------@斌将军--------------------
METHOD IF_EX_ME_GUI_PO_CUST~TRANSPORT_FROM_DYNP.
CASE IM_NAME.
*1 抬头
WHEN SUBSCREEN_H.
call function 'ZMMPO001_POP'
IMPORTING
EX_DYNP_DATA = DYNP_DATA_PAI_H.
IF DYNP_DATA_PAI_H <> DYNP_DATA_PBO_H.
RE_CHANGED = MMPUR_YES.
ENDIF.
*2 明细
* WHEN subscreen_i.
* CALL FUNCTION 'ZMMPO002_POP'
* IMPORTING
* ex_dynp_data = dynp_data_pai_i.
* IF dynp_data_pai_i <> dynp_data_pbo_i.
* re_changed = mmpur_yes.
* ENDIF.
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
"--------------------@斌将军--------------------
方法:TRANSPORT_TO_MODEL
"--------------------@斌将军--------------------
method IF_EX_ME_GUI_PO_CUST~TRANSPORT_TO_MODEL.
DATA: ls_header TYPE REF TO if_purchase_order_mm,
ls_mepoheader TYPE mepoheader,
ls_po_head_customer TYPE ci_ekkodb,
ls_po_header_handle TYPE REF TO cl_po_header_handle_mm,
ls_item TYPE REF TO if_purchase_order_item_mm,
ls_mepoitem TYPE mepoitem,
ls_po_item_customer TYPE ci_ekpodb,
ls_po_item_handle TYPE REF TO cl_po_item_handle_mm. CASE im_name.
*1 抬头
WHEN subscreen_h.
mmpur_dynamic_cast ls_header im_model.
IF ls_header IS NOT INITIAL.
ls_mepoheader = ls_header->get_data( ).
IF dynp_data_pbo_h-ZEJFL <> dynp_data_pai_h-ZEJFL.
* OR dynp_data_pbo_h-zhead02 <> dynp_data_pai_h-zhead02.
ls_mepoheader-ZEJFL = dynp_data_pai_h-ZEJFL.
* ls_mepoheader-zhead02 = dynp_data_pai_h-zhead02.
CALL METHOD ls_header->set_data
EXPORTING
im_data = ls_mepoheader.
ENDIF.
ENDIF.
*2 明细
* WHEN subscreen_i.
* mmpur_dynamic_cast ls_item im_model.
* IF ls_item IS NOT INITIAL.
* ls_mepoitem = ls_item->get_data( ).
* IF dynp_data_pbo_i-zz001 <> dynp_data_pai_i-zz001
* OR dynp_data_pbo_i-zz005 <> dynp_data_pai_i-zz005.
*
* ls_mepoitem-zz001 = dynp_data_pai_i-zz001.
* ls_mepoitem-zz005 = dynp_data_pai_i-zz005.
*
* CALL METHOD ls_item->set_data
* EXPORTING
* im_data = ls_mepoitem.
* ENDIF.
* ENDIF.
WHEN OTHERS.
ENDCASE.
endmethod.
"--------------------@斌将军--------------------
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.
DATA: LV_PERSISTENT TYPE MMPUR_BOOL.
FIELD-SYMBOLS: <FS> LIKE LINE OF CH_FIELDSELECTION. DEFINE SET_INPUT.
READ TABLE ch_fieldselection ASSIGNING <fs> WITH TABLE KEY metafield = &1.
IF sy-subrc = 0.
IF im_header->is_changeable( ) = mmpur_yes.
<fs>-fieldstatus = '+'."'-'代表hidden, '+'或'.'表示editable, '*'代表display
ELSE.
<fs>-fieldstatus = '*'.
ENDIF.
ENDIF.
END-OF-DEFINITION. LV_PERSISTENT = IM_HEADER->IS_PERSISTENT( ). SET_INPUT MMMFD_CUST_01.
"获取订单数据
CLEAR:ex_data.
* ex_data = im_header->get_data( ).
* SET_INPUT MMMFD_CUST_02.
endmethod.
"--------------------@斌将军--------------------
对抬头和行项目输入数据的检查可放在方法:PROCESS_HEADER和PROCESS_ITEM中,激活后就成功了。
定期更文,欢迎关注

- 中文(简体)
- 中文(繁体)
- 丹麦语
- 乌克兰语
- 乌尔都语
- 亚美尼亚语
- 俄语
- 保加利亚语
- 克罗地亚语
- 冰岛语
- 加泰罗尼亚语
- 匈牙利语
- 卡纳达语
- 印地语
- 印尼语
- 古吉拉特语
- 哈萨克语
- 土耳其语
- 威尔士语
- 孟加拉语
- 尼泊尔语
- 布尔语(南非荷兰语)
- 希伯来语
- 希腊语
- 库尔德语
- 德语
- 意大利语
- 拉脱维亚语
- 挪威语
- 捷克语
- 斯洛伐克语
- 斯洛文尼亚语
- 旁遮普语
- 日语
- 普什图语
- 毛利语
- 法语
- 波兰语
- 波斯语
- 泰卢固语
- 泰米尔语
- 泰语
- 海地克里奥尔语
- 爱沙尼亚语
- 瑞典语
- 立陶宛语
- 缅甸语
- 罗马尼亚语
- 老挝语
- 芬兰语
- 英语
- 荷兰语
- 萨摩亚语
- 葡萄牙语
- 西班牙语
- 越南语
- 阿塞拜疆语
- 阿姆哈拉语
- 阿尔巴尼亚语
- 阿拉伯语
- 韩语
- 马尔加什语
- 马拉地语
- 马拉雅拉姆语
- 马来语
- 马耳他语
- 高棉语
一律不翻译英语
一律不翻译i.cnblogs.com
ME21N 采购订单新增页签增强的更多相关文章
- SAP S4HANA如何取到采购订单ITEM里的'条件'选项卡里的条件类型值?
SAP S4HANA如何取到采购订单ITEM里的'条件'选项卡里的条件类型值? 最近在准备一个采购订单行项目的增强的function spec.其中有一段逻辑是取到采购订单行项目条件里某个指定的条件类 ...
- 采购订单me22n 或者me21n增强 (点击保存和回车)
IF_EX_ME_PROCESS_PO_CUST DATA:l_header TYPE mepoheader, l_item TYPE mepoitem. DATA:lt_items TYPE pur ...
- SAP采购订单屏幕增强
转自<http://blog.csdn.net/heng0757/article/details/8073875> 为采购订单增加一个页标签,在其中放入客户自定义字段, 1. CMOD 增 ...
- SAP采购订单入库后不允许修改单价增强
需求:在根据采购订单做了入库凭证之后,如果用户反审批采购订单去修改单价,系统提示‘已收货,不允许修改单价’. 判断流程:是否有入库凭证 如果采购订单条件按采购信息记录定价,这个价格本来就不能修改,只能 ...
- SAP 采购订单行项目客制化字段增强
需求: 在采购订单行项目中新增客制化字段,区分采购的项目中的物料是量产还是研发物料 开发步骤 主要使用二代增强出口:MM06E005 创建增强项目 事务码T-code:CMOD 创建项目ZEMM001 ...
- ME_PROCESS_PO_CUST 实现采购订单行项目增强
用户希望创建采购订单时,输入行项目时,能根据采购订单类型,自动带出科目分类类别. 业务顾问看了一下配置,不能实现这个功能,所以用增强实现. 采购订单BADI增强:ME_PROCESS_PO_CUST. ...
- 【MM系列】SAP 采购订单收货后不能修改价格的增强
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 采购订单收货后不能修改价格的 ...
- SAP采购订单审批记录增强
采购订单审核函数: BAPI_PO_RELEASE 结尾加上 ENHANCEMENT ZME28_PO. "active version DATA:LS_EKKO TYPE EKKO. DA ...
- 002 MIRO发票校验采购订单项目科目分配类别检查增强-20150819
BADI SE19:ZINVOICE_UPDATE MIRO发票检验过账好模拟时,检查采购订单line 是否有固定资产的行项目,如果有固定资产项目,则弹出提示框,提示消息:存在规定资产采购项目! ...
- SAP IDOC 通过采购订单输出消息生成销售订单
题记: 在网络上看到一篇类似的公众号文章,叫<通过IDoc逐步指导PO&SO集成>,个人觉得整个配置过程中还是少了一些重点配置,也少了说明整个功能的核心逻辑,那么,趁着这个机会,就 ...
随机推荐
- C语言二进制转换成八,十,十六进制
代码目前只支持整数转换,小数转换后续更新呀 #include <stdio.h> #include <math.h> void B_O(int n); void B_H(int ...
- Modbus通用串口转PROFINET IO网关TS-180 在锅炉厂智能温湿度监控系统中的应用
背景: 现代科学技术和工业的迅速发展,不断促进着自动化控制技术及设备通信技术的创新和发展.当前,PLC.DCS.智能仪表等已广泛应用到现场生产控制系统中,本应用案例是在锅炉行业的温湿度监控系统中,西门 ...
- Video教程的Domain设计
Domain设计 下面将介绍Video的表设计,和模型定义. 表设计 Videos设计 /// <summary> /// 视频聚合 /// </summary> public ...
- 浏览器跨 Tab 窗口通信原理及应用实践
最近,相信大家一定被这么个动效给刷屏了: 以至于,基于这个效果的二次创作层出不穷,眼花缭乱. 基于跨窗口通信的弹弹球: 基于跨窗口通信的 Flippy Bird: 我也尝试制作了一个跨 Tab 窗口的 ...
- windows 电脑 连接蓝牙耳机没有麦克风
前言 windows 电脑 连接蓝牙耳机没有麦克风,明明已经显示麦克风图标,为什么录制不到声音 原因 电脑连蓝牙耳机有两个模式:hand free和stereo.handfree是可以语音通话的,但是 ...
- IDEA配置自定义标签,实现高亮注释~
为什么要写这么一篇博客呢? 不知道大家有没有这样的一种苦恼,就是在写代码的时候遇到复杂的核心的代码,想加一个特殊的注释方便后期自己或者同事查看,但是这玩意IDEA好像只给我们提供了两个 FIXME : ...
- Python——第一章:数据类型介绍
数据类型: 区分不同的数据.不同的数据类型应该有不同的操作 数字: 做加减乘除+-*/ 整数,int 小数,float a= 10 #整数 b = 20 print(a + b) #加法运算 c = ...
- Java 编辑PPT SmartArt图形
本文介绍在Java程序中如何来编辑PPT幻灯片中已有的SmartArt图形,包括重置图形样式.颜色.添加/删除图形节点.编辑节点内容.添加超链接到节点(链接到网页.链接到指定幻灯片)等.在PPT中创建 ...
- 4种Python中基于字段的不使用元类的ORM实现方法
本文分享自华为云社区<Python中基于字段的不使用元类的ORM实现>,作者: 柠檬味拥抱 . 不使用元类的简单ORM实现 在 Python 中,ORM(Object-Relational ...
- Python快速爬取车标网图片,以后不要说这什么车你不认识了!
知识不分边界...... 人,为什么要读书?举个例子: 当看到天边飞鸟,你会说:"落霞与孤鹜齐飞,秋水共长天一色."而不是:"卧靠,好多鸟."; 当你失恋时你低 ...