我正在处理一个例程,它将字符串表的行(在本例中为fui_elements)移动到未知类型的结构(fcwa_struct)中。
DATA(li_temp) = ... "fill assignment table here
LOOP AT fui_elements ASSIGNING FIELD-SYMBOL(<lfs_element>).
ASSIGN COMPONENT li_temp[ sy-tabix ] OF STRUCTURE fcwa_struct
TO FIELD-SYMBOL(<lfs_field>).
IF sy-subrc <> 0.
"somethings wrong with the fui_elements data
ENDIF.
<lfs_field> = <lfs_element>.
ENDLOOP.如果表i_field_customizing (STANDARD TABLE OF string)不是初始值,我希望使用它的值。
否则,我希望生成一个整数表(这样,不管表的值如何,循环运行的频率都是相等的)。这里,lw_max是导入结构所包含的字段数量:
DATA(li_temp) = COND #( WHEN i_field_customizing[] IS INITIAL
THEN VALUE t_integer_tt( FOR X = 1
THEN X + 1
WHILE X <= lw_max
( X ) )
ELSE i_field_customizing ).但是当我像这样用i_field_customizing运行报告时:
DATA(i_field_customizing) = VALUE t_string_tt( ( `KUNNR` ) ( `NAME1` ) ).我在试图构造li_temp的行中得到了这个异常
CX_SY_CONVERSION_NO_NUMBER (KUNNR不能解释为数字)
我目前的猜测是,COND是静态地获得其类型的。有谁知道我怎么才能绕过这件事吗?
发布于 2016-06-01 12:56:29
您试图实现的目标是不可能的,因为使用COND的变量的内联定义的类型是在编译时而不是在运行时决定的。
请看我的问题here。将采取的类型始终是直接位于THEN之后的变量的类型。您可以通过在THEN at ELSE上更改条件和切换变量位置来决定在编译时选择哪种类型,但根据我的理解,它始终是或者是从我所理解的情况来看,您希望能够动态地这样做,这样您的ASSIGN COMPONENT语句就能像预期的那样与整数一起工作。
即使在ELSE之后专门转换变量,也可以获得与您相同的短转储。
DATA(li_temp) = COND #( WHEN i_field_customizing IS INITIAL
THEN VALUE t_integer_tt( ( 1 ) ( 2 ) )
ELSE CAST t_string_tt( REF #( i_field_customizing ) )->* ).或者,您可以将其转换为REF TO DATA,但是必须取消对STANDARD TABLE类型字段符号的引用。
REPORT zzy.
CLASS lcl_main DEFINITION FINAL CREATE PRIVATE.
PUBLIC SECTION.
CLASS-METHODS:
main.
ENDCLASS.
CLASS lcl_main IMPLEMENTATION.
METHOD main.
TYPES:
t_integer_tt TYPE STANDARD TABLE OF i WITH EMPTY KEY,
t_string_tt TYPE STANDARD TABLE OF string WITH EMPTY KEY.
FIELD-SYMBOLS:
<fs_table> TYPE STANDARD TABLE.
DATA: BEGIN OF l_str,
kunnr TYPE kunnr,
name1 TYPE name1,
END OF l_str.
* DATA(i_field_customizing) = VALUE t_string_tt( ( `KUNNR` ) ( `NAME1` ) ).
DATA(i_field_customizing) = VALUE t_string_tt( ).
DATA(li_temp) = COND #( WHEN i_field_customizing IS INITIAL
THEN CAST data( NEW t_integer_tt( ( 1 ) ( 2 ) ) )
ELSE CAST data( REF #( i_field_customizing ) ) ).
ASSIGN li_temp->* TO <fs_table>.
LOOP AT <fs_table> ASSIGNING FIELD-SYMBOL(<fs_temp>).
ASSIGN COMPONENT <fs_temp> OF STRUCTURE l_str TO FIELD-SYMBOL(<fs_field>).
ENDLOOP.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
lcl_main=>main( ).https://stackoverflow.com/questions/37568115
复制相似问题