這是一個有異議的需求,具體需求如下:
在MIGO增強一個頁簽,通過頁簽里的數據+行項次的數據創建資產卡片,然后會寫回MIGO行項次的指定欄位。
思路如下:
1.通過MIGO的增強MB_MIGO_BADI實現增加一個頁簽的功能
2.通過增強的方法LINE_MODIFY去創建資產卡片並回寫數據
(有異議出在,創建資產卡片需要調用BAPI:BAPI_FIXEDASSET_CREATE1,並執行COMMIT,這樣存着影響MIGO功能的潛在風險)
這邊使用異步調用,希望能解決潛在危險!!!!!!!
具體操作如下:
1.創建表,結構,表類型
此結構用於創建資產卡片的函數調用
2.創建函數組(里面包括6個FUNCTION和一個屏幕):
ZCREATE_ASSET :因為要異步調用,所以需要勾上遠程啟用的模塊
源代碼如下:
FUNCTION ZCREATE_ASSET. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(I_INPUT) TYPE ZDMIGO_ITEM_ASSET *" EXPORTING *" VALUE(E_ANLN1) TYPE BF_ANLN1 *" VALUE(E_ANLN2) TYPE BF_ANLN2 *" VALUE(E_MSG) TYPE BAPI_MSG *"---------------------------------------------------------------------- DATA:ls_zdmigo_item_asset TYPE zdmigo_item_asset. ls_zdmigo_item_asset = I_INPUT. DATA: ls_key LIKE bapi1022_key, ls_generaldata LIKE bapi1022_feglg001, ls_timedependentdata LIKE bapi1022_feglg003, ls_allocations LIKE bapi1022_feglg004. DATA: ls_generaldatax LIKE bapi1022_feglg001x, ls_timedependentdatax LIKE bapi1022_feglg003x, ls_allocationsx LIKE bapi1022_feglg004x. DATA: ls_return LIKE bapiret2. DATA: lv_asset TYPE bapi1022_1-assetmaino. DATA: lv_sub_asset TYPE bapi1022_1-assetsubno. DATA: lt_depreciationareas TYPE STANDARD TABLE OF bapi1022_dep_areas, ls_depreciationareas LIKE LINE OF lt_depreciationareas, lt_depreciationareasx TYPE STANDARD TABLE OF bapi1022_dep_areasx, ls_depreciationareasx LIKE LINE OF lt_depreciationareasx. CLEAR: ls_key, ls_generaldata, ls_timedependentdata, ls_allocations. CLEAR: ls_generaldatax, ls_timedependentdatax, ls_allocationsx. CLEAR:ls_return. CLEAR:lv_asset, lv_sub_asset. CLEAR:lt_depreciationareas[], ls_depreciationareas , lt_depreciationareasx[], ls_depreciationareasx. ls_key-companycode = ls_zdmigo_item_asset-bukrs. "公司代碼 ls_generaldata-assetclass = ls_zdmigo_item_asset-anlkl. "資產分類 ls_generaldatax-assetclass = 'X'. ls_generaldata-descript = ls_zdmigo_item_asset-txt50. "資產描述 ls_generaldatax-descript = 'X'. ls_generaldata-main_descript = ls_zdmigo_item_asset-ztxt50."資產主號說明 BASE_UOM ls_generaldatax-main_descript = 'X'. ls_generaldata-base_uom = ls_zdmigo_item_asset-meins."單位 ls_generaldatax-base_uom = 'X'. ls_timedependentdata-costcenter = ls_zdmigo_item_asset-kostl."成本中心 ls_timedependentdatax-costcenter = 'X'. ls_timedependentdata-resp_cctr = ls_zdmigo_item_asset-kostlv."責任成本中心 ls_timedependentdatax-resp_cctr = 'X'. ls_allocations-assetsupno = ls_zdmigo_item_asset-anlue. "資產特技號 ls_allocationsx-assetsupno = 'X'. ls_depreciationareas-area = '01'."實際折舊范圍 ls_depreciationareas-ulife_yrs = ls_zdmigo_item_asset-ndjar."計划年使用期 ls_depreciationareas-ulife_prds = ls_zdmigo_item_asset-ndper."計划使用期間 APPEND ls_depreciationareas TO lt_depreciationareas. ls_depreciationareasx-area = '01'."實際折舊范圍 ls_depreciationareasx-ulife_yrs = 'X'."計划年使用期 ls_depreciationareasx-ulife_prds = 'X'."計划使用期間 APPEND ls_depreciationareasx TO lt_depreciationareasx. CALL FUNCTION 'BAPI_FIXEDASSET_CREATE1' EXPORTING key = ls_key generaldata = ls_generaldata generaldatax = ls_generaldatax timedependentdata = ls_timedependentdata timedependentdatax = ls_timedependentdatax allocations = ls_allocations allocationsx = ls_allocationsx IMPORTING asset = lv_asset subnumber = lv_sub_asset return = ls_return TABLES depreciationareas = lt_depreciationareas[] depreciationareasx = lt_depreciationareasx[]. IF lv_asset IS NOT INITIAL. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. E_ANLN1 = lv_asset. E_ANLN2 = lv_sub_asset. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. E_MSG = ls_return-message. ENDIF. CLEAR : lv_sub_asset, lv_asset. ENDFUNCTION.
ZMIGO_BADI_ITEM_CREATE_ASSET
源代碼如下:
FUNCTION ZMIGO_BADI_ITEM_CREATE_ASSET. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" REFERENCE(I_INPUT) TYPE ZDMIGO_ITEM_ASSET *" EXPORTING *" REFERENCE(E_ANLN1) TYPE BF_ANLN1 *" REFERENCE(E_ANLN2) TYPE BF_ANLN2 *" REFERENCE(E_MSG) TYPE BAPI_MSG *"---------------------------------------------------------------------- DATA:name(10). DATA:r_str TYPE string. * 獲取隨機字符串 CALL FUNCTION 'GENERAL_GET_RANDOM_STRING' EXPORTING number_chars = '10' IMPORTING RANDOM_STRING = r_str. name = r_str. DATA:ls_zdmigo_item_asset TYPE zdmigo_item_asset. ls_zdmigo_item_asset = I_INPUT.
"如下這段遠程調用一定要手動敲,不要復制,不然可能數據沒辦法傳入的異常
"NEW TASK的name我使用隨機產生的名字,防止報錯,詳細見:https://www.cnblogs.com/seven1314pp/p/15485187.html CALL FUNCTION 'ZCREATE_ASSET' STARTING NEW TASK name PERFORMING create_asset_ret ON END OF TASK EXPORTING I_INPUT = ls_zdmigo_item_asset. WAIT UNTIL rcv_jobs = 'X'. e_anln1 = t_bf_anln1. e_anln2 = t_bf_anln2. e_msg = t_msg. ENDFUNCTION.
ZMIGO_BADI_ITEM_GET_DATA
源代碼如下:
FUNCTION ZMIGO_BADI_ITEM_GET_DATA. *"---------------------------------------------------------------------- *"*"本地接口: *" EXPORTING *" REFERENCE(E_OUTPUT) TYPE ZDMIGO_ITEM *"---------------------------------------------------------------------- MOVE-CORRESPONDING zdmigo_item TO e_output. ENDFUNCTION.
ZMIGO_BADI_ITEM_SET_DATA
源代碼如下:
FUNCTION ZMIGO_BADI_ITEM_SET_DATA. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" REFERENCE(I_INPUT) TYPE ZDMIGO_ITEM *"---------------------------------------------------------------------- MOVE-CORRESPONDING i_input TO zdmigo_item. ENDFUNCTION.
ZMIGO_BADI_ITEM_SET_GOACTION
源代碼如下:
FUNCTION ZMIGO_BADI_ITEM_SET_GOACTION. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" REFERENCE(I_GOACTION) TYPE GOACTION *" REFERENCE(I_REFDOC) TYPE REFDOC *"---------------------------------------------------------------------- g_goaction = i_goaction. g_refdoc = i_refdoc. ENDFUNCTION.
ZMIGO_BADI_ITEM_UPDATE_DATA
源代碼如下:
FUNCTION ZMIGO_BADI_ITEM_UPDATE_DATA. *"---------------------------------------------------------------------- *"*"本地接口: *" TABLES *" T_ZTMIGO_ITEM STRUCTURE ZDMIGO_ITEM *"---------------------------------------------------------------------- DATA: ls_ztmigo_item TYPE ztmigo_item, lt_ztmigo_item LIKE STANDARD TABLE OF ls_ztmigo_item. IF t_ztmigo_item[] IS NOT INITIAL. LOOP AT t_ztmigo_item. CLEAR: ls_ztmigo_item. MOVE-CORRESPONDING t_ztmigo_item TO ls_ztmigo_item. APPEND ls_ztmigo_item TO lt_ztmigo_item. ENDLOOP. MODIFY ztmigo_item FROM TABLE lt_ztmigo_item. ENDIF. ENDFUNCTION.
屏幕9001
包含文件:LZMIGOF01
*----------------------------------------------------------------------* ***INCLUDE LZMIGOF01. *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Form SET_VRM_VALUE *&---------------------------------------------------------------------* * 資產特級號 下來選項 ZDMIGO_ITEM-KTOGR *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM set_vrm_value . DATA: fname TYPE vrm_id VALUE 'ZDMIGO_ITEM-KTOGR', it_vrm TYPE vrm_values, wa_vrm LIKE LINE OF it_vrm. SELECT ktogr AS key ktgrtx AS text INTO CORRESPONDING FIELDS OF TABLE it_vrm FROM t095t WHERE ktogr IN ( '17020001', '17020002' ) AND spras = '1'. CALL FUNCTION 'VRM_SET_VALUES' EXPORTING id = fname values = it_vrm EXCEPTIONS ID_ILLEGAL_NAME = 1 OTHERS = 2 . IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Module ZKOSTL_HELP INPUT *&---------------------------------------------------------------------* * 成本中心搜索幫助 *----------------------------------------------------------------------* MODULE zkostl_help INPUT. DATA: BEGIN OF it_kostl OCCURS 0, kostl TYPE kostl, verak TYPE verak, END OF it_kostl. FIELD-SYMBOLS <fs_werks> TYPE any. FIELD-SYMBOLS <fs_prctr> TYPE any. ASSIGN ('(SAPLMIGO)GOITEM-WERKS') TO <fs_werks>. "工廠 ASSIGN ('(SAPLMIGO)GOITEM-PRCTR') TO <fs_prctr>. "利潤中心 DATA:ls_bukrs TYPE bukrs. DATA:ls_prctr TYPE prctr. ls_bukrs = <fs_werks>. ls_prctr = <fs_prctr>. SELECT kostl verak INTO CORRESPONDING FIELDS OF TABLE it_kostl FROM csks WHERE kokrs = 'LSH0' AND bukrs = ls_bukrs. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'KOSTL' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'ZDMIGO_ITEM-KOSTL' value_org = 'S' TABLES value_tab = it_kostl EXCEPTIONS parameter_error = 1 no_values_found = 2 others = 3 . IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. ENDMODULE. *&---------------------------------------------------------------------* *& Module ZKOSTLV_HELP INPUT *&---------------------------------------------------------------------* * 責任成本中心搜索幫助 *----------------------------------------------------------------------* MODULE zkostlv_help INPUT. DATA: BEGIN OF it_kostlv OCCURS 0, kostl TYPE kostl, verak TYPE verak, END OF it_kostlv. FIELD-SYMBOLS <fs_werksv> TYPE any. FIELD-SYMBOLS <fs_prctrv> TYPE any. ASSIGN ('(SAPLMIGO)GOITEM-WERKS') TO <fs_werksv>. "工廠 ASSIGN ('(SAPLMIGO)GOITEM-PRCTR') TO <fs_prctrv>. "利潤中心 DATA:ls_bukrsv TYPE bukrs. DATA:ls_prctrv TYPE prctr. ls_bukrsv = <fs_werksv>. ls_prctrv = <fs_prctrv>. SELECT kostl verak INTO CORRESPONDING FIELDS OF TABLE it_kostlv FROM csks WHERE kokrs = 'LSH0' AND bukrs = ls_bukrsv. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'KOSTL' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'ZDMIGO_ITEM-KOSTLV' value_org = 'S' TABLES value_tab = it_kostlv EXCEPTIONS parameter_error = 1 no_values_found = 2 others = 3 . IF sy-subrc <> 0. * Implement suitable error handling here ENDIF. ENDMODULE. FORM create_asset_ret USING name. RECEIVE RESULTS FROM FUNCTION 'ZCREATE_ASSET' IMPORTING e_anln1 = t_bf_anln1 e_anln2 = t_bf_anln2 e_msg = t_msg EXCEPTIONS system_failure = 1 communication_failure = 2. IF sy-subrc = 0. rcv_jobs = 'X'. ENDIF. ENDFORM. *&---------------------------------------------------------------------* *& Module USER_COMMAND_9001 INPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE USER_COMMAND_9001 INPUT. DATA:ls_migo_mi TYPE char8. CLEAR:ls_migo_mi. CASE sy-ucomm. WHEN 'Z_CREATE'. ls_migo_mi = 'MIGO_MI'. EXPORT p1 = ls_migo_mi TO MEMORY ID 'MIGOMI'. "使用傳內存的方式把數據先存起來 WHEN OTHERS. ENDCASE. ENDMODULE.
包含文件:LZMIGOO01
*----------------------------------------------------------------------* ***INCLUDE LZMIGOO01. *----------------------------------------------------------------------* *&---------------------------------------------------------------------* *& Module STATUS_9001 OUTPUT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* MODULE status_9001 OUTPUT. * SET PF-STATUS 'xxxxxxxx'. * SET TITLEBAR 'xxx'. FIELD-SYMBOLS <fs_bwart> TYPE any. ASSIGN ('(SAPLMIGO)GODEFAULT_TV-BWART') TO <fs_bwart>. DATA:ls_bwart TYPE bwart. ls_bwart = <fs_bwart>. IF ls_bwart = '241'. "241移動類型可輸入 FIELD-SYMBOLS <fs_lgort> TYPE any. ASSIGN ('(SAPLMIGO)GOITEM-LGORT') TO <fs_lgort>. IF <fs_lgort> = '0001' OR <fs_lgort> = '0002' OR <fs_lgort> = '0003'. "指定倉儲位置可輸入 LOOP AT SCREEN. IF screen-group1 = 'G1'. screen-input = 1. MODIFY SCREEN. ENDIF. ENDLOOP. ELSE. * FIELD-SYMBOLS <fs_anln1> TYPE any. * ASSIGN ('(SAPLMIGO)GOITEM-ANLN1') TO <fs_anln1>. * IF <fs_anln1> IS INITIAL. "資產為空可輸入 * LOOP AT SCREEN. * IF screen-group1 = 'G1'. * screen-input = 1. * MODIFY SCREEN. * ENDIF. * ENDLOOP. * ELSE. * LOOP AT SCREEN. * IF screen-group1 = 'G1'. * screen-input = 0. * MODIFY SCREEN. * ENDIF. * ENDLOOP. * ENDIF. LOOP AT SCREEN. IF screen-group1 = 'G1'. screen-input = 0. MODIFY SCREEN. ENDIF. ENDLOOP. ENDIF. ELSE. LOOP AT SCREEN. IF screen-group1 = 'G1'. screen-input = 0. * CASE g_goaction. * WHEN 'A04' OR 'A07'. "顯示或者發貨 * WHEN OTHERS. * ENDCASE. MODIFY SCREEN. ENDIF. ENDLOOP. ENDIF. PERFORM set_vrm_value. ENDMODULE.
包含文件:LZMIGOTOP
FUNCTION-POOL ZMIGO. "MESSAGE-ID .. * INCLUDE LZMIGOD... " Local class definition TABLES:ztmigo_item, zdmigo_item. DATA:g_goaction TYPE goaction. DATA:g_refdoc TYPE refdoc. DATA:g_action TYPE action. DATA:rcv_jobs TYPE c. DATA: t_bf_anln1 TYPE bf_anln1, t_bf_anln2 TYPE bf_anln2. DATA: t_msg TYPE bapi_msg.
包含文件:LZMIGOUXX
***************************************************************** * THIS FILE IS GENERATED BY THE FUNCTION LIBRARY. * * NEVER CHANGE IT MANUALLY, PLEASE! * ***************************************************************** INCLUDE LZMIGOU01. "ZMIGO_BADI_ITEM_GET_DATA INCLUDE LZMIGOU02. "ZMIGO_BADI_ITEM_SET_DATA INCLUDE LZMIGOU03. "ZMIGO_BADI_ITEM_UPDATE_DATA INCLUDE LZMIGOU04. "ZMIGO_BADI_ITEM_SET_GOACTION INCLUDE LZMIGOU05. "ZMIGO_BADI_ITEM_CREATE_ASSET INCLUDE LZMIGOU06. "ZCREATE_ASSET
3.針對BADI:MB_MIGO_BADI 創建新的實施 ZMB_MIGO_BADI
類/接口ZCL_IM_MB_MIGO_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. DATA:ls_zdmigo_item TYPE zdmigo_item. * 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 gf_class_id = i_class_id. * Show screen only if there is an item CHECK i_line_id IS NOT INITIAL. * External subscreen: * The content of global field G_NO_INPUT (set in method MODE_SET) will * influence the number of external subsreen: FIELD-SYMBOLS <fs_bwart_pbo> TYPE any. ASSIGN ('(SAPLMIGO)GODEFAULT_TV-BWART') TO <fs_bwart_pbo>. CHECK <fs_bwart_pbo> = '241'. e_cprog = 'SAPLZMIGO'. e_dynnr = '9001'. e_heading = '移動類型241專用增強頁簽'. * ENDIF. * Read data READ TABLE it_migo_item INTO ls_zdmigo_item WITH KEY global_counter = i_line_id. IF sy-subrc = 0. * Export data to function group (for display on subscreen) CALL FUNCTION 'ZMIGO_BADI_ITEM_SET_DATA' EXPORTING i_input = ls_zdmigo_item. ENDIF. endmethod.
IF_EX_MB_MIGO_BADI~PAI_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_zdmigo_item TYPE zdmigo_item. DATA: ls_zdmigo_item_screen TYPE zdmigo_item, mblnr TYPE mblnr. * Only if a line exists CHECK i_line_id <> 0. FIELD-SYMBOLS <fs_bwart_pai> TYPE any. ASSIGN ('(SAPLMIGO)GODEFAULT_TV-BWART') TO <fs_bwart_pai>. CHECK <fs_bwart_pai> = '241'. * Get data from external screen CALL FUNCTION 'ZMIGO_BADI_ITEM_GET_DATA' IMPORTING e_output = ls_zdmigo_item_screen. * Compare new data with old data READ TABLE it_migo_item INTO ls_zdmigo_item WITH KEY global_counter = i_line_id. IF sy-subrc = 0. ls_zdmigo_item_screen-global_counter = i_line_id. IF ls_zdmigo_item <> ls_zdmigo_item_screen. * If there were any changes, it's obligatory to force MIGO to trigger * method LINE_MODIFY. e_force_change = 'X'. ENDIF. ENDIF. endmethod.
IF_EX_MB_MIGO_BADI~LINE_MODIFY
method IF_EX_MB_MIGO_BADI~LINE_MODIFY. DATA: ls_ztmigo_item TYPE ztmigo_item. DATA: ls_zdmigo_item TYPE zdmigo_item. DATA: ls_zdmigo_item_screen TYPE zdmigo_item. FIELD-SYMBOLS: <fs_migo_item> LIKE ls_zdmigo_item. DATA: l_del TYPE sy-tabix. FIELD-SYMBOLS <fs_bwart_mf> TYPE any. ASSIGN ('(SAPLMIGO)GODEFAULT_TV-BWART') TO <fs_bwart_mf>. CHECK <fs_bwart_mf> = '241'. CHECK i_line_id <> 0. READ TABLE it_migo_item WITH KEY global_counter = i_line_id TRANSPORTING NO FIELDS. IF sy-subrc = 0. * *************取屏幕中現有數據 CLEAR: ls_zdmigo_item_screen. CALL FUNCTION 'ZMIGO_BADI_ITEM_GET_DATA' IMPORTING e_output = ls_zdmigo_item_screen. IF ls_zdmigo_item_screen-global_counter = i_line_id. * *************BADI全局變量中已存在 DELETE it_migo_item WHERE global_counter = i_line_id. MOVE-CORRESPONDING cs_goitem TO ls_zdmigo_item. ls_zdmigo_item-ktogr = ls_zdmigo_item_screen-ktogr. ls_zdmigo_item-kostl = ls_zdmigo_item_screen-kostl. ls_zdmigo_item-kostlv = ls_zdmigo_item_screen-kostlv. * ls_zdmigo_item-ndjar = ls_zdmigo_item_screen-ndjar. * ls_zdmigo_item-ndper = ls_zdmigo_item_screen-ndper. DATA:ls_migo_mi TYPE char8. CLEAR:ls_migo_mi. IMPORT p1 = ls_migo_mi FROM MEMORY ID 'MIGOMI'. "從內存把數據拿出來 ******* 進行資產卡片的創建 IF cs_goitem-anln1 IS INITIAL AND cs_goitem-anln2 IS INITIAL AND cs_goitem-bwart = '241' AND ls_migo_mi = 'MIGO_MI'. IF ls_zdmigo_item_screen-ktogr <> space AND ls_zdmigo_item_screen-kostl <> space AND ls_zdmigo_item_screen-kostlv <> space. DATA:i_zdmigo_item_asset TYPE zdmigo_item_asset. DATA:e_bf_anln1 TYPE bf_anln1, e_bf_anln2 TYPE bf_anln2, e_bapi_msg TYPE bapi_msg. FREE MEMORY ID 'MIGOMI'. "釋放內存 CLEAR:i_zdmigo_item_asset. CLEAR:e_bf_anln1, e_bf_anln2, e_bapi_msg. i_zdmigo_item_asset-anlkl = '00001702'. "資產分類 i_zdmigo_item_asset-bukrs = cs_goitem-werks. "工廠 i_zdmigo_item_asset-txt50 = cs_goitem-matnr && cs_goitem-maktx."物料號+描述 i_zdmigo_item_asset-ztxt50 = cs_goitem-matnr && cs_goitem-maktx."物料號+描述 i_zdmigo_item_asset-meins = cs_goitem-meins. "單位 i_zdmigo_item_asset-anlue = ls_zdmigo_item_screen-ktogr. i_zdmigo_item_asset-kostl = ls_zdmigo_item_screen-kostl. i_zdmigo_item_asset-kostlv = ls_zdmigo_item_screen-kostlv. * i_zdmigo_item_asset-ndjar = ls_zdmigo_item_screen-ndjar. * i_zdmigo_item_asset-ndper = ls_zdmigo_item_screen-ndper. CALL FUNCTION 'ZMIGO_BADI_ITEM_CREATE_ASSET' EXPORTING i_input = i_zdmigo_item_asset IMPORTING E_ANLN1 = e_bf_anln1 E_ANLN2 = e_bf_anln2 E_MSG = e_bapi_msg. IF e_bf_anln1 IS NOT INITIAL. cs_goitem-anln1 = e_bf_anln1. cs_goitem-anln2 = e_bf_anln2. CONCATENATE e_bf_anln1 '-' e_bf_anln2 INTO ls_zdmigo_item-assets. ELSE. MESSAGE e_bapi_msg TYPE 'S' DISPLAY LIKE 'E'. ENDIF. ENDIF. ENDIF. APPEND ls_zdmigo_item TO it_migo_item. ENDIF. ELSE. * *************BADI全局變量中不存在 IF NOT cs_goitem-mblnr IS INITIAL AND NOT cs_goitem-mjahr IS INITIAL AND NOT cs_goitem-zeile IS INITIAL. * *************從自定義表中取數 CLEAR: ls_ztmigo_item. SELECT SINGLE * FROM ztmigo_item INTO CORRESPONDING FIELDS OF ls_ztmigo_item WHERE mblnr EQ cs_goitem-mblnr AND mjahr EQ cs_goitem-mjahr AND zeile EQ cs_goitem-zeile. IF sy-subrc = 0. MOVE-CORRESPONDING ls_ztmigo_item TO ls_zdmigo_item. ELSE. MOVE-CORRESPONDING cs_goitem TO ls_zdmigo_item. ENDIF. ELSE. MOVE-CORRESPONDING cs_goitem TO ls_zdmigo_item. ENDIF. ls_zdmigo_item-global_counter = i_line_id. APPEND ls_zdmigo_item TO it_migo_item. ENDIF. endmethod.
后面不異步,直接新建一個LUW創建資產卡片:
IF_EX_MB_MIGO_BADI~LINE_DELETE
method IF_EX_MB_MIGO_BADI~LINE_DELETE. DELETE it_migo_item WHERE global_counter = i_line_id. endmethod.
IF_EX_MB_MIGO_BADI~RESET
method IF_EX_MB_MIGO_BADI~RESET. CLEAR it_migo_item. CLEAR: g_no_input, g_cancel. endmethod.
IF_EX_MB_MIGO_BADI~POST_DOCUMENT
method IF_EX_MB_MIGO_BADI~POST_DOCUMENT. DATA:ls_mseg TYPE mseg. DATA:ls_zdmigo_item TYPE zdmigo_item. LOOP AT it_migo_item INTO ls_zdmigo_item. ls_zdmigo_item-mandt = sy-mandt. ls_zdmigo_item-mblnr = is_mkpf-mblnr. ls_zdmigo_item-mjahr = is_mkpf-mjahr. MODIFY it_migo_item FROM ls_zdmigo_item TRANSPORTING mandt mblnr mjahr. ENDLOOP. READ TABLE it_mseg INTO ls_mseg INDEX 1. * 只有移動類型為241的做記錄 IF ls_mseg-bwart = '241'. CALL FUNCTION 'ZMIGO_BADI_ITEM_UPDATE_DATA' TABLES t_ztmigo_item = it_migo_item. ENDIF. endmethod.
IF_EX_MB_MIGO_BADI~MODE_SET
method IF_EX_MB_MIGO_BADI~MODE_SET. * ACTION and REFDOC will discribe the mode of transaction MIGO. * ---------------------------------------------------------------------- * 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 *----------------------------------------------------------------------- * In case of 'DISPLAY' the global field G_NO_INPUT will be set to 'X'. * The result is that a different external subscreen will be choosen in * method PBO_DETAIL. * IF i_action = 'A04' OR i_action = 'A03'. * g_no_input = 'X'. * ENDIF. ** In case of 'CANCEL' the global field G_CANCEL will be set to 'X'. ** The result is that in method POST_DOCUMENT a different handling is ** used * IF i_action = 'A03'. * g_cancel = 'X'. * ENDIF. CALL FUNCTION 'ZMIGO_BADI_ITEM_SET_GOACTION' EXPORTING i_goaction = i_action i_refdoc = i_refdoc. endmethod.
最后效果圖:
OK.......不知道有沒有漏,將就用吧,不行在百度