ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:31.56KB ,
资源ID:10270870      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10270870.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第203章处理错误和消息.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第203章处理错误和消息.docx

1、第203章 处理错误和消息第三章 处理错误和 消息概览内容错误处理简 介 检查屏幕字 段的有效性 理解自动字 段检查 检查屏幕流 逻辑中的字 段 在 ABAP/4 中检查字段 检查单个字 段 检查多个字 段 有条件地调 用模块 条件 FIELD 语句 条件 CHAIN 语句 避免自动字 段检查 发布消息 发送消息 创建消息类 创建消息 当用户键入 屏幕输入时 ,事务在使 用此输入之 前必须检查 其是否合法 。SAP 系统提供了 错误处理的 特征以尽可 能地简化字 段检查过程 。这些特征 包括用于编 辑错误处理 程序的关键 字,以及对 话处理运行 时间环境方 面的因素:_ 自动字段 检查(由系

2、统执行)某些字段检 查以存储在 ABAP/4 字典上的信 息为基础, 由系统自动 执行。_ FIELD 和 CHAIN 语句(在流 逻辑语言中 )FIELD 和 CHAIN 流逻辑语句 允许用户设 计自己的字 段检查。FIELD和 CHAIN 告诉系统正 在检查哪些 字段,以及 系统是在流 逻辑中进行 检查还是调 用ABAP/4模 块。如果发 现错误,则 系统为用户 输入一错误 对话。_ MESSAGE 语句(在 ABAP/4中 )MESSAGE语 句(在 ABAP/4中 )允许用户 从 ABAP/4 程序中输出 消息。ABAP/4 程序通过输 出错误消息 或警告将错 误通知系统 。相应地,

3、系统为用户 输入错误对 话。_ 错误对话 (由系统执 行)系统或 ABAP/4 模块都可以 检测错误。 无论是哪种 情况,只要 发现错误, 系统就自动 重新显示屏 幕并输出消 息。错误通常是 由于特定字 段。重新显 示时,引起 错误的字段 允许输入, 而其它所有 字段则禁止 输入。系统 将光标定位 于错误字段 中,并且要 求用户重新 输入。然后 重复字段检 查的过程。有关信息由 下列主题提 供:错误处理简 介 (页 32) 检查屏幕字 段的有效性 (页 34) 发布消息 (页 313) 示例事务: 检查字段输 入 (页 317) 错误处理简 介在正常的对 话处理过程 中,事务逐 屏予以处理 。

4、然而,如 果出现错误 ,则系统重 新显示出错 的屏幕。同 时显示一则 消息,并且 ,如果错误 涉及到字段 输入,那么 该字段允许 输入。(所 有其它字段 保持固定值 。)这对用 户怎样?程 序如何告诉 ABAP/4 处理器有必 要重新显示 ? 请看错误处 理示例事务 TZ31。 TZ31 (开发类 SDWA) 是用于显示 和更新航班 信息的小事 务。该事务 允许系统自 动进行字段 检查,而且 也包含指导 其它错误检 查的逻辑。正常情况下 ,使用事务 时,总是输 入航空公司 和航班标识 符并按下 ENTER 。然后系统 以更新模式 显示所有字 段细节。要 作更改,请 键入新信息 并保存。当输入错

5、误 时会发生什 么情况?假 定未键入所 需的信息而 只按下 ENTER。 (其中带“ ?”的字段 是所需的输 入字段。) 系统自动检 查,并向您 发送消息:TZ31 还检查系统 忽略的事情 。例如,更 新显示时, 输入了不存 在的机场代 码会发生什 么情况?程 序向您发送 消息: 在该屏幕上 ,只能更改 机场字段。 所有其它输 入都是固定 的。当更正 机场并重新 输入时,事 务继续其它 处理。通过用 TZ31 测试,将看 到进行几种 字段检查。 一些由系统 自动处理, 而一些由程 序处理:_ 要求输入 的字段有输 入吗?(自 动)“航空公司 “和“航班 号”字段在 屏幕制作器 中具有要求 输入

6、的属性 。系统自动 检查这些字 段是否从用 户获得输入 。_ 输入的航 空公司存在 吗? (自动)在屏幕制作 器中,“航 空公司”字 段声明为表 字段 SPFLI-CARRID。 在字典中, CARRID 字段与检查 表 SCARR 有外部关键 字关系。结 果,系统自 动检查 SCARR 中是否包含 所有 SPFLI-CARRID 的输入。_ 该航空公 司的航班号 存在吗?( ABAP/4)事务 TZ31 中的 ABAP/4 模块(CHECK_FLIGHT) 检查为给定 航线输入的 航班号是否 存在。_ 起飞/到 达城市:它 们存在吗? (自动)“起飞城市 ”字段(SPFLI-CITYFROM

7、) 是检查表 SGEOCITY 的外部关键 字。系统自 动检查在 SGEOCITY 表中是否找 到该字段的 输入。 _ 起飞/到 达机场:它 们存在吗? (ABAP/4)ABAP/4 模块检查输 入的机场是 否存在。 该章其余部 分讲述如何 设计处理错 误的程序: 检查屏幕字 段的有效性 (页 34) 发布消息 (页 313) 关于如何实 现事务 TZ31 的讨论,参 见: 示例事务: 检查字段输 入 (页 317) 如果想在系 统中使用事 务 TZ31, 请记住,可 以使用数据 浏览器查找 给定航空公 司代码的有 效航班号。 要访问数据 浏览器,请 进入对象浏 览器(在工 作台中), 然后选

8、择“ 环境 - 数据库浏览 器 - 表格目录” 。检查屏幕字 段的有效性R/3 系统提供检 查屏幕字段 的各种方法 :_ 由系统执 行的自动字 段检查当适合进行 自动字段检 查时,使用 它最容易。 系统在存储 于 ABAP/4 字典的字段 信息的基础 上进行检查 。_ 在屏幕流 逻辑中进行 的检查可以在屏幕 的流逻辑中 指定某些字 段检查。使 用流逻辑语 句 FIELD.VALUES. 来完成此操 作,该语句 指定屏幕字 段的可能值 列表。系统 甚至不输入 ABAP/4 模块,而检 查这些值的 屏幕字段输 入。结果, 没有任何可 用的 ABAP/4 代码就可以 设计并测试 屏幕。 _ 在 AB

9、AP/4 中进行检查当自动字段 检查和 FIELD.VALUES. 流逻辑语句 不够灵活时 ,可以编码 ABAP/4 模块以执行 字段检查。 要触发该模 块的调用, 则可以在屏 幕流逻辑中 编码 FIELD.MODULE. 流逻辑语句 。 详细信息, 参见下列主 题:理解自动字 段检查 (页 35) 检查屏幕流 逻辑中的字 段 (页 36) 在 ABAP/4 中检查字段 (页 37) 理解自动字 段检查系统在屏幕 字段中自动 执行某些有 效性检查。 在用户输入 之后和 PAI 处理开始之 前执行这些 检查。执行 的自动检查 类型如下:_ 要求的输 入在屏幕制作 器中,可以 设置字段的 要求输入

10、( “要求输入 ”)属性。 完成此操作 之后,系统 就要求用户 在输入 PAI 处理之前对 该字段作相 应的输入。_ 正确数据 格式 在屏幕制作 器中,每个 字段都有数 据格式。该 格式限制了 有效输入的 种类。例如 ,DATS 字段(日期 字段)是格 式为 YYYYMMDD 的 8 字符的字符 串。所有字 符都必须是 数字。子字 符串 MM 和 DD 必须分别小 于或等于 12 和 31。对于 输入的给定 月值,系统 还检查日值 是否有效。当用户输入 不符合数据 格式要求的 值时,系统 重新显示屏 幕直到更正 输入为止。_ 字段的有 效值在词典中, 有两种方式 将字段值限 制到允许的 集合中

11、。字 段可以与其 它表存在外 部关键字关 系,或者它 的域可为该 字段指定固 定值列表。 对外部关键 字字段,系 统检查在相 关检查表中 能否找到用 户的输入值 。对具有已 定义固定值 列表的字段 ,系统确保 用户的输入 值在列表中 。对外部关键 字,可以用 该字段存储 预定义的错 误消息。如果字段的 有效性测试 失败,那么 ,系统重新 显示屏幕并 要求用户更 改输入。一 旦重新输入 ,则将重复 自动检查用 户在其中输 入新值的字 段。要扩展自动 字段检查, 可以定义自 己的字段检 查。具体操 作,参见: 检查单个字 段 (页 37) 检查多个字 段 (页 39) 有时想要编 码处理(应 在系

12、统执行 任何自动检 查之前进行 )。该过程 通常处理退 出请求。( 例如,当用 户要从事务 中返回时, 则无须在所 需字段中输 入值。)要 编码应在系 统执行自动 字段检查之 前执行的逻 辑,请使用 流逻辑命令 MODULE . AT EXIT-COMMAND。 详细信息, 参见 避免自动字 段检查 (页 312) 。检查屏幕流 逻辑中的字 段用 FIELD.VALUES 流逻辑语句 检查屏幕流 逻辑中的字 段值。使用 该语句,指 定了可能值 列表,而系 统则将字段 输入与该列 表进行对比 。该语句的 语法如下:FIELD VALUES () 可以包括单 个值或值区 间。所有值 用单引号封 闭

13、。例如: FIELD SBOOK-CARRID VALUES (AA, LH, US). FIELD SBOOK-CONNID VALUES (BETWEEN 1 AND 10, NOT 3).如果用户输 入的值不等 于列表中的 值(或不在 指定区间内 ),则系统 重新显示屏 幕要求新输 入。下表显示 的所有可能 格式。 比较语法单 值()单 值的补集(NOT )几 个单值或补 集(, , NOT )值 区间(BETWEEN AND )某 区间之外的 值(NOT BETWEEN AND )要使用 FIELD.VALUES 选项,用于 比较的字段 必须具有数 据类型 CHAR 或 NUMC。 还

14、必须记住 在单引号中 给定的所有 值应大写。在 ABAP/4 中检查字段要在 ABAP/4 中进行字段 检查,请使 用 FIELD 和 CHAIN 流逻辑语言 语句。FIELD 语句的以下 形式允许调 用进行字段 检查的 ABAP/4 模块: FIELD MODULE .FIELD 语句可能包 含多个 MODULE 调用: FIELD : MODULE , MODULE .也可以在 FIELD 语句中指定 多个字段。 当用 CHAIN 语句链接多 个字段检查 时,它特别 有用。例如 ,FIELD 语句的以下 两种形式都 是允许的: CHAIN. FIELD . FIELD . FIELD: ,

15、 , . . MODULE . MODULE . ENDCHAIN.ABAP/4 模块发现错 误时,就输 出错误消息 或警告以通 知用户。发 布这些消息 以提醒系统 需要错误对 话框。系统 重新显示屏 幕,要求用 户为出错的 字段输入新 值。所有其 它字段都不 允许输入。 如果找到错 误,那么, 屏幕就使用 CHAIN 语句重新显 示链中允许 输入的所有 字段。有关信息在 下列主题中 提供:检查单个字 段 (页 37) 检查多个字 段 (页 39) 有条件地调 用模块 (页 310) 避免自动字 段检查 (页 312) 检查单个字 段FIELD.MODULE 流逻辑语句 使您将有效 性检查与特

16、 定屏幕字段 联系起来。 FIELD.MODULE 触发对检查 特定字段的 ABAP/4 模块的调用 ,并且一发 现错误就发 送错误消息 。在这种情 况下,系统 重新显示屏 幕,并禁止 输入除指定 字段以外的 其他所有字 段。要通知系统 已发现错误 ,ABAP/4 模块必须输 出错误消息 (类型 E)或警告 (类型 W)。例如 :* Screen flow logic: *PROCESS AFTER INPUT. FIELD SPFLI-AIRPFROM MODULE CHECK_FR_AIRPORT.* ABAP/4 module: *MODULE CHECK_FR_AIRPORT INPU

17、T. SELECT SINGLE * FROM SAIRPORT WHERE ID = SPFLI-AIRPFROM. IF SY-SUBRC NE 0. MESSAGE E003 WITH SPFLI-AIRPFROM. ENDIF.ENDMODULE 错误消息导 致系统重新 显示屏幕并 要求用户输 入新值。重 新显示时, 只有 SPFLI-AIRPFROM 字段可接纳 新的输入。 而其它所有 字段则不允 许输入。有关错误消 息的详细信 息,参见发布消息 (页 313) 。FIELD 语句如何传 送数据系统将数据 从屏幕传送 到 ABAP/4 程序时,对 每个屏幕显 示只传送一 次。一般都

18、是在系统已 经执行完自 动字段检查 之后 PAI 处理开始时 才传送。但是也有例 外。FIELD 语句中所提 及字段的数 据传送被延 迟,直到实 际执行 FIELD 语句。如果 屏幕字段出 现在多条 FIELD 语句中,则 只在使用该 字段的第一 条 FIELD 语句中的传 送字段值。因为在数据 从屏幕传送 之前不应在 ABAP/4 模块中使用 字段,所以 传送时间非 常重要。若 此,则 ABAP/4 字段将包含 在用户的屏 幕输入之前 就已存在的 值。该值可 能是上一屏 幕保留的值 ,也可能是 无效的值。在多条 FIELD 语句中使用 某字段有时需要在 多条 FIELD 语句中指定 相同字段

19、。 这使得错误 处理更复杂 。当某模块 发现错误时 ,系统重新 显示屏幕并 用更正的输 入重新启动 PAI 处理。然而 ,系统无法 用包含该模 块的 FIELD 语句简单地 重新启动。 此出错的字 段也可能在 某条更早的 FIELD 或 CHAIN 语句中出现 过。在这种 情况下,系 统有确定应 在何处重新 启动处理的 专门程序。 详细信息, 参见 在错误对话 框之后重新 启动 PAI (页 315) 。检查多个字 段有时想作为 一组检查几 个字段。为 此,请在 FIELD 语句中包含 这些字段, 并将它们放 入 CHAIN-ENDCHAIN 块中。在示 例事务 TZ31 中使用了 CHAIN

20、 语句:* Screen flow logic: *CHAIN. FIELD: SPFLI-CARRID, SPFLI-CONNID. MODULE CHECK_FLIGHT. ENDCHAIN.* ABAP/4 module: *MODULE CHECK_FLIGHT INPUT. SELECT SINGLE * FROM SPFLI WHERE CARRID = SPFLI-CARRID AND CONNID = SPFLI-CONNID. IF SY-SUBRC NE 0. MESSAGE E005 WITH SPFLI-CARRID SPFLI-CONNID. ENDIF.* .END

21、MODULE 在链块中, 所有字段相 互依赖。链 内发现错误 时,会重新 显示屏幕, 并允许输出 链中任何地 方发现的字 段,但仍不 允许输入任 何非链字段 。在用户重 新输入值( 输入到链字 段之一)之 后,重新启 动 PAI 并将链中的 所有语句作 为一个单元 重新执行。链可以包括 其它任何允 许的流逻辑 语言语句。 而且,链可 以包含多条 FIELD 语句。一般 情况下,所 有 FIELD语 句应出现在 CHAIN 块的开始处 。 CHAIN. FIELD: A, B, C. FIELD: D, E, F. MODULE X. MODULE Y. ENDCHAIN.允许将 MODULE

22、语句添加到 包含在 CHAIN 块中的 FIELD 语句中,但 这样实际上 并没有意义 : CHAIN. FIELD F1. FIELD: F2, F3 MODULE m1. ( 在 F3后无周 期) MODULE m2. ENDCHAIN.如 果模块 m 发现错误, 则在重新显 示时它打开 所有要输入 的链字段, 而不只是 F2 和 F3。 只有当使用 AT- 或 ON- 条件之一时 ,用该方式 使用 FIELD.MODULE 才意义。详 细信息,参 见 条件 CHAIN 语句 (页 311) 。有条件地调 用模块可以在模块 调用(从屏 幕流逻辑) 中设置条件 。例如,可 以指定某模 块只在

23、给定 字段具有值 (非初始值 )时才被调 用: FIELD X MODULE CHECK_FIELDX ON INPUT.使用 FIELD 语句的条件 形式,可以 防止不必要 的模块调用 。尤其当更 新表输入时 ,条件调用 可以极大地 提高性能。 有关信息在 下列主题中 提供:条件 FIELD 语句 (页 310) 条件 CHAIN 语句 (页 311) 条件 FIELD 语句添加 ON- 和 AT- 条件之后, FIELD.MODULE 流逻辑语句 就变成了条 件语句。请 使用以下条 件指定何时 应调用模块 :_ ON INPUT只有当字段 包含初始值 以外的值时 ,才调用 ABAP/4 模

24、块。此初 始值由该字 段的数据类 型决定:空 格对应于字 符字段,零 对应于数字 字段。如果 用户将字段 值更改回初 始值,则 ON INPUT 不触发调用 。(与 ON REQUEST 调用相比, 此时它不触 发调用。)_ ON REQUEST只有自上一 屏幕显示以 来用户已输 入字段值时 ,才调用 ABAP/4 模块。即使 用户键入已 存在的值, 值也象已变 化了一样予 以记数。一般地,通 过任何形式 的“手工输 入”都可以 触发 ON REQUEST 条件。系统 将设置字段 的下列方式 作为手工输 入:- 实际用 户输入- SET PARAMETER 字段输入( 手工和自动 两种)- H

25、OLD DATA 字段输入- 用于参 数事务的参 数输入(CALL TRANSACTION.USING)- 用于定 制系统的全 局字段(这 些为某些字 段指定自动 设置)所有这些符 合 ON REQUEST 条件并将触 发模块调用 。_ ON *-INPUT如果用户在 字段的首字 符中已经输 入“*”, 并且该字段 在屏幕制作 器中具有属 性 *-entry, 则调用 ABAP/4 模块。可以 在想只检查 某些输入类 型的例外情 况下使用该 选项。有些条件只 适用于 FIELD 语句,而其 它条件则适 用于 CHAIN 块中的 FIELD 语句。尤其 是,ON- 和 AT- 条件在包含 多字段

26、但又 未包含在 CHAIN 块中的 FIELD 语句中有特 殊意义,。 详细信息, 参见 检查多个字 段 (页 ) 。条件 CHAIN 语句要在条件 CHAIN 中调用模块 ,有两个选 项:_ ON CHAIN-INPUT类似于 ON INPUT。 如果链中的 任一字段包 含初始值( 空值或零) 以外的值, 则调用 ABAP/4 模块。_ ON CHAIN-REQUEST该条件功能 类似于 ON REQUEST, 但是如果链 中的任一字 段的值发生 更改,则调 用 ABAP/4模 块。例如: CHAIN. FIELD: A, B, C. FIELD: D, E, F. MODULE X ON

27、CHAIN-INPUT. MODULE Y. ENDCHAIN.在此,如果 字段 A、B、C、 D、E 和 F 中任何一个 具有不同于 初始值的值 ,则调用模 块 X。而始终 调用模块 Y。 如果 Y 发现错误, 则在错误对 话期间,重 新打开这六 个字段并等 待输入。 要将条件限 制到特定字 段,请将 MODULE 语句连接到 相关FIELD 语句。 CHAIN. FIELD: A, B, C MODULE X ON INPUT. ENDCHAIN.在该示例子 中,只有当 列表(C) 中的最后字 段包含非初 始值的值时 ,才调用模 块X。但是 ,如果 X 发现错误, 则在错误对 话框中重新

28、打开这三个 字段(A, B,C)并 等待输入。有时想要的 调用只取决 于几个字段 ,而不是其 它字段。为 明确起见, 将正在使用 的链断开并 为独立字段 组合创建独 立链是最简 单的。在每 种情况下, 都使用 ON CHAIN-INPUT 或 ON CHAIN-REQUEST。 例如: CHAIN. FIELD: A, B, C MODULE X ON CHAIN-REQUEST. ENDCHAIN. CHAIN. FIELD: A, B, D, E MODULE Y ON CHAIN-REQUEST. ENDCHAIN.避免自动字 段检查 在进行自动 字段检查之 前,有时希 望系统执行 某种

29、处理逻 辑。例如, 如果用户想 从屏幕退出 ,则无须在 需要输入的 字段中输入 数据。 流逻辑关键 字 AT EXIT-COMMAND 在流逻辑中 是 MODULE 语句的特殊 附加部分。 AT EXIT-COMMAND 允许在系统 执行自动字 段检查之前 调用模块:* Screen flow logic: *PROCESS AFTER INPUT. MODULE EXIT AT EXIT-COMMAND.要使用 AT EXIT-COMMAND, 则必须将功 能类型 E 赋给菜单制 作器或屏幕 制作器中的 相关功能。 在屏幕制作 器中,调用 用于所需按 钮的属性, 并将属性“ FctType”

30、 设置为“E” 。在菜单制 作器中,选 择“转向 - 功能列表” ,然后在“ 类型”列中 为每个应作 为退出命令 的功能代码 输入 E。一旦已经将 功能定义为 类型 E, 则在执行任 何字段检查 之前,可以 用 AT EXIT-COMMAND 选项告诉系 统处理所有 与该功能相 关的 ABAP/4 模块。只有 当用户激活 定义为类型 E 的功能时, 才触发 AT EXIT-COMMAND 事件。* ABAP/4 module: *MODULE EXIT INPUT. CASE OK_CODE. WHEN NEW. CLEAR: SPFLI, OK_CODE. LEAVE SCREEN. WHEN CANC. CLEAR OK_CODE. SET SCREEN 0. LEAVE SCREEN. ENDCASE.

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1