类方法(METHOD)参数 - 实现动态传入内表、工作区、对象

自定义的CLASS中METHOD需要动态确定内表和工作区,通过如下方法实现:

CLASS: ZCL_TEST

METHOD: MT_TYPE_DATA

内    表:TYPE                    STANDARD TABLE

工作区:TYPE                    DATA

对    象:TYPE REF TO     OBJECT

METHOD实施程序

  METHOD mt_type_data.
    ASSIGN cs_data TO FIELD-SYMBOL(<fs_data>).
    IF <fs_data> IS ASSIGNED.
      ASSIGN COMPONENT 'FD1' OF STRUCTURE <fs_data> TO FIELD-SYMBOL(<fd1>).
    ENDIF.
    "读取传入内表数据
    DATA(zkey) = |FD2|.
    READ TABLE it_tab ASSIGNING FIELD-SYMBOL(<fs_tab>) WITH KEY (zkey) = |22|.
    IF sy-subrc = 0.
      ASSIGN COMPONENT 'FD1' OF STRUCTURE <fs_tab> TO FIELD-SYMBOL(<fs_fd>).
      CHECK <fs_fd> IS ASSIGNED.
      IF <fd1> IS ASSIGNED.
        <fs_fd> = <fd1>.
        UNASSIGN <fd1>.
      ENDIF.
      WRITE: / <fs_fd>.
      UNASSIGN <fs_fd>.
    ENDIF.
  ENDMETHOD.

测试DEMO

REPORT ycl_test.

TYPES:BEGIN OF ty_out,
        fd1 TYPE char20,
        fd2 TYPE char20,
      END OF ty_out.
DATA: lt_out TYPE STANDARD TABLE OF ty_out,
      ls_out TYPE ty_out.

lt_out[] = VALUE #( ( fd1 = |11| fd2 = |12| )
                    ( fd1 = |21| fd2 = |22| )
                    ( fd1 = |31| fd2 = |32| ) ).

ls_out = VALUE #( fd1 = |WA_FD1| fd2 = |WA_FD2| ).

CALL METHOD lcl_test->mt_type_data
  CHANGING
    it_tab  = lt_out
    cs_data = ls_out.

DEBUG

如果需要对内表或工作区具体字段进行操作,通过

https://blog.csdn.net/wangjolly/article/details/79127090

获取字段信息,改造代码如下:

  METHOD mt_type_data.

    ASSIGN cs_data TO FIELD-SYMBOL(<fs_data>).
    IF <fs_data> IS ASSIGNED.
      ASSIGN COMPONENT 'FD1' OF STRUCTURE <fs_data> TO FIELD-SYMBOL(<fd1>).
    ENDIF.

    "读取传入内表数据
    DATA(zkey) = |FD2|.

    READ TABLE it_tab ASSIGNING FIELD-SYMBOL(<fs_tab>) WITH KEY (zkey) = |22|.
    IF sy-subrc = 0.
      ASSIGN COMPONENT 'FD1' OF STRUCTURE <fs_tab> TO FIELD-SYMBOL(<fs_fd>).
      CHECK <fs_fd> IS ASSIGNED.
      IF <fd1> IS ASSIGNED.
        <fs_fd> = <fd1>.
        UNASSIGN <fd1>.
      ENDIF.

      WRITE: / <fs_fd>.

      UNASSIGN <fs_fd>.
    ENDIF.

**********************************************************************
*   获取 传入内表和工作区字段信息
    DATA: lcl_struc     TYPE REF TO cl_abap_structdescr,
          lcl_tab       TYPE REF TO cl_abap_tabledescr,
          lcl_tab_struc TYPE REF TO cl_abap_structdescr,
          lt_comps_wa   TYPE abap_compdescr_tab,
          lt_comps_tab  TYPE abap_compdescr_tab.

    "1 工作区 字段信息
    lcl_struc ?= cl_abap_typedescr=>describe_by_data( cs_data ).
    lt_comps_wa = lcl_struc->components.
    "3 内表 字段信息
    "->3.1 Get the description of data object type
    lcl_tab ?= cl_abap_tabledescr=>describe_by_data( it_tab ).
    "->3.2 Get the line type
    lcl_tab_struc ?= lcl_tab->get_table_line_type( ).
    lt_comps_tab = lcl_struc->components.

  ENDMETHOD.

猜你喜欢

转载自blog.csdn.net/wanglei880526/article/details/88693497