调用程序 submit

来源:互联网 发布:java split . 编辑:程序博客网 时间:2024/05/01 18:14

文章转自 http://jiahongguang12.blog.163.com/blog/static/334665720071118105554390/

如果需要编 写扩展应用 程序,则一 个简单的报 表将变得很 复杂。

要使 报表易读,通常需要在 好几个程序 中分别实现需要的功能 。

ABAP/4 允许使用这 些语句调用 报表及事务 :

报表   事务

无 返回调用   SUBMIT LEAVE TO TRANSACTION

调 用并返回   SUBMIT AND RETURN CALL TRANSACTION

可 以在任何 ABAP/4 程序中使用 这些语句。 要在对话编程的环境中

调用其它程 序,参见 调用外部程 序组件

此主题显示 如何从报表 中调用其它 程序。主要 在为交互式 报表处理交

互式列表时 使用这些调 用。用户可 以通过选择列表行或提 供的功能显

式地调用其 它程序。可 以按照用户 行为编写传 输到调用程 序的数据。

该主题分为

调用报表

要从其它报 表中调用报 表,请使用 SUBMIT 语句。

要在程序编 码中静态地 设置调用程 序的名称, 请写:

语法

SUBMIT <rep> [AND RETURN] [<options>].

要在运行中 动态地设置 调用报表的 名称,请写 :

语法

SUBMIT (<rep>) [AND RETURN] [<options>].

第一个语句 启动报表 <rep>, 第二个语句 启动名称存储在字段 <rep> 中的报表。

执行程序时 ,如果系统 无法找到指 定的报表, 则出现运行 错误。如果 静态地指定

报表,可以 双击 ABAP/4 编辑器中的 <rep>, 以创建、显 示或修改调用的报表。

如果忽略 AND RETURN 选项,则系 统将删除调 用报表的所有数据和列 表级。终止

被调用报表 之后,它将 返回到启动 调用报表的 级别。

如果使用 AND RETURN, 系统将存储 调用报表的 数据,并在处理完调用 的报表后返

回到调用报 表。系统用 紧接着调用 的语句恢复 执行调用报 表。要从程 序中通过

SUBMIT ... AND RETURN 退出被调用 的报表,参 见

任何使用 SUBMIT 的被调用报 表,都与 AND RETURN 选项无关, 都可以访问

调用报表的 ABAP/4 内存,该调用报表包括 存储在 ABAP/4 内存中的数 据簇。

关于 簇的详细信 息,参见 ABAP/4 内存中的数 据簇 。

SUBMIT 语句为传递 数据和处理 调用的报表 提供了许多 其它 <options>。

下面描述了 部分选项。

从程序中退 出被调用的 报表

通常,用户 通过选择被 调用报表列 表级 0 上的 F3 或 F15,使 用

SUBMIT ... AND RETURN 退出调用的 报表。

但是,如果 想执行其它 语句,如将 数据输出到 ABAP/4 内存,则必须在返回调

用的报表之 前,为被调 用报表创建 自定义用户 界面。在该 界面上,

为 “返回”定 义自己的功 能代码,并 在 AT USER-COMMAND 事件中处理 它。在执行

所需的语句 后,使用此 语句离开被 调用报表:

语法

LEAVE.

此语句使用 SUBMIT ... AND RETURN 离开被调用报表,并返 回到调用报

表中该调用 的语句之后 的语句。

REPORT SAPMZTST NO STANDARD PAGE HEADING.

DATA: ITAB TYPE I OCCURS 10,

      NUM TYPE I.

SUBMIT SAPMZTS1 AND RETURN.

IMPORT ITAB FROM MEMORY ID 'HK'.

LOOP AT ITAB INTO NUM.

  WRITE / NUM.

ENDLOOP.

TOP-OF-PAGE.

WRITE 'Report 1'.

ULINE.

此程序调用 下列报表:

REPORT SAPMZTS1 NO STANDARD PAGE HEADING.

DATA: NUMBER TYPE I,

      ITAB TYPE I OCCURS 10.

SET PF-STATUS 'MYBACK'.

DO 5 TIMES.

  NUMBER = SY-INDEX.

  APPEND NUMBER TO ITAB.

  WRITE / NUMBER.

ENDDO.

TOP-OF-PAGE.

WRITE 'Report 2'.

ULINE.

AT USER-COMMAND.

  CASE SY-UCOMM.

    WHEN 'MBCK'.

      EXPORT ITAB TO MEMORY ID 'HK'.

      LEAVE.

  ENDCASE.

在自定义状 态 MYBACK 中,将功能 代码 MBCK 分配到功能 键 F3 和 F15:

如果用户在 界面 MYBACK 上选择“返 回”,则系 统将把表格 ITAB 传送到

ABAP/4 内存中,然 后离开 SAPMZTS1。 在 SAPMZTST 中,它又读 取表格 ITAB。

使用被调用 报表的列表 结构

要使用由 SUBMIT 调用的报表 的列表结构 ,请写:

语法

SUBMIT ... [LINE-SIZE <width>] [LINE-COUNT <length>].

如果被调用 报表不包含 REPORT 语句中这样 的选项,则系统将按照 SUBMIT 语句中的选

项格式化被 调用报表的 列表。如果 被调用报表 的 REPORT 语句包含相 应的选项,

则系统将使 用这些选项 ,并忽略 SUBMIT 语句中的选项。关于这 些选项的详 细信息,

参 见  自定义列表 (

REPORT SAPMZTST NO STANDARD PAGE HEADING.

DATA: NAME(8) VALUE 'SAPMZTS1',

              WID TYPE I VALUE 80,

              LEN TYPE I VALUE 0.

SET PF-STATUS 'SELECT'.

WRITE: 'Select a report and its list format:',

     / '-------------------------------------'.

SKIP.

WRITE: 'Report     ', NAME INPUT ON,

     / 'Line size  ', WID  INPUT ON,

     / 'Page length', LEN  INPUT ON.

AT USER-COMMAND.

  CASE SY-UCOMM.

    WHEN 'SELE'.

      READ LINE: 4 FIELD VALUE NAME,

                 5 FIELD VALUE WID,

                 6 FIELD VALUE LEN.

      SUBMIT (NAME) LINE-SIZE WID LINE-COUNT LEN AND RETURN.

  ENDCASE.

可以使用此 程序启动允 许用户定义 的列表格式 的报表。用 户可以在基

本列表上通 过改写默认 值输入报表 名称和所需的列表宽度 及长度:

在 AT USER-COMMAND 事件中,系 统读取这些 值并使用 SUBMIT 启动指定的

报表。如果 被调用报表 的 REPORT 语句不包含 LINE-SIZE 或 LINE-COUNT 规范

,则系 统使用值 WID 和 LEN 以创建列表 。执行被调 用报表之后 ,用户可以

在基本列表上更改输入 值,并调用 新报表。

填写被调用 报表的选择 屏幕

启动报表时 ,系统通常 显示选择屏 幕,用户在 该屏幕上输 入选择标准 和被连接逻

辑数据库和 报表本身的 参数(参见使用选择屏幕 (页 错误!链接无效。) )。

从另一 个报表中调用报表时, 有好几种可 能的方法填 写选择标准 和被调用报 表的参数。

使用 SUBMIT 语句的下列 选项:

语法

SUBMIT ... [VIA SELECTION-SCREEN]

           [USING SELECTION-SET <var>]

           [WITH <sel> <criterion>]

           [WITH FREE SELECTIONS <freesel>]

           [WITH SELECTION-TABLE <rspar>].

这些选项有 下列作用:

    VIA SELECTION-SCREEN

显示被调用 报表的选择 屏幕。如果 使用一个或 多个其他选 项将值传输 到报表中,

则填写选择 屏幕中的相 应输入字段。用户可以 更改这些值 。默认情况 下,

SUBMIT 之后系统不 显示选择屏 幕。

    USING SELECTION-SET <var>

此选项告诉 系统使用变 体 <var> 启动被调用程序

    WITH <sel> <criterion>

使用此选项 填写选择屏 幕的单个元 素 <sel>(选择表和参 数)。使用 元素 <criterion> 之一:

-   <op> <f> [SIGN <s>], 用于单值选 择

如果 <sel> 是选择标准 ,请用 <op> 填写被调用 的报表选择 表格 <sel> 的 OPTION 字段,

用 <f> 填写 LOW 字段,用 <s> 填写 SIGN 字段(参见 选择表 (页 错误!链接无效。) )。

如果 <sel> 是参数,则 可以使用 <op> 任何操作符 。总是用 <f> 填写参数 <sel>。

-   [NOT] BETWEEN <F1> AND <F2> [SIGN <s>], 用于间隔选择

将 <F1> 传送到被调 用报表中选 择表 <sel> 的 LOW 字段中,将 <F2> 传送到 HIGH 字段中,

将 <s> 传送到 SIGN 字段中。如 果忽略 NOT 选项,则系 统将把值 BT 填写到 OPTION 字段中;

如 果使用 NOT,则 系统将把值 NB 填写到 OPTION 字段中

-   IN <seltab>, 传送选择表

用调用报表 中表格 <seltab> 的值填写被调用报表中 的选择表 <sel>。 表格

<seltab> 必须有选择 表的结构。 可以使用 RANGES 语句创建这 样的表格

    WITH FREE SELECTION <freesel>, 动态选择的用户对话

要使用此选 项,必须将 调用报表和 被调用报表 都连接到支 持动态选择 的逻辑数据 库。

在调用 报表中,使 用功能模块 FREE-SELECTIONS_INIT 和 FREE_SELECTIONS_DIALOG,

它们允许用 户在选择屏 幕上输入动 态选择。这 些功能块的 一个输出参 数有

RSDS 类型组中的 RSDS_TEXPR 结构。通过 相同结构的 内部表 <freesel> 将此输出参

数的值传送 到被调用报 表。

    WITH SELECTION-TABLE <rspar>, 值的动态传送

首先,使用 词典结构 RSPARAMS 创建内部表 <rspar>。 该表格包含 下列六个字 段:

-   SELNAME( 类型 C,长度 8),选择 标准或参数 的名称

-   KIND( 类型 C,长度 1),选择 类型(S 是选择标准,P 是参数)

-   SIGN、 OPTION、 LOW、HIGH,作为常规选 择表

除 LOW 和 HIGH 外,类型都 为 C、长度都 为 45。

在调用报表 内,可以动 态地用被调 用报表选择 屏幕所需的 任何值填写 此表。

如果 选择标准的 名称不止出 现一次,则在被调用报 表中,该标 准将占用选

择表的好几 行。如果参 数名不止出 现一次,则 系统使用最 后一个值。 注意,

LOW 和 HIGH 的类型为 C,以便使 系统对被调 用报表的标 准执行类型 转换。

例如,这对日期 字段是重要 的。因此, 请使用 VIA SELECTION-SCREEN 选项对程序

进行检查。

除 WITH SELECTION-TABLE 之外,可以 在 SUBMIT 语句内任意 地使用和组

合上述任何 选项。特别 是 WITH <sel> 选项,可以 在单个标准 <sel> 中多次使用 。

在被调用 报表中,系统将相应行 附加到使用 的选择表中 。对于参数 ,它使用最

后指定的值 。WITH SELECTION-TABLE 选项唯一可能的组合是 USING SELECTION-SET。

在交互式事 件中,可以 使用 SUBMIT 语句的上述 选项,用选定行的 HIDE 区域中的数

据填写被调 用报表的选 择屏幕。这 允许绕过交 互式事件中 不可以使用 逻辑数据库的限制。

在 不同报表之 间分别使用 GET 语句,并且 在用户选定 行之后,使 用 SUBMIT

调用这些报 表并传递相 应值。

如果将选择 屏幕的输入 字段连接到 SPA/GPA 参数(参见从 SAP 内存中使用 缺省值 ,

可以使 用 SPA/GPA 技术将数据 传送到选择 屏幕。关于 该技术的详细信息,

参 见 将 SPA/GPA 参数传送到 事务 。

下列报表创 建包含参数 PARAMET 和选择标准 SELECTO 的选择屏幕 :

REPORT SAPMZTS1.

DATA NUMBER TYPE I.

PARAMETERS      PARAMET(14).

SELECT-OPTIONS  SELECTO FOR NUMBER.

下列报表使 用不同的选 择标准调用 报表 SAPMZTS1:

REPORT SAPMZTST NO STANDARD PAGE HEADING.

DATA: INT TYPE I,

      RSPAR LIKE RSPARAMS OCCURS 10 WITH HEADER LINE.

RANGES SELTAB FOR INT.

WRITE: 'Select a Selection!',

     / '--------------------'.

SKIP.

FORMAT HOTSPOT COLOR 5 INVERSE ON.

WRITE: 'Selection 1',

     / 'Selection 2'.

AT LINE-SELECTION.

  CASE SY-LILLI.

    WHEN 4.

      SELTAB-SIGN = 'I'. SELTAB-OPTION = 'BT'.

      SELTAB-LOW  = 1.   SELTAB-HIGH   = 5.

      APPEND SELTAB.

      SUBMIT SAPMZTS1 VIA SELECTION-SCREEN

                      WITH PARAMET EQ 'Selection 1'

                      WITH SELECTO IN SELTAB

                      WITH SELECTO NE 3

                      AND RETURN.

    WHEN 5.

      RSPAR-SELNAME = 'SELECTO'. RSPAR-KIND = 'S'.

      RSPAR-SIGN = 'E'. RSPAR-OPTION = 'BT'.

      RSPAR-LOW  = 14.  RSPAR-HIGH = 17.

      APPEND RSPAR.

      RSPAR-SELNAME = 'PARAMET'. RSPAR-KIND = 'P'.

      RSPAR-LOW  = 'Selection 2'.

      APPEND RSPAR.

      RSPAR-SELNAME = 'SELECTO'. RSPAR-KIND = 'S'.

      RSPAR-SIGN = 'I'. RSPAR-OPTION = 'GT'.

      RSPAR-LOW  = 10.

      APPEND RSPAR.

      SUBMIT SAPMZTS1 VIA SELECTION-SCREEN

                      WITH SELECTION-TABLE RSPAR

                      AND RETURN.

  ENDCASE.

执行该报表 之后,显示 下列基本列 表:

单击第一个 热点后,SAPMZTS1 的选择屏幕 显示如下:

单击第二个 热点后,SAPMZTS1 的选择屏幕 显示如下:

系统为 SAPMZTS1 的两个调用 传送导致两 行选择表 SELECTO 的值。

第二 行出现在各 自的对话窗 口“SELECTO 的多重选择 ”中。如果 没有

SUBMIT 语句的 VIA SELECTION-SCREEN 选项,系统 将相应地在 SAPMZTS1

中填写 PARAMET 和 SELECTO, 但不显示它 们。

调用事务

要从报表中 调用事务, ABAP/4 提供两种可 能的方法。

如果不想在 终止事务后 返回调用报 表,请使用 :

语法

LEAVE TO TRANSACTION <tcod> [AND SKIP FIRST SCREEN].

此语句结束 报表,并启 动事务 <tcod>。

如果要在终 止事务后返 回调用报表 ,请使用:

语法

CALL TRANSACTION <tcod> [AND SKIP FIRST SCREEN] [USING <itab>].

此语句保存 报表的数据 ,并启动事 务 <tcod>。事务的结束 后,系统返

回到调用报 表中调用语 句后面的语 句。

可以使用变 量指定事务 <tcod>。 这允许静态地调用事务 ,也允许动 态地调用事 务。

使用 AND SKIP FIRST SCREEN 选项禁止事务初始屏幕 的显示。但 是,只有当

用 SPA/GPA 参数中的输 入值完全并 正确地填写 了事务初始 屏幕上的所有命令

字段 之后,该选 项才有效。 关于 SPA/GPA 技术的详细 信息,参见 :

使用 CALL TRANSACTION 语句的 USING ITAB 选项将内部 表 <itab> 传送到被调用事务,

该 事务具有批 输入表格的 格式。关于 批输入的详 细信息,参 见文档 基础编程界面 

将 SPA/GPA 参数传送到 事务

要用报表中 的数据填写 被调用事务 的输入字段 ,可以使用 SPA/GPA 技术。

SPA/GPA 参数是系统 存储在全局 的、用户相 关的 SAP 内存中的值 。使用

SAP 内存在超过 事务边界的 程序之间传 送值。对于 所有并行使 用的模式,

用户可以在 终端会话中 访问存储在 SAP 内存中的值 。

通常,将事 务初始屏幕 上的输入字 段连接到 SPA/GPA 参数。如果在调用事务

之前从程序 中填写这些 字段,系统 将使用相应 值填写输入 字段。

要填写 SPA/GPA 参数,请使 用:

语法

SET PARAMETER ID <pid> FIELD <f>.

此语句保存 SAP 内存中标识 <pid> 下面的字段 <f> 的内容。标 识 <pid> 使用三个字 符。

如果存 在标识 <pid>,此语句将改 写先前存储 在那里的值 。

如果不存在 标识 <pid>, 请双击 ABAP/4 编辑器中的 <pid> 以创建新参 数对象。

要将 SPA/GPA 参数读入 ABAP/4 程序中,请 使用:

语法

GET PARAMETER ID <pid> FIELD <f>.

此语句将存 储在标识 <pid> 下面的值填 写入变量 <f> 中。如果系 统在 SAP 内存中没有

找到 <pid> 的值,则它 将 SY-SUBRC 设置为 4,否则设 置为 0。要将参 数传送到被

调用程序, 则不需要该 语句。

调用事务时 ,必须知道 将哪一个 SPA/GPA 参数连接到事务初始屏 幕上的输入 字段。

要查 明该情况, 请启动事务 ,并将光标 定位在单个 输入字段上 ,选择“帮 助”,

在随 后出现的对 话窗口中选 择“技术信 息”。这时,将出现“ 技术信息” 对话窗口,

显示字段“ 参数标识” 中的适当 SPA/GPA 参数。

预订事务 TCG2 的第一个输 入字段的技 术信息显示 如下:

输入字段“ 公司”的 SPA/GPA 参数有 ID CAR。使 用该方法查 找其它输入

字段的 ID CON、DAY 和 BOK。

下列报表连 接到逻辑数 据库 F1S,并 调用事务 TCG2:

REPORT SAPMZTST NO STANDARD PAGE HEADING.

TABLES SBOOK.

START-OF-SELECTION.

  WRITE: 'Select a booking',

       / '----------------'.

  SKIP.

GET SBOOK.

  WRITE: SBOOK-CARRID, SBOOK-CONNID,

         SBOOK-FLDATE, SBOOK-BOOKID.

  HIDE:  SBOOK-CARRID, SBOOK-CONNID,

         SBOOK-FLDATE, SBOOK-BOOKID.

AT LINE-SELECTION.

  SET PARAMETER ID: 'CAR' FIELD SBOOK-CARRID,

                    'CON' FIELD SBOOK-CONNID,

                    'DAY' FIELD SBOOK-FLDATE,

                    'BOK' FIELD SBOOK-BOOKID.

  CALL TRANSACTION 'TCG2'.

报表的基本 列表按照用 户在选择屏 幕上的输入 显示数据库 表 SBOOK 中的字段。

这些数据也 存储在每行 的 HIDE 区域中。

如果用户通 过双击选择 预订数据的 行,则系统 将触发 AT LINE-SELECTION 事件,

并获 取存储在 HIDE 区域中的数 据,以将它 们填写到事务 TGC2 初始屏幕的

SPA/GPA 参数中。然 后调用该事务。由于没 有使用 AND SKIP FIRST SCREEN 禁止初始屏 幕

,所以该 初始屏幕可 能显示如下:

如果在 CALL TRANSACTION 语句中使用 AND SKIP FIRST SCREEN 选项,因为

填写了第一 个屏幕的所 有要求字段 ,所以将立 即出现第二 个屏幕。

 

原创粉丝点击