SAP ABAP Runtime: Create Generic Type by Table Name, 然后为创建的泛型添加一列

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

我正在尝试编写一个可以接受表名的类,为数据摄取目的添加几个额外的列,然后生成一个 CSV。我通过发送表名作为参数来为表工作:

" Get the data dictionary object for the table
table_type ?= cl_abap_typedescr=>describe_by_name( table ).
" Create a table description object with the line type
table_descr = cl_abap_tabledescr=>create( p_line_type = table_type ).
" Declare the internal table using the generic type
create data gt_data type handle table_descr.

这个通用代码让我回到家,然后通过 cl_sql_statement 创建一个 SQL 调用并填充 gt_data 对象。我的问题是:

我可以为泛型类型添加一列吗?我想在对象的前面添加一个时间戳列,说明我何时从系统中提取数据。

我可能还想使用 JOIN 运行查询,我可能需要来自另一个表的单个字段,而泛型类型无法处理,因此我可能需要添加一个额外的列。这怎么能做到?

generics abap sap
1个回答
0
投票

你已经非常接近解决方案了。 使用 RTTS 类。
您的 ABAP 系统中有一个示例可以满足您的需求。

见 ABAP

demo_create_data_via_handle
Docu 也涵盖了这个过程。

这是程序的一个片段。

METHOD main.
    DATA: struct_type TYPE REF TO cl_abap_structdescr,
          dref        TYPE REF TO data,
          oref        TYPE REF TO cx_sy_struct_creation.

    DATA column1 TYPE c LENGTH 30.
    DATA column2 TYPE c LENGTH 30.

    FIELD-SYMBOLS: <struc>  TYPE any,
                   <comp1>  TYPE any,
                   <comp2>  TYPE any.

    cl_demo_input=>add_field( CHANGING field = column1 ).
    cl_demo_input=>add_field( CHANGING field = column2 ).
    cl_demo_input=>request( ).

    column1 = to_upper( column1 ).
    column2 = to_upper( column2 ).

    TRY.
        struct_type = cl_abap_structdescr=>get(
          VALUE #(
            ( name = column1 type = cl_abap_elemdescr=>get_c( 40 ) )
            ( name = column2 type = cl_abap_elemdescr=>get_i( )    )
                 )
                                               ).
        CREATE DATA dref TYPE HANDLE struct_type.
      CATCH cx_sy_struct_creation INTO oref.
        cl_demo_output=>display( oref->get_text( ) ).
        RETURN.
    ENDTRY.

    ASSIGN dref->* TO <struc>.
    ASSIGN COMPONENT column1 OF STRUCTURE <struc> TO <comp1>.
    <comp1> = 'Amount'.

    ASSIGN dref->* TO <struc>.
    ASSIGN COMPONENT column2 OF STRUCTURE <struc> TO <comp2>.
    <comp2> = 11.

    cl_demo_output=>display( |{ column1 WIDTH = 32 } { <comp1> }\n| &
                             |{ column2 WIDTH = 32 } { <comp2> }| ).
  ENDMETHOD.
© www.soinside.com 2019 - 2024. All rights reserved.