ABAP 结构中包含类型的动态声明

问题描述 投票:0回答:1

我正在尝试动态声明或使用这样的类型定义(将其传递给需要该类型的方法)。

  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>.

但是在调用该方法时,我仍然遇到 的 cx_sy_dyn_call_error 。

请问我该如何解决?

dynamic abap
1个回答
0
投票

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>.

结束方法。

© www.soinside.com 2019 - 2024. All rights reserved.