sap screen design

定义屏幕:

SAP 系统中的屏幕包括:

标准屏幕:

选择屏幕:

列表输出屏幕:

1. 标准屏幕必须隶属于一个类型为 L, M 或 F 的ABAP 程序, 其中需要设计的内容包括屏幕布局以及隐含在其后的流逻辑. 流逻辑则包含ABAP代码模块, 实际控制着屏幕的交互, 功能, 各事务流程(如后续屏幕设定), 当然还有设定屏幕的GUI状态, 包括菜单, 屏幕标题行和工具栏等.

2. 屏幕流逻辑分为两个基本处理块: PBO(process before output), 在向用户显示屏幕之前触发. PAI(process after input), 在用户进行某些屏幕行为(如回车)触发.

流逻辑模块是一种处理块, 是进行具体处理的ABAP代码, 在 MODULE/ENDMODULE之间定义.

对话屏幕中的字段则必须在ABAP程序中有相关的同名字段, 并在其间相互传输, 程序通过程序中的同名字段来控制屏幕字段的输出值, 并且接受用户在屏幕字段中的输入.

3. 屏幕调用序列.

一个ABAP事务程序可以包含一或多个屏幕, 当一个屏幕结束后,可以转向下一个屏幕,后序屏幕可通过屏幕属性或者ABAP程序来设定.

4. 屏幕属性.

后续屏幕, 如果没有设置该项, 则默认的后续屏幕为当前屏幕本身, 通过后续屏幕可以把事务中的一系列屏幕链接起来, 形成一个屏幕序列, 如果某个个屏幕的后续屏幕为 0, 则表明该屏幕是个屏幕序列的结束.

5. 布局设计.

屏幕元素的属性可以在程序中动态进行控制, 方法为在屏幕输出之前的一个PBO模块代码部分对系统内表 Screen的值进行修改. 所有的屏幕元素都存储在系统内表 screen 中, 可动态修改.

loop at screen.

if screen-name = ‘MOD‘.

screen-input = ‘0‘.

modify screen.

endif.

endloop.

上面的代码应属于一个PBO模块, 并在屏幕的PBO逻辑中被调用.

Screen 结构.

Name           屏幕字段名称

GROUP1         屏幕字段组1.

GROUP2         屏幕字段组2.

GROUP3         屏幕字段组3.

GROUP4         屏幕字段组4.

ACTIVE         字段可见并用于输入

REQUIRED       必需输入字段

INPUT          输入字段

OUTPUT         字段仅用于显示

INTENSIFIED    高亮显示字段

INVISIBLE      禁用字段

LENGTH         字段输出长度

6. 屏幕字段

除系统自动生成屏幕字段外, 还需要由程序员定义相应的ABAP程序字段, 二者要有相同的名称以及长度, 类型.

定义相应的ABAP字段的目的是用户屏幕和程序之间的数据传输,

在PBO处理逻辑中, 系统将程序字段的值传输给屏幕字段进行输出;

在PAI中, 系统把用户的输入数据传递给程序.

除去与屏幕输入输出元素对应的字段外, 还有一个特殊的屏幕字段-----OK 代码字段, 其作用是返回在屏幕和GUI状态中用户触发的功能代码. 在交互式报表中可以通过 SY-UCOMM返回用户选择的功能代码, 程序通过功能代码来在PAI模块中接收对应的功能代码.

7. 流控制逻辑.

在流逻辑定义中, Process 语句用于说明模块何时被调用, MODULE 语句中指定模块名, 告诉系统该事件调用的具体ABAP模块, 每一个流逻辑模块的内容都是由普通的ABAP代码组成的.

流逻辑中有四种典型的处理块, 由PROCESS引导, 在不同的情况下被触发.

Process before output.  (PBO)

...

在当前屏幕输出之前被触发.可用于屏幕初始化工作, 例如数据库选择, 屏幕元素动态设定等. 当所有的PBO模块结束后, 系统将显示当前用户屏幕.

Process after input. (PAI)

...

该事件在用户在屏幕中执行功能后被触发, 所有的PAI模块结束后, 屏幕可能调用后续屏幕或者回到上一个屏幕序列.

Process on help-request. (POH)

...

当用户要求查看帮助信息时(F1)被触发, 事件结束后, 返回当前屏幕.

Process on value-request. (POV)

...

当用户按下查询帮助按钮时(F4)被触发, 事件结束后交继续处理当前屏幕.

流逻辑语句.

流控制语言不同于普通的ABAP语言.

PROCESS          流逻辑事件块关键字

MODULE           调用ABAP程序中定义的对话模块

FIELD            定义屏幕字段赋给程序中相应字段的逻辑点

ON               FIELD 关键字语句选项

VALUES           FIELD 关键字语句选项

CHAIN            开始一个处理链

ENDCHAIN         结束一个处理链

CALL             调用子屏幕

LOOP             开始正理屏幕表格

定义和调用对话模块.

在ABAP模块池和可执行程序中, 可以在MODULE和ENDMODULE语句之间定义对话模块. 在屏幕PBO中调用的模块需要在其后加下OUTPUT. 在PAI模块则使用INPUT.

对话模块不专属于某个屏幕, 而是可以被程序中的任意多个屏幕所调用. 通过系统变量 sy-dynnr的返回值, 可以确定是哪个屏幕正在对其调用.

对话模块经常被存储在模块池中, 一个模块池中一般需要包含四个引用程序. 命名规则分别是:

programeTOP 存放全局数据

programeO01 存放PBO模块

programeI01 存放PAI模块

programeF01 存入功能模块

这种做法可以让程序结构非常清晰. 这些引用程序应该先于流逻辑模块创建, 流逻辑模块添加时, 系统将询问添加至哪个引用程序之中, 由程序员选择正确的位置.

需要注意的地方是在模块化的结构之中, 不存在局部数据对象, 所有定义在MODULE和ENDMODULE 语句之间的数据对象将被放置到整个程序的公用数据区域, 因此最好不要在该结构中出现数据的定义和声明语句, 而应将所有的数据声明放置在TOP引用程序的相关部分.

调用对话模块:

在屏幕逻辑语言中, 使用MODULE语句对在模块池等ABAP程序中定义的模块进行调用.

需要注意的是不要将屏幕流逻辑语句MODULE和ABAP中的模块定义语句相混淆.

屏幕一旦被调用, 系统就会触发PBO事件, 其中屏幕流逻辑将依次调用相应的ABAP PBO模块并运行其中的代码. 所有的PBO模块调用结束之后, 屏幕及其中所有元素显示给用户, 此后系统将控制权由应用服务器转交给显示服务器, 以接受用户的输入, 直至用户行为触发PAI事件. PAI事件触发后, 控制权又交给应用服务器, 并按次序调用其中的PAI模块对输入的数据进行处理, 所有的PAI事件运行结束之后将触发后续屏幕的PBO事件.

无条件调用:

通常情况下, 模块的调用顺序取决于在屏幕流逻辑中的出现次序. 在PAI事件块中, 系统首先将进行默认的输入正确性检查, 这意味着在调用第一个PAI模块之前, 用户在屏幕中输入时, 至少所有在属性被设为Required Filed 的字段均必须输入, 而且对于参照数据字典声明的字段, 还必须满足字典中定义的可能值列表和约束表中的限定.

但在某些情况下, 用户可能仅仅是为了退出当前屏幕, 却要输入很多数据, 或者不知道如何输入正确的数据, 又无法结束该事务, 为了避免这类情况, 可以使用一种与特殊功能代码模块, 无条件调用模块, 无论用户输入满足系统检查与否, 该模块都将先被调用.

类型为E的功能代码. 在属性对话框中将 Function type 设定为‘E‘. 如果用户触发了E类型功能, 在PAI中系统将忽略所有自动的字段检查并直接调用特定的Module语句(AT EXIT-COMMAND).

类型为E的PAI模块.  无论在PAI逻辑中出现在何位置, 该语句中指定的模块都将优先被调用. 在此之前, OK代码字段被传递至ABAP程序中同名字段, 但没有其他屏幕字段被传递至相应的ABAP字段.

PROCESS AFTER INPUT.

MODULE back AT EXIT-COMMAND.

....

ABAP 模块代码:

MODULE back INPUT.

IF ok_code = ‘BACK‘.

CLEAR ok_code.

SET SCREEN 0.

LEAVE SCREEN.

ENDIF.

ENDMODULE.

数据传输控制:

用户在屏幕中输入的数据可以通过系统自动控制和使用流逻辑语句控制两种不同的方式传递给程序.

系统自动传递:

在SAP系统中, 从当前屏幕的PAI开始到输出下个屏幕的PBO事件结束, 称为一个对话步骤.  如果不在流逻辑语句中对数据的传输过程进行任何控制的话, 系统自动将所有屏幕数据传递给ABAP程序, 在新的屏幕PBO事件即将结束之前, 即屏幕显示给用户时, 再将ABAP数据传递给相关的屏幕字段. 整个对话程序中, 所有与屏幕字段同名的全局数据(在ABAP模块也要定义), 均将在系统的应用服务器中进行该数据传递.

语句控制传递:

如果在流控制逻辑中使用了Field语句, 在Field语句中指定的字段的数据传输被延迟, 数据不是在PAI的起点被传输至ABAP程序, 而是直到实际执行该语句时, 指定字段的值才被传输到程序中. 如果屏幕字段出现在多条Field语句中, 则在出现该字段的第一条Field语句执行时传送字段值.

增加了Field语句之后(不论Field语句的位置), 只有位于该语句后面的模块才可以得到屏幕中被更新的数据值.

模块的条件调用:

有时, 同一个屏幕的PBO和PAI将反复循环出现, 如果每一次均将执行所有的ABAP模块并不十分必要.  使用Field语句的ON选项, 并结合CHAIN和MODULE等关键字语句, 可以实现模块的条件调用. 防止不必要的模块调用, 以提高系统的性能.

a.) 单字段条件调用.

使用FIELD语句的ON INPUT附加项, 可以指定某模块只在给定字段具有非初始值时才被调用.

FIELD dynfield MODULE mod ON INPUT.

只有字段 dynfield 包含非初始值时, 才调用ABAP模块mod.

还有一种:

FIELD dynfield MODULE mod ON REQUEST.

只有在该字段中输入值时(包括空值和原值), 才调用ABAP模块, 系统将以下设置字段的方式视为有值输入:

实际用户输入.

通过 SET PARAMETER 字段输入.

通过 HOLD DATA 功能设置.

用于事务调用时的参数输入.

用于整个定制系统的全局字段.

b.) 组合字段条件调用.

如查一个模块的条件调用与多个屏幕字段有关(即当一组屏幕字段中的任意一个满足某种条件, 则调用该模块),

需要用 CHAIN/ENDCHAIN结构将FIELD语句和字段及模块组合起来.

CHAIN.

FIELD: f1, f2,...

MODULE mod1 ON CHAIN-INPUT|CHAIN-REQUEST.

FIELD: g1, g2,...

MODULE mod2 ON CHAIN-INPUT|CHAIN-REQUEST.

...

ENDCHAIN.

Example:

CHAIN.

FIELD: a, b , c.

MODULE mod1 ON CHAIN-INPUT.

MODULE mod2.

ENDCHAIN.

如果字段 a, b, c 中任何一个具有不同于初始值的值, 则调用模块 mod1, 而模块 mod2 则始终被调用.

我们还可以在 CHAIN 语句链中, 将条件限制至特定字段, 可以将 MODULE 语句连接到相关 FIELD 语句.

Example:

CHAIN.

FIELD: a, b.

FIELD: c MODULE mod1 ON INPUT.

ENDCHAIN.

只有当字段 c 包含非初始值时, 才调用模块 x.

Example:

CHAIN.

FIELD:  a, b.

FIELD:  c MODULE mod1 ON CHAIN-INPUT.

ENDCHAIN.

当字段 a, b, c 中任一字段包含非初始值时, 都调用模块 mod1.

输入检查:

使用 FIELD 语句或者 FIELD 和 CHAIN 的语句组合, 可以实现在 ABAP/4 中进行字段输入检查.

a.)单个值检查:

屏幕流逻辑.

PROCESS AFTER INPUT.

FIELD spfli-airpfrom.

MODULE check_fr_airport.

ABAP 代码如下:

MODULE check_fr_airport INPUT.

SELECT * FROM sairport WHERE id = spfli-airpfrom.

IF sy-subrc NE 0.

MESSAGE E003 WITH spfli-airpfrom.

ENDIF.

ENDMODLE.

当有错误时, 屏幕重新显示, 只有 spfli-airpfrom 字段可接受新的输入.

b.) 检查多个字段.

放在 CHAIN/ENDCHAIN 链中, 在 CHAIN 链中所有字段相互依赖, 链内部任一字段发生错误输入时, 会重新显示屏幕, 并允许输入链中的任意字段.

CHAIN.

FIELD: spfli-carrid, spfli-connid.

MODULE check_flight.

ENDCHAIN.

在选择屏幕之后, 按了回车或F8会触发 At selection-screen 事件, 如果按了F8,这个事件块执行后, 继续触发start-of-selection, 如果按回车, 则重新显示当前选择屏幕.

在处理 at selection-screen 事件前, 用户输入会自动传给输入变量, 因此可以在这个事件块里面处理输入检查和权限检查.

MODULE module_name AT EXIT-COMMAND:只能在PAI中使用,会由于以"/E"开头或者E型的function而触发(一般就是Back、Exit、Cancel)

8. 调用屏幕.

实现屏幕动态调用的ABAP语句.

SET SCREEN next_screen_number.

为当前屏幕指定后续屏幕.

CALL SCREEN screen_number.

CALL TRANCTION tcode.

挂起当前屏幕序列, 进入新的屏幕或事务.

LEAVE SCREEN.

如果需要未完成当前屏幕控制流就要转入后续屏幕.

LEAVE TO SCREEN screen_number.

LEAVE TO TRANCTION tcode.

未完成当前屏幕就转入后续屏幕.

LEAVE TO SCREEN 0.

SET SCREEN 0.

LEAVE SCREEN.

中止当前屏幕.

9. 调用GUI状态.

SET PF-STATUS stat.

SET TITLEBAR stat.

10. ABAP事件执行顺序.

时间: 2024-10-11 04:50:56

sap screen design的相关文章

SAP简介

SAP公司(纽交所代码:SAP)成立于1972年,总部位于德国沃尔多夫市,在全球拥有6万多名员工,遍布全球130个国家,并拥有覆盖全球11,500家企业的合作伙伴网络.作为全球领先的企业管理软件解决方案提供商,SAP帮助各行业不同规模的企业实现卓越运营.从企业后台到公司决策层.从工厂仓库到商铺店面.从电脑桌面到移动终端—SAP助力用户和企业高效协作,获取商业洞见,并从竞争中脱颖而出.SAP的软件和服务能够帮助客户实现盈利性的运营,不断提升应变能力,实现可持续的增长.全球188个国家的232,00

CAT3 SAP tcode - Time Sheet: Display Times

CAT3 SAP tcode - Time Sheet: Display Times CAT3 (Time Sheet: Display Times) is a standard SAP transaction code available within R/3 SAP systems depending on your version and release level. Below for your convenience is a few details about this tcode

关于SAP S4 HANA 的13个问题

SAP S/4HANA的路线图是怎样的?价格是多少?下一步还将添加哪些新模块?莫不闻专业SAP问答平台结合SAP HANA及SAP HANA应用商务套件开发全球负责人Uwe Grigoleit帮大家整理了一些关于SAP新一代商务套件的关键问题.1.SAP S/4HANA能为客户带来哪些商业价值?投资回报期有多久?谁会是直接受益者?基于SAP HANA平台开发的SAP S/4HANA是全新一代的SAP商务套件.其特点是简化.高效以及一些非常瞩目的优势,比如:针对传统交易的大量规划和模拟选项.SAP

Object-Oriented Analysis and Design Using UML 翻译与学习 (目录)

Object-Oriented Analysis and Design Using UML 面向对象分析与使用UML设计 最近找了本书<Object-Oriented Analysis and Design Using UML>,这个书是Oracle培训里面的,同时也是获取scjd和scja可选的课程. 所以,我准备一边翻译,一边学习.嗯,只翻译重点. 转载请注明出处!!! Copyright 2010 Sun Microsystems, Inc., 4150 Network Circle,

Codelab for Android Design Support Library used in I/O Rewind Bangkok session

At the moment I believe that there is no any Android Developer who doesn't know about Material Design anymore since it officially becomes a design philosophy by shaking the world of design in passed year. Surprisingly that it was not easy to implemen

Codelab for Android Design Support Library

extends:http://inthecheesefactory.com/blog/android-design-support-library-codelab At the moment I believe that there is no any Android Developer who doesn't know about Material Design anymore since it officially becomes a design philosophy by shaking

SAP中的BOPF(Business Object Processing Framework)

https://www.cnblogs.com/hhelibeb/p/8227382.html 目录 BOPF代表什么? 谁在使用BOPF? 怎样才能使用BOPF? 应用基础设施的主要组件有哪些? UI和消费 处理集成 基础设施组件 编程模型包含哪些元素? 在哪些开发环境中BOPF可用? 注意 教程 正文 希望简化你的业务应用开发过程?业务对象处理框架(Business Object Processing Framework,以下简称BOPF)也许可以帮到你. BOPF是SAP Business

SAP MM 预留单据的历史修改记录?

在笔者眼里,SAP系统是一个高度严谨的软件系统.用户在SAP系统里的相关操作,系统都会做记录.用户对于系统的相关单据的增删改,SAP系统都有保留change history,并且可以很方便被人查询这些change history.但是笔者发现,并不是所有单据的修改,SAP系统都提供很好的查询change history的方式,比如Reservation单据. 如下的预留单ITEM,笔者有将数量由80改成了81, 笔者试图找到该预留单据的change history, 如同查询其它单据修改记录的方

【HANA系列】SAP HANA快捷键大全

公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA快捷键大全 前言部分 大家可以关注我的公众号,公众号里的排版更好,阅读更舒适. 正文部分 1. To open a new session - ctrl & +2. System Administration information ctrl + shift + F83. Manual entry of Trans