簡體   English   中英

使用 RTTS 創建類型時 CX_SY_STRUCT_COMP_NAME=>illegal_char_in_name

[英]CX_SY_STRUCT_COMP_NAME=>illegal_char_in_name while creating a type with RTTS

我正在嘗試使用 RTTS 類構建動態類型。 我已經構建了一個包含列名'COL_1''COL_2'等等的組件表......第 73 行的標准方法CL_ABAP_STRUCTDESCR=>CREATE( )中的類型創建失敗:

       if comp-name+off(1) cn 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_' or
          comp-name+off(*) cn 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789'.
*        illegal character in component name
         raise exception type CX_SY_STRUCT_COMP_NAME
           exporting textid = CX_SY_STRUCT_COMP_NAME=>illegal_char_in_name
                     component_name = comp-name
                     component_number = comp_no.

comp-name的驗屍值是COL_1 如您所見,字符是有效的。 我不明白 IF 條件如何在這里成立。

在以完全相同的方式調用此方法之前,我已經在我自己的模塊中測試了列名的有效性,並且 IF 條件在那里返回 FALSE。

重現此錯誤的最少代碼:

  DATA: ty_output       TYPE REF TO CL_ABAP_STRUCTDESCR,
        it_output       TYPE REF TO DATA,    
        wa_comp         TYPE cl_abap_structdescr=>component,
        it_comp         TYPE cl_abap_structdescr=>component_table,
        c_index         TYPE string.

  DO 7 TIMES.
    c_index = sy-index.
    CONCATENATE 'COL_' c_index INTO wa_comp-name.
    IF wa_comp-name(*) cn 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_1234567890'.
      WRITE 'NO'. " <= This branch is entered.
    ENDIF.
    IF 'COL_1' cn 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_1234567890'.
      WRITE 'NO'. " <= This branch is NOT entered.
    ENDIF.
    wa_comp-type = CL_ABAP_ELEMDESCR=>GET_STRING( ).
    APPEND wa_comp TO it_comp.
  ENDDO.

  ty_output = cl_abap_structdescr=>create( it_comp ).
  CREATE DATA it_output TYPE HANDLE ty_output.

這是由於將sy-index (整數)強制轉換為c_index (字符串),在wa_comp-name的末尾添加了一個不可見字符。

sy-index轉換為n類型的變量而不是string解決了這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM