[英]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.