*&---------------------------------------------------------------------*
*& 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
ABAP SALV TREE
于 2022-02-11 15:42:46 首次发布