ABAP实战屏幕SCREEN设计(二)

屏幕(SCREEN)是ABAP设计最重要的工作之一,SAP的单据、主数据维护等业务功能都使用屏幕,一个程序可以包含多个屏幕。

上一篇博文“ABAP实战屏幕SCREEN设计(一)”主要介绍了以下内容:

(1)第一个"HELLO WORLD" Screen程序

(2)工具条和菜单设计

(3)屏幕对象

(4)数据字典关联字段

(5)逻辑流

(6)下拉框设计

本篇博文将继续介绍剩下内容,主要包含

(1)修改屏幕状态

(2)子窗口(Subscreen)

(3)表条目控制

(4)定制控制,上载图片和在屏幕上显示图片实例

(5)文本编辑器

(6)列表和屏幕相互调用

1、修改屏幕状态

可以在程序运行时动态地设置对象的属性,如设置一个字段是否有效,在Screen设计时,可以将字段分组,在PBO事件中设置属性。

本节在屏幕上建立一个CHECKBOX、若干输入字段,将字段分成两个组,每一个组有一个BUTTON,单击组BUTTON,根据CHECKBOX的值更改字段组的属性,设计界面如图

1-1和1-2为NO1组,2-1和2-2为NO2组。

程序代码如下

REPORT  YTEST20160613002.
*功能码返回值
DATA: OK_CODE TYPE SY-UCOMM,
      SAVE_OK TYPE SY-UCOMM.

DATA:SGRP(20) TYPE C,
     SMOD(1) TYPE C.

*是否修改
DATA: CANMOD(1) TYPE C.

*默认可以修改
CANMOD = 'X'.

*直接调用窗口
CALL SCREEN 100.

MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'STATUS1'.
*根据按钮确定字段组
  SGRP = ''.
  IF SAVE_OK = 'BTN1'.
    SGRP = 'NO1'.
  ELSE.
    SGRP = 'NO2'.
  ENDIF.
*CHECKBOX转换
  IF CANMOD = 'X'.
    SMOD = '1'.
  ELSE.
    SMOD = '0'.
  ENDIF.
*逐个扫描屏幕元素
  LOOP AT SCREEN.
*如果是需要修改的组,更改变量,其他组不考虑,如果正式考虑先存储到变量
    IF SCREEN-GROUP1 = SGRP.
      SCREEN-INPUT = SMOD.
*更新到窗口元素变量
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
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.

输出结果如下图

当选择不更改,单击设定组1按钮时,测试组1状态变为不能编辑。

2、子窗口

一个程序可以有多个窗口,通过子窗口,可以把若干个子窗口放在一个窗口上,这样,既保持了整体性,又方便对单个屏幕的维护。在SAP业务程序中,大量地使用了子窗口设计。

窗口对象子屏幕范围对象用来定义一个子窗口在主窗口上的大小、位置等属性,通过逻辑流和主程序将对象关联到子窗口。

例如:建立一个主窗口和两个子窗口,在主窗口上再创建一个子窗口范围,增加两个按钮,单击按钮时切换子窗口。

主窗口设计界面:

子窗口设计界面:

同样方式定义好屏幕300

回到主屏幕100,定义逻辑流

PROCESS BEFORE OUTPUT.
 MODULE STATUS_0100.
*SUBSCR是定义的子屏幕范围的名称
 CALL SUBSCREEN: SUBSCR INCLUDING SY-REPID SID1.

PROCESS AFTER INPUT.
 MODULE CANCEL AT EXIT-COMMAND.
 MODULE USER_COMMAND_0100.
*使子屏幕显示
 CALL SUBSCREEN SUBSCR.

主程序代码如下

REPORT  YTEST20160613003.
*功能码返回值
DATA:OK_CODE TYPE SY-UCOMM,
     SAVE_OK TYPE SY-UCOMM.
*子窗口默认用200子窗口
DATA:SID1(4) TYPE N VALUE '200'.
*直接调用窗口
CALL SCREEN 100.

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

MODULE CANCEL INPUT.
  LEAVE PROGRAM.
ENDMODULE.

MODULE USER_COMMAND_0100 INPUT.
  SAVE_OK = OK_CODE.
  CLEAR OK_CODE.
  CASE SAVE_OK.
*当单击第一个按钮,显示200子窗口
    WHEN 'BTN1'.
      SID1 = '200'.
*当单击第二个按钮,显示300子窗口
    WHEN 'BTN2'.
      SID1 = '300'.
    WHEN 'CANCEL'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.

输出结果如图

当单击“显示子窗口2”按钮时,显示子窗口200,如图

3、表条目控制

表条目控制是实现将多个子屏幕以页面形式切换的控件,有手工制作和向导生成两种,在本节中,不再重复子屏幕创建操作,只表达操作上的特殊性,手工制作的图标是,向导制作的图标是

3.1、手工制作

进入屏幕设计,单击按钮,创建一个表条目控制,如图

图中控件显示粉红色表示其属性未设置完成。

逐页设置名称、文本、功能码属性,接着选中“子屏幕范围”按钮,在第一页创建该对象,设定好子屏幕的属性后,第一页就设置完成,不再显示粉红色,如下图中的表一

3.2、向导制作

在设计屏幕上创建“表条目控制制作向导”对象,启动向导程序,如图

输入名称后,继续

输入需要建立页面的名称,继续

向导产生页面子屏幕编号和每页功能码,可以在此基础上调整,继续

默认调用主屏幕的主程序名称,继续

系统提示所示设定参数信息,单击“完成"按钮

打开设计界面,系统自动建立完成全部页面、逻辑流和主程序代码,如图

4、通过定制控制在屏幕上显示图片

可以通过“定制”对象在屏幕上显示各种控件,如图片、Tree Control、ALV、编辑器等,后面的实例将会用到这个控件,先介绍在一个定制控制对象内显示图片。

4.1、图片的上传

通过TCODE:SMW0上传图片,选择应用程序的二进制数据,单击查找按钮,如图

搜索条件默认为空,点击执行按钮,如图

屏幕显示已有对象,单击新增按钮,如图

输入对象名称,单击输入按钮,如图

选择需要上传的本对图片

SAP GUI安全性弹出窗口,单击”允许“按钮

此处开发类默认为空,单击”本地对象“按钮,如图

产生传输入请求,单击按钮,如图

上传成功,屏幕显示新产生的对象行,如图

相关信息在数据表“WWWDATA”可以查询到,如图

4.2、屏幕设计定义对象

在屏幕设计界面添加定制控制对象和“退出”按钮,如图

4.3、图片显示程序

程序代码如下:

REPORT  YTEST20160614002.
DATA:OK_CODE TYPE SY-UCOMM,
     SAVE_OK TYPE SY-UCOMM.
*定义控制和图像对象定义
DATA CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA PICTURE TYPE REF TO CL_GUI_PICTURE.
*初始标志字段定义
DATA INIT.

CALL SCREEN 100.

MODULE USER_COMMAND_0100 INPUT.
  SAVE_OK = OK_CODE.
  CLEAR OK_CODE.
  CASE SAVE_OK.
    WHEN 'CANCEL'.
      LEAVE PROGRAM.
  ENDCASE.
ENDMODULE.

MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'STATUS1'.
*如果还未创建定制对象
  IF INIT IS INITIAL.
*图片地址字段定义
    DATA URL(255).
    CLEAR URL.
*创建对象
    CREATE OBJECT CONTAINER
      EXPORTING CONTAINER_NAME = 'P1'.

    CREATE OBJECT PICTURE
      EXPORTING PARENT = CONTAINER
      EXCEPTIONS ERROR = 1.
    IF SY-SUBRC NE 0.
    ENDIF.
*定义通用函数取得图片地址
    PERFORM LOAD_PIC_DB CHANGING URL.
*显示图片
    CALL METHOD PICTURE->LOAD_PICTURE_FROM_URL
      EXPORTING
        URL = URL.
    IF SY-SUBRC NE 0.
    ENDIF.
*置标志位已初始
    INIT = 'X'.
  ENDIF.
ENDMODULE.

*获取图片地址通用函数
FORM LOAD_PIC_DB CHANGING P_URL.
  DATA QUERY_TABLE LIKE W3QUERY OCCURS 1 WITH HEADER LINE.
  DATA HTML_TABLE LIKE W3HTML OCCURS 1.
  DATA RETURN_CODE LIKE W3PARAM-RET_CODE.
  DATA CONTENT_TYPE LIKE W3PARAM-CONT_TYPE.
  DATA CONTENT_LENGTH LIKE W3PARAM-CONT_LEN.
  DATA PIC_DATA LIKE W3MIME OCCURS 0.
  DATA PIC_SIZE TYPE I.

  REFRESH QUERY_TABLE.
*查询对象数据
  QUERY_TABLE-NAME = '_OBJECT_ID'.
*图片对象名称
  QUERY_TABLE-VALUE = 'ZTESTPIC'.
  APPEND QUERY_TABLE.
*读取WWWDATA表,取得图片对象信息
  CALL FUNCTION 'WWW_GET_MIME_OBJECT'
    TABLES
      QUERY_STRING = QUERY_TABLE
      HTML = HTML_TABLE
      MIME = PIC_DATA
    CHANGING
      RETURN_CODE = RETURN_CODE
      CONTENT_TYPE = CONTENT_TYPE
      CONTENT_LENGTH = CONTENT_LENGTH
    EXCEPTIONS
      OBJECT_NOT_FOUND = 1
      PARAMETER_NOT_FOUND = 2
      OTHERS = 3.
  IF SY-SUBRC EQ 0.
    PIC_SIZE = CONTENT_LENGTH.
  ENDIF.
*创建图片URL地址
  CALL FUNCTION 'DP_CREATE_URL'
    EXPORTING
      TYPE = 'image'
      SUBTYPE = CNDP_SAP_TAB_UNKNOWN
      SIZE = PIC_SIZE
      LIFETIME = CNDP_LIFETIME_TRANSACTION
      TABLES
        DATA = PIC_DATA
      CHANGING
        URL = URL
  EXCEPTIONS
    DP_INVALID_PARAMETER = 1
    DP_ERROR_PUT_TABLE = 2
    DP_ERROR_GENERAL = 3
    OTHERS = 4.
ENDFORM.

4.4、程序输出

程序运行,输出结果如图

可以在此基础上添加图片双击事件,此处就不再介绍了。

5、通过定制控制文本编辑器

在SAP业务系统中,大量用到文本编辑器,用文本编辑器处理内表,所以本节在屏幕上创建文本编辑器,输入相关内容后,在屏幕退出时输出编辑器内容。

5.1、屏幕设计定义对象

在屏幕设计界面定义控制对象,退出按钮。

5.2、文本编辑器程序

REPORT  YTEST20160614003.
DATA: OK_CODE TYPE SY-UCOMM,
      SAVE_OK TYPE SY-UCOMM.
*初始标志字段定义
*定制控制和编辑对象定义
DATA: INIT,
      CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      EDITOR TYPE REF TO CL_GUI_TEXTEDIT.

DATA: M1(256) TYPE C OCCURS 0,
      LINE(256) TYPE C.
*输入初始值
LINE = '请输入'.
APPEND LINE TO M1.

CALL SCREEN 100.

REFRESH M1.

CALL METHOD EDITOR->GET_TEXT_AS_R3TABLE
  IMPORTING
    TABLE = M1.
*逐行输出
LOOP AT M1 INTO LINE.
  WRITE / LINE.
ENDLOOP.

MODULE USER_COMMAND_0100 INPUT.
  SAVE_OK = OK_CODE.
  CLEAR OK_CODE.
  CASE SAVE_OK.
    WHEN 'CANCEL'.
      LEAVE TO SCREEN 0.
  ENDCASE.
ENDMODULE.

MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'STATUS1'.
*如果还未创建定制对象
  IF INIT IS INITIAL.
    INIT = 'X'.

    CREATE OBJECT: CONTAINER EXPORTING CONTAINER_NAME = 'P1'.

    CREATE OBJECT EDITOR
      EXPORTING
        PARENT = CONTAINER
        WORDWRAP_MODE = CL_GUI_TEXTEDIT=>WORDWRAP_AT_FIXED_POSITION
        WORDWRAP_POSITION = 256
        WORDWRAP_TO_LINEBREAK_MODE = CL_GUI_TEXTEDIT=>TRUE.
  ENDIF.
*读入初始数据
  CALL METHOD EDITOR->SET_TEXT_AS_R3TABLE
    EXPORTING
      TABLE = M1.
ENDMODULE.

5.3、输出

程序运行后,屏幕显示文本编辑器,在编辑框内输入文字,如图

单击“CANCEL”按钮,退出文本编辑器屏幕,输出内表记录,如图

6、列表和屏幕相互调用

6.1、从屏幕输入条件,列表输出数据

以表为YTJAYSCHOOL例,建立一个输入字段和一个查询按钮的屏幕,当单击查询按钮时,根据该输入字段检索,将数据通过列表输出。

添加一个文本字段,并定义名称和文本,然后建立输入框,字段属性为输入输出字段,再添加“确认”按钮和“取消”按钮,如图

逻辑流程序如下

切换到元素清单页面,定义变量“OK_CODE”,如图

主程序代码如下

REPORT  YTEST20160614004.
DATA: OK_CODE TYPE SY-UCOMM,
      SAVE_OK TYPE SY-UCOMM,
      CITYID(20) TYPE C.
TABLES YTJAYSCHOOL.

CALL SCREEN 100.

MODULE CANCEL INPUT.
  LEAVE PROGRAM.
ENDMODULE.

MODULE USER_COMMAND_0100 INPUT.
  SAVE_OK = OK_CODE.
  CLEAR OK_CODE.
  IF SAVE_OK EQ 'BTN1'.
    LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.
    SUPPRESS DIALOG.
    SELECT *
      FROM YTJAYSCHOOL WHERE YCT_ID = CITYID.
      WRITE: / YTJAYSCHOOL-YCT_ID, YTJAYSCHOOL-YSH_ID,
               YTJAYSCHOOL-YSH_NAME, YTJAYSCHOOL-YSH_ADDR.
    ENDSELECT.
  ENDIF.
  WRITE:/ 'DONE'.
ENDMODULE.

输出结果如图所示,在输入框输入条件,单击“确认”按钮

系统输出如图

6.2、从列表调用屏幕

以YTJAYSCHOOL表为例,在屏幕上输出列表,当双击某一行时,调用屏幕显示数据明细。

首先建立程序YTEST20160615001,然后建立显示屏幕,在屏幕界面单击“字典字段”按钮,输入学校表后,屏幕显示表字段,选择字段,确认,如图

选择输出位置,单击后,系统自动创建输入文本和输出字段,添加退出按钮,如图

逻辑流程序如图

切换到元素清单页面后,定义变量“OK_CODE”,如图

主程序代码如下

REPORT  YTEST20160615001.

*功能码返回值
DATA: OK_CODE TYPE SY-UCOMM,
      SAVE_OK TYPE SY-UCOMM.

TABLES YTJAYSCHOOL.

START-OF-SELECTION.
  SELECT * FROM YTJAYSCHOOL.
    WRITE:/ YTJAYSCHOOL-YCT_ID, (15) YTJAYSCHOOL-YSH_ID,
          (15) YTJAYSCHOOL-YSH_NAME, (15) YTJAYSCHOOL-YSH_ADDR.

    HIDE: YTJAYSCHOOL-YCT_ID, YTJAYSCHOOL-YSH_ID,
           YTJAYSCHOOL-YSH_NAME,  YTJAYSCHOOL-YSH_ADDR.

  ENDSELECT.

AT LINE-SELECTION.
  CHECK NOT YTJAYSCHOOL-YSH_ID IS INITIAL.
  CALL SCREEN 100.

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.

执行结果如图

当选择某一行,输出结果如图

时间: 2024-10-26 23:54:17

ABAP实战屏幕SCREEN设计(二)的相关文章

ABAP实战屏幕SCREEN设计(一)

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

实战屏幕SCREEN总结

今天学习完了所有的基本屏幕设计案例,接下来分享下自己的学习总结. 1.屏幕设计Tcode:SE51,设计屏幕之前需要通过Tcode:SE38建立一个主程序. 2.在主程序下建立屏幕,屏幕号可以自己定义,通过格式按钮进入屏幕设计界面. 3.逻辑流设计:PBO(PROCESS BEFORE OUTPUT)和PAI(PROCESS AFTER INPUT)两大块. 4.程序中的功能码基本是固定的(尽量不要更改) DATA : save_ok TYPE sy-ucomm, ok_code TYPE sy

ABAP实战Smart Forms设计

Smart Forms是ABAP设计单据打印的工具,设计过程由两部分组成: (1)在Smart Forms设计单据的样式.输入输出数据接口: (2)编程调用设计单据.输出数据,实现打印输出. 本博文先以一个简单的例子,将Form与程序联调,快速了解整个设计过程,再详细介绍Smart forms相关设计及较复杂的例子. 1.一个简单的例子 本例完成有图标(公司LOGO).表头(公司名称).文字说明(表身).含当前时间的表尾的单据.打印预览界面如图 1.1.Form的制作 输入TCODE:SMART

【虚拟化实战】存储设计之六latency

在[虚拟化实战]存储设计之五IOPS中我们讲了评估存储性能的三个关键指标.也就是Throughput,IOPs和latency.以及三者之间的关系.本文深入介绍Latency过高的原因和一些建议. Latency过高直接导致在该存储上运行虚拟机以及其应用的性能降低.最终用户可能抱怨程序打不开,运行慢,响应时间长等等. 一   如何衡量Latency? Latency或者respondingtime,指完成一个IO请求所需要的时间.往往以milliseconds来衡量. 应用端发出的一个IO请求,

BI之SSAS完整实战教程6 -- 设计维度、细化维度上:创建维度定义特性关系

前面我们使用过数据源向导.数据源视图向导.Cube向导来创建相应的对象. 本篇我们将学习使用维度向导来创建维度. 通过前面几个向导的学习,我们归纳一下共同点,主要分成两步 1. 使用某种对象类型的向导创建对象,完成主要结构搭建 2. 使用相应的设计器完成最终对象的修改和细化 有点像送快递,先通过大的物流(创建对象向导)把货物送到相应的城市,再通过快递员(设计器进行细化)送到具体顾客手中. 同样的,我们使用维度向导以一种通用的方式来创建维度,然后根据自己的业务需求,使用维度设计器将创建的维度放置到

实战使用Axure设计App,使用WebStorm开发(5) – 实现页面功能

系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求  实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目   实战使用Axure设计App,使用WebStorm开发(3) – 构建页面架构  实战使用Axure设计App,使用WebStorm开发(4) – 实现页面UI 实战使用Axure设计App,使用WebStorm开发(5) – 实现页面功能 接上一篇系列文章,在本文中,将进一步的去实现页面功能.去实现输入

(转载)Android项目实战(三十二):圆角对话框Dialog

Android项目实战(三十二):圆角对话框Dialog 前言: 项目中多处用到对话框,用系统对话框太难看,就自己写一个自定义对话框. 对话框包括:1.圆角 2.app图标 , 提示文本,关闭对话框的"确定"按钮 难点:1.对话框边框圆角显示 2.考虑到提示文本字数不确定,在不影响美观的情况下,需要在一行内显示提示的文字信息   3.设置对话框的宽和高 技术储备: 1.安卓开发_使用AlertDialog实现对话框    知道AlertDialog有setView(view) ,Dia

实战使用Axure设计App,使用WebStorm开发(4) – 实现页面UI

系列文章 实战使用Axure设计App,使用WebStorm开发(1) – 用Axure描述需求 实战使用Axure设计App,使用WebStorm开发(2) – 创建 Ionic 项目 实战使用Axure设计App,使用WebStorm开发(3) – 构建页面架构 实战使用Axure设计App,使用WebStorm开发(4) – 实现页面UI 实战使用Axure设计App,使用WebStorm开发(5) – 实现页面功能 接上一篇系列文章,在本文中,将在WebStorm中继续开发,实现页面的功

Asp.Net MVC4.0 从入门到精通与项目实战 (Petapoco框架、二维码自定义、Bootstrap视图)视频教程

Asp.Net MVC4.0 从入门到精通与项目实战 (Petapoco框架.二维码自定义.Bootstrap视图)视频教程下载    联系QQ:1026270010 Asp.Net MVC 简介      MVC模式是“Model-View-Controller”的缩写,中文翻译为“模式-视图-控制器”.MVC模式是于20世纪70年代在smaltalk80的GUI设计中被提出的.它包括3个部分:模型(Model).视图(View)和控制器(Controller).MVC模式至今已被广泛使用,A