文章目录
前言
屏幕开发是我们SAP开发经常会涉及到的内容,它属于M类型的程序,叫Dialog 程序,也可以叫Online程序、Screen程序、Module Pool程序、Dynpro程序。这些都说的是这个屏幕开发。屏幕开发是以界面为核心的。它强调的是可以让开发者自定义的去开发设计屏幕,它最重要的就是界面直接逻辑流的关系把数据显示处理之后还要和用户进行交互。例如如何切换分页签如何对展示的数据进行修改等等。
一、屏幕程序概览
1、主要涉及的对象
a.
界面(Screen)
界面是我们重点中的重点是核心我们叫它Screen有人叫屏幕也有叫界面,界面有两种开发方式一种是代码就好比我们报表程序的选择界面是用代码实现,还有一种就是通过(Screen Painter工具)绘制的也就是我们这里的界面了。
b.
模块池(Module Pool):
1.
全局字段(Global Data)::声明模块池中所有模块都可以使用的数据一般写在 TOP
这个包含程序中 用来声明我们这所有模块要使用的变量、对象的声明。
2.
PBO模块(PBO Modules): 屏幕输出前调用的模块一般写在 O01
这个包含程序中。 这个是用于在屏幕输出之前需要调用的一些模块就比如我即将要调用的界面的取数对数据的赋值处理等等。
3.
PAI模块(PAI Modules) 相应用户输入而调用的模块一般写在 I01
这个包含程序中。 就是用户有了输入、回车、点击、等等事件之后我们需要执行的一些操作。
4.
子程序(Subroutines): 可以在模块中任何位置调用的子程序一般写在 F01
这个包含程序中。
其实所谓的模块池就是把代码做一个分块分区而已更易于管理维护
c.
菜单(GUI Status)
d.
标题(GUI Title)
e.
事务代码(Transaction Code)
二、屏幕开发流程以及常用控件使用
1、创建程序并将程序分区分块
a.
创建Dialog程序
SE38 创建程序的时候选择类型为M类型的程序
b.
分区分块
然后将程序分区分块创建四个包含程序
c.
创建屏幕
我们创建的屏幕编号是从1到9999都可以,但是一般1000到1010的屏幕预留出来这个是给选择界面用的,我们创建屏幕编号一般是从100、200、300、。。这样以此类推的创建屏幕,因为我们屏幕有包含嵌套的关系,比如我100屏幕可以嵌套110、120、130、然后110下面又可以嵌套101、102、103,这样就可以很直观的查看界面直接的关系了。
屏幕属性以及分页签介绍
在上述图片中我们在Flow logic编写代码时,在屏幕调用出来之前针对这个屏幕的取数屏幕中控件属性的设置是隐藏、是必输、还是不可输入等等的都写在PBO下面,一旦界面显示出来之后用户有了交互性的操作比如点击按钮、回车等等这些都在PAI下面完成。在PBO,PAI下创建的MODULE都要放进对应的包含程序中,拿我当前创建的程序来看PBO下面的MODULE就放在ZTEST_SCREEN_GLYN002O01下,PAI下的MODULE就放在ZTEST_SCREEN_GLYN002I01下,其实无论放在哪个包含程序中都可以我们这样做只是为了将程序分区分块易于维护,这里面的MODULE我们也可以看作是子程序PERFORM只不过是叫法不同了。
需要注意Dialog程序不能直接执行,必须创建T-code指定界面执行,像创建的报表程序执行的屏幕画面默认是100,而我们的Dialog程序屏幕是我们自己创建的编号所以需要使用T-code指定执行哪个屏幕。
2、常用控件介绍
a.
进入Screen painter绘制工具界面
Screen painter工具介绍
控件介绍图表
b.
按钮绘制
我们先绘制一些简单的控件首先绘制一个退出按钮并赋予它退出的功能
1.
绘制退出按钮
2.
创建T-code并调用Dialog程序查看
运行T-code后我们会发现按钮已经显示在界面中但是点击是没有任何反应的
3.
实现按钮功能,既然按钮是和用户进行交互的动作那么这个代码逻辑我们就应该写在PAI下面。 我们可以看到当我们首次把屏幕创建好之后PAI下面默认为我们生成了一个USER_COMMAND_0100的MODULE,我们一般对按钮功能的实现都写在这个MODULE中,但这不代表我们按钮功能的实现就必须写在这个MODULE中也可以写在我创建的PAI_EXIT中,界面一旦有交互操作就会自上而下把PAI中的所有MODULE执行一边所以无论我们写在哪个MODULE中都可以。程序为我们自动生成的USER_COMMAND_0100只是为了更好的区分交互类型而已。
4.
退出按钮的逻辑代码实现
MODULE user_command_0100 INPUT.
CASE sy-ucomm."按钮用sy-ucomm判断
WHEN 'EXIT'."这个EXIT我们已在按钮的属性中设置了
LEAVE PROGRAM."如果点击了EXIT这个按钮那么就退出程序
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
5.
完成以上步骤之后我们可以执行T-code点击退出,可以看到我们的退出按钮已经起效果了,但其实我们一般是不会去这样实现退出按钮的功能的。而是通过MODULE EXIT AT EXIT-COMMAND.
这段代码的意思就是当我执行了E类型的按钮后执行EXIT这个MODULE中的逻辑代码。我们在绘制屏幕的时候已经将这个退出按钮设置为了E类型所以就会触发这个MODULE,和这个MODULE叫EXIT并没有任何关系。
6.
再定义一个返回按钮,绘制屏幕逻辑代码以及运行效果图如下
c.
绘制输入框以及文本描述
1.
再绘制一个输入框与输入框的描述控件
绘制好输入框后我们运行会发现当我们给这个输入框输入文本之后再回车输入框中的文本就会消失,这是因为我们程序的全局变量中没有定义一个接收这个输入框值的变量,当我们在程序中定义了一个和这个输入框name相同的变量那么它俩个就会形成一组然后相互传值。而且我们绘制的输入框值类型一定要和我们定义的变量类型一样不然会报错,我们按照下图的方式定义变量后再执行就可以发现回车之后输入框中的值不会再消失了。
既然在屏幕与程序变量之间传值的时候会有这样一个检测那么我们在绘制屏幕的时候就应该要参考程序中定义的变量来绘制,而不是两边分别定义,如果我们两边分开定义的话就容易出错,所以下面给大家介绍如果参照程序变量或者数据字典中的字段来绘制输入框。
如果我们需要参照数据库表字段来绘制输入框只需要将Table/Field Name中的*号换成表命然后点击Get from Dictionary即可获取到该表中的所有字段进行参考绘制。我们将这两个输入框绘制好之后可以在PBO下面创建一个MODULE来设置初始值。
上面我们在PBO中为输入框赋值了初始值,那么当我们更改输入框值再回车的时候我们就会发现PBO中的MODULE又会重新为输入框赋值,因为每次调用PAI就会调用PBO,这里的逻辑流我们要搞清楚,如果我们不想要这种效果那么就去声明变量中使用VALUE给变量赋初始值即可。
d.
数据检查
1.
我们还需要再了解学习一下数据检查,现在我们需要绘制一个输入框,用户输入一个程序名回车后我们提示系统中是否存在这个程序名,首先TRDIRT-NAME
参照这个声明一个变量,再参考这个变量绘制一个输入框并绘制一个说明文本。
检查数据不能使用MODULE必须使用FIELD 变量名 MODULE module名 ON REQUEST
这行代码 ON REQUEST 的意思就是数据变化时INPUT4 就是检测的变量 check—name就是执行的MODULE如果使用MODULE去检查的话当我们程序返回E类型消息后所有输入框就会变为不可输入状态导致程序无法进行下去。如果我们涉及到多字段一起检查需要使用CHAIN. FIELD1. FIELD2 FIELD3.等等. MODULE module名 ON REQUEST. ENDCHAIN.
这种多字段检查就是当数据库表涉及到多个主键的时候使用的,就如下图所示。
当我们有多个字段需要检查并且回车返回E类型消息之后想要使光标定位到指定输入框的时候我们可以使用 SET CURSOR FIELD 变量名(这个变量名要加单引号)
只能定位到检查的所有字段中的其中一个因为其他都会变为不可输入状态。
e.
单选框
1.
再练习一下单选框,我们设置一组单选框来选择性别,分别为 男、女、保密,当用户选择之后将选择的结果展示到单选框上面。
完成上述功能后我们会发现当选择单选框后我们需要回车一下才能给INPUT6赋值并在屏幕上展现,这是因为我们没有给单选框设置FunctionCode我们需要给它设置一个功能这样当我们每次选择的时候它就会触发PAI然后PAI再去触发PBO然后反馈到我们屏幕上。当我们给其中一个单选框设置了FunctionCode后我们会发现其他的自动设置了相同的这是因为它们是一组,因为我不可能选择男就是一个功能选择女就是另外一个功能了这样是不符合逻辑的。根据下图设置后我们就会发现现在只需要点击单选框后不用回车就可以看到效果了
f.
复选框
1.
我们再练习最后一个控件 复选框,当我们选择这个复选框后就隐藏我们性别选择的功能,其他的控件大家可以再研究研究,这个控件练习完后我们就开始绘制录入学生信息的界面,后面的内容我将不会再过多详细的解释有什么问题大家可以留言评论谢谢。
隐藏其实就是我把界面中的控件的隐藏属性值改变了,它是在我的界面显示之前我要获取到各个控件的属性,是必输、还是隐藏、还是可使用不可使用、等等这些属性,先获取一下再根据这些属性去界面当中显示控件,所以那这些设置属性的内容就在PBO中去实现。这些属性呢是存在与一个内表中叫 SCREEN 我们可以SE11 去查看这个表的结构 其中的name就是控件的名称,还有一些其他字段比如必输,是否可输,是否隐藏等等属性都在其中,我们对界面中整个控件属性的设置都是在操控编辑这个内表。这个表中呢大多数字段的值1为肯定 0为否定,比如INVISIBLE就是隐藏属性,当我们设置为1的时候就是要隐藏设置为0就是不隐藏。
在更改控件属性的时候一定要注意写在PBO中,然后判断的时候控件的name一定要跟绘制屏幕时候控件属性的name大小写保持一致,在上图的判断中其实有些繁琐了我们还可以给 这些控件分为一组,我们可以发现SCREEN这个内表的中有四个字段GROUP2、GROUP2、GROUP3、GROUP4、这其实就是给控件用于分组的作用,而且有四个就证明每个控件可以最多分四组。
运行效果是相同的
上述中的 input6 我是在绘制的时候就设置了只能输出不能输入,要隐藏掉输入框的话必须把只能输出(INPUT)和 隐藏(INVISIBLE)都要设置。INVISIBLE 这个属性 输入框设置了之后是密码不可见并不是隐藏掉输入框。所以我们需要将 SCREEN-INPUT设置为 0 将 SCREEN-INVISIBLE 设置为 1 。或者在绘制屏幕的时候就直接在属性选项里面设置好。
我们还可以设置BLOCK如下图所示
g.
ICON图标
1.
再介绍一下ICON图标的使用,比如我们要显示一个图标可以参考以下。
还可以使用另外一种方式赋值,WRITE ICON_FAILURE as icon to icon1.
就是将 SAP 的一个内置图标 ICON_FAILURE 写入到名为 icon1 的屏幕元素中。icon1+4(*) = 显示.
== 就是在icon1这个字符串的第四个位置将显示这个字符串写入,有点类似于拼接字符串。
查找图标的名称可以使用T-code ICON
,查找图标的代码可以在程序中引用类型池 ICON, TYPE-POOLS 关键字允许在 ABAP 程序中引入预定义的类型和常量,这些类型和常量通常是由 SAP 系统提供的。
h.
标题 及 标准按钮
1.
标题以及按钮设置
按钮功能代码实现以及运行效果展示
3、关于补充点
a.
Dialong程序常用关键字,
需要详细了解或者查看其他关键字我们可以进行F1帮助进行查看文档。
b.
Screen Painter 绘制屏幕各个控件属性界面介绍。
c.
如果后期我想起了有什么要补充的会继续写在这里,或者大家有什么想让我介绍的也可以评论私信我哦。
三、总结
以上就是今天要讲的内容,本文仅仅简单介绍了 SAP屏幕开发基础,感觉这篇文章自己有学到东西或者在今后的工作中能派上用场,可以点赞收藏支持!!!制作不易非常感谢,当然如果有说错或者不好的地方还望大家提出来见谅,欢迎大家评论指出不好的地方。谢谢!