首页 > 解决方案 > 如何迭代 string_table 和修改行

问题描述

为了构建动态SELECT,我正在遍历字段列表并添加别名。

但是,这会清除列表。

REPORT ZITER_TEST.

CONSTANTS lc_alias TYPE string VALUE 'ref'.

DATA lt_field TYPE string_table.

lt_field = VALUE string_table( 
                               ( CONV string( 'PERNR' ) )
                               ( CONV string( 'SUBTY' ) )
                             ).

" lt_field: ['PERNR','SUBTY']

lt_field = VALUE string_table( FOR <lv_tmp> IN lt_field
                                 ( lc_alias && `~` && <lv_tmp> )
                             ).
" lt_field: [] instead of: ['ref~PERNR','ref~SUBTY']

标签: mappingabap

解决方案


VALUE的ABAP 文档说:

在对数据对象的赋值中,直接使用目标变量并且不创建临时数据对象。在分配括号中指定的值之前,该变量被完全初始化或覆盖。但是,它的原始值在可选的 LET 表达式中仍然可用

所以,而不是:

lt_field = VALUE string_table( FOR <lv_tmp> IN lt_field
                                 ( lc_alias && `~` && <lv_tmp> )
                             ).

采用:

lt_field = VALUE string_table( LET lt_field_temp = lt_field IN
                               FOR <lv_tmp> IN lt_field_temp
                                 ( lc_alias && `~` && <lv_tmp> )
                             ).

推荐阅读