使用构造函数表达式时的转换异常

时间:2016-06-01 12:03:25

标签: abap

我正在处理一个例程,该例程将字符串表(在本例中为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_customizingSTANDARD 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静态获取其类型。有谁知道我怎么能解决这个问题?

1 个答案:

答案 0 :(得分:4)

您要实现的目标是不可能的,因为使用COND的变量的内联定义的类型是在编译时决定的,而不是在运行时决定的。

请参阅我的问题here。将采用的类型始终是THEN之后的变量类型。您可以通过摆弄THEN ELSEASSIGN 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( ). 类型的字段符号。

products = [
    {
        "currencyId"=>"UAH",
        "categoryId"=>"9395236",
        "picture"=> [
            "http://images.ua.prom.st/427654530_w640_h640_cid2043281_pid296482296-1fdb5252.jpg",
            "http://images.ua.prom.st/427654531_w640_h640_cid2043281_pid296482296-d1bd8ab8.jpg"
        ],
        "pickup"=>"true",
        "delivery"=>"true",
        "name"=>"VOX - Vox Ac15Vr ",
        "vendor"=>"VOX",
        "vendorCode"=>"D000951"},
    {
        other similar hash
    },
    {
        other similar hash
    }   
]