"String calculation not permitted here" 在 REDUCE 上抛出

"String calculation not permitted here" is thrown on REDUCE

我在 LT_FIELDS 中有几个字段名称。我正在尝试以特定格式连接内部 table 中的数据,并将其附加到 LT_WHERE 以进行动态 select 查询。

下面是我写的片段:

TYPES: BEGIN OF ty_whr,
         fieldname TYPE string,
       END OF ty_whr.

DATA(lt_fields) = VALUE rsds_frange_t( ).
DATA(lt_where) = REDUCE ty_whr(
                   INIT whereclause = VALUE ty_whr( )
                   FOR <fields> IN lt_fields
                   NEXT whereclause = 
                     COND #( WHEN whereclause IS NOT INITIAL
                             THEN <fields>-fieldname && | IN | && |@| && <fields>-fieldname && | AND |
                             ELSE <fields>-fieldname && | IN | && |@| && <fields>-fieldname
                          ) ).

我在串联部分遇到此错误:

String calculation not permitted here

这里的语法错误吗?

构造函数表达式的语法消息有点奇怪。

实际上问题是由于目标 (whereclause) 是一个结构,您不能将文本文字分配给结构,而应该将其分配给它的文本组件 whereclause-fieldname(在 NEXT 之后):

TYPES: BEGIN OF ty_whr,
         fieldname TYPE string,
       END OF ty_whr.

DATA(lt_fields) = VALUE rsds_frange_t( ).
DATA(lt_where) = REDUCE ty_whr(
                   INIT whereclause = VALUE ty_whr( )
                   FOR <fields> IN lt_fields
                   NEXT whereclause-fieldname = 
                     COND #( WHEN whereclause IS NOT INITIAL
                             THEN <fields>-fieldname && | IN | && |@| && <fields>-fieldname && | AND |
                             ELSE <fields>-fieldname && | IN | && |@| && <fields>-fieldname
                          ) ).