FavoriteLoading
0

GUI status介绍及创建教程

[隐藏]

1, GUI介绍

GUI主要有:

1、 标题栏:当前屏幕的标题,GUI Title

2、 菜单条:包含了可扩展的菜单,其中每个子菜单项都指向一个应用程序的功能,其中“System”、“Help”两个菜单项不能被应用程序更改和扩展,因此这类菜单荋以及其中的子菜单项将出现在每一个应用的屏幕中。

每个屏幕都会有系统标准工具条(Standard Toolbar),包含的按钮代表了所有屏幕中都会用到的系统功能,如保存、回退、取消等。可以为菜单项和工具条项分配功能键(FunctionKeys),这样当用户在屏幕按下相应的功能键时,相当于执行了已经分配了这个功能的菜单项。

应用工具条(ApplicationToolbar)是与特定应用相关的工具条,集成了当前屏幕常用的功能。

142228266514827

将菜单条、标准工具条、功能键的设置以及应用工具条统称为“GUI Status”,使用SETPF-STATUS xxx来设置的。使用SET TITLEBAR xxx设置标题。

若为ABAP屏幕分配一个GUI Status、GUI Title,则该屏幕的所有后续屏幕缺省都有了该Status、Title,如果想在后续的子屏幕中更换成另外一个不同的Title,则需要重新设置

ABAP中维护GUI Status的工具叫Menu Painter。

除开“System”与“Help”菜单,最多还可以创建6个菜单项

142228278391598

2, GUI Status(Menu Painter)

GUI status为用户提供了屏幕范围内的功能,每一种功能都有一个Function Code,并且当用户选择这个功能时,就会触发PAI事件,在每PAI事件里,这些Function Code将会放到系统变量SYST-UCOMM(SY-UCOMM)中,并且分配给OK_CODE隐藏字段。在Screen中使用OK_CODE之前,必须在Screen Painter中给它分配一个名字。

(注:这里讲的是对话屏幕上的Status,如果是List Status,则不会有什么PAI事件,也不会将Function Code存储到什么OK_CODE,而是直接触发ABAP报表程序中的 AT USER-COMMAND 事件,可以在此事件中通过ABAP系统全局变量SY-UCOMM来接收传递过来的Function Code)

ABAP程序中的所有Function Code,除了按钮(还有复选框、单选按钮)的Function Code是在Screen Painter中分配的,其他都是在Menu Painter中进行定义与管理的:

142228289173169

GUI Status可以是让用户很方便的操作屏幕,它代替了命令行中的输入。当然我们可以不点击Menu bars、Standard toolbars、Application toolbars或者屏幕中的按钮,直接在Command Line中输入这些菜单、工具条与按钮所对应的Function Code,回车后也可以触发PAI事件。

2.1, Normal Status

142228300429724

此种类型的Status用在如下类型的普通屏幕

142228371673248

通过Menu Bar可以创建新的菜单,在创建时不需要分配键盘快捷键,但可以在Function Keys设置部分中的Freely Assigned Function Keys(此类型的Function Key——快捷键,可由用户自己自由分配)中为菜单设置一个键盘快捷键,这样不需要通过鼠标点击菜单而是通过所设置的快捷键来代替鼠标;

通过Application Toolbar创建应用工具条件上的按钮的过程中,会弹出一个设置快捷键的对话框要求设置快捷键,所以创建自定义应用工具条时一定要分配一个键盘快捷键;

Function Keys中的Standard Toolbar不需要设置快捷键(正是因为这些为标准工具条,已经为这些固有的图标绑定了快捷键,并且这些快捷键被系统所保留使用),因为这些是预设的标准工具条(因为标准工具条上有哪些功能图标是不能再由我们自己定义了,只能使用上面预设的那几个,如果要使用,只需要输入相应的Function code就代表开启此按钮了),并且已经固定分配了相应的快捷键,系统预设的快捷键如下

2016-09-07_22-03-00

具体的内置快捷键可以通过以下方式来查看:

142228499791768

另外,也可以设置一个与菜单或工具条按钮无关的纯粹的快捷键,如上面的Function Code为 SHORTCUT 的快捷键。

不管是菜单、工具条按钮、还是快捷键最终都会触发PAI事件,并且会将所对应的Function Code会存储到SY-UCOMM系统变量中。

上面的Recommended Function Key Setting(此类型的Function Key——快键捷,已经被系统推荐使用,所以最好不要另作其它用途,如F2为查看详情,相当于鼠标双击)部分的为推荐部分,当不输入FunctionCode时,相应的功能不会被激活,只要输入了Function code则会激活相应功能,Function Code可以任意,相应功能不需要我们写代码去实现了,因为系统已具备这样的功能。

Standard Toolbar栏中预设的图标按钮在默认情况是不会被激活的,只有当输入相应Function Code才会被激活,但此时在Standard Toolbar中只能点击它,具体的功能还是需要在ABAP程序中写代码来实现相应功能,这与Recommended Function Key Setting部分是不一样的

一般情况下,需至少激活Standard Toolbar中的Back (F3), Exit (shift+F3), and Cancel (F12)中的一个功能,并实现相应代码,以便用户能够离开屏幕(如果将的Funcode设为BACK、设置为EXIT、设置为BREAK时(具体什么值与屏幕的类型有关系:选择屏幕、List列表输出屏幕、对话屏幕都是不一样,如要使用系统提供的默认实现,则一定要按要求值给出,具体值请参考后面),会自动的leave program.对话屏幕好像就不行???,选择屏幕好像已自动实现)

下面这些Function Keys不会触发PAI事件,它们被保留下来用作其他的功能:

  •       F1 calls the field help调用字段的帮助
  •       F4 calls the input help调用输入帮助
  •       F10 places the cursor in the menu bar将光标定位到菜单条上

回车:standard toolbar中的回车键  默认就是被激活的,即使根本没有给屏幕设置过GUI status。只要用户在命令行中按回车键后(不管是否输入了内容),都会触发相应屏幕的PAI事件,并且输入的内容会被当作Function Code传递给SY-UCOMM或OK_CODE(在Screen中)字段(如果未输入,则不会输入到SY-UCOMM或OK_CODE中,但会触发PAI事件)

F2(鼠标双击):在预设中,F2已经与鼠标的双击关联起来了,F2已具有了鼠标双击的功能。当用户按了F2或在屏幕上双击了鼠标都会触发PAI事件,所以F2是一个很特别的键,一般不要拿来作其他功能使用。

Shift + F10(鼠标右键):该组合键已经被分配给了鼠标右击功能,不能再用于其他用途。注意:有时鼠标右键弹不出右键菜单,这是因为选中了快捷剪切和粘贴功能了,去掉即可,否则只能使用Shift + F10快捷键或者使用Shift+鼠标右击才能弹出右键菜单:

142228573549748

选择屏幕与List列表输入屏幕上的标准工具按钮FunctionCode需要如下输入才能使用系统提供的默认的功能(不需要我们再实现):

选择屏幕:

142229011511887

List列表:

142229038869385

2.2, Dialog BoxStatus

142229044174056

此种类型的Status用在如下类型模态屏幕中:

142229051672427

(注意:Dialog Box类型的Status没有Menu BarStandard Toolbar两项)

142229071982840

Reserved Function Keys部分为保留快捷键,如果要相应对应功能,只需要输入Function Code,但要注意的是Function code一定要为上面图中输入的,否则功能将不会被触发(这些功能也已经由系统实现了,我们不需要实现)。另外,如果将Reserved Function Keys部分所配置的Function Code又在Application Toolbar部分进行了分配,这些功能图标将会在对话框屏幕下方出现,如:

142229078544940

(但不知为什么上面红色字体的 ENTER 没有显示??后来找到原因了:是因为Function Code被去激活了:

142229091515509

142229099643095

该类型的Status用作右键菜单

142229105119995

可以将右键菜单链接到某些屏幕元素,包括输入输出字段、文本字段、表格控件以及屏幕区域等。

3, 创建Status

3.1, 快速创建(Status模板)

可以将系统标准GUI Status作为模板导入到当前程序中,在Menu Painter SE41 中选择系统菜单“Extras->Adjust template”。

将系统标准的GUI STATUS导入到当前的GUI STATUS中作为编辑的模板:

142229115263351

3.2, 标准Status拷贝

当需要为ALV报表或普通程序绘制Status时,我们先可以拷贝标准的Status,则在此基础上修改即可:

142229121672222

上面的ALV工具条是先拷贝自标准条,再在标准条上加一按钮,通过SE41,拷贝程序SAPLSLVC_FULLSCREEN的状态STANDARD_FULLSCREEN过来:

142229130898307

以上。