Skip to content
关注公众号,可咨询工作中遇到的问题、获取学习资料、掌握行业资讯

调用程序

一、介绍

  做项目时会遇到多个程序员同时开发一个程序的情况。即执行非常复杂程序时按照功能分别开发也是很好的方法(模块化)。这样构成的包程序在主程序中根据用户要求各调用适合的程序使用。
  在所有 ABAP程序中都可以使用[表12-7]的调用程序的语句。SUBMIT语句和CALL TRANSACTION 语句的最大不同点在于一个调用程序,另一个调用事务码(也有其他使用方法上的差异)。例如,在可执行程序的查询列表上,当用户双击一行时可以调用其他事务码显示被选择的数据。TYPE-1程序被其他程序调用时会自动触发LOAD-OF-PROGRAM 事件。其功能与类中的CONSTRUCTOR 方法相似,且在TYPE-1程序中最先触发的INITIALZIATION事件之前执行。这意味着可执行程序的代码中默认包含着SUBMIT语句。因此在 T-CODE:SE38中执行 TYPE-1程序,则执行 SUBMIT语句,从而执行程序。要使用 SUBMIT的时候,一般都是调用程序后要恢复到原程序。例如,在材料编号列表中为了查询其详细内容而调用其他程序后一般都要回到原程序中。为了解决这种问题,一定要结合SUBMIT和AND RETURN使用。 alt text

  利用 SUBMIT ANDRETURN和 CALLTRANSACTION 语句调用其他程序后退出,则继续执行原程序中该语句后面的代码。
  例如,假设程序中包含着下列所示代码。

abap
REPORT ZTEST.
SUBMIT 'program' AND RETURN.
IMPORT g_carrid FROM MEMORY ID 'T_CID'

  则调用程序后,恢复到原画面时会先执行IMPORT语句。CALLTRANSACTION 语句也是调用程序的语句,此语句也如此。

二、调用报表程序

  TYPE-1程序可以用如下的SUBMIT 语句调用

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

  调用程序时,在代码中直接输入程序名即可静态指定程序名,还可以用括号如"程序名动态指定程序名。当系统执行 SUBMIT 语句后没有找到适当的程序,则会发生 Runtime 错误。另外,若不使用 AND RETURN 语句会删除被调用程序的所有数据和列表。反之,使用AND RETURN语句,则系统会将数据先存储在栈中再回到原程序中。

1. 调用报表程序与 SELECTON-SCREEN

  执行TYPE-1程序首先显示包含PARAMETERSSELECT-OPTION的标准 SELECTION-SCREEN 画面。利用 SUBMIT语句可以执行向SELECTION-SCREEN 输入字段中填值的多种选项。

abap
SUBMIT.. [VIA SELECTION-SCREEN
         [USING SELECTION-SET var]
         [WITH p op fSIGN s]
         [WITH FREE SELECTIONS freese]
         [WITH SELECTION-TABLE rspar].

① VIA SELECTION-SCREEN。显示被调用程序的 SELECTION SCREEN 画面。不使用此语句,则不显示 SELECTION-SCREEN 画面而直接执行被调用程序。
② USING SELECTION-SET var。可以使用被调用程序的 Variant 来调用程序。
③ WITH p op fSIGN s。给SELECTION SCREEN的构成要素(PARAMETERS 和SELECT-OPTIONS)赋值。
④ WITH FREE SELECTION freesel。可以使用动态的 Selection,被调用的程序要与LDB 相连接。
⑤ WITH SELECTION-TABLErspar。灵活运用结构体RSPARAMS 的内表,可以动态为被调用程序的 SELECTION-SCREEN 输入字段赋值。
[例12-18]

abap
REPORT z12_32.

TABLES: sflight.
DATA : gt_seltab TYPE TABLE OF 
        rsparams WITH HEADER LINE.
DATA : gs_report(40)TYPE c.

gs_report='Z12_01'.

CLEAR gt_seltab.
gt_seltab-selname ='SEL_CARR'.
gt_seltab-kind = 'S'.
gt_seltab-sign = 'I'.
gt_seltab-option ='EO'.
gt_seltab-low ='AA'.
APPEND gt_seltab.

SUBMIT (gs_report)
        WITH SELECTION-TABLE gt_seltab
*     VIA SELECTION-SCREEN
AND RETURN.

[结果12-18] alt text

  上例利用 SUBMIT 语句调用了在第 12 章第一次创建的程序[例 12-1]。灵活运用上面所讲的 SUBMIT选项,要正确理解SUBMIT概念。   在[例 12-18]中已经使用了SELECT-OPTOINS,下面是PARAMETERS 的使用方法。

abap
CELAR seltab.
seltab-selname='PCARRID."参数名
seltab-low='AA'. "参数值
APPEND seltab.

2.设置被调用程序的列表

被调用的程序不存在 REPORT语句,因此不能设置列表的行数等样式。此时,可以利用 SUBMIT 语句修改被调用程序的列表结构。

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

[例12-19]

abap
REPORT z12_33.
DATA: gv_name(8)VALUE 'Z12 33',
    gv_wid TYPE i VALUE 40,
    gv_len TYPE i VALUE O.

DATA : gt seltab TYPE TABLE OF rsparams WITH HEADER LINE.

START-OF-SELECTION.
  WRITE: 'Double Click List',
  /'-------------------'
END-OF-SELECTION.
  WRITE: /'Report', gv_name INPUT ON.
     /'Line size',gv_wid ,
     /'Page LENgth', gv len
AT LINE-SELECTION.
  SUBMIT (gv_name) WITH SELECTION-TABLE gt_seltab
  LINE-SIZE gv_wid LINE-COUNT gv_len AND RETURN.

在[例 12-19]中单击 SELE按钮,则 SUBMIT语句与LIST选项会再被调用一次。因此在[结果12-33]中会出现宽度(Line Size)变化。 [结果12-19] alt text

三、调用事务码

  若程序存在事务码,则可以执行事务码调用其他程序。

abap
LEAVE TO TRANSACTION tCOd [AND SKIP FIRST SCREEN].

  执行上面所示语句会在结束调用的程序的同时执行新程序。结束调用程序,则会回到刚执行时的初始菜单画面。LEAVE语句与在COMMAND命令窗口输入/n+t-code 一样。

abap
CALL TRANSACTION tcod [AND SKIP FIRST SCREEN].

此语句在保存被调用程序的数据的同时调用事务码。遇到LEAVE PROGRAM语句退出被调用程序,则会回到原调用程序中。AND SKIP FIRST SCREEN选项用于利用内存参数值跳过 SELECTION SCREEN,直接显示 Output List。