ABAP 实现对话框(一)

jquery 专栏收录该内容
4 篇文章 0 订阅

一、报表程序 VS 对话框程序

1.报表程序

  • 结构简单
  • 由事件块组成程序构架
  • 执行方式多样

2.对话框程序

  • 结构复杂
  • 包括ABAP程序代码、用户对话、图形用户接口和事务代码
  • 图形用户接口包括菜单栏、标准工具栏、应用程序工具栏和标题栏
  • 程序由事务代码触发运行

二、实现对话框程序

1.创建程序

登录SAP,输入T-code:se38 进入到ABAP编辑器。在这里创建一个新程序,按照下面的步骤
这里写图片描述

点击创建,弹出新窗口。为程序设置一个标题,属性设置为“可执行程序”
这里写图片描述
点击本地对象之后,就完成了在本地创建程序的工作
这里写图片描述

2.创建屏幕和状态

1)点击工具栏的侧栏,创建一个屏幕

这里写图片描述
在侧边栏鼠标右键程序名创建屏幕,然后会出现一个窗口,在属性栏里面填上描述信息,在元素清单一栏添加
这里写图片描述
在逻辑流这里有两个模块:PBO和PAI模块。默认是注释的,把注释去掉,双击module名称,弹出一个窗口点“是”,进入下一窗口
这里写图片描述
点击第二个,在程序中创建module
这里写图片描述
我们可以看到程序中多了一些代码
这里写图片描述

2)创建一个GUi状态和GUI标题

在侧边栏鼠标右键程序名创建状态,输入一些描述信息后,打勾。右侧可以看到用户图形接口,我们点开“功能键”添加三个按钮。完成后,点击工具栏“激活”按钮后,就可以在侧边栏看到多了一个GUI 状态。GUi标题的创建方式也是一样的。
这里写图片描述

3)创建屏幕显示

点击屏幕编号,再点击它的工具栏上的“格式”,弹出“屏幕制作器”(即对屏幕进行布局)。这里我们创建一个“文本字段”,一个”输入输出字段”,两个按钮,给它们加上一个“框”。(双击它们,就可以把它们拉出来了。。。),名称要填的不然会显示红,按钮要都添加功能码。选中某个按钮点击最上方属性图标设置功能码(响应按钮操作)。
这里写图片描述

4)在程序中设置GUI状态和GUI标题

名字是我们之前在创建时填的,这样就可以在当前的屏幕下创建GUI状态和GUI标题

module STATUS_8000 output.
  SET PF-STATUS 'STATUS'.
  SET TITLEBAR 'TITLE'.

endmodule.      

5)创建事务码(T_CODE)

在SAP首页输入t_code “se93”创建程序对应的事务码。输入事务描述以及我们的程序和屏幕编码,最后点保存
这里写图片描述
这里写图片描述

6)通过事务码查看屏幕

回到首页,输入我们创建的事务码“ykud001”就可以到屏幕、GUI状态栏和GUI标题了
这里写图片描述

7)修改屏幕,把物料号改成可参考的(从数据库中选)

点击屏幕8000的‘格式’进入到屏幕制作器窗口。点击功能栏倒数第三个按钮,弹出一个新的窗口
这里写图片描述
在表名称中输入屏幕字段’matnr’要参考的表’makt’。’从目录中获取’就是从数据库中获取表,’从程序中获取’就是从你的程序中定义的表中获取所需表。这里是’从目录中获取’,然后会显示表中的字段,选择我们所需的字段,再点勾,就可以把字段拉到屏幕制作器上。把文本名称改为’g_matnr’。
这里写图片描述

8)响应按钮事件

在屏幕的逻辑流中添加’exit’和’set_data’模块,双击模块名进行创建
分别用来响应退出操作和设置’matnr’的值。

process before output.
  module status_8000.
  module set_data_8000.
*
process after input.
  module exit at exit-command.
  module user_command_8000

在程序中定义数据类型

TABLES makt.
DATA:g_matnr TYPE mara-matnr.
DATA:ok_code TYPE sy-ucomm,
      save_code TYPE sy-ucomm.

程序中退出和设置数据模块

MODULE set_data_8000 OUTPUT.
  GET PARAMETER ID 'MAT' FIELD g_matnr.
ENDMODULE. 
MODULE exit INPUT.
  LEAVE PROGRAM.
ENDMODULE.   

在程序的 user_command_8000模块,进行如下操作。
ok_code在前面屏幕的元素清单设置过,响应按钮的操作。’显示物料描述’这个按钮的功能码是’ok’,当点击这个按钮时将会显示8001屏幕(后面再创建)。当点击’退出’,将会退出程序。

MODULE user_command_8000 INPUT.
  save_code = ok_code.
  CLEAR ok_code.
  CASE save_code.
    WHEN 'OK'.
      LEAVE TO SCREEN 8001.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
      WHEN'EXIT'.
      LEAVE PROGRAM.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.         

3.实现物料描述的显示

1)创建屏幕’80001’,步骤同’8000’一样(元素清单里面的ok_code记得填)

2)创建GUI标题’TITLE1’,步骤同上。但是这里标题的名称要改成动态的,名称为’显示物料&描述’。&代表变量

这里写图片描述

3)在屏幕8001的逻辑流中创建模块

PROCESS BEFORE OUTPUT.
  MODULE status_8001.
  MODULE get_data_8001.
*
PROCESS AFTER INPUT.
  MODULE exit AT EXIT-COMMAND.
  MODULE user_command_8001.

4)创建屏幕显示

上面的几个字段都是参考表,然后拉出来的(参考上面)。注意填写按钮的功能码。
这里写图片描述

5)在程序中实现对应的模块

标题这里接收了一个参数,并把参数传给之前的’&’符号。获取物料描述是通过select语句实现的。所有工作完成之后,点击侧边栏程序名,激活所有的设置。

MODULE status_8001 OUTPUT.
  SET PF-STATUS 'STATUS'.
  SET TITLEBAR 'TITLE1' WITH g_matnr.
ENDMODULE.   

MODULE user_command_8001 INPUT.
  save_code = ok_code.
  CLEAR ok_code.
  CASE save_code.
    WHEN 'LAST'.
      LEAVE TO SCREEN 8000.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
     when 'BACK'.
       LEAVE TO SCREEN 8000.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.    

MODULE get_data_8001 OUTPUT.
  SELECT SINGLE * FROM makt WHERE matnr = g_matnr.
ENDMODULE.          

6)运行

输入事务码,运行程序
这里写图片描述
这里写图片描述

程序代码

REPORT  yud_002.

TABLES makt.
DATA:g_matnr TYPE mara-matnr.
DATA:ok_code TYPE sy-ucomm,
      save_code TYPE sy-ucomm.
*&---------------------------------------------------------------------*
*&      Module  STATUS_8000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_8000 OUTPUT.
  SET PF-STATUS 'STATUS'.
  SET TITLEBAR 'TITLE'.

ENDMODULE.                
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_8000  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_8000 INPUT.
  save_code = ok_code.
  CLEAR ok_code.
  CASE save_code.
    WHEN 'OK'.
      LEAVE TO SCREEN 8001.
    WHEN 'BACK'.
      LEAVE TO SCREEN 0.
      WHEN'EXIT'.
      LEAVE PROGRAM.
    WHEN OTHERS.
  ENDCASE.
ENDMODULE.                 
*&---------------------------------------------------------------------*
*&      Module  SET_DATA_8000  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE set_data_8000 OUTPUT.
  GET PARAMETER ID 'MAT' FIELD g_matnr.
ENDMODULE.                
*&---------------------------------------------------------------------*
*&      Module  EXIT  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE exit INPUT.
  LEAVE PROGRAM.
ENDMODULE.                
*&---------------------------------------------------------------------*
*&      Module  STATUS_8001  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_8001 OUTPUT.
  SET PF-STATUS 'STATUS'.
  SET TITLEBAR 'TITLE1' WITH g_matnr.

ENDMODULE.               
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_8001  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE user_command_8001 INPUT.
  save_code = ok_code.
  CLEAR ok_code.
  CASE save_code.
    WHEN 'LAST'.
      LEAVE TO SCREEN 8000.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
     when 'BACK'.
       LEAVE TO SCREEN 8000.
    WHEN OTHERS.
  ENDCASE.

ENDMODULE.                
*&---------------------------------------------------------------------*
*&      Module  GET_DATA_8001  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE get_data_8001 OUTPUT.
  SELECT SINGLE * FROM makt WHERE matnr = g_matnr.
ENDMODULE.                 " GET_DATA_8001  OUTPUT
  • 2
    点赞
  • 0
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值