SAP 采购订单行项目屏幕增强(BADI)
導(dǎo)語:前面寫了一個(gè)采購訂單抬頭增強(qiáng),用SMOD的方式實(shí)現(xiàn)的👉【文章鏈接】,感覺還是比較簡單,就嘗試了一下用BADI實(shí)現(xiàn)行項(xiàng)目的屏幕增強(qiáng),實(shí)現(xiàn)起來比較復(fù)雜,有些坎坷,下面分享一下實(shí)現(xiàn)過程。
👉【增強(qiáng)記錄清單…】
前言:SAP給提供了標(biāo)準(zhǔn)的函數(shù)組【MEPOBADIEX】,以及實(shí)施類【CL_EXM_IM_ME_GUI_PO_CUST】,可以參考函數(shù)組進(jìn)行實(shí)現(xiàn),但是他給的函數(shù)組過于全面,導(dǎo)致在實(shí)現(xiàn)過程中被稍稍誤導(dǎo)。
【MEPOBADIEX】函數(shù)組中有8個(gè)函數(shù)組,分別針對增強(qiáng)在EKPO里的字段,以及通過自建表實(shí)現(xiàn)的增強(qiáng)字段,本文實(shí)現(xiàn)的過程是增強(qiáng)在EKPO里的字段,所以只需要參考其中以下兩個(gè)函數(shù)即可:
MEPOBADIEX_POP、MEPOBADIEX_PUSH
如果是自建表實(shí)現(xiàn)增強(qiáng),就需要八個(gè)函數(shù)都用了,然后參考實(shí)施類進(jìn)行增強(qiáng)。
一、增強(qiáng)EKPO表
增強(qiáng)SAP預(yù)留的屏幕結(jié)構(gòu)【CI_EKPODB】
二、創(chuàng)建函數(shù)組
1、函數(shù)【ZFM_EKPO_POP】
FUNCTION zfm_ekpo_pop. *"---------------------------------------------------------------------- *"*"本地接口: *" EXPORTING *" REFERENCE(EX_DYNP_DATA) TYPE CI_EKPODB *"----------------------------------------------------------------------* get dynpro dataex_dynp_data = ci_ekpodb.ENDFUNCTION.2、函數(shù)【ZFM_EKPO_PUSH】
FUNCTION ZFM_EKPO_PUSH. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" REFERENCE(IM_DYNP_DATA) TYPE CI_EKPODB *"----------------------------------------------------------------------* set dynpro dataci_ekpodb = im_dynp_data.ENDFUNCTION.3、創(chuàng)建屏幕
4、TOP定義
在函數(shù)公共定義里加入如下代碼
FUNCTION-POOL zfg_poitem_enh. "MESSAGE-ID ..* INCLUDE LZFG_POITEM_ENHD... " Local class definition* dynpro output structureTABLES: ci_ekpodb.* definitions required for dynpro/framework integration DATA: ok-code TYPE sy-ucomm. INCLUDE lmeviewsf01.5、PBO、PAI
PROCESS BEFORE OUTPUT.MODULE event_pbo.PROCESS AFTER INPUT.MODULE event_pai.三、實(shí)施BADI----ME_GUI_PO_CUST
1、屬性定義
2、SUBSCRIBE
METHOD if_ex_me_gui_po_cust~subscribe.DATA: lw_subscribes LIKE LINE OF re_subscribers.CHECK im_application = 'PO'.CHECK im_element = 'ITEM'.CLEAR re_subscribers[].lw_subscribes-name = subscreen1.lw_subscribes-dynpro = '1000'.lw_subscribes-program = 'SAPLZFG_POITEM_ENH'.lw_subscribes-struct_name = 'CI_EKPODB'.lw_subscribes-label = '測試增強(qiáng)頁簽'.lw_subscribes-position = '30'. "頁簽的位置,盡量大一點(diǎn),確保在最后一個(gè)頁簽lw_subscribes-height = '7'.INSERT lw_subscribes INTO TABLE re_subscribers.ENDMETHOD.3、MAP_DYNPRO_FIELDS
這里的mmmfd_cust字段SAP只給預(yù)留了10個(gè),貌似只能增強(qiáng)十個(gè)字段。
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 'TEST_FIELD1'. <mapping>-metafield = mmmfd_cust_01.WHEN 'TEST_FIELD2'. <mapping>-metafield = mmmfd_cust_02.WHEN 'TEST_FIELD3'. <mapping>-metafield = mmmfd_cust_03.ENDCASE.ENDLOOP.ENDMETHOD.4、TRANSPORT_FROM_MODEL
METHOD if_ex_me_gui_po_cust~transport_from_model.DATA: l_item TYPE REF TO if_purchase_order_item_mm,ls_mepoitem TYPE mepoitem,ls_customer TYPE ci_ekpodb.IF im_name = subscreen1.mmpur_dynamic_cast l_item im_model.CHECK NOT l_item IS INITIAL. * transport standard fieldsls_mepoitem = l_item->get_data( )."增強(qiáng)字段ls_customer-test_field1 = ls_mepoitem-test_field1.ls_customer-test_field2 = ls_mepoitem-test_field2.ls_customer-test_field3 = ls_mepoitem-test_field3.* store info for later useMOVE-CORRESPONDING ls_customer TO dynp_data_pbo.ENDIF.ENDMETHOD.5、TRANSPORT_TO_DYNP
METHOD if_ex_me_gui_po_cust~transport_to_dynp.IF im_name = subscreen1.CALL FUNCTION 'ZFM_EKPO_PUSH'EXPORTINGim_dynp_data = dynp_data_pbo.ENDIF.ENDMETHOD.6、TRANSPORT_FROM_DYNP
METHOD if_ex_me_gui_po_cust~transport_from_dynp.IF im_name = subscreen1.CALL FUNCTION 'ZFM_EKPO_POP'IMPORTINGex_dynp_data = dynp_data_pai.ENDIF.IF dynp_data_pai <> dynp_data_pbo. * something has changed therefor we have to notify the framework * to transport data to the modelre_changed = mmpur_yes.ENDIF.ENDMETHOD.7、TRANSPORT_TO_MODEL
METHOD if_ex_me_gui_po_cust~transport_to_model.DATA: l_item TYPE REF TO if_purchase_order_item_mm,ls_mepoitem TYPE mepoitem. *--------------------------------------------------------------------* * data have to be transported to business logic *--------------------------------------------------------------------*IF im_name = subscreen1.* is it an item? im_model can be header or item.mmpur_dynamic_cast l_item im_model.CHECK NOT l_item IS INITIAL.ls_mepoitem = l_item->get_data( ). * standard fields changed?IF dynp_data_pbo <> dynp_data_pai. ** update standard fields"把增強(qiáng)更新賦給mepoitem字段ls_mepoitem-test_field1 = dynp_data_pai-test_field1.ls_mepoitem-test_field2 = dynp_data_pai-test_field2.ls_mepoitem-test_field3 = dynp_data_pai-test_field3.CALL METHOD l_item->set_data( ls_mepoitem ).ENDIF.ENDIF.ENDMETHOD.四、實(shí)施BADI----ME_PROCESS_PO_CUST
實(shí)現(xiàn)了前幾步以后,我們就可以看到【ME23N】里邊已經(jīng)增強(qiáng)好屏幕了,但是在【ME21N/ME22N】里面還是沒有增強(qiáng)的屏幕,就需要繼續(xù)實(shí)施BADI才可以。
1、FIELDSELECTION_ITEM
如果是抬頭就是【FIELDSELECTION_HEADER】
前面BADI第二個(gè)方法增強(qiáng)了三個(gè)字段這里調(diào)整為顯示
'-'代表hidden、 '+‘或’.‘表示editable,、’*'代表display
五、效果展示
作者:小飛豬豬豬豬豬豬豬–CSDN
總結(jié)
以上是生活随笔為你收集整理的SAP 采购订单行项目屏幕增强(BADI)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win8的cmd运行命令大全
- 下一篇: 内网漫游之SOCKS代理大结局