小编Zer*_*ero的帖子

内联角色类型

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)

sap abap casting type-conversion

3
推荐指数
1
解决办法
203
查看次数

内联解引用方法返回参数

我见过几个 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)

这似乎是一个简单动作的大规模操作。

abap return-value dereference

3
推荐指数
1
解决办法
403
查看次数

标签 统计

abap ×2

casting ×1

dereference ×1

return-value ×1

sap ×1

type-conversion ×1