【问题标题】:Does ABAP CALL statement set SY-SUBRC value?ABAP CALL 语句是否设置 SY-SUBRC 值?
【发布时间】:2016-10-25 14:08:19
【问题描述】:

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

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

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

【问题讨论】:

    标签: system abap function-call


    【解决方案1】:

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

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

    附:回答您的问题:

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

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

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

    【讨论】:

    • 谢谢,我想这回答了我的问题。同样,我不编写执行此类调用的代码:我正在查看执行此类调用的第三方代码。此外,我通常对设置的实际值不感兴趣(因为我不执行调用),但如果设置了值。对我来说,前面语句设置的 sy-subrc 值在系统调用后是否仍然有效是很重要的。从您的回答中,我推断系统调用确实设置了 sy-subrc (尽管在某些情况下为未知值)。这对我来说已经足够了。
    • 我假设 sy-sybrc 值会被系统调用无效。
    【解决方案2】:

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

    DATA: dbserver TYPE char255.
    
    CALL 'C_SAPGPARAM' ID 'NAME'  FIELD 'SAPDBHOST'
                       ID 'VALUE' FIELD  dbserver.
    

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 但是'RH_GET_DATE_DAYNAME'是一个功能模块,不是系统功能。我问的是像 CALL 'xxx' ID 'yyy' FIELD 'ZZZ' 这样的电话。
      猜你喜欢
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      相关资源
      最近更新 更多