Я пытаюсь построить тип Dynami c с использованием классов RTTS. Я создал таблицу компонентов, содержащую имена столбцов 'COL_1'
, 'COL_2'
и так далее ... Создание типа в стандартном методе CL_ABAP_STRUCTDESCR=>CREATE( )
в строке 73 не выполняется:
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.