码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-04-26 19:53:54      阅读:199      评论:0      收藏:0      [点我收藏+]

标签:

比如,通过普通屏幕,使用定制控制,显示了一个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 方法就是在调用 已经存在的其他事务码




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

标签:

原文地址:http://blog.csdn.net/charliefromkansas/article/details/51247544

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!