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