abap一个简单类浏览器的代码(等有空继续完善)

REPORT ZBrowse_Class_tool.

type-pools:
    SEOO,
    SEOR,
    slis,
    SEOS.
tables:
    sscrfields.
types: begin of t_attr,
     CLSNAME type SEOCLSNAME,
     CMPNAME type SEOCMPNAME,
     DESCRIPT type SEODESCR,
*Private,Protected,Public
     EXPOSURE type SEOEXPOSE,
     SEOEXPOF1I type SEOEXPOF1I,
*Instance Attribute,Static Attribute,Constant
     ATTDECLTYP type SEOATTDECL,
     SEOATTDF1I type SEOATTDF1I,
*ReadOnly
     ATTRDONLY type SEORDONLY,
*Attribute reference (LIKE),Type reference (TYPE),Object (TYPE),Object reference (TYPE REF TO),See coding
     TYPTYPE type SEOTYPTYPE,
     SEOTYPTF1I type SEOTYPTF1I,
*Initial value
     ATTVALUE type SEOVALUE,
     level   type i,
     lights type i,
     color(4)  type c,
     tabcolor  type slis_t_specialcol_alv,
   end of t_attr.

types: begin of t_meth,
     CLSNAME type SEOCLSNAME,
     CMPNAME type SEOCMPNAME,
     DESCRIPT type SEODESCR,
*Private,Protected,Public
     EXPOSURE type SEOEXPOSE,
     SEOEXPOF1I type SEOEXPOF1I,
*Instance,Static
     MTDDECLTYP type SEOMTDDECL,
     SEOATTDF1I type SEOATTDF1I,
     level   type i,
     lights type i,
     color(4)  type c,
     tabcolor  type slis_t_specialcol_alv,
   end of t_meth.

types: begin of t_event,
     CLSNAME type SEOCLSNAME,
     CMPNAME type SEOCMPNAME,
     DESCRIPT type SEODESCR,
*Private,Protected,Public
     EXPOSURE type SEOEXPOSE,
     SEOEXPOF1I type SEOEXPOF1I,
*Instance,Static
     EVTDECLTYP type SEOEVTDECL,
     SEOEVTDF1I type SEOEVTDF1I,
     level   type i,
     lights type i,
     color(4)  type c,
     tabcolor  type slis_t_specialcol_alv,
   end of t_event.

data: gt_classkey type seoclskey.
data: NOT_ACTIVE TYPE  SEOX_BOOLEAN.
field-symbols: <gt_outtab> type standard table.
data: i_gettype type i value 1.
data: gt_field   type slis_t_fieldcat_alv,
      gt_sort       type slis_t_sortinfo_alv.
data  gt_layout type slis_layout_alv.
data:
   g_wa_attr type t_attr,
   gt_attr type standard table of t_attr,
   g_wa_event type t_event,
   gt_event type standard table of t_event,
   g_wa_meth type t_meth,
   gt_meth type standard table of t_meth.

parameters p_CLS like  SEOCLASS-CLSNAME obligatory default 'CL_GUI_ALV_GRID'.

SELECTION-SCREEN: FUNCTION KEY 1,
                  FUNCTION KEY 2,
                  FUNCTION KEY 3.

load-of-program.
  sscrfields-functxt_01 = 'Methods'.
  sscrfields-functxt_02 = 'Attributes'.
  sscrfields-functxt_03 = 'Events'.

INITIALIZATION.

AT SELECTION-SCREEN OUTPUT.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_CLS.
  gt_classkey-clsname =  p_CLS.
  call function 'F4_DD_ALLTYPES'
    EXPORTING
      object               = gt_classkey-clsname
      suppress_selection   = 'X'
      display_only         = ' '
      only_types_for_clifs = 'X'
    IMPORTING
      result               = p_CLS.

AT SELECTION-SCREEN.
* check class existence
  gt_classkey-CLSNAME = p_CLS.
  call function 'SEO_CLASS_EXISTENCE_CHECK'
    EXPORTING
      clskey        = gt_classkey
    IMPORTING
      not_active    = not_active
    EXCEPTIONS
      not_specified = 1
      not_existing  = 2
      is_interface  = 3
      no_text       = 4
      inconsistent  = 5
      others        = 6.
  if sy-subrc ne 0.
    message 'The % is not existent.' TYPE 'E'.
  endif.
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
*trigge  start-of-SELECTION event
      sscrfields-ucomm = 'ONLI'.
      i_gettype = 1.
    WHEN 'FC02'.
*trigge  start-of-SELECTION event
      sscrfields-ucomm = 'ONLI'.
      i_gettype = 2.
    WHEN 'FC03'.
*trigge  start-of-SELECTION event
      sscrfields-ucomm = 'ONLI'.
      i_gettype = 3.
    when others.
      i_gettype = 2.
  ENDCASE.

start-of-SELECTION.
  case i_gettype.
    when 1.
      perform get_meth.
    when 2.
      perform get_att.
    when 3.
      perform get_event.
  endcase.

END-OF-SELECTION.
  call function 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program      = sy-repid
      i_callback_user_command = 'USER_COMMAND'
      it_fieldcat             = gt_field[]
      is_layout               = gt_layout
      it_sort                 = gt_sort[]
    TABLES
      t_outtab                = <gt_outtab>.

*&---------------------------------------------------------------------*
*&      Form  user_command
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
form user_command using r_ucomm like sy-ucomm
                  rs_selfield type slis_selfield.
  data:
    bdcdata_wa  type bdcdata,
    bdcdata_tab type standard table of bdcdata with default key.

  case r_ucomm.
    when '&IC1'.                       "doubleclick
      clear bdcdata_wa.
      bdcdata_wa-program  = 'SAPLSEOD'.
      bdcdata_wa-dynpro   = '1000'.
      bdcdata_wa-dynbegin = 'X'.
      append bdcdata_wa to bdcdata_tab.

      clear bdcdata_wa.
      bdcdata_wa-fnam = 'BDC_CURSOR'.
      bdcdata_wa-fval = 'SEOCLASS-CLSNAME'.
      append bdcdata_wa to bdcdata_tab.

      clear bdcdata_wa.
      bdcdata_wa-fnam = 'BDC_OKCODE'.
      bdcdata_wa-fval = '=CIDI'.
      append bdcdata_wa to bdcdata_tab.

      clear bdcdata_wa.
      bdcdata_wa-fnam = 'SEOCLASS-CLSNAME'.
      bdcdata_wa-fval = p_cls.
      append bdcdata_wa to bdcdata_tab.
      call transaction 'SE24' using bdcdata_tab mode 'E'.
      clear r_ucomm.
  endcase.
endform.                    "USER_COMMAND

*&---------------------------------------------------------------------*
*&      Form  get_attfield
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_att .
  data: classkey type seoclskey,
        superclskey type seoclsref,
        constructor_exists_in_class type seox_boolean,
        rede       type seor_redefinitions_r,
        it_rede    type seor_redefinitions_r,
        wa_redes   type seoredef,
        it_atts    type seoo_attributes_r,
        atts       type seoo_attributes_r,
        i_level    type i.
  i_level = 0.
  call function 'SEO_CLASS_TYPEINFO_GET'
    EXPORTING
      clskey        = gt_classkey
      version       = '1'
      state         = seoc_state_model_and_impl
    IMPORTING
      attributes    = it_atts
      REDEFINITIONS = it_rede
    EXCEPTIONS
      not_existing  = 1
      is_interface  = 2
      others        = 3.
  if sy-subrc = 0.
    perform addattr using it_atts it_rede i_level.
    classkey  = gt_classkey.
    do.
      clear superclskey.
      call function 'SEO_CLASS_GET'
        EXPORTING
          clskey        = classkey
          version       = '1'
          state         = seoc_state_model_and_impl
        IMPORTING
          superclass    = superclskey
        EXCEPTIONS
          error_message = 1
          others        = 1.
      if sy-subrc = 1 or superclskey is initial.
        exit.
      endif.
      classkey  = superclskey.
      i_level = i_level + 1.
      refresh: atts.
      call function 'SEO_CLASS_TYPEINFO_GET'
        EXPORTING
          clskey        = classkey
          version       = '1'
          state         = seoc_state_model_and_impl
        IMPORTING
          attributes    = atts
          REDEFINITIONS = rede.
      delete atts where exposure = seoc_exposure_private.
      loop at it_rede into wa_redes.
        delete atts where CMPNAME = wa_redes-mtdname.
      endloop.
      perform addattr using atts rede i_level.
      it_rede[] = rede[].
    enddo.
    perform sub_field_des_d using   '' '' 'LEVEL'       '' '' ''  '' '' 'Class Level'  '2' '' 'X' '' gt_field[].
    perform sub_field_des_d using   '' '' 'SEOEXPOF1I'       '' 'X' 'X' '' '' 'Visiblity'  '10' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'CMPNAME'       '' 'X' 'X' '' '' 'Attribute name'  '30' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'CLSNAME'       '' '' '' '' '' 'Class name'  '30' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'DESCRIPT'       '' '' '' '' '' 'Description'  '60' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'SEOATTDF1I'       '' '' ''  '' '' 'Attribute Level'  '15' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'ATTRDONLY'       '' '' '' '' '' 'ReadOnly'  '1' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'SEOTYPTF1I'       '' '' '' '' '' 'Typing'  '10' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'ATTVALUE'       '' '' '' '' '' 'Initial Value'  '20' '' '' '' gt_field[].
    gt_layout-lights_fieldname  = 'LIGHTS'.
    gt_layout-info_fieldname = 'COLOR'.
    refresh gt_sort.
    clear gt_sort.
    perform sub_field_sort using:
       'SEOEXPOF1I' '' '1' '' 'X' gt_sort[],
       'LEVEL' '' '2' 'X' '' gt_sort[],
       'CMPNAME' '' '3' 'X' '' gt_sort[],
       'CLSNAME' '' '4' 'X' '' gt_sort[].
  endif.
  assign gt_attr to <gt_outtab>.
ENDFORM.                    " get_attfield
*&---------------------------------------------------------------------*
*&      Form  addattr
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_ATTRS[]  text
*      -->P_I_LEVEL  text
*----------------------------------------------------------------------*
FORM addattr  USING  P_IT_ATTRS  type  seoo_attributes_r
                     p_rede      type  seor_redefinitions_r
                     P_LEVEL     type  i.
  data:  wa_atts    type seoo_attribute_r.
  loop at   P_IT_ATTRS into wa_atts.
    move-corresponding wa_atts to g_wa_attr.
    g_wa_attr-level = P_LEVEL.
*Private,Protected,Public
    case g_wa_attr-EXPOSURE.
      when 0.
        g_wa_attr-SEOEXPOF1I = 'Private'.
        g_wa_attr-lights = 1.
      when 1.
        g_wa_attr-SEOEXPOF1I = 'Protected'.
        g_wa_attr-lights = 2.
      when 2.
        g_wa_attr-SEOEXPOF1I = 'Public'.
        g_wa_attr-lights = 3.
    endcase.
*Instance Attribute,Static Attribute,Constant
    case g_wa_attr-ATTDECLTYP.
      when 0.
        g_wa_attr-SEOATTDF1I = 'Instance'.
        g_wa_attr-color      = ''.
      when 1.
        g_wa_attr-SEOATTDF1I = 'Static'.
        g_wa_attr-color      = 'C510'.
      when 2.
        g_wa_attr-SEOATTDF1I = 'Constant'.
        g_wa_attr-color      = 'C510'.
        continue."Do not display constant attributes
    endcase.
*Attribute reference (LIKE),Type reference (TYPE),Object (TYPE),Object reference (TYPE REF TO),See coding
*     TYPTYPE type SEOTYPTYPE,
*     SEOTYPTF1I type SEOTYPTF1I,
*      case g_wa_attr-TYPTYPE.
*        when 0.
*          g_wa_attr-SEOTYPTF1I = 'Like'.
*          g_wa_attr-color      = ''.
*        when 1.
*          g_wa_attr-SEOTYPTF1I = 'Type'.
*          g_wa_attr-color      = 'C510'.
*        when 2.
*          g_wa_attr-SEOTYPTF1I = 'Type'.
*        when 3.
*          g_wa_attr-SEOTYPTF1I = 'Type Ref To'.
*      endcase.
    append g_wa_attr to gt_attr.
  endloop.
ENDFORM.                    " addattr
*&---------------------------------------------------------------------*
*&      Form  get_meth
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_meth .
  data: classkey type seoclskey,
        superclskey type seoclsref,
        constructor_exists_in_class type seox_boolean,
        rede       type seor_redefinitions_r,
        it_rede    type seor_redefinitions_r,
        wa_redes   type seoredef,
        it_meth type  seoo_methods_r,
        meth type  seoo_methods_r,
        i_level    type i.
  i_level = 0.
  call function 'SEO_CLASS_TYPEINFO_GET'
    EXPORTING
      clskey        = gt_classkey
      version       = '1'
      state         = seoc_state_model_and_impl
    IMPORTING
      METHODS       = it_meth
      REDEFINITIONS = it_rede
    EXCEPTIONS
      not_existing  = 1
      is_interface  = 2
      others        = 3.
  if sy-subrc = 0.
    perform addmeth using it_meth it_rede i_level.
    classkey  = gt_classkey.
    do.
      clear superclskey.
      call function 'SEO_CLASS_GET'
        EXPORTING
          clskey        = classkey
          version       = '1'
          state         = seoc_state_model_and_impl
        IMPORTING
          superclass    = superclskey
        EXCEPTIONS
          error_message = 1
          others        = 1.
      if sy-subrc = 1 or superclskey is initial.
        exit.
      endif.
      classkey  = superclskey.
      i_level   = i_level + 1.
      refresh:  meth.
      call function 'SEO_CLASS_TYPEINFO_GET'
        EXPORTING
          clskey        = classkey
          version       = '1'
          state         = seoc_state_model_and_impl
        IMPORTING
          METHODS       = meth
          REDEFINITIONS = rede.
      delete meth where exposure = seoc_exposure_private.
      loop at it_rede into wa_redes.
        delete meth where CMPNAME = wa_redes-mtdname.
      endloop.
      perform addmeth using meth rede i_level.
      it_rede[] = rede[].
    enddo.
    perform sub_field_des_d using   '' '' 'LEVEL'       '' '' ''  '' '' 'Class Level'  '2' '' 'X' '' gt_field[].
    perform sub_field_des_d using   '' '' 'SEOEXPOF1I'       '' 'X' 'X' '' '' 'Visiblity'  '10' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'CMPNAME'       '' 'X' 'X' '' '' 'Method name'  '30' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'CLSNAME'       '' '' '' '' '' 'Class name'  '30' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'DESCRIPT'       '' '' '' '' '' 'Description'  '60' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'SEOATTDF1I'       '' '' ''  '' '' 'Method Level'  '15' '' '' '' gt_field[].
    gt_layout-lights_fieldname  = 'LIGHTS'.
    gt_layout-info_fieldname = 'COLOR'.
    refresh gt_sort.
    clear gt_sort.
    perform sub_field_sort using:
       'SEOEXPOF1I' '' '1' '' 'X' gt_sort[],
       'LEVEL' '' '2' 'X' '' gt_sort[],
       'CMPNAME' '' '3' 'X' '' gt_sort[],
       'CLSNAME' '' '4' 'X' '' gt_sort[].
  endif.
  assign gt_meth to <gt_outtab>.
ENDFORM.                    " get_meth
*&---------------------------------------------------------------------*
*&      Form  addattr
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_ATTRS[]  text
*      -->P_I_LEVEL  text
*----------------------------------------------------------------------*
FORM addmeth  USING  P_IT_meth  type  seoo_methods_r
                     p_rede      type  seor_redefinitions_r
                     P_LEVEL     type  i.
  data   wa_meth type seoo_method_r.
  loop at P_IT_meth into wa_meth.
    move-corresponding wa_meth to g_wa_meth.
    g_wa_meth-level = P_LEVEL.
*Private,Protected,Public
    case g_wa_meth-EXPOSURE.
      when 0.
        g_wa_meth-SEOEXPOF1I = 'Private'.
        g_wa_meth-lights = 1.
      when 1.
        g_wa_meth-SEOEXPOF1I = 'Protected'.
        g_wa_meth-lights = 2.
      when 2.
        g_wa_meth-SEOEXPOF1I = 'Public'.
        g_wa_meth-lights = 3.
    endcase.
*Instance Attribute,Static Attribute,Constant
    case g_wa_meth-MTDDECLTYP.
      when 0.
        g_wa_meth-SEOATTDF1I = 'Instance'.
        g_wa_meth-color      = ''.
      when 1.
        g_wa_meth-SEOATTDF1I = 'Static'.
        g_wa_meth-color      = 'C510'.
      when 2.
        g_wa_meth-SEOATTDF1I = 'Constant'.
        g_wa_meth-color      = 'C510'.
        continue."Do not display constant attributes
    endcase.
    append g_wa_meth to gt_meth.
  endloop.
ENDFORM.                    " addmeth
*&---------------------------------------------------------------------*
*&      Form  get_meth
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_event .
  data: classkey type seoclskey,
        superclskey type seoclsref,
        constructor_exists_in_class type seox_boolean,
        rede       type seor_redefinitions_r,
        it_rede    type seor_redefinitions_r,
        wa_redes   type seoredef,
        it_event   type  seoo_events_r,
        event      type  seoo_events_r,
        i_level    type i.
  i_level = 0.
  call function 'SEO_CLASS_TYPEINFO_GET'
    EXPORTING
      clskey        = gt_classkey
      version       = '1'
      state         = seoc_state_model_and_impl
    IMPORTING
      EVENTS        = it_event
      REDEFINITIONS = it_rede
    EXCEPTIONS
      not_existing  = 1
      is_interface  = 2
      others        = 3.
  if sy-subrc = 0.
    perform addevent using it_event it_rede i_level.
    classkey  = gt_classkey.
    do.
      clear superclskey.
      call function 'SEO_CLASS_GET'
        EXPORTING
          clskey        = classkey
          version       = '1'
          state         = seoc_state_model_and_impl
        IMPORTING
          superclass    = superclskey
        EXCEPTIONS
          error_message = 1
          others        = 1.
      if sy-subrc = 1 or superclskey is initial.
        exit.
      endif.
      classkey  = superclskey.
      i_level   = i_level + 1.
      refresh:  event.
      call function 'SEO_CLASS_TYPEINFO_GET'
        EXPORTING
          clskey        = classkey
          version       = '1'
          state         = seoc_state_model_and_impl
        IMPORTING
          eventS        = event
          REDEFINITIONS = rede.
      delete event where exposure = seoc_exposure_private.
      loop at it_rede into wa_redes.
        delete event where CMPNAME = wa_redes-mtdname.
      endloop.
      perform addevent using event rede i_level.
      it_rede[] = rede[].
    enddo.
    perform sub_field_des_d using   '' '' 'LEVEL'       '' '' ''  '' '' 'Class Level'  '2' '' 'X' '' gt_field[].
    perform sub_field_des_d using   '' '' 'SEOEXPOF1I'       '' 'X' 'X' '' '' 'Visiblity'  '10' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'CMPNAME'       '' 'X' 'X' '' '' 'Event name'  '30' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'CLSNAME'       '' '' '' '' '' 'Class name'  '30' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'DESCRIPT'       '' '' '' '' '' 'Description'  '60' '' '' '' gt_field[].
    perform sub_field_des_d using   '' '' 'SEOEVTDF1I'       '' '' ''  '' '' 'Event Level'  '15' '' '' '' gt_field[].
    gt_layout-lights_fieldname  = 'LIGHTS'.
    gt_layout-info_fieldname = 'COLOR'.
    refresh gt_sort.
    clear gt_sort.
    perform sub_field_sort using:
       'SEOEXPOF1I' '' '1' '' 'X' gt_sort[],
       'LEVEL' '' '2' 'X' '' gt_sort[],
       'CMPNAME' '' '3' 'X' '' gt_sort[],
       'CLSNAME' '' '4' 'X' '' gt_sort[].
  endif.
  assign gt_event to <gt_outtab>.
ENDFORM.                    " get_event
*&---------------------------------------------------------------------*
*&      Form  addattr
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_IT_ATTRS[]  text
*      -->P_I_LEVEL  text
*----------------------------------------------------------------------*
FORM addevent  USING  P_IT_event  type  seoo_events_r
                     p_rede      type  seor_redefinitions_r
                     P_LEVEL     type  i.
  data   wa_event type seoo_event_r.
  loop at P_IT_event into wa_event.
    move-corresponding wa_event to g_wa_event.
    g_wa_event-level = P_LEVEL.
*Private,Protected,Public
    case g_wa_event-EXPOSURE.
      when 0.
        g_wa_event-SEOEXPOF1I = 'Private'.
        g_wa_event-lights = 1.
      when 1.
        g_wa_event-SEOEXPOF1I = 'Protected'.
        g_wa_event-lights = 2.
      when 2.
        g_wa_event-SEOEXPOF1I = 'Public'.
        g_wa_event-lights = 3.
    endcase.
*Instance Attribute,Static Attribute,Constant
    case g_wa_event-EVTDECLTYP.
      when 0.
        g_wa_event-SEOEVTDF1I = 'Instance'.
        g_wa_event-color      = ''.
      when 1.
        g_wa_event-SEOEVTDF1I = 'Static'.
        g_wa_event-color      = 'C510'.
      when 2.
        g_wa_event-SEOEVTDF1I = 'Constant'.
        g_wa_event-color      = 'C510'.
        continue."Do not display constant attributes
    endcase.
    append g_wa_event to gt_event.
  endloop.
ENDFORM.                    " addevent
*----------------------------------------------------------------------*
* Form         : SUB_FIELD_DES_D
*----------------------------------------------------------------------*
*      Description:  Set the fields which will be displayed
*----------------------------------------------------------------------*
*      im_ref_FIELD---must upper case                                 *
*      im_ref_TABLE---internal table name                             *
*      im_FIELDname---must upper case                                 *
*      im_TABname  ---internal table name                             *
*      im_KEY      ---column with key-color AND frozen                *
*      im_CHECKBOX ---the column is checkbox                          *
*      im_dosum    ---total,if total, the field must be sumed         *
*      im_SELTEX_L ---column Long description of title                *
*      im_outputlen---column output length
*      IM_dec--?????
*      re_field : ????????
*----------------------------------------------------------------------*
* Modification Log:                                                    *
* Date        Programmer     Correction Number                         *
*----------------------------------------------------------------------*
form sub_field_des_d using im_ref_field type c
                         im_ref_table type c
                         im_fieldname type c
                         im_tabname type c
                         im_key type c
                         im_fix type c
                         im_checkbox type c
                         im_dosum type c
                         im_seltex_l type c
                         im_outputlen type i
                         im_zero type c
                         im_out  type c
                         im_dec  type c
                         re_field type slis_t_fieldcat_alv.
  data: wa_fieldcat type slis_fieldcat_alv.
  clear wa_fieldcat.
  wa_fieldcat-ref_fieldname = im_ref_field.
  wa_fieldcat-ref_tabname = im_ref_table.
  wa_fieldcat-fieldname = im_fieldname.
  wa_fieldcat-tabname   = im_tabname.
  wa_fieldcat-key       = im_key.
  wa_fieldcat-fix_column = IM_fix.
  wa_fieldcat-checkbox  = im_checkbox.
  wa_fieldcat-do_sum     = im_dosum.
  wa_fieldcat-no_zero     = im_zero.
  wa_fieldcat-no_out     = im_out.
  wa_fieldcat-seltext_l = im_seltex_l.
  wa_fieldcat-seltext_m = im_seltex_l.
  wa_fieldcat-seltext_s = im_seltex_l.
  wa_fieldcat-outputlen = im_outputlen.
  wa_fieldcat-decimals_out = im_dec.
*  wa_fieldcat-col_pos   = IM_colpos.
  append wa_fieldcat to re_field.
endform.                    "SUB_FIELD_DES

*&---------------------------------------------------------------------*
*&      Form  sub_field_sort
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->IM_FIELDNAME  text
*      -->IM_TABNAME    text
*      -->IM_SPOS       text
*      -->IM_UP         text
*      -->IM_SUBTOT     text
*      -->RE_SORT       text
*----------------------------------------------------------------------*
form sub_field_sort using im_fieldname type c
                          im_tabname type c
                          im_spos type i
                          im_up type c
                          im_subtot type c
                          re_sort type slis_t_sortinfo_alv.
  data: wa_sort     type slis_sortinfo_alv.
  clear wa_sort .
  wa_sort-fieldname = im_fieldname.  "The field will be sorted
  wa_sort-tabname   = im_tabname.    "internal table name
  wa_sort-spos      = im_spos.       "Sort sequence
  wa_sort-up        = im_up.         "Ascending,down-Descending
  wa_sort-subtot    = im_subtot.
  append wa_sort to re_sort.
endform.                    "SUB_FIELD_SORT 

原文地址:https://www.cnblogs.com/xiaomaohai/p/6157127.html