abap中如何通过双击事件调用事务码

比如,通过普通屏幕,使用定制控制,显示了一个alv表格,表格中列举的信息包括物料编号,物料名称等信息

现在希望双击物料编号,直接调用事务码MM03显示物料信息,用哪个函数呢?

创建过程如下:

一、. 绘制初始屏幕

使用SE80进入,创建一个report

基础的代码 包括:

1.定义(用于存储被显示的数据的)内表

这个内表,需要在后面的代码中被反复赋值,形成最终需要的内容

SELECT *** INTO CORRESPONDING FIELDS OF TABLE ITAB_XXX

LOOP AT ITAB_XXX  然后赋值

这个内表赋值完成后,会被后面的普通屏幕使用,作为普通屏幕中alv表格的数据源

2. 创建普通屏幕0100

ABAP的屏幕基本分两种:选择屏幕 和 普通屏幕

选择屏幕 是默认的,系统分配的标识是1000 是整个程序的第一个屏幕,用于获取最初的输入之类的

普通屏幕是开发者自己创建的,可以自己命名,通常命名为0100 0200之类的

普通屏幕的创建 往往要在SE80中创建三个东西  屏幕  GUI状态 GUI标题

创建的过程还是参考之前的帖子吧

3.定义变量

这部分变量中,有一部分比较重要的是,屏幕元素对应的全局变量

比如:

你在普通屏幕上创建了一个单选框 radiobutton

那么你的代码判断这两个radiobutton被选中与否,就必须通过这个屏幕元素对应的 全局变量,来判断

过程如下:

你先使用SE80中的屏幕制作器 创建一个屏幕元素 名为TESTRB 显示文本为测试RB

然后保存,退出屏幕绘制器,返回SE80,如下图,双击 “屏幕”中的0100  查看它的 屏幕元素

如上图,在元素清单中,列举了所有你在screen painter中创建的各种元素

我们刚刚创建的TESTRB 是一个RADIOBUTTON 包括两个部分,1.文字2.RB本身

此时我们在元素清单上双击TESTRB 会弹出对话框

点击是

创建这个全局变量,然后你就发现SE80已经自动帮你在代码中创建了这个变量TESTRB

那么在SE80中,你需要使用这个全局变量判断Screen Painter中的RB元素,是否被选中,就可以了。

4.定义与普通屏幕显示定制控制有关的变量

5.定义Parameters和Select-option

这部分变量,用于显示,程序一开始执行就马上在默认屏幕1000上显示出几个输入框,这几个输入框,就是Parameters和Select-option

上述MATNR就是一个

SELECT-OPTIONS:MATNR FOR MARA-MATNR OBLIGATORY.

6. 为START-OF-SELECTION 和END-OF-SELECTION 添加代码 如下图

程序的执行过程是  :

1.显示选择屏幕

2.执行START-OF-SELECTION中的代码

3.执行END-OF-SELECTION 中的代码

上述代码中 在FRM_PRINT中最后,调用了普通屏幕100

二、为  用于显示alv的普通屏幕 添加代码

添加代码的意思就是让普通屏幕生效

上一步的最后,执行代码CALL SCREEN 100. 就已经让系统把代码的执行,交给了普通屏幕100

对于一个普通屏幕来说,它的执行分三个部分

1.PBO

2.显示屏幕

3.PAI

之前写的比较琐碎,还是直接写重点吧

双击alv中的数据,然后调用某一个事务码。

要创建类,添加方法,响应双击事件

1.  定义类

CLASS LCL_EVENT_RECEIVER100 DEFINITION.

  PUBLIC SECTION.
    METHODS:
    HANDLE_DOUBLE_CLICK
        FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
            IMPORTING E_ROW E_COLUMN.
  PRIVATE SECTION.

ENDCLASS.               "LCL_EVENT_RECEIVER100

2.实现类

CLASS LCL_EVENT_RECEIVER100 IMPLEMENTATION.

 METHOD HANDLE_DOUBLE_CLICK.

    DATA: WT100 LIKE ITAB_SHOW.

    READ TABLE ITAB_SHOW[] INDEX E_ROW-INDEX INTO WT100.

    IF E_COLUMN-FIELDNAME = 'NAME1' AND WT100-KORL = 'KUNNR'.

        SET PARAMETER ID 'KUN' FIELD WT100-KUNNR.
        CALL TRANSACTION 'XD03' AND SKIP FIRST SCREEN.

    ELSEIF E_COLUMN-FIELDNAME = 'NAME1' AND WT100-KORL = 'LIFNR'.

        SET PARAMETER ID 'LIF' FIELD WT100-KUNNR.
        CALL TRANSACTION 'XK03' AND SKIP FIRST SCREEN.

    ELSE.

        EXIT.

    ENDIF.
  ENDMETHOD.
 ENDCLASS.

上述代码,CALL TRANSACTION 方法就是在调用 已经存在的其他事务码

时间: 2024-10-24 22:21:26

abap中如何通过双击事件调用事务码的相关文章

ABAP中的同步和异步调用

ABAP 的 CALL FUNCTION 类似于 Java/.NET 中的本地或远程方法调用.CALL FUNCTION 可以分为四种:1. Synchronous RFC (sRFC) - 同步调用2. Asynchronous RFC (aRFC) - 异步调用3. Transactional RFC (tRFC) - 保证 Transaction 数据一致性的调用4. Queued RFC (qRFC) - 用一个对列序列化的 tRFC本文很好地介绍了前面两种,也是最常用的两种.SAP H

WFP中 RadGridView 的双击事件

<telerik:RadGridView.Resources>                <Style x:Key="{x:Type telerik:GridViewRow}" TargetType="{x:Type telerik:GridViewRow}">                    <EventSetter Event="MouseDoubleClick" Handler="MsgFl

jquery 单击和双击事件冲突解决方案

本人需要给bootstrap-treeview的树节点添加双击事件.而该插件原生方法中不带双击事件功能.该插件的节点默认绑定的单击事件,由此引起了单击事件和双击事件的冲突. 编写测试代码 引起冲突的代码: 问题效果展示: 每一次触发双击事件都会引起两次单击事件 解决冲突的代码: 解决问题效果展示: 完美解决单击事件和双击事件冲突问题 这里主要用到两个HTML DOM Window对象中函数,settimeout(),clearTimeout() 我这里两个单击事件触发的时间间隔设置在等于300毫

easyui-datetimebox 控件绑定双击事件实现自动选中当前日期时间

本方法是在不改变原 js 的情况下,通过扩展方法来实现本目的 首先在 datetimebox 控件中扩展一个 绑定双击事件 的方法 1 $.extend($.fn.datetimebox.methods, { 2 //绑定双击事件方法 3 bindDblClick: function (jq) { 4 var panel = $(jq).combo("panel"); 5 panel.find(".calendar-dtable tbody").unbind(&qu

SALV双击事件,相应另一个SALV

*--首次显示的ALV FORM DIS_MM. ADD_ALV_EVENTS '2' 'CALL_SO'.   "添加双击事件,调用CALL_SO   DISPLAY_ALV IMM_TAB 'Material'. ENDFORM. *双击事件响应的内容 FORM CALL_SO USING I_ROW                    I_COLUMN. READ TABLE IMM_TAB INTO IMM INDEX I_ROW.   IF SY-SUBRC = 0 AND I_CO

转 ABAP中使用for all entries in小结

ABAP开发中,使用for all entries in语句将不能使用join的聚集表(例如BSEG)或者需要使用select的内表与内表串联. 以BSEG为例: select belnr hkont from bsis into corresponding fields of table itab1 where .... if not itab1[] is initial. select kunnr lifnr belnr from bseg into corresponding fields

ABAP ALV 示例:ALV单元格颜色,ALV行颜色,ALV双击事件,数据合计,ALV表头,ALV GUI STATUS

1 *& Program Name: ZMFIX_ASSET 2 *& 3 *& Description: 资产信息一览 4 *& Date/Author:  5 6 *& Table Update: 7 *& Special Logic: 8 *& Include: 9 *----------------------------------------------------------------------* 10 * MODIFICATION

BaseTool中鼠标双击事件获取鼠标位置的方法

ArcGISEngine的BaseTool类中提供了鼠标双击.鼠标移动.鼠标按键按下.鼠标按键弹起四种鼠标事件,但是鼠标双击事件的参数跟其他三种不一样,双击事件中没有提供鼠标位置信息. public virtual void OnDblClick(); public virtual void OnMouseDown(int Button, int Shift, int X, int Y); public virtual void OnMouseMove(int Button, int Shift

Android中为什么不提供双击事件的接口

附上文章链接:http://stackoverflow.com/questions/2217670/android-how-to-detect-double-tap 这句话讲出了原因:Implementing Double Touch will affect handling of single touches, because you'll have to wait to see if every single touch turns into a double touch before yo