ME21N 采购订单新增页签增强

news2025/3/9 22:11:03

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

定期更文,欢迎关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/999238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue 项目npm 打包遇到的一些bug记录

问题场景 &#xff1a;npm 的版本正确&#xff0c;nodejs 的版本也是正常的&#xff0c;之前npm run build 打包都正常没问题&#xff0c;但是因为其他原因电脑重装了&#xff0c;环境重新配置了。npm run dev 跑没问题,打包就报错了&#xff0c;信息如下&#xff1a; rc/util…

Java从入门到精通-数组(三)

0. 数组 1. 数组概述 练习1&#xff1a; 创建一个整数数组&#xff0c;存储喜欢的5个数字&#xff0c;并编写代码打印出这些数字。 创建一个整数数组 public class Main {public static void main(String[] args) {// 创建一个整数数组&#xff0c;存储5个喜欢的数字int[] f…

G4学术期刊《中学教学参考》简介及投稿要求

G4学术期刊《中学教学参考》简介及投稿要求 《中学教学参考》为广西教育学院杂志社主办的国内外公开发行刊物&#xff0c;坚持为基础教育服务的宗旨&#xff0c;竭诚为全国教育工作者服务&#xff0c;提供最新教改信息和教育理论成果&#xff0c;为广大教育工作者交流经验、发…

python系列:requests库+BS4库及综合实例

仅供学习、交流使用&#xff0c;不具有任何商业用途&#xff0c;如有问题请及时联系我们以作处理。 文章目录 前言requests安装使用第一种 requests.request("请求方式", ...)第二种 requests.请求方式(参数)URL中传递参数 paramsxx响应内容 r.text二进制响应内容 r.…

从零开始的PICO教程(1)Pico游戏开发项目配置

从零开始的PICO教程&#xff08;1&#xff09;Pico游戏开发项目配置 文章目录 从零开始的PICO教程&#xff08;1&#xff09;Pico游戏开发项目配置一、前言1、大纲 二、成为Pico开发者1、注册 PICO 开发者帐号2、创建组织3、创建应用 三、导入PICO的SDK1、PICO设备开启 “开发者…

一文了解数据科学Notebook

编者按&#xff1a; 主要介绍什么是Notebook&#xff0c;Notebook在数据科学领域的应用的重要性与优势&#xff0c;以及数据科学家/算法团队在选择Notebook时需考虑哪些关键因素。同时&#xff0c;基于Notebook的筛选考量维度&#xff0c;对常见的Notebook进初步对比分析&#…

volatile、ReentrantLock和synchronized保证线程可见性原理

主存、工作内存 在了解什么是线程可见性前&#xff0c;我们先来简单了解下 Java内存模型 的主存、工作内存抽象概念 主存&#xff1a; 存储的是一些共享资源的存储位置&#xff08;例如静态变量等&#xff09; 工作内存&#xff1a; 每个线程对应的栈内存对应的私有局部…

JAVASE 游戏

朴素的拼图游戏&#xff0c;通过WASD移动&#xff0c;我自己都不太会&#xff0c;可以通过篡改内部代码来取得想要的成功彩蛋 代码&#xff1a; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.…

如何使用autotools制作Makefile

本文将通过一个例子介绍如何使用autotools制作Makefile&#xff0c;最终运行可执行文件。 本例子中使用的源代码a.c如下。 #include "stdio.h" void main() {int a,b;int c;printf("请输入两个数&#xff1a;\n");scanf("%d %d",&a,&b)…

大数据课程L3——网站流量项目的系统搭建

文章作者邮箱:yugongshiye@sina.cn 地址:广东惠州 ▲ 本章节目的 ⚪ 了解网站流量项目的运行环境; ⚪ 了解网站流量项目的日志采集系统搭建; ⚪ 了解网站流量项目的离线业务系统搭建; ⚪ 了解网站流量项目的Hive做离线数据处理; ⚪ 了解网站流量项目的…

盲打键盘的正确指法指南

简介 很多打字初学者&#xff0c;并不了解打字的正确指法规范&#xff0c;很容易出现只用两根手指交替按压键盘的“二指禅”情况。虽然这样也能实现打字&#xff0c;但是效率极低。本文将简单介绍盲打键盘的正确指法&#xff0c;以便大家在后续的学习和工作中能够提高工作效率…

Nacos安装及在项目中的使用

目录 概要一、安装 Nacos1、下载 Nacos2、解压3、启动 Nacos 服务器4、自定义Nacos启动脚本5、访问Nacos Web控制台 二、Nacos----服务注册与发现1、添加 Nacos 依赖2、配置 Nacos 服务器地址3、使用 Nacos 注册服务4、启动服务 三、Nacos----配置管理1、创建配置数据2、从 Nac…

技师学院物联网实训室建建设方案

一、概述 1.1专业背景 物联网&#xff08;Internet of Things&#xff09;被称为继计算机、互联网之后世界信息产业第三次浪潮&#xff0c;它并非一个全新的技术领域&#xff0c;而是现代信息技术发展到一定阶段后出现的一种聚合性应用与技术提升&#xff0c;是随着传感网、通…

深圳站WOT全球技术创新大会2023,精彩即将开启!

前几天刷屏的“中国大模型顶流群聊笔记”想必很多人都看到了&#xff0c;包括百川智能创始人&CEO王小川&#xff0c;创新工场董事长、零一万物创始人李开复&#xff0c;澜舟科技CEO周明在内的20多位中国大模型领域模型层、工具层、应用层的“顶流”们&#xff0c;在西溪湿地…

【校招VIP】专业课考点之死锁

考点介绍&#xff1a; 在两个或者多个并发进程中&#xff0c;如果每个进程持有某种资源而又等待其它进程释放它或它们现在保持着的资源&#xff0c;在未改变这种状态之前都不能向前推进&#xff0c;称这一组进程产生了死锁。通俗的讲就是两个或多个进程无限期的阻塞、相互等待的…

使用Python和BeautifulSoup提取网页数据的实用技巧

在数据驱动的时代&#xff0c;获取网页数据并进行分析和处理是一项重要的任务。Python作为一门强大的编程语言&#xff0c;在处理网页数据的领域也表现出色。本文将分享使用Python和BeautifulSoup库提取网页数据的实用技巧&#xff0c;帮助你更高效地获取和处理网页数据。 1、了…

什么牌子的运动蓝牙耳机好用、运动耳机品牌排行榜推荐

运动与健康息息相关&#xff0c;人们越来越认识到运动带来的益处&#xff0c;例如增强心肺功能、提高新陈代谢率&#xff0c;并能预防多种慢性疾病。随着社交媒体上越来越多人分享自己的运动心得&#xff0c;更多的人也被激发起参与其中的热情。 在运动过程中&#xff0c;音乐的…

猫头虎博主赠书三期:《Go编程进阶实战: 开发命令行应用、HTTP应用和gRPC应用》

&#x1f389;猫头虎博主赠书三期&#x1f389;&#xff1a;《Go编程进阶实战: 开发命令行应用、HTTP应用和gRPC应用》 &#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页…

EditPlus 配置python 及Anaconda中的python

若不是pycharm vscode 太大&#xff0c;太占内存&#xff0c;谁会想到用Notepad&#xff0c;EdirPlus 配置python呢&#xff01;&#xff01;&#xff01; 话不多说&#xff0c;首先你自己安装好EditPlus。开始 菜单栏 选择 工具 -> 配置自定义工具 组名:python 命令:d:\*…

基于51单片机的称重电子秤proteus仿真设计

一、设计背景 随着微电子技术的应用,市场上使用的传统称重工具已经满足不了人们的要求。为了改变传统称重工具在使用上存在的问题&#xff0c;在本设计中将智能化、自动化、人性化用在了电子秤重的控制系统中。本系统主要由单片机来控制&#xff0c;测量物体重量部分使用称重传…