加载中…
个人资料
SAP刘梦
SAP刘梦
  • 博客等级:
  • 博客积分:0
  • 博客访问:13,971
  • 关注人气:96
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【转载】ME21N采购订单新增页签增强

(2024-02-01 16:44:36)
标签:

abap

db

sap

工具

分类: 增强
【转载】ME21N采购订单新增页签增强

1、实现效果

根据客制化需求,要在采购订单中新增大量字段,所以要在界面上添加一个单独的页签。效果如下:

【转载】ME21N采购订单新增页签增强

2、增强实现

2.1、增强结构

 

因为是在抬头上边添加,所以增强CI_EKKODB结构

【转载】ME21N采购订单新增页签增强

2.2、函数组

 

仿照Function Group MEPOBADIEX建一个Function Group

【转载】ME21N采购订单新增页签增强

【转载】ME21N采购订单新增页签增强

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. 

【转载】ME21N采购订单新增页签增强

method IF_EX_ME_GUI_PO_CUST~MAP_DYNPRO_FIELDS. FIELD-SYMBOLS: LIKE LINE OF ch_mapping. LOOP AT ch_mapping ASSIGNING . CASE -fieldname. WHEN 'ZEJFL'. -metafield = mmmfd_cust_01. "抬头 * WHEN 'ZHEAD02'. -metafield = mmmfd_cust_02. * WHEN 'ZZ001'. -metafield = mmmfd_cust_03. "明细 * WHEN 'ZZ005'. -metafield = mmmfd_cust_04. * "自定义字段 * WHEN 'ZFIELD3'.-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: LIKE LINE OF CH_FIELDSELECTION.


  DEFINE SET_INPUT.

    READ TABLE ch_fieldselection ASSIGNING WITH TABLE KEY metafield = &1.

    IF sy-subrc = 0.

      IF im_header->is_changeable( ) = mmpur_yes.

        -fieldstatus = '+'."'-'代表hidden, '+'或'.'表示editable, '*'代表display

      ELSE.

        -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中,激活即可。







0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有