Здравствуйте!
Пытаюсь динамически создать таблицу.
При вызове cl_abap_tabledescr=>create() все замечательно. Тип создается.
Но мне нужно, чтобы в таблице было два ключа, поэтому использую cl_abap_tabledescr=>create_with_keys
На нем вылетает ошибка: "No alias is permitted for standard tables and tables with default keys".
Вот не могу понять, где и какие псевдонимы ему не нравятся.
Исходный код:
Code:
data:
lv_error_text type string,
lo_exception type ref to cx_sy_table_creation,
lt_linktab_keys type abap_table_keydescr_tab,
ls_linktab_key type abap_table_keydescr,
lt_outtab_keys type abap_table_keydescr_tab,
ls_key_descr like line of lt_outtab_keys,
ls_key_element type abap_table_keycompdescr,
lr_element_descr type ref to cl_abap_elemdescr,
lt_components type abap_component_tab,
ls_component like line of lt_components,
lr_linktab_line_type type ref to cl_abap_structdescr,
lr_outtab_line_type type ref to cl_abap_structdescr,
lr_outtab_type_descr type ref to cl_abap_tabledescr.
lr_outtab_type_descr ?= cl_abap_tabledescr=>describe_by_data_ref( p_data_ref = mr_outtab ).
lt_outtab_keys = lr_outtab_type_descr->get_keys( ).
mr_outtab_line_type ?= lr_outtab_type_descr->get_table_line_type( ).
get_plain_structure( exporting <- Метод, который преобразует .Include в структуру
ir_struct_handle = mr_outtab_line_type
changing
t_components = lt_components ).
lr_element_descr ?= cl_abap_elemdescr=>describe_by_name( 'TV_NODEKEY' ).
ls_component-name = 'NODE_KEY'.
ls_component-type = lr_element_descr.
append ls_component to lt_components.
ls_component-name = 'RELAT_NODE'.
ls_component-type = lr_element_descr.
append ls_component to lt_components.
lr_element_descr ?= cl_abap_elemdescr=>describe_by_name( 'CHAR01' ).
ls_component-name = 'NODE_TYPE'.
ls_component-type = lr_element_descr.
append ls_component to lt_components.
read table lt_outtab_keys into ls_key_descr with key is_primary = 'X'.
if sy-subrc = 0 or sy-subrc = 2.
ls_linktab_key-name = ITAB_KEY_NAME.
ls_linktab_key-is_primary = 'X'.
ls_linktab_key-access_kind = 'S'.
ls_linktab_key-key_kind = 'U'.
loop at ls_key_descr-components into ls_key_element.
append ls_key_element to ls_linktab_key-components.
endloop.
append ls_linktab_key to lt_linktab_keys.
endif.
lr_linktab_line_type = cl_abap_structdescr=>create( p_components = lt_components ).
try.
mr_linktab_type_hndl = cl_abap_tabledescr=>create_with_keys( p_line_type = lr_linktab_line_type p_keys = lt_linktab_keys ).
catch cx_sy_table_creation into lo_exception.
lv_error_text = lo_exception->get_text( ).
endtry.