我正在尝试动态声明或使用这样的类型定义(将其传递给需要该类型的方法)。
types:
BEGIN OF TY_ZTEST_123 .
INCLUDE TYPE ZTEST_ABC.
INCLUDE TYPE IF_CHDO_OBJECT_TOOLS_REL=>TY_ICDIND.
TYPES END OF TY_ZTEST_123 .
因为我正在尝试编写一个通用方法来保存 cdhr/cdpos 中数据库表的更改
CALL METHOD (lv_class)=>(lv_method)
PARAMETER-TABLE
lt_tab.
我尝试使用 fieldcatalog 创建动态表。
我尝试使用 fieldcat 创建动态内部表并将其传递给方法。
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
i_structure_name = p_name
CHANGING
ct_fieldcat = p_fieldcat
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
CLEAR ls_fieldcat.
ls_fieldcat-fieldname = 'kz'.
ls_fieldcat-datatype = 'CHAR'.
ls_fieldcat-intlen = '1'.
ls_fieldcat-domname = 'CDCHNGIND'.
ls_fieldcat-ref_table = 'ICDIND'.
APPEND ls_fieldcat TO p_fieldcat.
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = lt_fieldcat
i_length_in_byte = 'X'
IMPORTING
ep_table = dy_table_new.
ASSIGN dy_table_new->* TO <dyn_table_updt_new>.
但是在调用该方法时,我仍然遇到
请问我该如何解决?
ABAP 有一个 RTTS 运行时类型系统。 您既可以创建数据类型,也可以在运行时创建该类型的数据实例。
创建数据文档在运行时创建数据。
展示应编译概念的简单方法。 虽然我刚刚注意到 cl_abap_structdescr=>create 现在被标记为已过时。 所以应该是被替换了。 但这仍然适用于 7.53 内核。
METHOD dynamic_data.
DATA: lo_struct_descr TYPE REF TO cl_abap_structdescr,
lo_struct TYPE REF TO data,
lt_components TYPE cl_abap_structdescr=>component_table,
ls_component LIKE LINE OF lt_components.
" Define the components of the structure
ls_component-name = 'FIELD1'.
ls_component-type = cl_abap_elemdescr=>get_c( p_length = 10 ).
APPEND ls_component TO lt_components.
ls_component-name = 'FIELD2'.
ls_component-type = cl_abap_elemdescr=>get_c( p_length = 20 ).
APPEND ls_component TO lt_components.
" Create the structure descriptor
lo_struct_descr ?= cl_abap_structdescr=>create( p_components = lt_components ).
" Create an instance of the structure
CREATE DATA lo_struct TYPE HANDLE lo_struct_descr.
ASSIGN lo_struct->* TO FIELD-SYMBOL(<fs_struct>).
" Assign values to the fields
ASSIGN COMPONENT 'FIELD1' OF STRUCTURE <fs_struct> TO FIELD-SYMBOL(<lv_field1>).
<lv_field1> = 'Value1'.
ASSIGN COMPONENT 'FIELD2' OF STRUCTURE <fs_struct> TO FIELD-SYMBOL(<lv_field2>).
<lv_field2> = 'Value2'.
" Output the values
WRITE: / <lv_field1>, <lv_field2>.
结束方法。