ABAP CALL 语句是否设置 SY-SUBRC 值?
Does ABAP CALL statement set SY-SUBRC value?
我正在查看 SAP ABAP 关键字定义中对 CALL - 系统函数调用 的描述。此类调用的格式为 CALL 'xxx' ID 'yyy' FIELD 'zzz'.
ABAP 关键字定义未提及 sy-subrc
是通过调用系统函数设置的。但不知何故,我怀疑它是。
- 在这种情况下,我可以 "trust" 关键字定义吗? (
sy-subrc
未提及 => 未设置)
- 在 SAP 系统上测试它的 "good" 示例系统函数调用是什么? (不 break/change 任何东西,存在于所有系统上)
请注意,我不是 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。回答您的问题:
- 不,你不能那样解释。如果 ABAP 文档中没有提到某些内容,那么这个 未知 肯定或根本没有意义。
- 我完全不能确定这是个好主意(测试系统调用),但如果您愿意,可以尝试调用
SYSTEM
函数。
它调用任意 Unix 命令。
例如,您可以像这样移动存储在 ABAP 服务器上的文件:
CALL 'SYSTEM'
ID 'COMMAND'
FIELD 'mv /usr/sap/temporary
/usr/sap/definite'.
我正在查看 SAP ABAP 关键字定义中对 CALL - 系统函数调用 的描述。此类调用的格式为 CALL 'xxx' ID 'yyy' FIELD 'zzz'.
ABAP 关键字定义未提及 sy-subrc
是通过调用系统函数设置的。但不知何故,我怀疑它是。
- 在这种情况下,我可以 "trust" 关键字定义吗? (
sy-subrc
未提及 => 未设置) - 在 SAP 系统上测试它的 "good" 示例系统函数调用是什么? (不 break/change 任何东西,存在于所有系统上)
请注意,我不是 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。回答您的问题:
- 不,你不能那样解释。如果 ABAP 文档中没有提到某些内容,那么这个 未知 肯定或根本没有意义。
- 我完全不能确定这是个好主意(测试系统调用),但如果您愿意,可以尝试调用
SYSTEM
函数。
它调用任意 Unix 命令。
例如,您可以像这样移动存储在 ABAP 服务器上的文件:
CALL 'SYSTEM'
ID 'COMMAND'
FIELD 'mv /usr/sap/temporary
/usr/sap/definite'.