ABAP CALL语句是否设置了SY-SUBRC值?

时间:2016-10-25 14:08:19

标签: system sap abap function-calls

我正在查看SAP ABAP关键字定义中 CALL - 系统函数调用的描述。此类调用的格式为CALL 'xxx' ID 'yyy' FIELD 'zzz'. ABAP关键字定义未提及通过调用系统函数来设置sy-subrc。但不知何故,我怀疑它是。

  • 在这种情况下,我可以“信任”关键字定义吗? (sy-subrc未提及=>未设置)
  • 在SAP系统上测试它的“好”示例系统函数调用是什么? (不破坏/改变任何东西,存在于所有系统上)

请注意,我不是ABAP程序员,我通常使用Java作为文本/解析树处理第三方ABAP程序。我知道通常不应该调用系统函数,但我看到的ABAP代码可能有这样的调用。此外,我对特定系统调用设置sy-subrc的实际值不感兴趣,只是系统调用是否设置为/ sy-subrc

3 个答案:

答案 0 :(得分:1)

现在这应该是适用于任何系统的安全通话:

DATA: dbserver TYPE char255.

CALL 'C_SAPGPARAM' ID 'NAME'  FIELD 'SAPDBHOST'
                   ID 'VALUE' FIELD  dbserver.

您可能已经知道可能会发生一些exceptions。至于sy-subrc,当命令设置sy-subrc时,它通常在文档中明确提到,包括它可以容纳哪些值及其含义。但请不要引用我的话。

答案 1 :(得分:1)

好吧,正如您在问这个问题时,您已经意识到这不是推荐使用直接SYSTEM调用的方法。但是,如果您仍想使用它们...
通过使用CALL语句调用SAP内核C模块并且在不知道源的情况下我们无法自信地解释返回值,无论是0还是1。 尽管有一些示例(参见DYNP_VALUES_READ FM的第230行),但在系统调用后检查sy-subrc值,除SAP之外的任何人都知道在某些情况下要检查哪个值。我们也不是。
还有报告(12)关于测试期间这些值的模糊含义。

所以答案是sy-subrc在这种情况下不会带来任何有意义的信息。

P.S。回答你的问题:

  1. 不,你不能这样解释。如果ABAP文档中没有提到某些内容,则未知肯定或根本没有意义。
  2. 我无法确认这是个好主意(测试系统调用),但如果你想要,你可以尝试调用SYSTEM函数。
  3. 它调用任意Unix命令。
    例如,您可以移动存储在ABAP服务器上的文件,如下所示:

        CALL 'SYSTEM' 
         ID 'COMMAND' 
         FIELD 'mv /usr/sap/temporary
                   /usr/sap/definite'.
    

答案 2 :(得分:0)

简单(无害)函数模块RH_GET_DATE_DAYNAME需要语言和10个字符的日期(例如26.10.2016)作为输入字段,而DATE_TO_DAY只需要10个字符的日期作为输入。如果输入了有效日期,则sy-subrc应返回为0