通过GUI抑制在ABAP中调用现有SAP报告

时间:2008-10-22 20:10:09

标签: sap abap bapi

我想将SAP程序(事务)的功能公开为BAPI。 我需要调用一个报告并提供范围过滤器,以便绕过GUI。

有没有人有SUBMIT ... WITH ... ABAP构造的工作示例,或其他有关如何完成我需要做的建议?

4 个答案:

答案 0 :(得分:3)

这是一个有效的例子:

SUBMIT SAPF140 
    TO SAP-SPOOL                         "optional"
    SPOOL PARAMETERS print_parameters    "optional"
    WITHOUT SPOOL DYNPRO                 "optional (hides the spool pop-up)"
    VIA JOB jobname NUMBER l_number      "optional"
    AND RETURN                           "optional - returns to the calling prog"
    WITH EVENT   =  REVENT
    WITH BUKRS   IN RBUKRS
    WITH BELNR   IN lRBELNR
    WITH GJAHR   IN RGJAHR
    WITH USNAM   =  SY-UNAME
    WITH DATUM   =  SAVE_DATUM
    WITH UZEIT   =  SAVE_UZEIT
    WITH DELDAYS =  RDELDAYS
    WITH KAUTO   =  'X'
    WITH RPDEST  =  SAVE_PDEST
    WITH TITLE   =  TITLE.

所有“WITH”语句都与被调用程序中的选择字段有关,我使用它=它是一个PARAMETER语句(单字段),我使用IN它是一个SELECT_OPTIONS语句(范围)

以下是如何填充范围的简单示例:

REFRESH lrbelnr.
lrbelnr-sign = 'I'.
lrbelnr-option = 'EQ'.
lrbelnr-low = HBKORM-belnr.
CLEAR lrbelnr-high.
append lrbelnr.

答案 1 :(得分:1)

如果要将此功能禁止为BAPI,则必须将功能包装在远程函数调用(RFC)模块中。只需实现RFC功能模块。根据报告的实现方式,它可以使用ABAP对象,也可以从RFC实现中调用。鉴于这种情况,你有一个很好的解决方案。每当调整报告时,您的BAPI也会反映这些变化。如果它是SAP的标准程序,无法包装,请考虑将其复制到命名空间并进行调整。然而,当SAP通过支持包堆栈执行更新时,这可能会带来一些麻烦,您将无法实现它。两种方法的输出是不同的。除此之外,如果你想从外面调用它,除了实现RFC模块之外别无他法。

提交报告无法返回外部值。报告始终仅用于GUI功能,而不用于交换数据。如果您的报告使用选择选项,您必须以某种方式在RFC中“手动”实现此功能,因为此语句不能在RFC模块中使用。我通常会尝试重新编写报告,对其进行模块化,并将选择信息放在中央类或可能从报告和BAPI功能模块调用的其他功能模块中。您正在讨论的过滤器无法自动在RFC中实现。您必须手动实现这些范围。出现的警告无法被抑制,如果您从远程系统进行RFC调用,并且出现警告的弹出窗口将以shortdump结束。因此,您必须重新编写报告并根据需要重新实施报告。

如果您只是想通过作业调度来绕过它,请创建一个变体并使用该变体安排报告,但我认为这不是您正在寻找的解决方案。

答案 2 :(得分:1)

您可以使用内置BAPI也只需编写“范围”并按F4。

答案 3 :(得分:0)

您可以将报告包装在BATCH INPUT session中并在函数内执行。唯一的缺点是每次更改报告时都需要重写BATCH INPUT。