Dynamic CX系统结构组件名称=>;使用RTT创建类型时,\u名称中的\u字符\u非法
我正在尝试使用RTTS类构建一个动态类型。我构建了一个组件表,其中包含列名Dynamic CX系统结构组件名称=>;使用RTT创建类型时,\u名称中的\u字符\u非法,dynamic,abap,rtts,Dynamic,Abap,Rtts,我正在尝试使用RTTS类构建一个动态类型。我构建了一个组件表,其中包含列名'COL\u 1','COL\u 2'等等。。。在第73行的标准方法CL\u ABAP\u STRUCTDESCR=>CREATE()中,类型创建失败: if comp-name+off(1) cn 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_' or comp-name+off(*) cn 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789'. *
'COL\u 1'
,'COL\u 2'
等等。。。在第73行的标准方法CL\u ABAP\u 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
的验尸价值为colu 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.
DATA:ty_输出类型REF到CL_ABAP_STRUCTDESCR,
it_输出类型参考数据,
组件类型cl\U abap\U structdescr=>组件,
it_comp TYPE cl_abap_structdescr=>组件表,
c_索引类型字符串。
做7次。
c_指数=sy指数。
将“COL_uu”c_索引连接到wa_comp-name中。
如果公司名称(*)为'ABCDEFGHIJKLMNOPQRSTUVWXYZ_1234567890'。
写“不”。“这是由于将sy index
(整数)转换为c_index
(字符串)在wa_comp-name
的末尾添加了一个不可见字符造成的
将sy index
转换为n
类型的变量而不是string
解决了问题。仅从代码看,我猜问题在于索引是string类型的组合,连接和if'comp name+off(*)中的第二个条件“.连接帮助:如果目标字段结果具有固定长度,且该长度大于所需长度,则字段右侧将填充空格或十六进制0。如果尝试以整数形式连接索引,则会收到一条关于类型不兼容的错误消息,因此显式转换为字符串(你是对的,这就是导致错误的原因。)最好使用带有隐式转换的字符串模板,而不是串联:wa_comp-name=|COL|sy index}|。“不可见字符”实际上只是一个尾随空格,只是你没有注意它,它对应于符号,空格代表正数(请参见隐式转换目标I,它不会显示在调试器中该变量的值字段中。您必须检查长度和十六进制值才能注意到它。很遗憾,我的系统不支持模板。