第203章处理错误和消息文档格式.docx

上传人:b****1 文档编号:1478629 上传时间:2023-04-30 格式:DOCX 页数:23 大小:31.61KB
下载 相关 举报
第203章处理错误和消息文档格式.docx_第1页
第1页 / 共23页
第203章处理错误和消息文档格式.docx_第2页
第2页 / 共23页
第203章处理错误和消息文档格式.docx_第3页
第3页 / 共23页
第203章处理错误和消息文档格式.docx_第4页
第4页 / 共23页
第203章处理错误和消息文档格式.docx_第5页
第5页 / 共23页
第203章处理错误和消息文档格式.docx_第6页
第6页 / 共23页
第203章处理错误和消息文档格式.docx_第7页
第7页 / 共23页
第203章处理错误和消息文档格式.docx_第8页
第8页 / 共23页
第203章处理错误和消息文档格式.docx_第9页
第9页 / 共23页
第203章处理错误和消息文档格式.docx_第10页
第10页 / 共23页
第203章处理错误和消息文档格式.docx_第11页
第11页 / 共23页
第203章处理错误和消息文档格式.docx_第12页
第12页 / 共23页
第203章处理错误和消息文档格式.docx_第13页
第13页 / 共23页
第203章处理错误和消息文档格式.docx_第14页
第14页 / 共23页
第203章处理错误和消息文档格式.docx_第15页
第15页 / 共23页
第203章处理错误和消息文档格式.docx_第16页
第16页 / 共23页
第203章处理错误和消息文档格式.docx_第17页
第17页 / 共23页
第203章处理错误和消息文档格式.docx_第18页
第18页 / 共23页
第203章处理错误和消息文档格式.docx_第19页
第19页 / 共23页
第203章处理错误和消息文档格式.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第203章处理错误和消息文档格式.docx

《第203章处理错误和消息文档格式.docx》由会员分享,可在线阅读,更多相关《第203章处理错误和消息文档格式.docx(23页珍藏版)》请在冰点文库上搜索。

第203章处理错误和消息文档格式.docx

然后重复字段检查的过程。

有关信息由下列主题提供:

错误处理简介(页3–2)

检查屏幕字段的有效性(页3–4)

发布消息(页3–13)

示例事务:

检查字段输入(页3–17)

1错误处理简介

在正常的对话处理过程中,事务逐屏予以处理。

然而,如果出现错误,则系统重新显示出错的屏幕。

同时显示一则消息,并且,如果错误涉及到字段输入,那么该字段允许输入。

(所有其它字段保持固定值。

)这对用户怎样?

程序如何告诉ABAP/4处理器有必要重新显示?

请看错误处理示例事务TZ31。

TZ31(开发类SDWA)是用于显示和更新航班信息的小事务。

该事务允许系统自动进行字段检查,而且也包含指导其它错误检查的逻辑。

正常情况下,使用事务时,总是输入航空公司和航班标识符并按下ENTER。

然后系统以更新模式显示所有字段细节。

要作更改,请键入新信息并保存。

当输入错误时会发生什么情况?

假定未键入所需的信息而只按下ENTER。

(其中带“?

”的字段是所需的输入字段。

)系统自动检查,并向您发送消息:

TZ31还检查系统忽略的事情。

例如,更新显示时,输入了不存在的机场代码会发生什么情况?

程序向您发送消息:

 

在该屏幕上,只能更改机场字段。

所有其它输入都是固定的。

当更正机场并重新输入时,事务继续其它处理。

通过用TZ31测试,将看到进行几种字段检查。

一些由系统自动处理,而一些由程序处理:

_要求输入的字段有输入吗?

(自动)

“航空公司“和“航班号”字段在屏幕制作器中具有要求输入的属性。

系统自动检查这些字段是否从用户获得输入。

_输入的航空公司存在吗?

(自动)

在屏幕制作器中,“航空公司”字段声明为表字段SPFLI-CARRID。

在字典中,CARRID字段与检查表SCARR有外部关键字关系。

结果,系统自动检查SCARR中是否包含所有SPFLI-CARRID的输入。

_该航空公司的航班号存在吗?

(ABAP/4)

事务TZ31中的ABAP/4模块(CHECK_FLIGHT)检查为给定航线输入的航班号是否存在。

_起飞/到达城市:

它们存在吗?

“起飞城市”字段(SPFLI-CITYFROM)是检查表SGEOCITY的外部关键字。

系统自动检查在SGEOCITY表中是否找到该字段的输入。

_起飞/到达机场:

(ABAP/4)

ABAP/4模块检查输入的机场是否存在。

该章其余部分讲述如何设计处理错误的程序:

检查屏幕字段的有效性(页3–4)

发布消息(页3–13)

关于如何实现事务TZ31的讨论,参见:

示例事务:

如果想在系统中使用事务TZ31,请记住,可以使用数据浏览器查找给定航空公司代码的有效航班号。

要访问数据浏览器,请进入对象浏览器(在工作台中),然后选择“环境->

数据库浏览器->

表格目录”。

2检查屏幕字段的有效性

R/3系统提供检查屏幕字段的各种方法:

_由系统执行的自动字段检查

当适合进行自动字段检查时,使用它最容易。

系统在存储于ABAP/4字典的字段信息的基础上进行检查。

_在屏幕流逻辑中进行的检查

可以在屏幕的流逻辑中指定某些字段检查。

使用流逻辑语句FIELD...VALUES...来完成此操作,该语句指定屏幕字段的可能值列表。

系统甚至不输入ABAP/4模块,而检查这些值的屏幕字段输入。

结果,没有任何可用的ABAP/4代码就可以设计并测试屏幕。

_在ABAP/4中进行检查

当自动字段检查和FIELD...VALUES...流逻辑语句不够灵活时,可以编码ABAP/4模块以执行字段检查。

要触发该模块的调用,则可以在屏幕流逻辑中编码FIELD...MODULE...流逻辑语句。

详细信息,参见下列主题:

理解自动字段检查(页3–5)

检查屏幕流逻辑中的字段(页3–6)

在ABAP/4中检查字段(页3–7)

3理解自动字段检查

系统在屏幕字段中自动执行某些有效性检查。

在用户输入之后和PAI处理开始之前执行这些检查。

执行的自动检查类型如下:

_要求的输入

在屏幕制作器中,可以设置字段的要求输入(“要求输入”)属性。

完成此操作之后,系统就要求用户在输入PAI处理之前对该字段作相应的输入。

_正确数据格式

在屏幕制作器中,每个字段都有数据格式。

该格式限制了有效输入的种类。

例如,DATS字段(日期字段)是格式为YYYYMMDD的8字符的字符串。

所有字符都必须是数字。

子字符串MM和DD必须分别小于或等于12和31。

对于输入的给定月值,系统还检查日值是否有效。

当用户输入不符合数据格式要求的值时,系统重新显示屏幕直到更正输入为止。

_字段的有效值

在词典中,有两种方式将字段值限制到允许的集合中。

字段可以与其它表存在外部关键字关系,或者它的域可为该字段指定固定值列表。

对外部关键字字段,系统检查在相关检查表中能否找到用户的输入值。

对具有已定义固定值列表的字段,系统确保用户的输入值在列表中。

对外部关键字,可以用该字段存储预定义的错误消息。

如果字段的有效性测试失败,那么,系统重新显示屏幕并要求用户更改输入。

一旦重新输入,则将重复自动检查用户在其中输入新值的字段。

要扩展自动字段检查,可以定义自己的字段检查。

具体操作,参见:

检查单个字段(页3–7)

检查多个字段(页3–9)

有时想要编码处理(应在系统执行任何自动检查之前进行)。

该过程通常处理退出请求。

(例如,当用户要从事务中返回时,则无须在所需字段中输入值。

)要编码应在系统执行自动字段检查之前执行的逻辑,请使用流逻辑命令MODULE...ATEXIT-COMMAND。

详细信息,参见避免自动字段检查(页3–12)。

3检查屏幕流逻辑中的字段

用FIELD...VALUES流逻辑语句检查屏幕流逻辑中的字段值。

使用该语句,指定了可能值列表,而系统则将字段输入与该列表进行对比。

该语句的语法如下:

FIELD<

screenfield>

VALUES(<

value-list>

<

可以包括单个值或值区间。

所有值用单引号封闭。

例如:

FIELDSBOOK-CARRIDVALUES('

AA'

'

LH'

US'

).

FIELDSBOOK-CONNIDVALUES(BETWEEN'

1'

AND'

10'

NOT'

3'

如果用户输入的值不等于列表中的值(或不在指定区间内),则系统重新显示屏幕要求新输入。

下表显示<

的所有可能格式。

比较

语法

单值

('

value>

'

单值的补集

(NOT'

几个单值或补集

value1>

value2>

value3>

值区间

(BETWEEN'

某区间之外的值

(NOTBETWEEN'

要使用FIELD...VALUES选项,用于比较的字段必须具有数据类型CHAR或NUMC。

还必须记住在单引号中给定的所有值应大写。

4在ABAP/4中检查字段

要在ABAP/4中进行字段检查,请使用FIELD和CHAIN流逻辑语言语句。

FIELD语句的以下形式允许调用进行字段检查的ABAP/4模块:

FIELD<

field>

MODULE<

module>

.

FIELD语句可能包含多个MODULE调用:

:

module1>

MODULE<

module2>

也可以在FIELD语句中指定多个字段。

当用CHAIN语句链接多个字段检查时,它特别有用。

例如,FIELD语句的以下两种形式都是允许的:

CHAIN.

FIELD<

field1>

field2>

FIELD:

<

field3>

<

field4>

...<

fieldn>

MODULE<

ENDCHAIN.

ABAP/4模块发现错误时,就输出错误消息或警告以通知用户。

发布这些消息以提醒系统需要错误对话框。

系统重新显示屏幕,要求用户为出错的字段输入新值。

所有其它字段都不允许输入。

如果找到错误,那么,屏幕就使用CHAIN语句重新显示链中允许输入的所有字段。

有关信息在下列主题中提供:

有条件地调用模块(页3–10)

避免自动字段检查(页3–12)

4检查单个字段

FIELD...MODULE流逻辑语句使您将有效性检查与特定屏幕字段联系起来。

FIELD...MODULE触发对检查特定字段的ABAP/4模块的调用,并且一发现错误就发送错误消息。

在这种情况下,系统重新显示屏幕,并禁止输入除指定字段以外的其他所有字段。

要通知系统已发现错误,ABAP/4模块必须输出错误消息(类型E)或警告(类型W)。

例如:

****Screenflowlogic:

****

PROCESSAFTERINPUT.

FIELDSPFLI-AIRPFROM

MODULECHECK_FR_AIRPORT.

****ABAP/4module:

MODULECHECK_FR_AIRPORTINPUT.

SELECTSINGLE*FROMSAIRPORT

WHEREID=SPFLI-AIRPFROM.

IFSY-SUBRCNE0.MESSAGEE003WITHSPFLI-AIRPFROM.ENDIF.

ENDMODULE

错误消息导致系统重新显示屏幕并要求用户输入新值。

重新显示时,只有SPFLI-AIRPFROM字段可接纳新的输入。

而其它所有字段则不允许输入。

有关错误消息的详细信息,参见发布消息(页3–13)。

FIELD语句如何传送数据

系统将数据从屏幕传送到ABAP/4程序时,对每个屏幕显示只传送一次。

一般都是在系统已经执行完自动字段检查之后PAI处理开始时才传送。

但是也有例外。

FIELD语句中所提及字段的数据传送被延迟,直到实际执行FIELD语句。

如果屏幕字段出现在多条FIELD语句中,则只在使用该字段的第一条FIELD语句中的传送字段值。

因为在数据从屏幕传送之前不应在ABAP/4模块中使用字段,所以传送时间非常重要。

若此,则ABAP/4字段将包含在用户的屏幕输入之前就已存在的值。

该值可能是上一屏幕保留的值,也可能是无效的值。

在多条FIELD语句中使用某字段

有时需要在多条FIELD语句中指定相同字段。

这使得错误处理更复杂。

当某模块发现错误时,系统重新显示屏幕并用更正的输入重新启动PAI处理。

然而,系统无法用包含该模块的FIELD语句简单地重新启动。

此出错的字段也可能在某条更早的FIELD或CHAIN语句中出现过。

在这种情况下,系统有确定应在何处重新启动处理的专门程序。

详细信息,参见在错误对话框之后重新启动PAI(页3–15)。

5检查多个字段

有时想作为一组检查几个字段。

为此,请在FIELD语句中包含这些字段,并将它们放入CHAIN-ENDCHAIN块中。

在示例事务TZ31中使用了CHAIN语句:

CHAIN.

FIELD:

SPFLI-CARRID,SPFLI-CONNID.

MODULECHECK_FLIGHT.

MODULECHECK_FLIGHTINPUT.

SELECTSINGLE*FROMSPFLI

WHERECARRID=SPFLI-CARRID

ANDCONNID=SPFLI-CONNID.

IFSY-SUBRCNE0.

MESSAGEE005WITHSPFLI-CARRIDSPFLI-CONNID.

ENDIF.

*.....

在链块中,所有字段相互依赖。

链内发现错误时,会重新显示屏幕,并允许输出链中任何地方发现的字段,但仍不允许输入任何非链字段。

在用户重新输入值(输入到链字段之一)之后,重新启动PAI并将链中的所有语句作为一个单元重新执行。

链可以包括其它任何允许的流逻辑语言语句。

而且,链可以包含多条FIELD语句。

一般情况下,所有FIELD语句应出现在CHAIN块的开始处。

CHAIN.

A,B,C.

D,E,F.

MODULEX.

MODULEY.

允许将MODULE语句添加到包含在CHAIN块中的FIELD语句中,但这样实际上并没有意义:

FIELDF1.

F2,F3MODULEm1."

(在F3后无周期)

MODULEm2.

如果模块m发现错误,则在重新显示时它打开所有要输入的链字段,而不只是F2和F3。

只有当使用AT-或ON-条件之一时,用该方式使用FIELD...MODULE才意义。

详细信息,参见条件CHAIN语句(页3–11)。

6有条件地调用模块

可以在模块调用(从屏幕流逻辑)中设置条件。

例如,可以指定某模块只在给定字段具有值(非初始值)时才被调用:

FIELDXMODULECHECK_FIELDXONINPUT.

使用FIELD语句的条件形式,可以防止不必要的模块调用。

尤其当更新表输入时,条件调用可以极大地提高性能。

有关信息在下列主题中提供:

条件FIELD语句(页3–10)

条件CHAIN语句(页3–11)

6条件FIELD语句

添加ON-和AT-条件之后,FIELD...MODULE流逻辑语句就变成了条件语句。

请使用以下条件指定何时应调用模块:

_ONINPUT

只有当字段包含初始值以外的值时,才调用ABAP/4模块。

此初始值由该字段的数据类型决定:

空格对应于字符字段,零对应于数字字段。

如果用户将字段值更改回初始值,则ONINPUT不触发调用。

(与ONREQUEST调用相比,此时它不触发调用。

_ONREQUEST

只有自上一屏幕显示以来用户已输入字段值时,才调用ABAP/4模块。

即使用户键入已存在的值,值也象已变化了一样予以记数。

一般地,通过任何形式的“手工输入”都可以触发ONREQUEST条件。

系统将设置字段的下列方式作为手工输入:

-实际用户输入

-SETPARAMETER字段输入(手工和自动两种)

-HOLDDATA字段输入

-用于参数事务的参数输入(CALLTRANSACTION...USING)

-用于定制系统的全局字段(这些为某些字段指定自动设置)

所有这些符合ONREQUEST条件并将触发模块调用。

_ON*-INPUT

如果用户在字段的首字符中已经输入“*”,并且该字段在屏幕制作器中具有属性*-entry,则调用ABAP/4模块。

可以在想只检查某些输入类型的例外情况下使用该选项。

有些条件只适用于FIELD语句,而其它条件则适用于CHAIN块中的FIELD语句。

尤其是,ON-和AT-条件在包含多字段但又未包含在CHAIN块中的FIELD语句中有特殊意义,。

详细信息,参见检查多个字段(页5)。

6条件CHAIN语句

要在条件CHAIN中调用模块,有两个选项:

_ONCHAIN-INPUT

类似于ONINPUT。

如果链中的任一字段包含初始值(空值或零)以外的值,则调用ABAP/4模块。

_ONCHAIN-REQUEST

该条件功能类似于ONREQUEST,但是如果链中的任一字段的值发生更改,则调用ABAP/4模块。

MODULEXONCHAIN-INPUT.

在此,如果字段A、B、C、D、E和F中任何一个具有不同于初始值的值,则调用模块X。

而始终调用模块Y。

如果Y发现错误,则在错误对话期间,重新打开这六个字段并等待输入。

要将条件限制到特定字段,请将MODULE语句连接到相关FIELD语句。

A,B,CMODULEXONINPUT.

在该示例子中,只有当列表(C)中的最后字段包含非初始值的值时,才调用模块X。

但是,如果X发现错误,则在错误对话框中重新打开这三个字段(A,B,C)并等待输入。

有时想要的调用只取决于几个字段,而不是其它字段。

为明确起见,将正在使用的链断开并为独立字段组合创建独立链是最简单的。

在每种情况下,都使用ONCHAIN-INPUT或ONCHAIN-REQUEST。

例如:

A,B,CMODULEXONCHAIN-REQUEST.

A,B,D,EMODULEYONCHAIN-REQUEST.

7避免自动字段检查

在进行自动字段检查之前,有时希望系统执行某种处理逻辑。

例如,如果用户想从屏幕退出,则无须在需要输入的字段中输入数据。

流逻辑关键字ATEXIT-COMMAND在流逻辑中是MODULE语句的特殊附加部分。

ATEXIT-COMMAND允许在系统执行自动字段检查之前调用模块:

MODULEEXITATEXIT-COMMAND.

要使用ATEXIT-COMMAND,则必须将功能类型E赋给菜单制作器或屏幕制作器中的相关功能。

在屏幕制作器中,调用用于所需按钮的属性,并将属性“FctType”设置为“E”。

在菜单制作器中,选择“转向->

功能列表”,然后在“类型”列中为每个应作为退出命令的功能代码输入E。

一旦已经将功能定义为类型E,则在执行任何字段检查之前,可以用ATEXIT-COMMAND选项告诉系统处理所有与该功能相关的ABAP/4模块。

只有当用户激活定义为类型E的功能时,才触发ATEXIT-COMMAND事件。

MODULEEXITINPUT.

CASEOK_CODE.

WHEN'

NEW'

CLEAR:

SPFLI,OK_CODE.

LEAVESCREEN.

CANC'

CLEAROK_CODE.

SETSCREEN0.LEAVESCREEN.

ENDCASE.

ENDMODULE.

正常情况下

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2