ABAP实战屏幕SCREEN设计(二)
来源:互联网 发布:手机淘宝上传宝贝教程 编辑:程序博客网 时间:2024/06/07 05:40
屏幕(SCREEN)是ABAP设计最重要的工作之一,SAP的单据、主数据维护等业务功能都使用屏幕,一个程序可以包含多个屏幕。
上一篇博文“ABAP实战屏幕SCREEN设计(一)”主要介绍了以下内容:
(1)第一个"HELLO WORLD" Screen程序
(2)工具条和菜单设计
(3)屏幕对象
(4)数据字典关联字段
(5)逻辑流
(6)下拉框设计
本篇博文将继续介绍剩下内容,主要包含
(1)修改屏幕状态
(2)子窗口(Subscreen)
(3)表条目控制
(4)定制控制,上载图片和在屏幕上显示图片实例
(5)文本编辑器
本节在屏幕上建立一个CHECKBOX、若干输入字段,将字段分成两个组,每一个组有一个BUTTON,单击组BUTTON,根据CHECKBOX的值更改字段组的属性,设计界面如图
窗口对象子屏幕范围对象用来定义一个子窗口在主窗口上的大小、位置等属性,通过逻辑流和主程序将对象关联到子窗口。
例如:建立一个主窗口和两个子窗口,在主窗口上再创建一个子窗口范围,增加两个按钮,单击按钮时切换子窗口。
单击“CANCEL”按钮,退出文本编辑器屏幕,输出内表记录,如图
添加一个文本字段,并定义名称和文本,然后建立输入框,字段属性为输入输出字段,再添加“确认”按钮和“取消”按钮,如图
系统输出如图
首先建立程序YTEST20160615001,然后建立显示屏幕,在屏幕界面单击“字典字段”按钮,输入学校表后,屏幕显示表字段,选择字段,确认,如图
选择输出位置,单击后,系统自动创建输入文本和输出字段,添加退出按钮,如图
当选择某一行,输出结果如图
上一篇博文“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.执行结果如图
当选择某一行,输出结果如图
1 0
- ABAP实战屏幕SCREEN设计(二)
- ABAP实战屏幕SCREEN设计(一)
- abap screen屏幕参数简介
- abap 选择屏幕事件AT SELECTION-SCREEN
- ABAP选择屏幕(SELECTION SCREEN)解析
- ABAP选择屏幕(SELECTION SCREEN)事件解析
- ABAP选择屏幕设计
- ABAP选择屏幕设计
- ABAP实战Form设计
- ABAP:参数输入屏幕SELECTION-SCREEN中的事件
- ABAP:参数输入屏幕SELECTION-SCREEN中的事件
- ABAP:参数输入屏幕SELECTION-SCREEN中的事件
- ABAP modify screen:修改屏幕,实现隐藏、禁止输入字段
- ABAP modify screen:修改屏幕,实现隐藏、禁止输入字段
- ABAP modify screen:修改屏幕,实现隐藏、禁止输入字段
- ABAP实战Smart Forms设计
- ABAP--关于ABAP的屏幕编程的SCREEN SEQUENCE的说明
- ABAP--关于ABAP的屏幕编程的SCREEN SEQUENCE的说明
- 二进制中1的个数
- 最长连续递增子序列
- 微信处理类
- 深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
- Java 枚举7常见种用法
- ABAP实战屏幕SCREEN设计(二)
- 强悍的 ubuntu —— 配置开机启动项
- 使用Spring的AOP实现接口方法执行时间记录
- keil .sct分散加载文件及其应用(重点必看)
- linux挂载新磁盘、分区和开机自动挂载
- Android5.0+(Percent 百分比布局)
- Javascript高级玩法
- 面试题47:不用加减乘除做加法
- git ssh key