SAP增强 BADI屏幕增强实例(MIGO增加分页签)
最終效果:以下根據系統實例做的
(需要注意第4步中的UPDATE函數配置)
?
1、SE11建立數據表,主要是用于存放附加的數據;
MANDT???? MANDT?? CLNT??????? 3?????? 0?????? 客戶端
MBLNR???? MBLNR??? CHAR?????? 10??? 0?????? 物料憑證編號
MJAHR????? MJAHR???? NUMC???? 4?????? 0?????? 物料憑證年度
ZEILE? ???? MBLPO??? NUMC???? 4?????? 0?????? 物料憑證中的項目
BADI_ERFMG?? ERFMG??? QUAN????? 13??? 3?????? 以輸入單位計的數量
BADI_ERFME??? ERFME???? UNIT??????? 3?????? 0?????? 條目單位
2、建立結構,在屏幕數據交換時使用
3、建立表類型
設置關鍵字段:
4、SE80建立函數組
注意:ZJIM_BADI_EXAMPLE_UPDATE_DATA
創建屏幕1000,
設計格式,插入附加字段
創建function: ZJIM_BADI_EXAMPLE_GET_DATA
*"----------------------------------------------------------------------
*"*"Local?interface:
*"??EXPORTING
*"?????REFERENCE(ES_MIGO_BADI_SCREEN_FIELDS)?TYPE
*"????????ZJIM_BADI_EXAMPLE_SCREEN_FIELD
*"----------------------------------------------------------------------
*?Get?all?data?from?fields?of?external?screen
*?First?move?all?customer-fields
??MOVE-CORRESPONDING?zjim_badi_exampl?TO?es_migo_badi_screen_fields.
*?Second?move?all?GOITEM-fields?(displayed?on?external?screen)
?
?
function: ZJIM_BADI_EXAMPLE_PUT_DATA
*"----------------------------------------------------------------------
*"*"Local?interface:
*"??IMPORTING
*"?????REFERENCE(IS_MIGO_BADI_SCREEN_FIELDS)?TYPE
*"????????ZJIM_BADI_EXAMPLE_SCREEN_FIELD
*"----------------------------------------------------------------------
*?Put?all?data?from?fields?to?external?screen
*?First?fill?all?customer-fields
??MOVE-CORRESPONDING?is_migo_badi_screen_fields?TO?ZJIM_badi_exampl.
*?second?fill?all?GOITEM-fields?(displayed?on?external?screen)
?
?
?
function: ZJIM_BADI_EXAMPLE_UPDATE_DATA
*"----------------------------------------------------------------------
*"*"Update?function?module:
*"
*"*"Local?interface:
*"??TABLES
*"??????IT_MIGO_BADI_EXAMPLE?STRUCTURE??ZJIM_BADI_EXAMPL
*"----------------------------------------------------------------------
*?Databse?update:
??INSERT?zjim_BADI_EXAMPL?FROM?TABLE?IT_MIGO_BADI_EXAMPLE.
??IF?sy-subrc?<>?0.
????MESSAGE?a398(00)?WITH?'Error?update?MIGO_BADI_EXAMPL'.
??ENDIF.
INCLUDE : LZJIM_BADI001TOP
TABLES?:?Zjim_badi_exampl.
到這里增強的準備工作就做完了,下面開始創建實現:
5、SE19創建實現
?
6、創建執行類ZCL_IM_JIM_MIGO_BADI,激活ZJIM_MIGO_BADI??
?SE80? class
SE37 查看函數
以上界面:SE19
雙擊類
維護類屬性
GT_EXTDATA 用于數據交換,類型為ZJIM_TY_T_EXTDATA表類型,
7、激活以下方法并維護:
method?IF_EX_MB_MIGO_BADI~INIT.
*?Regristration?of?BAdI-Implementation:
*?Append?class?attribute?GF_CLASS_ID?(='MIGO_BADI_IMPLEMENTATION1')?to
*?regristration?table.
??APPEND?gf_class_id?TO?ct_init.
endmethod.
?
METHOD?IF_EX_MB_MIGO_BADI~PBO_DETAIL?.
??DATA:?ls_extdata?TYPE?zjim_badi_example_screen_field.
*?This?check?is?obligatory,?otherwise?the?program?flow?is?incorrect
*?(If?there?would?be?more?than?one?implementation?of?BAdI?MB_MIGO_BADI,
*??only?one?subscreen?would?be?displayed).
??CHECK?i_class_id?=?gf_class_id.
*?Show?screen?only?if?there?is?an?item
??CHECK?i_line_id?<>?0.
*?External?subscreen:
*?The?content?of?global?field?G_NO_INPUT?(set?in?method?MODE_SET)?will
*?influence?the?number?of?external?subsreen:
??if?g_no_input?is?initial.
????e_cprog???=?'SAPLZJIM_BADI001'(006).? "程序名為定義的函數組的名稱前加“SAPL“。
????e_dynnr???=?'1000'.?????????????????????"External?fields:?Input
????e_heading?=?'ZJIM'(004). "顯示標簽的名稱
??endif.
*?Set?G_LINE_ID?(=?line_id?of?item?displayed?on?detail-tabstrip)
??g_line_id?=?i_line_id.
*?Read?data
??READ?TABLE?gt_extdata?INTO?ls_extdata
?????WITH?TABLE?KEY?line_id?=?i_line_id.
*?Export?data?to?function?group?(for?display?on?subscreen)
??CALL?FUNCTION?'ZJIM_BADI_EXAMPLE_PUT_DATA'
????EXPORTING
??????is_migo_badi_screen_fields?=?ls_extdata.
ENDMETHOD.????????????????????"IF_EX_MB_MIGO_BADI~PBO_DETAIL
?
?
METHOD?IF_EX_MB_MIGO_BADI~PAI_DETAIL?.
*-----------------------------------------------------------------------
*?Changing?parameter?E_FORCE_CHANGE?can?be?set?to?'X'.?In?this?case
*?method?LINE_MODIFY?is?called.
*?ATTENTION:
*?DO?NOT?SET?parameter?E_FORCE_CHANGE?=?'?'.?In?this?case?you?might
*?overwrite?parameter?E_FORCE_CHANGE?of?another?BAdI?implementation.
*-----------------------------------------------------------------------
??DATA:?ls_extdata_new?TYPE?zjim_badi_example_screen_field,
????????ls_extdata_old?TYPE?zjim_badi_example_screen_field.
*?Only?if?a?line?exists
??CHECK?i_line_id?<>?0.
*?Get?data?from?external?screen
??CALL?FUNCTION?'ZJIM_BADI_EXAMPLE_GET_DATA'
????IMPORTING
??????es_migo_badi_screen_fields?=?ls_extdata_new.
*?Compare?new?data?with?old?data
??READ?TABLE?gt_extdata?INTO?ls_extdata_old
?????WITH?TABLE?KEY?line_id?=?i_line_id.
??ls_extdata_new-line_id?=?i_line_id.
??IF?ls_extdata_old?<>?ls_extdata_new.
*???If?there?were?any?changes,?it's?obligatory?to?force?MIGO?to?trigger
*???method?LINE_MODIFY.
????e_force_change?=?'X'.
??ENDIF.
ENDMETHOD.????????????????????"IF_EX_MB_MIGO_BADI~PAI_DETAIL
?
METHOD?IF_EX_MB_MIGO_BADI~LINE_MODIFY?.
??DATA:?ls_extdata_old??????TYPE?zjim_badi_example_screen_field,
????????ls_extdata_new??????TYPE?zjim_badi_example_screen_field,
????????ls_migo_badi_exampl?TYPE?zjim_badi_exampl,
????????l_subrc?????????????TYPE?sy-subrc.
*?Get?external?data?from?internal?table:
??READ?TABLE?gt_extdata?INTO?ls_extdata_old
????WITH?TABLE?KEY?line_id?=?i_line_id.
??l_subrc?=?sy-subrc.
*?Update?data?in?internal?table:
??IF?l_subrc?<>?0.
*???Line?is?new:?If?GOITEM?has?a?reference?to?a?material?document,
*????????????????the?already?existing?external?data?can?be?read.
???IF?NOT?cs_goitem-mblnr?IS?INITIAL?AND?NOT?cs_goitem-mjahr?IS?INITIAL
??????AND?NOT?cs_goitem-zeile?IS?INITIAL.
??????SELECT?SINGLE?*?FROM?zjim_badi_exampl?INTO?ls_migo_badi_exampl
?????????????WHERE?mblnr?=?cs_goitem-mblnr
???????????????AND?mjahr?=?cs_goitem-mjahr
???????????????AND?zeile?=?cs_goitem-zeile.
??????IF?sy-subrc?=?0.
????????MOVE-CORRESPONDING?ls_migo_badi_exampl?TO?ls_extdata_new.
??????ENDIF.
????ENDIF.
*????ls_extdata_new-sgtxt??=?cs_goitem-sgtxt.
????ls_extdata_new-line_id?=?i_line_id.
????INSERT?ls_extdata_new?INTO?TABLE?gt_extdata.
??ELSE.
*???Line?exists:?Get?external?data?entered?on?BAdI-subscreeen,?but?only
*????????????????if?line_modify?was?called?for?the?item?displayed?in?the
*????????????????'detail?tabstrip'.
????check?g_line_id?=?i_line_id.
????CALL?FUNCTION?'ZJIM_BADI_EXAMPLE_GET_DATA'
??????IMPORTING
????????es_migo_badi_screen_fields?=?ls_extdata_new.
????ls_extdata_new-line_id?=?i_line_id.
*????if?ls_extdata_new-sgtxt?<>?ls_extdata_old-sgtxt.
**?????Field?was?changed?on?external?screen
*??????cs_goitem-sgtxt?=?ls_extdata_new-sgtxt.
*????else.
**?????Take?data?from?GOITEM
*??????ls_extdata_new-sgtxt?=?cs_goitem-sgtxt.
*????endif.
????MODIFY?TABLE?gt_extdata?FROM?ls_extdata_new.
??ENDIF.
ENDMETHOD.????????????????????"IF_EX_MB_MIGO_BADI~LINE_MODIFY
?
METHOD?IF_EX_MB_MIGO_BADI~LINE_DELETE?.
??DELETE?TABLE?gt_extdata?WITH?TABLE?KEY?line_id?=?i_line_id.
ENDMETHOD.????????????????????"IF_EX_MB_MIGO_BADI~LINE_DELETE
?
METHOD?IF_EX_MB_MIGO_BADI~POST_DOCUMENT?.
??DATA:?ls_migo_badi_example?TYPE?ZJIM_badi_exampl,
????????lt_migo_badi_example?TYPE?TABLE?OF?zjim_badi_exampl,
????????ls_extdata?TYPE?zjim_badi_example_screen_field,
????????ls_xmseg???TYPE?mseg.
??FIELD-SYMBOLS:?<gt_extdata>?TYPE?migo_badi_example_screen_field.
*?Transaction?MIGO?will?now?post?a?material?document.
*?Any?errors?here?MUST?be?issued?as?A-message?(better:?X-message)
*?Copy?data?from?material?document?into?internal?table
??LOOP?AT?gt_extdata?INTO?ls_extdata.
????IF?g_cancel?IS?INITIAL.
??????READ?TABLE?it_mseg?INTO?ls_xmseg
?????????WITH?KEY?line_id?=?ls_extdata-line_id.
????ELSE.
??????READ?TABLE?it_mseg?INTO?ls_xmseg
?????????WITH?KEY?smbln?=?ls_extdata-mblnr
??????????????????smblp?=?ls_extdata-zeile
??????????????????sjahr?=?ls_extdata-mjahr.
????ENDIF.
????IF?sy-subrc?IS?INITIAL.
??????MOVE-CORRESPONDING?ls_extdata?TO?ls_migo_badi_example.
??????MOVE-CORRESPONDING?ls_xmseg???TO?ls_migo_badi_example.
??????APPEND?ls_migo_badi_example?TO?lt_migo_badi_example.
????ENDIF.
??ENDLOOP.
*?The?data?from?external?detail?screen?can?be?saved?now:
??CHECK?gt_extdata?IS?NOT?INITIAL.
??CALL?FUNCTION?'ZJIM_BADI_EXAMPLE_UPDATE_DATA'?IN?UPDATE?TASK
????TABLES
??????it_migo_badi_example?=?lt_migo_badi_example.
*?The?data?from?external?header?screen?can?be?saved?now:
*??MOVE-CORRESPONDING?is_mkpf?TO?gs_exdata_header.
*??CALL?FUNCTION?'MIGO_BADI_EXAMPLE_UPDATE_HEAD'?IN?UPDATE?TASK
*????EXPORTING
*??????is_migo_badi_header_fields?=?gs_exdata_header.
ENDMETHOD.????????????????????"IF_EX_MB_MIGO_BADI~POST_DOCUMENT
?
METHOD?IF_EX_MB_MIGO_BADI~RESET?.
*?Clear?all?internal?data:
??CLEAR:?gt_extdata,
?????????g_no_input,
?????????gs_exdata_header,
?????????g_cancel,
?????????g_line_id.
ENDMETHOD.????????????????????"IF_EX_MB_MIGO_BADI~RESET
激活所有,運行T_code MIGO 就可以看到第一個圖的效果了。
總結
以上是生活随笔為你收集整理的SAP增强 BADI屏幕增强实例(MIGO增加分页签)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Apple移动设备处理器指令集 armv
- 下一篇: 机器翻译市场需求调研报告