abap是否有任何方法为char类型(或任何类似的不同长度类型)执行内联强制转换?也许有类似于value可用于字段的运算符(对于结构).
由于类型不匹配导致转储的具体示例(name类型tdobname为char 70且ebeln为char 10):
call function 'READ_TEXT'
exporting
id = lv_textid
language = sy-langu
name = ls_ekko-ebeln
object = 'EKKO'
tables
lines = lt_textlines
Run Code Online (Sandbox Code Playgroud)
现在我添加了一行转换为目标类型的变量(有效),但我希望跳过这一步.
data: lv_name type tdobname.
lv_name = ls_ekko-ebeln.
call function 'READ_TEXT'
exporting
...
name = lv_name
...
Run Code Online (Sandbox Code Playgroud) 我见过几个 ABAP 标准方法,它们返回对数据的引用作为结果。
CL_ABAP_EXCEPTIONAL_VALUES=>GET_MAX_VALUE( )是其中一种方法。我的自然倾向是在一行中使用此方法,如下所示:
DATA lv_max_value TYPE i.
lv_max_value = CL_ABAP_EXCEPTIONAL_VALUES=>GET_MAX_VALUE( lv_max_value )->*.
Run Code Online (Sandbox Code Playgroud)
可悲的是,这不起作用,因为:
功能方法“GET_MAX_VALUE”的结果类型不是对象引用或接口引用。
手头的问题是:是否可以直接取消引用这些结果?
每当我确定结果是兼容的时,我宁愿避免取消引用的旧方法(存储引用,将其分配给字段符号,然后将其放入目标变量):
DATA lv_max_value TYPE i.
DATA ref TYPE REF TO data.
FIELD-SYMBOLS <field> TYPE any.
ref = CL_ABAP_EXCEPTIONAL_VALUES=>GET_MAX_VALUE( lv_max_value ).
ASSIGN ref->* TO <field>.
lv_max_value = <field>.
Run Code Online (Sandbox Code Playgroud)
这似乎是一个简单动作的大规模操作。