【ABAP】ME55双击跳转MD04增强

最近收到了一个需求,大致的要求是在标准报表ME55的ALV短文本列双击后跳转到MD04的详情。刚开始没有找到增强点想用间接的办法实现,在ME55上增加一列,展示想看到的内容,最后由于需要展示的内容太多,该方案被舍弃。

经过几天的断点追踪,找到了实现这个需求的切入点。在 ME55 报表中双击物料可以跳转到 MM03 查看采购信息,而输入 /h 并回车可以进入断点模式。通过断点一步一步地跟踪,我们发现了一个非常关键的方法,即 cl_gui_cfw=>dispatch。这个方法用于处理 SAP GUI 事务中的事件,它是一个全局共享的对象,通过调用此方法,可以将事件派发给合适的处理程序进行处理。

image-20230330103928669

具体来说,当用户在SAP GUI事务中进行操作(比如点击按钮、输入数据等),事件会被发送到SAP GUI前端控制器。然后,前端控制器通过调用cl_gui_cfw=>dispatch方法将事件传递给后端的事件处理程序。事件处理程序可以是标准SAP程序,也可以是自定义的ABAP对象,它们负责根据事件类型进行相应的处理,例如显示弹出窗口、执行逻辑处理等。

总之,cl_gui_cfw=>dispatch方法是SAP GUI事务处理中不可或缺的一部分,它帮助实现了前端和后端之间的事件通信,使得用户在SAP GUI中进行操作时,能够得到正确的响应和处理。

image-20230330104325134

继续跟进,会发现一个熟悉的方法handle_double_click,用来处理双击事件

image-20230330104844912

里面会有一个user_command,用来具体处理事件,依次进入perform里面,查看对应的form

image-20230330105033550

image-20230330105152532

下图就是最关键的地方,me->my_environment,里面有众多的消费者,通过dispatch分发

image-20230330105435203

image-20230330105738765

上图中的第8行,就是自定义的功能池。需要在包含文件LMEREPI05中隐式增强下,插入代码

image-20230330142058503

    CREATE OBJECT lo_env TYPE lcl_env_TXZ01.
    INSERT lo_env INTO TABLE me->my_environment.

​继续进入到lo_env->execute方法中,可以看到lcl_env_matnr实现类,这里就是最终实现跳转到MM03的逻辑。我们可以此模仿matnr 的双击跳转逻辑。包含文件LMEREPI31创建隐式增强,插入跳转到MD04的逻辑。

image-20230330142151288

ENHANCEMENT 2  ZMME001.    "active version
*---------------------------------------------------------------------*
*       CLASS lcl_env_matnr IMPLEMENTATION
*---------------------------------------------------------------------*
  CLASS lcl_env_txz01 IMPLEMENTATION.

    METHOD lif_environment~execute.

      DATA: l_werks TYPE ekpo-werks.

      FIELD-SYMBOLS: <ematn> TYPE ekpo-matnr,
      <werks> TYPE ekpo-werks.

      re_success = cl_mmpur_constants=>no.

      CHECK im_fieldname EQ 'TXZ01'.
      ASSIGN COMPONENT 'MATNR' OF STRUCTURE im_line TO <ematn>.
      valid_line <ematn>.
      ASSIGN COMPONENT 'WERKS' OF STRUCTURE im_line TO <werks>.
      IF sy-subrc IS INITIAL.
        l_werks = <werks>.
      ENDIF.

      re_success = cl_mmpur_constants=>yes.

    SET PARAMETER ID 'MAT' FIELD <ematn>.
    SET PARAMETER ID 'WRK' FIELD l_werks.
    CALL TRANSACTION 'MD04' AND SKIP FIRST SCREEN.

    ENDMETHOD.                    "lif_environment~execute
  ENDCLASS.                    "lcl_env_matnr IMPLEMENTATION
ENDENHANCEMENT.

最后,在包含文件LMEREPD31进行类定义,到此就实现了ME55双击短文本跳转到MD04的需求了。

image-20230330142248909

CLASS lcl_env_TXZ01 DEFINITION.

    PUBLIC SECTION.

    INTERFACES lif_environment.

 ENDCLASS.                    "lcl_env_TXZ01 DEFINITION
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程卓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值