使用的树结点:SNODETEXT。
使用的共通FUNCTION:RS_TREE_CONSTRUCT、RS_TREE_EXPAND、RS_TREE_LIST_DISPLAY、RS_TREE_GET_CURRENT_NODE、RS_TREE_SET_NODE。
同时,有HOTSPOT的设置。
屏幕STATUS的设置参见:资源中心/图片/S001.JPG.
[@more@]*&---------------------------------------------------------------------*
*& Report ZTREE_REPORT
*&
*&---------------------------------------------------------------------*
REPORT ZTREE_REPORT.
************************************************************************
* INCLUDE
************************************************************************
INCLUDE:.
************************************************************************
* CONSTANTS
************************************************************************
CONSTANTS:
C_ON(20) VALUE 'ICON_LED_GREEN',
C_OFF(20) VALUE 'ICON_LED_YELLOW',
C_ROOT(20) VALUE 'ICON_WORKFLOW_INBOX'.
************************************************************************
* DATA
************************************************************************
* 学生成績情報用構造
DATA: BEGIN OF GH_STUINFO,
ID(4) TYPE N,
NAME(10) TYPE C,
ABAP(2) TYPE N,
CPP(2) TYPE N,
JAVA(2) TYPE N,
END OF GH_STUINFO.
* 学生成績情報用テーブル
DATA GT_STUINFO LIKE TABLE OF GH_STUINFO.
DATA:
GH_NODE LIKE SNODETEXT, "階層ノード
GT_TREE LIKE TABLE OF SNODETEXT. "ツリー
* 現在のノード
DATA: GW_CURNODE LIKE SNODETEXT.
* カーソルのフィールド
DATA: GW_CURSORFIELD(30) TYPE C.
DATA:
GW_KIND(13) TYPE C VALUE 'GH_NODE-KIND1',
GW_TEXT(13) TYPE C VALUE 'GH_NODE-TEXT1',
GW_POS(13) TYPE C VALUE 'GH_NODE-TPOS1',
GW_LEN(16) TYPE C VALUE 'GH_NODE-TLENGTH1',
GW_COL(15) TYPE C VALUE 'GH_NODE-TCOLOR1',
GW_INTE(18) TYPE C VALUE 'GH_NODE-TINTENSIV1'.
* 階層ノードの項目値設定用シンボル
FIELD-SYMBOLS: ,
,
,
,
,
.
************************************************************************
* START-OF-SELECTION
************************************************************************
START-OF-SELECTION.
* 学生成績情報の取得
PERFORM GET_STUINFO.
* ルートノーの作成
PERFORM SET_LIST_ROOT.
* リストヘッダタイトルの設定
PERFORM SET_LIST_HEADER_TITLE.
* リストデータの設定
PERFORM SET_LIST_DATA.
* ツリーの作成
PERFORM BUILD_TREE.
* 初期化の時、サブツリー展開
PERFORM INIT_TREE_EXPAND.
* 階層照会
PERFORM DRAW_TREE.
*---------------------------------------------------------------------*
* FORM GET_STUINFO
*---------------------------------------------------------------------*
* 学生成績情報の取得
*---------------------------------------------------------------------*
FORM GET_STUINFO.
CLEAR GH_STUINFO.
GH_STUINFO-ID = '001'.
GH_STUINFO-NAME = 'JIM'.
GH_STUINFO-ABAP = '96'.
GH_STUINFO-CPP = '96'.
GH_STUINFO-JAVA = '96'.
APPEND GH_STUINFO TO GT_STUINFO.
CLEAR GH_STUINFO.
GH_STUINFO-ID = '002'.
GH_STUINFO-NAME = 'MARK'.
GH_STUINFO-ABAP = '90'.
GH_STUINFO-CPP = '90'.
GH_STUINFO-JAVA = '90'.
APPEND GH_STUINFO TO GT_STUINFO.
ENDFORM. " GET_STUINFO
*---------------------------------------------------------------------*
* FORM SET_LIST_ROOT
*---------------------------------------------------------------------*
* ルートノーの作成
*---------------------------------------------------------------------*
FORM SET_LIST_ROOT.
CLEAR: GH_NODE.
GH_NODE-NAME = ''. "オブジェクト名
GH_NODE-KIND = 'I'. "テキストタイプ
GH_NODE-TEXT = C_ROOT. "アイコン
GH_NODE-TLENGTH = 10. "ノードの出力長
GH_NODE-TLEVEL = 1. "ノードレベル
APPEND GH_NODE TO GT_TREE.
ENDFORM. " SET_LIST_ROOT
*---------------------------------------------------------------------*
* FORM SET_LIST_HEADER_TITLE
*---------------------------------------------------------------------*
* リストヘッダタイトルの設定
*---------------------------------------------------------------------*
FORM SET_LIST_HEADER_TITLE.
CLEAR: GH_NODE.
PERFORM SET_NODE USING 'H_TITLE' 2 0 1 1.
* ID
PERFORM SET_COLUMN USING 1 '' 'ID' 10 8 3 9.
* NAME
PERFORM SET_COLUMN USING 2 '' 'NAME' 20 8 3 9.
APPEND GH_NODE TO GT_TREE.
CLEAR: GH_NODE.
PERFORM SET_NODE USING 'S_TITLE' 3 0 1 0.
* ABAP
PERFORM SET_COLUMN USING 1 '' 'ABAP' 10 8 5 9.
* CPP
PERFORM SET_COLUMN USING 2 '' 'CPP' 20 8 5 9.
* JAVA
PERFORM SET_COLUMN USING 3 '' 'JAVA' 30 8 5 9.
APPEND GH_NODE TO GT_TREE.
ENDFORM. "SET_LIST_HEADER_TITLE
*---------------------------------------------------------------------*
* FORM SET_NODE
*---------------------------------------------------------------------*
* ノード全体の設定
*---------------------------------------------------------------------*
FORM SET_NODE USING U_NAME U_LEV U_LEN U_COL U_INTE.
GH_NODE-NAME = U_NAME.
GH_NODE-TLEVEL = U_LEV.
GH_NODE-NLENGTH = U_LEN.
GH_NODE-COLOR = U_COL.
GH_NODE-INTENSIV = U_INTE.
ENDFORM. "set_node
*---------------------------------------------------------------------*
* FORM SET_COLUMN
*---------------------------------------------------------------------*
* リスト用内部テーブルの項目値の設定
*---------------------------------------------------------------------*
FORM SET_COLUMN USING U_NO U_KIND U_TEXT U_POS U_LEN U_COL U_INTE.
GW_KIND+12(1) = U_NO.
GW_TEXT+12(1) = U_NO.
GW_POS+12(1) = U_NO.
GW_LEN+15(1) = U_NO.
GW_COL+14(1) = U_NO.
GW_INTE+17(1) = U_NO.
ASSIGN (GW_KIND) TO .
ASSIGN (GW_TEXT) TO .
ASSIGN (GW_POS) TO .
ASSIGN (GW_LEN) TO .
ASSIGN (GW_COL) TO .
ASSIGN (GW_INTE) TO .
= U_KIND.
= U_TEXT.
> = U_POS.
> = U_LEN.
> = U_COL.
= U_INTE.
ENDFORM. " SET_COLUMN
*----------------------------------------------------------------------*
* FORM SET_LIST_DATA
*----------------------------------------------------------------------*
* リストデータの設定
*----------------------------------------------------------------------*
FORM SET_LIST_DATA.
DATA: LW_NAME(20) TYPE C.
LOOP AT GT_STUINFO INTO GH_STUINFO.
* 学生番号と名称の設定
CLEAR GH_NODE.
PERFORM SET_NODE USING GH_STUINFO-ID 2 0 1 0.
PERFORM SET_COLUMN USING '1' '' GH_STUINFO-ID 10 8 3 9.
PERFORM SET_COLUMN USING '2' '' GH_STUINFO-NAME 20 8 3 9.
APPEND GH_NODE TO GT_TREE.
* 学生成績の設定
CLEAR GH_NODE.
CONCATENATE GH_STUINFO-ID GH_STUINFO-NAME INTO LW_NAME.
PERFORM SET_NODE USING LW_NAME 3 0 1 0.
PERFORM SET_COLUMN USING '1' '' GH_STUINFO-ABAP 10 8 5 9.
PERFORM SET_COLUMN USING '2' '' GH_STUINFO-CPP 20 8 5 9.
PERFORM SET_COLUMN USING '3' '' GH_STUINFO-JAVA 30 8 5 9.
PERFORM SET_COLUMN USING '4' 'I' C_OFF 40 4 5 9.
GH_NODE-HOTSPOT4 = 'X'.
APPEND GH_NODE TO GT_TREE.
ENDLOOP.
ENDFORM. " SET_LIST_DATA
*----------------------------------------------------------------------*
* FORM BUILD_TREE
*----------------------------------------------------------------------*
* ツリーの作成
*----------------------------------------------------------------------*
FORM BUILD_TREE.
CALL FUNCTION 'RS_TREE_CONSTRUCT'
TABLES
NODETAB = GT_TREE
EXCEPTIONS
TREE_FAILURE = 1
ID_NOT_FOUND = 2
WRONG_RELATIONSHIP = 3
OTHERS = 4.
ENDFORM. " BUILD_TREE
*----------------------------------------------------------------------*
* FORM INIT_TREE_EXPAND
*----------------------------------------------------------------------*
* 初期化の時、サブツリー展開
*----------------------------------------------------------------------*
FORM INIT_TREE_EXPAND.
LOOP AT GT_TREE INTO GH_NODE WHERE TLEVEL = 2.
PERFORM EXPAND_TREE USING GH_NODE-ID 2.
ENDLOOP.
ENDFORM. " INIT_TREE_EXPAND
*----------------------------------------------------------------------*
* FORM EXPAND_TREE
*----------------------------------------------------------------------*
* サブツリー展開
*----------------------------------------------------------------------*
FORM EXPAND_TREE USING U_ID
U_DEPTH.
CALL FUNCTION 'RS_TREE_EXPAND'
EXPORTING
NODE_ID = U_ID
* ALL = ' '
* LIST_SCROLL =
DEPTH = U_DEPTH
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
ENDFORM. " EXPAND_TREE
*----------------------------------------------------------------------*
* FORM DRAW_TREE
*----------------------------------------------------------------------*
* 階層照会
*----------------------------------------------------------------------*
FORM DRAW_TREE.
SET PF-STATUS 'S001'.
CALL FUNCTION 'RS_TREE_LIST_DISPLAY'
EXPORTING
CALLBACK_PROGRAM = SY-CPROG
CALLBACK_USER_COMMAND = 'NODE_SELECT'
CALLBACK_TOP_OF_PAGE = 'TOP_OF_PAGE_FORM'.
ENDFORM. " DRAW_TREE
*---------------------------------------------------------------------*
* FORM GET_CURRENT_NODE
*---------------------------------------------------------------------*
* 現在のノードを読む
*---------------------------------------------------------------------*
FORM GET_CURRENT_NODE CHANGING U_NODE.
CALL FUNCTION 'RS_TREE_GET_CURRENT_NODE'
IMPORTING
NODE_INFO = U_NODE.
ENDFORM. " GET_CURRENT_NODE
*---------------------------------------------------------------------*
* FORM SET_CUR_NODE
*---------------------------------------------------------------------*
* ノード変更
*---------------------------------------------------------------------*
FORM SET_CUR_NODE USING U_NODE LIKE SNODETEXT.
CALL FUNCTION 'RS_TREE_SET_NODE'
EXPORTING
NODE_INFO = U_NODE
EXCEPTIONS
ID_NOT_FOUND = 1
OTHERS = 2.
ENDFORM. " SET_CUR_NODE
*&---------------------------------------------------------------------*
*& Form NODE_SELECT
*&---------------------------------------------------------------------*
* ノードが選択された場合
*----------------------------------------------------------------------*
FORM NODE_SELECT TABLES U_CONTENT STRUCTURE SEUCOMM
USING U_COMMAND
CHANGING U_EXIT
U_LIST_REFRESH.
CASE U_COMMAND.
* 選択
WHEN 'TRSL'.
PERFORM GET_CURRENT_NODE CHANGING GW_CURNODE.
* カーソルのフィールドがアイコンの場合
IF GW_CURNODE-TLEVEL = 3.
PERFORM SELECT_LIST_LEVEL3.
ENDIF.
ENDCASE.
ENDFORM. " NODE_SELECT
*&--------------------------------------------------------------------*
*& Form SELECT_LIST_LEVEL3
*&--------------------------------------------------------------------*
* text
*---------------------------------------------------------------------*
FORM SELECT_LIST_LEVEL3.
GET CURSOR FIELD GW_CURSORFIELD.
* カーソルのフィールドがアイコンの場合
IF GW_CURSORFIELD = C_ON OR
GW_CURSORFIELD = C_OFF.
IF GW_CURNODE-TEXT4 = C_ON.
GW_CURNODE-TEXT4 = C_OFF.
ELSEIF GW_CURNODE-TEXT4 = C_OFF.
GW_CURNODE-TEXT4 = C_ON.
ENDIF.
ENDIF.
PERFORM SET_CUR_NODE USING GW_CURNODE.
ENDFORM. " SELECT_LIST_LEVEL3
*---------------------------------------------------------------------*
* FORM TOP_OF_PAGE_FORM
*---------------------------------------------------------------------*
* 見出し出力
*---------------------------------------------------------------------*
FORM TOP_OF_PAGE_FORM.
WRITE: /80(100) '学生成績情報'.
WRITE SY-ULINE.
ENDFORM. " TOP_OF_PAGE_FORM
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/8214011/viewspace-910893/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/8214011/viewspace-910893/