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

Does ABAP CALL statement set SY-SUBRC value?

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

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

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

现在这应该是一个适用于任何系统的安全调用:

DATA: dbserver TYPE char255.

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

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

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

所以答案是sy-subrc在此上下文中没有带来任何有意义的信息。

P.S。回答您的问题:

  1. 不,你不能那样解释。如果 ABAP 文档中没有提到某些内容,那么这个 未知 肯定或根本没有意义。
  2. 我完全不能确定这是个好主意(测试系统调用),但如果您愿意,可以尝试调用 SYSTEM 函数。

它调用任意 Unix 命令。
例如,您可以像这样移动存储在 ABAP 服务器上的文件:

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