SAP-检查多个关联字段输入,以及有条件地调用模块

有时想作为一组检查几个字段。为此,请在 FIELD 语句中包含这些字段,并将它们放入  CHAIN-ENDCHAIN 块中。在示例事务 TZ31 中使用了 CHAIN 语句:
**** 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.
ENDMODULE 
在链块中,所有字段相互依赖。链内发现错误时,会重新显示屏幕,并允许输出链中任何地 方发现的字段,但仍不允许输入任何非链字段。在用户重新输入值(输入到链字段之一)之 后,重新启动 PAI 并将链中的所有语句作为一个单元重新执行。 链可以包括其它任何允许的流逻辑语言语句。而且,链可以包含多条 FIELD语句。一般情况 下,所有FIELD语句应出现在 CHAIN 块的开始处。
CHAIN. 
    FIELD: A, B, C.
    FIELD: D, E, F.
    MODULE X.
    MODULE Y.
ENDCHAIN.
允许将 MODULE 语句添加到包含在 CHAIN 块中的 FIELD 语句中,但这样实际上并没有意义:
CHAIN.
    FIELD F1.
    FIELD: F2, F3  MODULE m1. "( 在 F3后无周 期)
    MODULE m2.
ENDCHAIN.
如果模块 m 发现错误,则在重新显示时它打开所有要输入的链字段,而不只是 F2 和 F3。 只有当使用 AT- 或 ON- 条件之一时 ,用该方式使用 FIELD...MODULE 才意义。 可以在模块调用(从屏幕流逻辑)中设置条件。例如可以指定某模块只在给定字段具有值( 非初始值)时才被调用: FIELD X MODULE CHECK_FIELDX ON INPUT.
使用 FIELD 语句的条件形式,可以防止不必要的模块调用。尤其当更新表输入时,条件调用 可以极大地提高性能。有关信息在下列主题中提供:
☆条件 FIELD 语句
添加 ON- 和 AT- 条件之后,FIELD...MODULE 流逻辑语句就变成了条件语句。请使用以下条 件指定何时 应调用模块 :
ON INPUT
只有当字段包含初始值以外的值时,才调用ABAP/4模块。此初始值由该字段的数据类型决定: 空格对应于字符字段,零对应于数字字段。如果用户将字段值更改回初始值,则 ON INPUT不 触发调用。(与 ON REQUEST 调用相比,此时它不触发调用。)
ON REQUEST
只有自上一屏幕显示以来用户已输入字段值时,才调用 ABAP/4模块。即使用户键入已存在的 值,值也象已变化了一样予以记数。
一般地,通过任何形式的“手工输入”都可以触发 ON REQUEST 条件。系统将设置字段的下列 方式 作为手工输入:
- 实际用户输入
- SET PARAMETER 字段输入(手工和自动两种)
- HOLD DATA 字段输入
- 用于参数事务的参数输入(CALL TRANSACTION...USING)
- 用于定制系统的全局字段(这些为某些字段指定自动设置)
所有这些符合 ON REQUEST 条件并将触发模块调用 。
ON *-INPUT
如果用户在字段的首字符中已经输入“*”,并且该字段在屏幕制作器中具有属性 *-entry, 则调用 ABAP/4 模块。可以在想只检查某些输入类型的例外情况下使用该选项。 有些条件只适用于 FIELD 语句,而其它条件则适用于 CHAIN 块中的 FIELD 语句。尤其是, ON- 和 AT- 条件在包含多字段但又未包含在 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 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 发现错误,则在错误对话框中重新打开这三个字段(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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值