MIGO行项目屏幕增强

MIGO行项目屏幕增强
一、增强描述
  1. 由于在事务码MIGO中存在的字段中没有能够满足客户需求的字段,所以需要在事务码MIGO的屏幕中添加一个新的页签用来保存物料凭证中行项目增加的字段。

  2. 通过查找BADI的程序ZDEMO_BADI,输入参数MIGO后,得到对应BADI为MB_MIGO_BADI。

    在这里插入图片描述

二、增强步骤
  1. 创建增强数据表和增强结构

    • 创建增强数据存储表。

      在这里插入图片描述

    • 创建增强数据结构

      在这里插入图片描述

    • 创建增强数据表类型结构。

      在这里插入图片描述

  2. 创建增强屏幕

    • 新建Function Group,定义全局变量。

      在这里插入图片描述

    • 创建函数ZMM_I_GET_DATA(行项目:从屏幕获取数据)

      在这里插入图片描述

      在这里插入图片描述

    • 创建函数ZMM_I_SET_DATA(行项目:输出数据到屏幕)

      在这里插入图片描述

      在这里插入图片描述

    • 创建函数ZMM_UPDATE_DATA(抬头/行项目:更新数据到数据库 )

      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

    • 创建函数ZMM_SET_GOACTION(抬头/行项目:设置屏幕Action Code)

      在这里插入图片描述

      在这里插入图片描述

  3. 创建行项目子屏幕9000

    • 创建屏幕9000.

      在这里插入图片描述

    • 创建屏幕字段根据自建表的增强字段命名。

      在这里插入图片描述

    • 给屏幕创建PBO事件。

      在这里插入图片描述

  4. 创建BADI实施

    • 使用事务码SE19创建BADI实施,最后一步建立空类。

      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

    • 新增实施类属性

      在这里插入图片描述

    • IF_EX_MB_MIGO_BADI~INIT

      METHOD if_ex_mb_migo_badi~init.
        APPEND gf_class_id TO ct_init.
      ENDMETHOD.
      
    • IF_EX_MB_MIGO_BADI~PBO_DETAIL

      METHOD if_ex_mb_migo_badi~pbo_detail.
          IF gf_class_id = i_class_id.
            DATA: wa_item TYPE zsmm_migo01.
      
            CHECK i_line_id IS NOT INITIAL.
            e_cprog = 'SAPLZMM_MIGO01'(001).   "'SAPL + 'FG Name'
            e_dynnr = '9000'.
            e_heading = 'Item Addition1'.
            g_line_id = i_line_id.
            READ TABLE it_item INTO wa_item WITH KEY line_id = i_line_id.
      
            CALL FUNCTION 'ZMM_I_SET_DATA'
              EXPORTING
                i_input = wa_item.
          ENDIF.
      
        ENDMETHOD.
      
    • IF_EX_MB_MIGO_BADI~PAI_DETAIL

        METHOD if_ex_mb_migo_badi~pai_detail.
          DATA: wa_item_new TYPE zsmm_migo01,
                wa_item_old TYPE zsmm_migo01.
      
          CHECK i_line_id <> 0.
      
          CALL FUNCTION 'ZMM_I_GET_DATA'
            IMPORTING
              e_output = wa_item_new.
      
          READ TABLE it_item INTO wa_item_old WITH  KEY line_id = i_line_id.
          IF wa_item_new <> wa_item_old.
            e_force_change = 'X'.
          ENDIF.
        ENDMETHOD.
      
    • IF_EX_MB_MIGO_BADI~LINE_MODIFY

      METHOD if_ex_mb_migo_badi~line_modify.
          DATA: wa_item_new    TYPE zsmm_migo01,
                wa_item_old    TYPE zsmm_migo01,
                wa_ztmm_migo01 TYPE ztmm_migo01,
                l_subrc        TYPE sy-subrc.
      
          READ TABLE it_item INTO wa_item_old WITH KEY line_id = i_line_id.
          l_subrc = sy-subrc.
          IF sy-subrc <> 0.
            IF cs_goitem-mblnr IS NOT INITIAL
              AND cs_goitem-mjahr IS NOT INITIAL
              AND cs_goitem-zeile IS NOT INITIAL.
      
              SELECT SINGLE * FROM ztmm_migo01
              INTO wa_ztmm_migo01
              WHERE mblnr = cs_goitem-mblnr
                AND mjahr = cs_goitem-mjahr
                AND zeile = cs_goitem-zeile.
      
              IF wa_ztmm_migo01 IS NOT INITIAL.
                MOVE-CORRESPONDING wa_ztmm_migo01 TO wa_item_new.
              ENDIF.
            ENDIF.
      
            wa_item_new-line_id = i_line_id.
            INSERT wa_item_new INTO TABLE it_item.
          ELSE.
            CHECK g_line_id = i_line_id.
            CALL FUNCTION 'ZMM_I_GET_DATA'
              IMPORTING
                e_output = wa_item_new.
      
            MODIFY it_item FROM wa_item_new TRANSPORTING ztest01 ztest02 WHERE line_id = i_line_id.
          ENDIF.
        ENDMETHOD.
      
    • IF_EX_MB_MIGO_BADI~LINE_DELETE

      METHOD if_ex_mb_migo_badi~line_delete.
          DELETE it_item WHERE line_id = i_line_id.
      ENDMETHOD.
      
    • IF_EX_MB_MIGO_BADI~RESET

       CLEAR: it_item,
               g_no_input,
               g_cancel,
               g_line_id.
      
    • IF_EX_MB_MIGO_BADI~POST_DOCUMENT

        METHOD if_ex_mb_migo_badi~post_document.
          DATA: wa_ztmm_migo01 TYPE ztmm_migo01,
                lt_ztmm_migo01 TYPE TABLE OF ztmm_migo01,
                wa_item        TYPE zsmm_migo01,
                wa_mseg        TYPE mseg.
      
          IF it_item IS NOT INITIAL.
            LOOP AT it_item INTO wa_item.
              IF g_cancel IS INITIAL.
                READ TABLE it_mseg INTO wa_mseg
                  WITH KEY line_id = wa_item-line_id.
              ELSE.
                READ TABLE it_mseg INTO wa_mseg
                  WITH KEY smbln = wa_item-mblnr
                           smblp = wa_item-zeile
                           sjahr = wa_item-mjahr.
              ENDIF.
              IF sy-subrc IS INITIAL.
                MOVE-CORRESPONDING wa_item TO wa_ztmm_migo01.
                MOVE-CORRESPONDING wa_mseg TO wa_ztmm_migo01.
                APPEND wa_ztmm_migo01 TO lt_ztmm_migo01.
              ENDIF.
            ENDLOOP.
            CALL FUNCTION 'ZMM_UPDATE_DATA' IN UPDATE TASK
              TABLES
                it_item = lt_ztmm_migo01.
          ENDIF.
        ENDMETHOD.
      
    • IF_EX_MB_MIGO_BADI~MODE_SET

        METHOD if_ex_mb_migo_badi~mode_set.
          " i_action:
          " A01 = Goods receipt
          " A02 = Return delivery
          " A03 = Cancellation
          " A04 = Display
          " A05 = Release GR bl.st.
          " A06 = Subsequent deliv.
          " A07 = Goods issue
          "
          " i_refdoc:
          " R01 = Purchase order
          " R02 = Material document
          " R03 = Delivery note
          " R04 = Inbound delivery
          " R05 = Outbound delivery
          " R06 = Transport
          " R07 = Transport ID code
          " R08 = Order
          " R09 = Reservation
          " R10 = Other GR
      *------------------------------------------------*
          IF i_action = 'A03' OR i_action = 'A04' .
            g_no_input = abap_true.
          ENDIF.
          IF i_action = 'A03'.
            g_cancel = abap_true.
          ENDIF.
      
          CALL FUNCTION 'ZMM_SET_GOACTION'
            EXPORTING
              i_goaction = i_action.
        ENDMETHOD.
      
  5. 验证效果

    在这里插入图片描述

相关推荐

  1. MIMO

    2024-04-24 10:04:03       54 阅读
  2. qt命令编译项目

    2024-04-24 10:04:03       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-24 10:04:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-24 10:04:03       101 阅读
  3. 在Django里面运行非项目文件

    2024-04-24 10:04:03       82 阅读
  4. Python语言-面向对象

    2024-04-24 10:04:03       91 阅读

热门阅读

  1. ES6 - 语法糖

    2024-04-24 10:04:03       31 阅读
  2. linux问题处理汇总(基于centos7.9)

    2024-04-24 10:04:03       30 阅读
  3. hibernate5 根据xml获取ddl sql语句

    2024-04-24 10:04:03       29 阅读
  4. C# 计算两个坐标点直接的距离

    2024-04-24 10:04:03       39 阅读
  5. 深度学习-01

    2024-04-24 10:04:03       37 阅读
  6. VaR模型

    2024-04-24 10:04:03       38 阅读
  7. Flutter Get国际化和实现原理简析

    2024-04-24 10:04:03       32 阅读
  8. AI小知识----什么是RAG

    2024-04-24 10:04:03       36 阅读