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

ABAP实战屏幕SCREEN设计(一)

时间:2016-06-14 10:20:56      阅读:792      评论:0      收藏:0      [点我收藏+]

标签:

屏幕(SCREEN)是ABAP设计最重要的工作之一,SAP的单据、主数据维护等业务功能都使用屏幕,一个程序可以包含多个屏幕。
本文主要介绍:
(1)第一个"HELLO WORLD" Screen程序
(2)工具条和菜单设计
(3)屏幕对象
(4)数据字典关联字段
(5)逻辑流
(6)下拉框设计
(7)修改屏幕
(8)子窗口(Subscreen)
(9)表条目控制
(10)定制控制,上载图片和在屏幕上显示图片实例
(11)文本编辑器
(12)列表和屏幕相互调用 

1、第一个“HELLO WORLD” Screen程序

本节将建立一个屏幕,屏幕包含一个“HELLO WORLD!“的文本字段和一个”退出“按钮,单击”退出“按钮时退出整个程序。步骤如下:
(1)建立一个新程序
(2)设计Screen,处理控件、逻辑流
(3)调整程序,调用新建立的Screen

1.2、建立一个新程序

输入TCODE:SE38,输入程序名,单击”创建“按钮

技术分享
输入标题、程序类型等信息后,单击”保存“按钮

技术分享
程序不需要传输至其他环境,因而保存时选”本地对象“

技术分享
系统进入程序设计界面,直接保存后退回

技术分享

1.2、设计Screen

输入TCODE:SE51,进入Screen设计界面,输入刚建立的程序名YTEST20160608,输入屏幕编号100后单击”创建“按钮

技术分享

在属性页输入描述后,直接保存

技术分享

单击工具条上的”格式“按钮,进入设计界面,添加一个文本字段控件,输入名称和文本,如果控件显示红色的表示未正确设计属性

技术分享

”退出“按钮属性如下

技术分享

注意属性中功能码为EXIT,函数类型”En“,表示退出函数。
设计窗口上的按钮说明

技术分享

技术分享控制用屏幕输入输出事件,如在启动屏幕时使用的菜单、工具条,在输入后对输入框的检查,对按钮事件的控制等。

技术分享窗口的属性

技术分享窗口上所有对象的列表、属性等


单击技术分享按钮,出现如下图

技术分享

PROCESS BEFORE OUTPUT(PBO):屏幕显示前的调用模块。
PROCESS ALTER INPUT(PAI):响应用户输入后的调用模块,如单击按钮、输入字段后回车等事件。
写入代码”MODULE CANCEL AT EXIT-COMMAND.“。表示在退出事件时执行CANCEL模块,这和退出按钮的函数类型属性对应。

1.3、从程序中调用Screen

编辑程序YTEST20160608,调整后程序:

REPORT  YTEST20160608.
*直接调用窗口
CALL SCREEN 100.
MODULE CANCEL INPUT.
  LEAVE PROGRAM.
ENDMODULE.
执行程序,输出结果如下

技术分享

单击“退出”按钮,退出程序。

2、工具条和菜单设计

在“HELLO WORLD!“程序基础上,在屏幕上建立菜单,工具条按钮、系统按钮、添加编辑框:在程序启动时,将程序中的变量传递到窗口的编辑框中;在单击菜单、工具条按钮、系统按钮时,将选中对象的功能码传递到文本框;离开屏幕时,将两个编辑框内容输出,表示窗口变量正确传递回主程序。
学习本节后,会对屏幕布局及相关控制有一个完整的了解,并且有融会贯通的感觉,所以本节非常重要,主要介绍:菜单编辑器,应用工具条设计,菜单设计,系统按钮设计,逻辑流程设计,加班编辑框,加入OK_CODE,代码设计,输出结果。

2.1、菜单编辑器

工具条和菜单设计,需要用菜单编辑器功能(TCODE:SE41),也可以在屏幕设计界面通过单击工具条按钮进入。单击工具条的”其他对象“按钮,如下图
技术分享

在输入状态名称后,单击创建按钮,如下图

技术分享

输入短文本

技术分享

2.2、应用工具条设计

展开”应用工具条“,在项目1输入”BIN1“,并双击它
技术分享
选”静态文本“,继续
技术分享
输入函数文本,可以选择图标,但在选择图标后,该按钮仅显示图标,文本做提示
技术分享
继续,为按钮分配一个功能键
技术分享
输入图标文字
技术分享
以同样的方式添加第2个按钮
技术分享
完后后单击工具条上的技术分享按钮,下一界面点击“Execute”按钮
技术分享
输入Window坐标,默认不变
技术分享
输出结果如下
技术分享

2.3、菜单设计

单击”菜单栏“,展开它,输入主菜单后双击它,输入相应的子菜单项
技术分享
单击测试按钮,输出界面如下
技术分享

2.4、系统按钮设计

与菜单和工具条按钮设计一样,单击”功能键“,设计如下图
技术分享

设计完成保存后,单击工具条上的激活按钮,激活状态条,运行程序
技术分享

2.5、逻辑流设计

输入TCODE:SE51,设计逻辑流,将默认的PAI和PBO两个MODULE设为有效(去掉*注释),如下图
技术分享
在MODULE STATUS_0100调用设计的状态条,在MODULE USER_COMMAND_0100中处理各类按钮事件

2.6、输入字段

进入屏幕设计界面,添加两个文本字段和两个输入字段。选择输入字段时,设定属性为输入输出字段,如下图
技术分享

2.7、OKCODE

单击技术分享按钮,定义OK_CODE变量来处理屏幕交互
技术分享
保存并激活该屏幕

2.8、程序设计

REPORT  YTEST20160608.

DATA:FORINPUT(20) TYPE C VALUE '初始值',
     FORCODE(20) TYPE C.
*功能码返回值
DATA:OK_CODE TYPE SY-UCOMM,
     SAVE_OK TYPE SY-UCOMM.

*直接调用窗口
CALL SCREEN 100.
*输出返回变量
WRITE:FORINPUT, / FORCODE.

MODULE STATUS_0100 OUTPUT.
*定义状态条、包括菜单、工具条按钮、系统按钮等
  SET PF-STATUS 'TESTSTA1'.
*将变量值输出至屏幕字段
  FORCODE = SAVE_OK.
ENDMODULE.

MODULE CANCEL INPUT.
  LEAVE PROGRAM.
ENDMODULE.

MODULE USER_COMMAND_0100 INPUT.
  SAVE_OK = OK_CODE.
  CLEAR OK_CODE.
*分析功能码,如果是工具条上的第2个按钮,则退出当前屏幕
  CASE SAVE_OK.
    WHEN 'BIN2'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.

2.9、屏幕输出

两个输入框中,输入你想要输入的值,单击“测试2”按钮
技术分享
输出结果
技术分享

3、屏幕对象功能

3.1、单选按钮组的定义

单选按钮组是多个单选按钮的组合。选中多个单选按钮,单击右键选菜单“单选按钮组”-->“定义”
技术分享
取消多个单选按钮组合单击“分解”菜单
技术分享

输入输出字段的属性
技术分享
这五个属性设置分别如下图
技术分享技术分享技术分享技术分享技术分享

3.2、数据字典关联字段

在Screen设计过程中,数据字典关联字段可以根据数据字典中定义的透明表、结构等信息,方便地在屏幕上建立与字典关联的文本、输入输出字段。
例如使用YTJAYSCHOOL学校表,在屏幕上定义相关该表字段,并根据输入的主关键字检索其他字段的信息,并显示到输入输出字段。
学校表结构如下:
技术分享
本节通过YSH_ID关键字检索数据
新建一个程序并建立一个屏幕后,单击中所示的“字典字段窗口”按钮技术分享
输入表“YTJAYSCHOOL”后,回车,系统显示该表所有字段,选择需要输出的字段
技术分享
定位输出位置后,所有字段自动输出
技术分享
定义非关键字为只读,即非输入字段
技术分享
定义逻辑流
技术分享
保存并激活,屏幕设计完成
程序代码如下:
REPORT  YTEST20160612.
*功能码返回值
DATA:OK_CODE TYPE SY-UCOMM,
     SAVE_OK TYPE SY-UCOMM.
*使用学校表
TABLES YTJAYSCHOOL.
*直接调用窗口
CALL SCREEN 120.

MODULE CANCEL INPUT.
  LEAVE PROGRAM.
ENDMODULE.

MODULE STATUS_0120 OUTPUT.
  SET PF-STATUS 'STATUS1'.
ENDMODULE.

MODULE USER_COMMAND_0120 INPUT.
  SAVE_OK = OK_CODE.
  CLEAR OK_CODE.
  CASE SAVE_OK.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
  ENDCASE.
*将SELECT数据赋给SCHOOL记录,SCHOOL记录关联屏幕字段
  SELECT SINGLE *
    INTO CORRESPONDING FIELDS OF YTJAYSCHOOL
    FROM YTJAYSCHOOL
    WHERE YSH_ID = YTJAYSCHOOL-YSH_ID.
    IF SY-SUBRC NE 0.
      CLEAR YTJAYSCHOOL.
    ENDIF.
ENDMODULE.
在YTJAYSCHOOL-YSH_ID处输入10001,请先查YTJAYSCHOOL表,不要输入错误数据,回车后屏幕显示如下图
技术分享

4、逻辑流

4.1、顺序执行逻辑流

系统是按照逻辑流的顺序执行的,例如下面的逻辑流(PAI):
PROCESS AFTER INPUT.
  MODULE USER_COMMAND_TEST.
    MODULE CANCEL AT EXIT-COMMAND.
  MODULE USER_COMMAND_0100.
如果单击退出键,那么“MODULE USER_COMMAND_0100”是不会执行的。

4.2、字段检查与逻辑流的控制

相关语法:
1、单个字段检查
FIELD<FLD1>MODULE<MDL1>.

2、单个字段多个MODULE检查,如FLD1有两个MODULE检查
FIELD<FLD1>MODULE<MDL1>.
           MODULE<MDL2>.

3、检查多字段,使用CHAIN
CHAIN.
FIELD<FLD1>.
FIELD<FLD2>,<FLD3>,<FLD4>.
MODULE<MDL1>.
MODULE<MDL2>.
ENDCHAIN.
表示FLD1,FLD2,FLD3,FLD4有MDL1与MDL2检查。

4、不是初始值检查
FIELD<FLD1>MODLE<MDL1>ON INPUT.
ON INPUT表示是初始值改变时执行.
有一个特殊情况:
FIELD<FLD1>MODULE<MDL1>ON *-INPUT
表示用户输入字段首先输入‘*‘,并且输入字段属性技术分享,MODULE无效。

5、有改变检查
FIELD<FLD1>MODULE<MDL1>ON REQUEST.

6、CHAIN中有字段不是初始值检查
CHAIN.
FIELD<FLD1>.
FIELD<FLD2>,<FLD3>,<FLD4>.
MODULE<MDL1>ON CHAIN_INPUT.
MODULE<MDL2>.
ENDCHAIN.
注意:CHAIN_INPUT表示FLD1,FLD2,FLD3,FLD4不是初始值是执行MDL1检查。

4.3、发布消息

消息的类型见表
消息类型 后继操作
E:错误 所有字段重新输入,重新启动PAI处理,所有字段重新输入
W:警告  所有字段允许输入,在未输入新值回车,也会继续PAI处理
I:信息(弹出窗口)  中断当前操作
A:异常终止 返回
S:成功  处理PA
建立的消息类(TCODE:SE91) YMESS下的消息005、006、007,如下图
技术分享
建立一个程序“YTEST20160613”,建立Screen,加入退出按钮,并在主程序中设计退出程序。在主屏幕中加入4个文本字段和4个输入字段,如下图所示
技术分享
其中FLD2为技术分享,进入逻辑流设计
PROCESS BEFORE OUTPUT.
  MODULE STATUS_0100.
*检查FLD1、FLD2
PROCESS AFTER INPUT.
  CHAIN.
    FIELD: FLD1,FLD2.
    MODULE CHECK1.
  ENDCHAIN.

*检查FLD3、FLD4
  CHAIN.
    FIELD: FLD3,FLD4.
    MODULE CHECK2.
  ENDCHAIN.

*当FLD2的首字符是*时执行CHECK3检查
  FIELD FLD2 MODULE CHECK3 ON *-INPUT.
  MODULE CANCEL AT EXIT-COMMAND.
  MODULE USER_COMMAND_0100.
调整主程序,代码如下
REPORT  YTEST20160613.
*功能码返回值
DATA: OK_CODE TYPE SY-UCOMM,
      SAVE_OK TYPE SY-UCOMM.
*定义输入字段变量
DATA: FLD1(20) TYPE C,
      FLD2(20) TYPE C,
      FLD3(20) TYPE C,
      FLD4(20) TYPE C,
      ACTION(50) TYPE C.
*直接调用窗口
CALL SCREEN 100.

MODULE CANCEL INPUT.
  LEAVE PROGRAM.
ENDMODULE.

MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'STATUS1'.
ENDMODULE.

MODULE USER_COMMAND_0100 INPUT.
  SAVE_OK = OK_CODE.
  CLEAR OK_CODE.
  CASE SAVE_OK.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
  ENDCASE.
  ACTION = ''.
  CONCATENATE FLD1 FLD2 FLD3 FLD4 INTO ACTION.
ENDMODULE.

MODULE CHECK1 INPUT.
*当输入FLD1 = 'FLD1'时提示错误,而且不执行PAI
  IF FLD1 = 'FLD1'.
    MESSAGE E005(YMESS) WITH 'FLD1 ERROR'.
  ENDIF.
*当输入FLD1 = 'FLD11'时弹出窗口提示,执行PAI
  IF FLD1 = 'FLD11'.
    MESSAGE I005(YMESS) WITH  'FLD1 WARNING'.
  ENDIF.
*当输入FLD1 = 'FLD111'时输出成功信息,执行PAI
  IF FLD1 = 'FLD111'.
    MESSAGE S005(YMESS) WITH 'FLD1 OK'.
  ENDIF.
ENDMODULE.

MODULE CHECK2 INPUT.
  IF FLD3 = 'FLD3'.
    MESSAGE E005(YMESS) WITH 'FLD3 ERROR'.
  ENDIF.
  IF FLD3 = 'FLD33'.
    MESSAGE I005(YMESS) WITH 'FLD3 WARNING'.
  ENDIF.
  IF FLD3 = 'FLD333'.
    MESSAGE S005(YMESS) WITH 'FLD3 OK'.
  ENDIF.
ENDMODULE.

MODULE CHECK3 INPUT.
  MESSAGE I005(YMESS) WITH 'FLD2 * WARNING'.
ENDMODULE.
输出结果如下图
技术分享
当输入FLD1 = ‘FLD1’时,提示错误,并且变量ACTION不会更改,
当输入FLD1 = ‘FLD11’时,弹出提示框,确认后变量ACTION更改,如下图
技术分享
当FLD2首字符为“*”时,出现提示框,如下图
技术分享
变量ACTION会更新

5、Listbox下拉框设计

在屏幕上建立一个输入输出FIELD,设定属性下拉:Listbox如图
技术分享
程序代码如下:
REPORT  YTEST20160613001.
*功能码返回值
DATA: OK_CODE TYPE SY-UCOMM,
      SAVE_OK TYPE SY-UCOMM.
*VRM类型定义接口
TYPE-POOLS VRM.
DATA: FLD1(20) TYPE C.
*内表、记录,字段变量定义
DATA: FNAME TYPE VRM_ID,
      VVA   TYPE VRM_VALUES,
      LVVA  LIKE LINE OF VVA.
*直接调用窗口
CALL SCREEN 100.

MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'STATUS1'.
*加两条记录
  FNAME = 'FLD1'.
  LVVA-KEY = '广州'.
  APPEND LVVA TO VVA.
  CLEAR LVVA.
  LVVA-KEY = '上海'.
  APPEND LVVA TO VVA.
  CALL FUNCTION 'VRM_SET_VALUES'
    EXPORTING
      ID = FNAME
      VALUES = VVA
*    EXCEPTIONS
*      ID_ILLEGAL_NAME = 1
*      OTHERS = 2
.
  IF SY-SUBRC <> 0.
*    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
ENDMODULE.

MODULE CANCEL INPUT.
  LEAVE PROGRAM.
ENDMODULE.

MODULE USER_COMMAND_0100 INPUT.
  SAVE_OK = OK_CODE.
  CLEAR OK_CODE.
  CASE SAVE_OK.
    WHEN 'CANCEL'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.
输出结果如图
技术分享
本节先介绍这么多,剩下未介绍的请等待下一篇博文。



ABAP实战屏幕SCREEN设计(一)

标签:

原文地址:http://blog.csdn.net/jay_1989/article/details/51611315

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