MIGO 行项目屏幕自定义字段增强示例
  RdEelXhuDp09 2023年12月07日 15 0


  • 继上次抬头屏幕增强(MIGO 抬头屏幕自定义字段增强示例),本文章演示行项目增强示例
  • 实现思路参考标准 MB_MIGO_BADI 增强示例类:CL_EXM_IM_MB_MIGO_BADI

1.创建增强数据表 & 增强结构

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

2.创建增强屏幕

  • 新建Function Group,定义全局变量(本章继续使用抬头增强的Function Group
  • MIGO 行项目屏幕自定义字段增强示例_IT

  • 创建数据处理函数
  • ZMM_I_GET_DATA(行项目:从屏幕获取数据)
  • ZMM_I_SET_DATA(行项目:输出数据到屏幕)
  • ZMM_UPDATE_DATA(抬头/行项目:更新数据到数据库 )

MIGO 行项目屏幕自定义字段增强示例_IT_02

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

3.创建行项目增强子屏幕9002

  • 创建屏幕
  • 创建屏幕字段
  • 创建PBO处理逻辑

4.创建BADI实施

  • SE19 创建BADI实施
  • MIGO 行项目屏幕自定义字段增强示例_ABAP_03


  • MIGO 行项目屏幕自定义字段增强示例_IT_04

  • 新增实施类属性
  • MIGO 行项目屏幕自定义字段增强示例_MIGO_05

  • 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_I_MIGO01.

     CHECK I_LINE_ID IS NOT INITIAL.
     E_CPROG = 'SAPLZMM_G_001'(001).   "'SAPL + 'FG Name'
     E_DYNNR = '9002'.
     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_I_MIGO01,
         WA_ITEM_OLD TYPE ZSMM_I_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_I_MIGO01,
         WA_ITEM_OLD      TYPE ZSMM_I_MIGO01,
         WA_ZTMM_I_MIGO01 TYPE ZTMM_I_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_I_MIGO01
       INTO WA_ZTMM_I_MIGO01
       WHERE MBLNR = CS_GOITEM-MBLNR
         AND MJAHR = CS_GOITEM-MJAHR
         AND ZEILE = CS_GOITEM-ZEILE.

       IF WA_ZTMM_I_MIGO01 IS NOT INITIAL.
         MOVE-CORRESPONDING WA_ZTMM_I_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 ZZUID ZZCTY 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 GLOBAL_COUNTER = I_LINE_ID.
  ENDMETHOD.
  • IF_EX_MB_MIGO_BADI~RESET
METHOD IF_EX_MB_MIGO_BADI~RESET.
   CLEAR: IT_ITEM,
          G_NO_INPUT,
          G_CANCEL,
          G_LINE_ID.
 ENDMETHOD.
  • IF_EX_MB_MIGO_BADI~POST_DOCUMENT
METHOD IF_EX_MB_MIGO_BADI~POST_DOCUMENT.

    DATA: WA_ZTMM_I_MIGO01 TYPE ZTMM_I_MIGO01,
          LT_ZTMM_I_MIGO01 TYPE TABLE OF ZTMM_I_MIGO01,
          WA_ITEM          TYPE ZSMM_I_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_I_MIGO01.
          MOVE-CORRESPONDING WA_MSEG TO WA_ZTMM_I_MIGO01.
          APPEND WA_ZTMM_I_MIGO01 TO LT_ZTMM_I_MIGO01.
        ENDIF.
      ENDLOOP.
      CALL FUNCTION 'ZMM_UPDATE_DATA' IN UPDATE TASK
        TABLES
          IT_ITEM = LT_ZTMM_I_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.验证效果

MIGO 行项目屏幕自定义字段增强示例_ABAP_06

MIGO 行项目屏幕自定义字段增强示例_MIGO_07


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年12月07日 0

暂无评论

推荐阅读
RdEelXhuDp09