SAP MIRO屏幕增强

本文档介绍了如何在SAP中进行MIRO屏幕的增强,包括设置业务加载项BADI_FDCB_SUBBAS04,代码实现,PBO和PAI的编写,以及屏幕逻辑流的调整,以实现自定义字段的添加和数据处理。通过这个过程,可以理解SAP增强机制并提升MIRO事务处理的灵活性。

一、首先设置业务加载项

业务加载项名称: BADI_FDCB_SUBBAS04

由于该BADI只允许实例化一次,所以要先去SXC_EXIT找一下业务加载项名称
SXC_EXIT表内容

然后去SXC_ATTR看下有没有激活,激活了就取消激活下
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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值