SAP的ABAP4语言中文培训教材第三部分第十章编写字段 - 和值 - 帮助程序 联系客服

发布时间 : 星期二 文章SAP的ABAP4语言中文培训教材第三部分第十章编写字段 - 和值 - 帮助程序更新完毕开始阅读bd33ee22482fb4daa58d4b6f

1第十章 编写字段 - 和值 - 帮助程序 概览 F1 或为用户提供 当前光标所 在字段的帮 助文本。F4 或组合框( 如果可用的 话)提供可 在该字段中 输入的值的 列表。用户 可将列表中 的光标放到 所选值上并 按下 F2 或双击鼠标 ,将该值复 制到字段中 。

内容

编写字段 - 和值 - 帮助程序 ............................................................................................................ 1 定制 F4-值-请 求 ............................................................................................................................. 1 定制 F1-帮助 .................................................................................................................................... 4 字段 - 帮助的功能 模块 .................................................................................................................. 4 具有匹配代 码的字段-帮 助 ............................................................................................................. 5

用这种方法 输出的信息 保存在 ABAP/4 库中。在对 话程序中, 屏幕处理器 自动显示各 字段的数据 元素的帮助 文本。可能 值的 F4 列 表通常会引 用某个域的 有效值的固 定设置或相 关值表中的 数据。标准 列表对于用 户自己开发 的应用程序 通常也是够 用的。但是 ,根据具体 的对话程序 不同,也可 以建立更详 细或稍有不 同的文档和 可能值列表 。

可以用 PROCESS ON HELP-REQUEST (POH) 和 PROCESS ON VALUE-REQUEST (POV) 事件来编写 帮助文本和 可能值列表 程序。

这些事件可 以在屏幕处 理逻辑中与 PROCESS BEFORE OUTPUT 和 PROCESS AFTER INPUT 事件一起执 行。

PROCESS ON HELP-REQUEST:

语法

PROCESS ON HELP-REQUEST. FIELD MODULE . FIELD MODULE ...

通过 FIELD 语句将模块 调用分配给 屏幕字段。 如果按下 F1 或就会执行光 标所在字段 的 POH 模块。 PROCESS ON VALUE-REQUEST:

语法

PROCESS ON VALUE-REQUEST. FIELD MODULE . FIELD MODULE ...

用户按下 F4 或激活屏幕 字段中的组 合框之后, 会发生 POV 事件。如果 该字段包含 FIELD 语句,则调 用指定的 POV 模块而不是 帮助处理器 。

在调用屏幕 时,将执行 PROCESS BEFORE OUTPUT 事件。然后 就会出现自 动传输给屏 幕的字段。 如果在屏幕 中选定 F1 帮助或 F4 值列表,则 系统会再次 发送 动态程序, 但不执行 PBO 事件,也不 执行字段转 移以将所有 字段转移给 动态程序 。在 POV 后,只为光 标所在字段 和通过 F2 键或双击而 选定的字段 的内容进行 传输。

如果 POV 处理需要附 加字段传输 ,则可以使 用 DYNP_VALUES_READ 和 DYNP_VALUES_UPDATE 功能模块。

其它功能模 块可简化特 定上下文的 帮助文本和 输入值的编 程。

匹配代码对 于可能值帮 助也会有所 帮助。本章 最后一节包 含一个示例 。 以下主题提 供详细信息 : 定制 F4-值-请 求 (页 1) 定制 F1-帮助 (页 4)

字段 - 帮助的功能 模块 (页 4) 具有匹配代 码的字段-帮 助 (页 5)

定制 F4-值-请 求

在为字段建 立自己的 F4 值帮助时, 可以使用固 定值或相关 域的检查表 。如果标准 的 F4 帮助不充分 或不适合特 定的上下文 ,则可以使 用 PROCESS ON VALUE-REQUEST 事件编写自 己的 F4 值帮助程序 。

2示例事务 TZB0 包含编程的 “出发机场 ”和“目的 机场”字段 的可能值帮 助。通过 F2 或双击鼠标 可

在列表中 选定出发机 场和目的机 场。

这两个字段 都引用 S_AIRPID 域。建立标 准 F4 帮助的最简 单方法就是 在 ABAP/4 词典中为该 域分配一个 检查表。但 是,如果结 果值列表不 符合要求, 则必须自己 编写值帮助 程序。下面 以事务 TZB0 为例,讲述 一种编程方 法。

首先,事务 TZB0 的屏幕 200 的处理逻辑 必须指定要 为其提供值 帮助的字段 。在其中某 个字段上使 用 F4 键会导致执 行该字段的 POV 模块。 PROCESS ON VALUE_REQUEST. FIELD SPFLI-AIRPFROM MODULE VAL_REQ_AIRPORT. FIELD SPFLI-AIRPTO MODULE VAL_REQ_AIRPORT.

PAI 模块 VAL_REQ_AIRPORT 包含对同名 子程序的调 用。 MODULE VAL_REQ_AIRPORT INPUT. PERFORM VAL_REQ_AIRPORT. ENDMODULE.

VAL_REQ_AIRPORT 子程序由以 下三部分组 成:

- 使用 DYNP_VALUES_READ 功能模块从 屏幕上读取 字段内容。 - 为编程 的值帮助调 用 VALUE_REQUEST_AIRPORT 功能模块。

- 使用 DYNP_VALUES_UPDATE 功能模块将 字段内容写 回到屏幕上 。

完全处于演 示目的才将 DYNP_VALUES_READ 和 DYNP_VALUES_UPDATE 功能模块集 成到该示例 事务中。如 果在 POV 处理中需要 多个字段传 输,则可以 使用它们。 如果在调用 VALUE_REQUEST_AIRPORT 功能模块后 ,打算使用 MOVE 命令将选定 字段值复制 到 SPFLI-AIRPFROM 和 SPFLI-AIRPTO 字段中,则 可以将这些 功能模块从 该特殊示例 事务中省略 掉。 在 VAL_REQ_AIRPORT 子程序中, DYNP_VALUES_READ 功能模块获 取请求值帮 助的字段内 容。然后将 该值传送给 帮助处理器 。

在输出参数 DYNAME 和 DYNUMB 中指定程序 名和屏幕号 。 DYNPFIELDS 表参数需要 一个具有 ABAP/4 词典结构 DYNPREAD 的表。本例 中该表命名 为 SCR_FIELDS。 在 DYNP_VALUES_READ 功能模块的 该表中指定 要读取的屏 幕字段。该 表应包含值 帮助所需值 的字段。用 GET CURSOR 命令找到字 段名然后将 其复制到 SCR_FIELDS 表中。 FORM VAL_REQ_AIRPORT. DATA: CURSORFIELD(30), SCR_FIELDS LIKE DYNPREAD OCCURS 1 WITH HEADER LINE, AIRPORT LIKE SPFLI-AIRPFROM.

GET CURSOR FIELD CURSORFIELD.

SCR_FIELDS-FIELDNAME = CURSORFIELD. APPEND SCR_FIELDS.

CALL FUNCTION 'DYNP_VALUES_READ' EXPORTING DYNAME = 'SAPMTZB0' DYNUMB = SY-DYNNR TABLES DYNPFIELDS = SCR_FIELDS EXCEPTIONS UNDEFIND_ERROR = 08 OTHERS = 04.

IF SY-SUBRC NE 0. MESSAGE I007. EXIT. ENDIF.

VAL_REQ_AIRPORT 子程序从 SCR_FIELDS 表中顺序读 取机场名并 用 AIRPORT 更改参数调 用 VALUE_REQUEST_AIRPORT 功能模块。 该功能模块 负责输出带 有机场列表 的弹出窗口 。用户选定 机场之后, 该值通过 AIRPORT 变量传回调 用程序。 READ TABLE SCR_FIELDS INDEX 1. AIRPORT = SCR_FIELDS-FIELDVALUE.

CALL FUNCTION 'VALUE_REQUEST_AIRPORT' CHANGING AIRPORT = AIRPORT EXCEPTIONS CANCELLED = 1 NO_VALUES = 2 OTHERS = 3.

3IF SY-SUBRC = 2. MESSAGE I008. ENDIF.

CHECK SY-SUBRC = 0.

使用 DYNP_VALUES_UPDATE 功能模块将 AIRPORT 参数的内容 读入 SCR_FIELDS 表并将当前 字段内容放 到屏幕上。

READ TABLE SCR_FIELDS INDEX 1. SCR_FIELDS-FIELDVALUE = AIRPORT. MODIFY SCR_FIELDS INDEX 1.

CALL FUNCTION 'DYNP_VALUES_UPDATE' EXPORTING DYNAME = 'SAPMTZB0' DYNUMB = SY-DYNNR TABLES DYNPFIELDS = SCR_FIELDS EXCEPTIONS OTHERS = 04.

ENDFORM. \

VALUE_REQUEST_AIRPORT 功能模块负 责该程序中 值列表的输 出。首先检 查是否输入 了一般机场 名。如果是 ,则对特殊 字符进行转 换,以便后 面的 SELECT 语句能使用 该一般输入 。 *\*\*\ CHANGING *\ VALUE(AIRPORT) LIKE SPFLI-AIRPFROM *\ EXCEPTIONS *\ CANCELLED *\ NO_VALUES

*\ IF AIRPORT CA '+*'. SELECTION = AIRPORT. TRANSLATE SELECTION USING '*%+_'. ELSE. SELECTION = '%'. ENDIF. RETURN = 'BEGIN'. CALL SCREEN 100 STARTING AT 10 5 ENDING AT 41 15. CASE RETURN. WHEN 'SELE'. AIRPORT = SELECTION. WHEN 'BREAK'. RAISE CANCELLED. WHEN 'NOVAL'. RAISE NO_VALUES. ENDCASE. ENDFUNCTION.

屏幕 100 (用 CALL SCREEN 调用)用作 值帮助的弹 出屏幕。在 屏幕制作器 中将该屏幕 创建为空屏 蔽。用 SELECT 获取数据, 然后将其写 入屏幕 100的 PBO 模块 LIST_PROCESSING 的弹出屏幕 中。

MODULE LIST_PROCESSING OUTPUT.

LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0. NEW-PAGE LINE-SIZE 31. SET PF-STATUS 'POP_PICK'. SET TITLEBAR 'TIT'. SELECT * FROM SAIRPORT WHERE ID LIKE SELECTION. WRITE: / SY-VLINE NO-GAP, SAIRPORT-ID COLOR 4 INTENSIFIED OFF NO-GAP, SY-VLINE NO-GAP, SAIRPORT-NAME COLOR 2 INTENSIFIED OFF NO-GAP, SY-VLINE NO-GAP. HIDE SAIRPORT. ENDSELECT. IF SY-SUBRC NE 0. RETURN = 'NOVAL'. ENDIF. ULINE. LEAVE SCREEN. ENDMODULE. \

在编写 PROCESS ON VALUE-REQUEST 程序时,要 记住必须能 选定值并能 将其复制到 所属的屏幕 中。在执行 HIDE SAIRPORT 时,用 SELECT 获取的所有 值都被记录 下来。然后 ,用光标选 定一行并按 下菜单制作 器中被赋予 PICK 功能的功能 键(通常为 F2)之后 ,对 AT LINE-SELECTION 进行处理, 即自动用存 储值对该行 进行填充。 AT LINE-SELECTION. CHECK SAIRPORT-ID NE SPACE. RETURN = 'SELE'.

4 SELECTION = SAIRPORT-ID.

LEAVE LIST-PROCESSING.

AT USER-COMMAND. CASE SY-UCOMM. WHEN 'EXIT'. RETURN = 'BREAK'. LEAVE LIST-PROCESSING. WHEN 'RTRN'. RETURN = 'BREAK'. LEAVE LIST-PROCESSING. ENDCASE.

选定机场之 后,在 LSTZ1E01Include 中调用 AT LINE-SELECTION。 RETURN 变量包含值 ‘SELE’ 。结果,SELECTION (SAIRPORT-ID) 之值被赋给 VALUE_REQUEST_AIRPORT 功能模块中 的 AIRPORT 变量。AIRPORT 的内容将传 回调用程序 ,所选机场 的名字出现 在为其调用 值帮助的字 段中。 如果按下值 列表中的功 能键(“确 定”或“取 消”),则 对 AT USER-COMMAND 进行处理。 在其中任何 情况下,都 将值‘BREAK’ 赋给 RETURN 变量,然后 停止对列表 进行处理。 如果 RETURN 变量包含‘ BREAK’ ,则在功能 模块中产生 CANCELLED 例外。

定制 F1-帮助

ABAP/4 开发环境提 供许多上下 文敏感的 F1 帮助的设计 方法:

数据元素 文档。

通过为 ABAP/4 词典中的数 据元素添加 额外描述性 文本可以增 强 F1 帮助。在屏 幕制作器中 ,将屏幕字 段串中的光 标放在要引 证的字段上 ,并选定菜 单功能“转 向 -> 文档数据元 素文档”。 现在即可扩 展现有字段 帮助。扩展 帮助将在系 统中的任何 地方显示。

屏幕制作 器中的数据 元素附加文 本。

如果希望只 在特定事务 中扩展特定 字段的字段 帮助,则为 屏幕字段串 中的字段选 定“转向 -> 文档 -> 数据元素细 节”。将出 现一个弹出 窗口,不仅 包含数据元 素,也包含 当前屏幕号 ,用作数据 元素附加文 本的详细标 识符。除 ABAP/4 词典包含的 帮助文本外 ,还可以使 用编辑器输 入有关字段 使用方法的 信息,包括 示例和任何 影响该字段 的相互依赖 关系。

使用 PROCESS ON HELP-REQUEST 事件。

如果屏幕的 处理逻辑中 没有 PROCESS ON HELP-REQUEST 事件,则将 以 ABAP/4 词典中的字 段文档作为 基础。如果 存在 POH 事件,则只 要为指定的 字段按下 F1 就会执行。 例如,可以 按以下方式 实现特定字 段的数据元 素附加文本 : PROCESS ON HELP-REQUEST. FIELD XY WITH 'Number'.

通过使用以 下变量,也 可以将数据 元素附加文 本合并 F1 帮助中: PROCESS ON HELP-REQUEST. FIELD XY WITH .

为 XY 字段显示 变量中包含 的数据元素 附加文本。

如果按下 F1 键后才知道 数据元素附 加文本,则 可以在模块 中获取要显 示的附加文 本,然后将 其写入变量 中: PROCESS ON HELP-REQUEST. FIELD XY MODULE XYZ WITH . 字段 - 帮助的功能 模块

如果要自己 编写 F1 和 F4 用户支持程 序,另一种 可能的方法 (上述方法 除外)就是 调用 POH 和 POV 事件的相关 SAP 功能模块。 该功能模块 提供标准 F4 帮助的全显 示功能。 调用示例事 务“shlp” ,这有助于 理解所述的 模块功能。 相应的程序 RSHELP01 包含该事务 的文档。也 可以在功能 库中查找该 功能模块文 档。 可以按如下 方法使用这 些功能模块 :

1. 首先 通过 DYNP_VALUES_READ 获取屏幕的 当前字段值 (如果需要 的话)。 2. 在功 能组 SHL3 中选定工作 所需的功能 模块。

功能模块 的使用: