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中,激活后就成功了。

定期更文,欢迎关注

 
 
 
 
 
 
 
此页面的语言为英语
 
翻译为中文(简体)
 
 
 
 
  • 中文(简体)
  • 中文(繁体)
  • 丹麦语
  • 乌克兰语
  • 乌尔都语
  • 亚美尼亚语
  • 俄语
  • 保加利亚语
  • 克罗地亚语
  • 冰岛语
  • 加泰罗尼亚语
  • 匈牙利语
  • 卡纳达语
  • 印地语
  • 印尼语
  • 古吉拉特语
  • 哈萨克语
  • 土耳其语
  • 威尔士语
  • 孟加拉语
  • 尼泊尔语
  • 布尔语(南非荷兰语)
  • 希伯来语
  • 希腊语
  • 库尔德语
  • 德语
  • 意大利语
  • 拉脱维亚语
  • 挪威语
  • 捷克语
  • 斯洛伐克语
  • 斯洛文尼亚语
  • 旁遮普语
  • 日语
  • 普什图语
  • 毛利语
  • 法语
  • 波兰语
  • 波斯语
  • 泰卢固语
  • 泰米尔语
  • 泰语
  • 海地克里奥尔语
  • 爱沙尼亚语
  • 瑞典语
  • 立陶宛语
  • 缅甸语
  • 罗马尼亚语
  • 老挝语
  • 芬兰语
  • 英语
  • 荷兰语
  • 萨摩亚语
  • 葡萄牙语
  • 西班牙语
  • 越南语
  • 阿塞拜疆语
  • 阿姆哈拉语
  • 阿尔巴尼亚语
  • 阿拉伯语
  • 韩语
  • 马尔加什语
  • 马拉地语
  • 马拉雅拉姆语
  • 马来语
  • 马耳他语
  • 高棉语
 
随时将英语翻译为中文(简体)PRO
一律不翻译英语
一律不翻译i.cnblogs.com

ME21N 采购订单新增页签增强的更多相关文章

  1. SAP S4HANA如何取到采购订单ITEM里的'条件'选项卡里的条件类型值?

    SAP S4HANA如何取到采购订单ITEM里的'条件'选项卡里的条件类型值? 最近在准备一个采购订单行项目的增强的function spec.其中有一段逻辑是取到采购订单行项目条件里某个指定的条件类 ...

  2. 采购订单me22n 或者me21n增强 (点击保存和回车)

    IF_EX_ME_PROCESS_PO_CUST DATA:l_header TYPE mepoheader, l_item TYPE mepoitem. DATA:lt_items TYPE pur ...

  3. SAP采购订单屏幕增强

    转自<http://blog.csdn.net/heng0757/article/details/8073875> 为采购订单增加一个页标签,在其中放入客户自定义字段, 1. CMOD 增 ...

  4. SAP采购订单入库后不允许修改单价增强

    需求:在根据采购订单做了入库凭证之后,如果用户反审批采购订单去修改单价,系统提示‘已收货,不允许修改单价’. 判断流程:是否有入库凭证 如果采购订单条件按采购信息记录定价,这个价格本来就不能修改,只能 ...

  5. SAP 采购订单行项目客制化字段增强

    需求: 在采购订单行项目中新增客制化字段,区分采购的项目中的物料是量产还是研发物料 开发步骤 主要使用二代增强出口:MM06E005 创建增强项目 事务码T-code:CMOD 创建项目ZEMM001 ...

  6. ME_PROCESS_PO_CUST 实现采购订单行项目增强

    用户希望创建采购订单时,输入行项目时,能根据采购订单类型,自动带出科目分类类别. 业务顾问看了一下配置,不能实现这个功能,所以用增强实现. 采购订单BADI增强:ME_PROCESS_PO_CUST. ...

  7. 【MM系列】SAP 采购订单收货后不能修改价格的增强

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 采购订单收货后不能修改价格的 ...

  8. SAP采购订单审批记录增强

    采购订单审核函数: BAPI_PO_RELEASE 结尾加上 ENHANCEMENT ZME28_PO. "active version DATA:LS_EKKO TYPE EKKO. DA ...

  9. 002 MIRO发票校验采购订单项目科目分配类别检查增强-20150819

    BADI SE19:ZINVOICE_UPDATE   MIRO发票检验过账好模拟时,检查采购订单line 是否有固定资产的行项目,如果有固定资产项目,则弹出提示框,提示消息:存在规定资产采购项目! ...

  10. SAP IDOC 通过采购订单输出消息生成销售订单

    题记: 在网络上看到一篇类似的公众号文章,叫<通过IDoc逐步指导PO&SO集成>,个人觉得整个配置过程中还是少了一些重点配置,也少了说明整个功能的核心逻辑,那么,趁着这个机会,就 ...

随机推荐

  1. Codeforces Round #706 (Div. 2) A-D题解

    写在前边 链接:Codeforces Round #706 (Div. 2) \(A,B,C,D\),这场有点简单,不过由于A写炸了后边题连看都没看就溜了,就从上大分变成了掉大分 A. Split i ...

  2. Hadoop学习(一) 搭建伪分布式集群

    文章结构 1.准备工作 1.1 配置IP 1.2 关闭防火墙 1.3 修改主机名并与IP绑定 1.4 创建新用户 1.5 配置免密匙 2.安装并配置Hadoop伪分布式集群 2.1 安装Java 2. ...

  3. python之object类

    object类 如python之继承及其实现方法这一节提到过的,object类是所有类的父类,因此所有类都有object类的属性和方法. 如python之封装及私有方法使用过的,内置函数dir()可以 ...

  4. JavaWeb开发-HTML基础学习

    1.HTML的基本语法 HTML是什么?:HTML是一种超文本标记语言,负责网页的结构,设计页面的元素内容等 超文本:超越文本限制,除了文本信息,还可以定义图片,音频,视频等 标记语言:由标签构成的语 ...

  5. [ABC261C] NewFolder(1)

    Problem Statement For two strings $A$ and $B$, let $A+B$ denote the concatenation of $A$ and $B$ in ...

  6. Hive SQL之表与建表

    数据类型:  建表 create database itheima; --1.创建一张表 -- 表名 --字段 名称 类型 顺序 --字段之间的分隔符 create table itheima.t_a ...

  7. Docker的安装、镜像加速配置

    wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce. ...

  8. Mongodb数据增删改查

    RDB:数据库 → 表(列) → 行 Mongo:数据库 → 集合 → 文档 SQL和Mongodb的关系映射表(里面还有一些增删改查等等操作与SQL的对应的语句): https://www.mong ...

  9. 【eBPF-01】初见:基于 BCC 框架的第一个 eBPF 程序

    闲言少叙,本文记录了如何零基础通过 BCC 框架,入门 eBPF 程序的开发,并实现几个简易的程序. 有关 eBPF 的介绍,网络上的资料有很多,本文暂且先不深入讨论,后面会再出一篇文章详细分析其原理 ...

  10. MYSQL数据库root账户密码忘记,如何重置?