6

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

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

4

4 回答 4

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 语句(单个字段),我在其中使用它是一个 SELECT_OPTIONS 语句(范围)

这是一个如何填充范围的简单示例:

REFRESH lrbelnr.
lrbelnr-sign = 'I'.
lrbelnr-option = 'EQ'.
lrbelnr-low = HBKORM-belnr.
CLEAR lrbelnr-high.
append lrbelnr.
于 2008-10-23T21:26:47.257 回答
1

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

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

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

于 2009-12-24T23:48:50.510 回答
1

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

于 2010-10-19T04:46:13.920 回答
0

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

于 2011-11-25T10:18:25.740 回答