繁体   English   中英

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

[英]Does ABAP CALL statement set SY-SUBRC value?

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

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

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

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

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

PS回答你的问题:

  1. 不,你不能那样解释它。 如果事情没有在ABAP文档中提到那么这个不知道在所有的肯定或没有意义的。
  2. 我根本无法确认这是个好主意(测试系统调用),但是如果您愿意,可以尝试调用SYSTEM函数。

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

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

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

DATA: dbserver TYPE char255.

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM