SAP 书上抄来的AVL TREE的使用

来源:互联网 发布:java输出一句话 编辑:程序博客网 时间:2024/04/29 10:25

REPORT YALVTREE1 .
TABLES SPFLI.
DATA: OK_CODE TYPE SY-UCOMM,
      SAVE_OK TYPE OK_CODE.

*ALV定义的字段清单内表
DATA: GB_FIELDCAT TYPE LVC_T_FCAT,
*排序分类字段内表
  GB_SORTFLD TYPE LVC_T_SORT.

*定义用于传递的内表和变量
DATA: WA_SPFLI TYPE TABLE OF SPFLI.

SELECT * INTO TABLE  WA_SPFLI FROM SPFLI.

DATA: WA_CONTAINER TYPE SCRFNAME VALUE 'ALV1',
*     ALV_GRID TYPE REF TO CL_GUI_ALV_GRID,
*定义ALV TREE对象,此处是直接从ALV_GRID的定义更改
      ALV_GRID TYPE REF TO CL_GUI_ALV_TREE_SIMPLE,
*CUSTOMER OBJECT
    WA_CUSTOM_CONTAIER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.

CALL SCREEN 100.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module USER_COMMAND_0100 input.
  SAVE_OK = OK_CODE.
  CLEAR OK_CODE.
  CASE SAVE_OK.
    WHEN 'EXIT'.
      LEAVE PROGRAM.
  ENDCASE.
endmodule.                 " USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
module STATUS_0100 output.
  SET PF-STATUS 'STATUS100'.
*  SET TITLEBAR 'xxx'.
  IF WA_CUSTOM_CONTAIER IS INITIAL.

  DATA LS_LIST_COMM TYPE SLIS_T_LISTHEADER.
  DATA LS_ALIST_COMM TYPE SLIS_LISTHEADER.
  LS_ALIST_COMM-TYP = 'H'.
  LS_ALIST_COMM-INFO = 'ALV TREE TEST'.
  APPEND LS_ALIST_COMM TO LS_LIST_COMM.

  PERFORM BLDCAT.  "建立输出,汇总字段,

*建立分类清单及先后顺序
  PERFORM BLDSORTFLD.

*建立客户对象和ALV TREE对象
  CREATE OBJECT WA_CUSTOM_CONTAIER
    EXPORTING CONTAINER_NAME = WA_CONTAINER.
  CREATE OBJECT ALV_GRID
    EXPORTING I_PARENT = WA_CUSTOM_CONTAIER.
*显示ALV TREE对象
CALL METHOD ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
  EXPORTING
    IT_LIST_COMMENTARY = LS_LIST_COMM
    I_STRUCTURE_NAME = 'SPFLI'
  CHANGING
    IT_SORT = GB_SORTFLD
    IT_FIELDCATALOG = GB_FIELDCAT
    IT_OUTTAB = WA_SPFLI.

*展开第一层
  CALL METHOD ALV_GRID->EXPAND_TREE
    EXPORTING
      I_LEVEL = 1.
ENDIF.


endmodule.                 " STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*&      Form  BLDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form BLDCAT.
  CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
   EXPORTING
*     I_BUFFER_ACTIVE              =
      I_STRUCTURE_NAME             = 'SPFLI'
*     I_CLIENT_NEVER_DISPLAY       = 'X'
*     I_BYPASSING_BUFFER           =
    CHANGING
      ct_fieldcat                  = GB_FIELDCAT
*   EXCEPTIONS
*     INCONSISTENT_INTERFACE       = 1
*     PROGRAM_ERROR                = 2
*     OTHERS                       = 3
            .
  IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.

*单条记录
  DATA LS_FLDCAT TYPE LVC_S_FCAT.

*逐条记录
  LOOP AT GB_FIELDCAT INTO LS_FLDCAT.
    CASE LS_FLDCAT-FIELDNAME.
*对于需要的字段,定义其字段长度15
      WHEN 'COUNTRYFR' OR 'CITYFROM' OR 'COUNTRYTO'
          OR 'CITYTO' OR 'DISTANCE'.
            LS_FLDCAT-OUTPUTLEN = 15.
      WHEN OTHERS.
        LS_FLDCAT-NO_OUT = 'X'.
    ENDCASE.

*自定义汇总
    IF LS_FLDCAT-FIELDNAME = 'DISTANCE'.
      LS_FLDCAT-DO_SUM = 'X'.
    ENDIF.

    MODIFY GB_FIELDCAT FROM LS_FLDCAT.
  ENDLOOP.

endform.                    " BLDCAT
*&---------------------------------------------------------------------*
*&      Form  BLDSORTFLD
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
form BLDSORTFLD.
  DATA LS_SORTFLD TYPE LVC_S_SORT.

  LS_SORTFLD-SPOS = 1.
  LS_SORTFLD-FIELDNAME = 'COUNTRYFR'.
  LS_SORTFLD-UP = 'X'.
  LS_SORTFLD-SUBTOT = 'X'.
  APPEND LS_SORTFLD TO GB_SORTFLD.

  LS_SORTFLD-SPOS = 2.
  LS_SORTFLD-FIELDNAME = 'CARRID'.
  LS_SORTFLD-UP = 'X'.
  LS_SORTFLD-SUBTOT = 'X'.
  APPEND LS_SORTFLD TO GB_SORTFLD.

  LS_SORTFLD-SPOS = 3.
  LS_SORTFLD-FIELDNAME = 'CONNID'.
  LS_SORTFLD-UP = 'X'.
  LS_SORTFLD-SUBTOT = 'X'.
  APPEND LS_SORTFLD TO GB_SORTFLD.

endform.                    " BLDSORTFLD 

原创粉丝点击