SAP MIRO屏幕增强
一、首先设置业务加载项
业务加载项名称: BADI_FDCB_SUBBAS04
由于该BADI只允许实例化一次,所以要先去SXC_EXIT找一下业务加载项名称
然后去SXC_ATTR看下有没有激活,激活了就取消激活下
二、代码
业务加载项里面的代码
代码就和示例类CL_EXM_IM_BADI_FDCB_SUBBAS04里面一样
method IF_EX_BADI_FDCB_SUBBAS04~PUT_DATA_TO_SCREEN_OBJECT.
me->IF_EX_BADI_FDCB_SUBBAS04~invfo = im_invfo.
endmethod.
method IF_EX_BADI_FDCB_SUBBAS04~GET_DATA_FROM_SCREEN_OBJECT .
* fill export parameters from interface attributes
ex_invfo = me->if_ex_badi_fdcb_subbas04~invfo.
endmethod.
然后去写一下自己调用的程序名和屏幕号
需要在TOP里面声明代码
FUNCTION-POOL zmiro_ench. "MESSAGE-ID ..
TABLES:invfo,rbkp.
DATA:o_badi_fdcb_subbas04 TYPE REF TO if_ex_badi_fdcb_subbas04.
* INCLUDE LZMIRO_ENCHD... " Local class definition
CONSTANTS:ex_name_FDCB_SUBBAS04 TYPE exit_def VALUE 'BADI_FDCB_SUBBAS04'.
如果要在RBKP里面增加字段,需要在INVFO、RBFP、RBKP_V以及ACMM_VENDOR_COMP增加字段
PBO 如下
*----------------------------------------------------------------------*
***INCLUDE LZMIRO_ENCHO01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module GET_INSTANCE OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE get_instance OUTPUT.
IF o_badi_fdcb_subbas04 IS INITIAL.
CALL METHOD cl_exithandler=>get_instance_for_subscreens
CHANGING
instance = o_badi_fdcb_subbas04
EXCEPTIONS
no_reference = 1
no_interface_reference = 2
no_exit_interface = 3
data_incons_in_exit_managem = 4
class_not_implement_interface = 5
OTHERS = 6.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF.
* object created ?
CHECK NOT o_badi_fdcb_subbas04 IS INITIAL.
* get data from main screen
CALL METHOD o_badi_fdcb_subbas04->get_data_from_screen_object
IMPORTING
ex_invfo = invfo.
* rbkp-zcaus = invfo-zcaus.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module SCREEN_MODIFY OUTPUT
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
MODULE screen_modify OUTPUT.
LOOP AT SCREEN.
* CASE sy-tcode.
* WHEN
** 'FB60' OR 'FB65' OR 'FB70' OR 'FB75'
* 'MIRO' OR 'MIR4' OR 'MIR7'.
* screen-input = 1.
* WHEN OTHERS.
screen-input = 1.
* ENDCASE.
MODIFY SCREEN.
ENDLOOP.
ENDMODULE.
PAI 如下
*----------------------------------------------------------------------*
***INCLUDE LZMIRO_ENCHI01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Module RECEIVE_ACTUAL_DATA INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE receive_actual_data INPUT.
** object created ?
CHECK NOT o_badi_fdcb_subbas04 IS INITIAL.
* get data from main screen
CALL METHOD o_badi_fdcb_subbas04->get_data_from_screen_object
IMPORTING
ex_invfo = invfo.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_9001 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE user_command_9001 INPUT.
CHECK NOT o_badi_fdcb_subbas04 IS INITIAL.
* invfo-zcaus = rbkp-zcaus.
* put data to main screen
CALL METHOD o_badi_fdcb_subbas04->put_data_to_screen_object
EXPORTING
im_invfo = invfo.
ENDMODULE.
*&---------------------------------------------------------------------*
*& Module FRM_F4_9001_FOR_ZCAUS INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE frm_f4_9001_for_zcaus INPUT.
*-----定义搜索帮助内表结构
TYPES: BEGIN OF ty_zterm1,
zterm TYPE t052u-zterm,
ztagg TYPE t052u-ztagg,
text1 TYPE t052u-text1,
END OF ty_zterm1.
DATA: gt_zterm1 TYPE TABLE OF ty_zterm1,
gw_zterm1 TYPE ty_zterm1.
DATA: gt_return_tab TYPE TABLE OF DDSHRETVAL,
gw_return_tab TYPE DDSHRETVAL.
REFRESH:gt_return_tab.
CLEAR gw_return_tab.
*-----获取搜索帮助所需数据
SELECT zterm ztagg text1 INTO TABLE gt_zterm1 FROM t052u WHERE spras = sy-langu.
*-----添加搜索帮助
CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST'
EXPORTING
retfield = 'ZCAUS'
dynpprog = sy-repid
dynpnr = sy-dynnr
dynprofield = 'INVFO-ZCAUS'
value_org = 'S'
callback_program = sy-repid
TABLES
value_tab = gt_zterm1
return_tab = gt_return_tab
EXCEPTIONS
parameter_error = 1
no_values_found = 2
OTHERS = 3.
IF gt_return_tab IS NOT INITIAL.
READ TABLE gt_return_tab INTO gw_return_tab INDEX 1.
IF sy-subrc = 0.
INVFO-ZCAUS = gw_return_tab-fieldval.
ENDIF.
ENDIF.
ENDMODULE.
屏幕逻辑流如下
PROCESS BEFORE OUTPUT.
* MODULE STATUS_9001.
*
MODULE get_instance.
MODULE screen_modify.
PROCESS AFTER INPUT.
MODULE receive_actual_data.
FIELD invfo-zcaus
MODULE user_command_9001.
三、屏幕如下
四、结果图
引用
https://answers.sap.com/questions/7343156/in-miro-custom-fields-data-getting-cleared-while-u.html
post SAP-Garson
原文链接:https://blog.csdn.net/stringformat/article/details/90899572文章来自于网络,如果侵犯了您的权益,请联系站长删除!