ABAP实战屏幕SCREEN设计
Posted Jay_1989
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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、向导制作
在设计屏幕上创建“表条目控制制作向导”对象,启动向导程序,如图
以上是关于ABAP实战屏幕SCREEN设计的主要内容,如果未能解决你的问题,请参考以下文章
ABAP 开发中 CALL SCREEN '100'. 这个具体怎么使用来着?
ABAP 如何获取屏幕输入的字段,不是选择屏幕,是screen painter中用数据库直接生成的可以输入的字段?