ABAP MIGO增强实施MB_MIGO_BADI
这是一个有异议的需求,具体需求如下:
在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.......不知道有没有漏,将就用吧,不行在百度
posted on 2021-10-31 22:21 seven1314pp 阅读(3549) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本