我正在查看SAP ABAP关键字定义中CALL -系统函数调用的描述。这样的调用格式为CALL 'xxx' ID 'yyy' FIELD 'zzz'.
。ABAP关键字定义中没有提到sy-subrc
是通过调用系统函数来设置的。但不知何故,我怀疑它是。
- 在这种情况下,我可以"信任"关键字定义吗?(
sy-subrc
未提及=>未设置) - 在SAP系统上测试一个"好的"系统函数调用示例是什么?(不破坏/改变任何东西,存在于所有系统)
请注意,我不是一个ABAP程序员,我通常在Java中处理第三方ABAP程序作为文本/解析树。我知道通常不应该调用系统函数,但是我看到的ABAP代码可能有这样的调用。此外,我对特定系统调用设置sy-subrc
的实际值不感兴趣,只关心系统调用是否设置/更改sy-subrc
。
好吧,当你问这个问题时,你已经意识到这是不推荐使用直接系统调用的方法。但是,如果您仍然想使用它们…
通过使用CALL
语句调用SAP内核c模块,在不知道源的情况下,我们不能自信地解释返回值,它要么是0,要么是1。
尽管有一些例子(参见DYNP_VALUES_READ
FM的第230行)在系统调用之后检查sy-subrc
值,但是除了SAP之外没有人知道在某些情况下检查哪个值。也不是我们。
也有报告(1,2)关于在测试中这些值的歧义。
所以答案是NO, sy-subrc
在这个上下文中没有带来任何有意义的信息。
注:回答你的问题:
- 不,你不能那样解释。如果在ABAP文档中没有提到的东西,那么这个不知道肯定或根本没有意义。
- 我不能确认这是一个好主意(测试系统调用),但如果你想,你可以尝试调用
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
。