ABAP SALV TREE

*&---------------------------------------------------------------------*
*& Report  Y_CLY_SALV_TREE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT Y_CLY_SALV_TREE.


TYPES: BEGIN OF TY_TVKO,
          BUKRS TYPE BUKRS,
          VKORG TYPE VKORG,
          VTWEG TYPE VTWEG,

  END OF TY_TVKO.

DATA: GT_OUTTAB TYPE TABLE OF TY_TVKO WITH HEADER LINE.
DATA: GR_TREE   TYPE REF   TO CL_SALV_TREE.


*----------------------------------------------------------------------*
* START-OF-SELECTION                                                   *
*----------------------------------------------------------------------*
START-OF-SELECTION.


  PERFORM FRM_DISPLAY_SALV.




*&---------------------------------------------------------------------*
*&      Form  FRM_DISPLAY_SALV
*&---------------------------------------------------------------------*
*       ALV展示
*----------------------------------------------------------------------*
FORM FRM_DISPLAY_SALV .

  DATA: LT_OUTTAB LIKE GT_OUTTAB[].
  DATA: LT_OUTTAB2 LIKE GT_OUTTAB[].
  SELECT * FROM TVKO INNER JOIN TVKOV ON TVKO~VKORG = TVKOV~VKORG
    INTO CORRESPONDING FIELDS OF TABLE LT_OUTTAB
    UP TO 100 ROWS
    WHERE BUKRS LIKE 'X%'
    .
  SORT LT_OUTTAB BY BUKRS.

  TRY.
      CL_SALV_TREE=>FACTORY(
        IMPORTING
          R_SALV_TREE = GR_TREE
        CHANGING
          T_TABLE      = LT_OUTTAB2[] ).
    CATCH CX_SALV_NO_NEW_DATA_ALLOWED CX_SALV_ERROR.
      EXIT.
  ENDTRY.


  PERFORM FRM_XTREE_DATA USING LT_OUTTAB.


  DATA: LV_SETTINGS TYPE REF TO CL_SALV_TREE_SETTINGS.
  LV_SETTINGS = GR_TREE->GET_TREE_SETTINGS( ).
  LV_SETTINGS->SET_HIERARCHY_HEADER( 'Tree Header                .' ).
  LV_SETTINGS->SET_HIERARCHY_TOOLTIP( 'Tree Header-Tool' ).
  LV_SETTINGS->SET_HIERARCHY_SIZE( 30 ).

  DATA: LV_TITLE TYPE SALV_DE_TREE_TEXT.
  LV_TITLE = SY-TITLE.
  LV_SETTINGS->SET_HEADER( LV_TITLE ).

  DATA: LV_FUNS  TYPE REF TO CL_SALV_FUNCTIONS.
  LV_FUNS = GR_TREE->GET_FUNCTIONS( ).
  LV_FUNS->SET_ALL( ABAP_TRUE ).
* lV_FUNS->SET_EXPORT_XML( 'X' ).     "

*  GR_TREE->SET_SCREEN_STATUS(
*    PFSTATUS      =  'SALV_STANDARD'
*    REPORT        =  SY-REPID
*    SET_FUNCTIONS =  GR_TREE->C_FUNCTIONS_ALL ).

  DATA: LR_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TREE.
  LR_COLUMNS = GR_TREE->GET_COLUMNS( ).
  LR_COLUMNS->SET_OPTIMIZE( ABAP_TRUE ).

  GR_TREE->DISPLAY( ).

ENDFORM.                    " display_fullscreen

*&---------------------------------------------------------------------*
*&      Form  FRM_XTREE_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_XTREE_DATA  USING LT_OUTTAB TYPE STANDARD TABLE.

  DATA: LS_DATA LIKE GT_OUTTAB.
  DATA: L_CARRID_KEY TYPE LVC_NKEY,
        L_CONNID_KEY TYPE LVC_NKEY,
        L_LAST_KEY TYPE LVC_NKEY.
  DATA: LV_STRINDX TYPE STRING.
  LOOP AT LT_OUTTAB INTO LS_DATA.

    ON CHANGE OF LS_DATA-BUKRS+0(3).
      PERFORM FRM_ADD_HEAD_LINE USING  '' LS_DATA-BUKRS+0(3)
                             CHANGING L_CARRID_KEY.
    ENDON.
    ON CHANGE OF LS_DATA-BUKRS.
      PERFORM FRM_ADD_BODY_LINE USING L_CARRID_KEY LS_DATA-BUKRS
                             CHANGING L_CONNID_KEY.
      LV_STRINDX = 0.
    ENDON.

    LV_STRINDX = LV_STRINDX + 1.
    PERFORM FRM_ADD_ITEM_LINE USING LS_DATA
                                    L_CONNID_KEY LV_STRINDX
                           CHANGING L_LAST_KEY.

  ENDLOOP.

ENDFORM.                    " FRM_XTREE_DATA
*&---------------------------------------------------------------------*
*&      Form  FRM_ADD_HEAD_LINE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_ADD_HEAD_LINE  USING PV_KEY PV_STR
                      CHANGING CV_L_CARRID_KEY.

  DATA: NODES TYPE REF TO CL_SALV_NODES,
        NODE  TYPE REF TO CL_SALV_NODE,
        ITEM  TYPE REF TO CL_SALV_ITEM.

  NODES = GR_TREE->GET_NODES( ).

  TRY.
      DATA: LV_STR TYPE LVC_VALUE.
      LV_STR = PV_STR.
      NODE = NODES->ADD_NODE( RELATED_NODE = PV_KEY
                              TEXT     = LV_STR
                              RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD ).

      CV_L_CARRID_KEY = NODE->GET_KEY( ).
    CATCH CX_SALV_MSG.
  ENDTRY.

ENDFORM.                    " FRM_ADD_HEAD_LINE
*&---------------------------------------------------------------------*
*&      Form  FRM_ADD_BODY_LINE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_ADD_BODY_LINE  USING PV_L_CARRID_KEY PV_STR
                      CHANGING CV_L_CONNID_KEY.

  DATA: LV_NODES TYPE REF TO CL_SALV_NODES,
        LV_NODE  TYPE REF TO CL_SALV_NODE.

  LV_NODES = GR_TREE->GET_NODES( ).

  TRY.
      DATA: LV_STR TYPE LVC_VALUE.
      LV_STR = PV_STR.
      LV_NODE = LV_NODES->ADD_NODE( RELATED_NODE = PV_L_CARRID_KEY
                              TEXT         = LV_STR
                              RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD ).

      CV_L_CONNID_KEY = LV_NODE->GET_KEY( ).
    CATCH CX_SALV_MSG.
  ENDTRY.

ENDFORM.                    " FRM_ADD_BODY_LINE
*&---------------------------------------------------------------------*
*&      Form  FRM_ADD_ITEM_LINE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM FRM_ADD_ITEM_LINE  USING    PV_DATA LIKE GT_OUTTAB
                                 PV_HEAD_KEY
                                 PV_STR
                        CHANGING CV_ITEM_KEY.

  DATA: LV_NODES TYPE REF TO CL_SALV_NODES,
        LV_NODE  TYPE REF TO CL_SALV_NODE.
  DATA: LV_STR TYPE LVC_VALUE.

  LV_NODES = GR_TREE->GET_NODES( ).

  TRY.
      LV_STR = PV_STR.
      LV_NODE = LV_NODES->ADD_NODE( RELATED_NODE = PV_HEAD_KEY
                    DATA_ROW     = PV_DATA
                      TEXT         = LV_STR
                     RELATIONSHIP = CL_GUI_COLUMN_TREE=>RELAT_LAST_CHILD
                      ).

      CV_ITEM_KEY = LV_NODE->GET_KEY( ).
    CATCH CX_SALV_MSG.
  ENDTRY.

ENDFORM.                    " FRM_ADD_ITEM_LINE

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值