*&---------------------------------------------------------------------* *& Include ZXRSAU04 * *&---------------------------------------------------------------------* *" IMPORTING *" VALUE(I_DATASOURCE) TYPE RSAOT_OLTPSOURCE *" VALUE(I_S_HIEBAS) TYPE RSAP_S_HIEBAS *" VALUE(I_S_HIEFLAG) TYPE RSAP_S_HIEFLAG *" VALUE(I_S_HIER_SEL) TYPE RSAP_S_HIER_LIST *" VALUE(I_S_HEADER3) OPTIONAL *" TABLES *" I_T_LANGU TYPE SBIWA_T_LANGU *" C_T_HIETEXT TYPE RSAP_T_HIETEXT *" C_T_HIENODE TYPE RSAP_T_HIENODE *" C_T_FOLDERT TYPE RSAP_T_FOLDERT *" C_T_HIEINTV TYPE RSAP_T_HIEINTV *" C_T_HIENODE3 OPTIONAL *" C_T_HIEINTV3 OPTIONAL *" C_T_MESSAGES STRUCTURE BALMI OPTIONAL *" EXCEPTIONS *" RSAP_CUSTOMER_EXIT_ERROR *"---------------------------------------------------------------------- data: i type I . DATA : WA_NODE like ROSHIENODE , W_NODE like ROSHIENODE-NODEID , W_PARENT like ROSHIENODE-PARENTID . DATA : NODE_SHIFT type I , MAX_NODE like ROSHIENODE-NODEID . DATA : IT_NODE like table of WA_NODE with header line . DATA : IT_TEXT_NODE TYPE RSAP_T_FOLDERT with header line . DATA : IT_RANGE_NODE TYPE RSAP_T_HIEINTV with header line . data : begin of t_char occurs 0 , /BIC/ZCHAR like /BIC/PZCHAR-/BIC/ZCHAR , end of t_char . data : begin of t_char_range occurs 0 , ZCHAR_FROM like /BIC/PZCHAR-/BIC/ZCHAR , ZCHAR_TO like /BIC/PZCHAR-/BIC/ZCHAR , end of t_char_range . CASE I_DATASOURCE. WHEN '8ZCHARH'. " Test Char Hierarchy select /BIC/ZCHAR into corresponding fields of table t_char from /BIC/PZCHAR where OBJVERS = 'A' and /BIC/ZCHAR > ' ' . refresh IT_NODE . clear IT_NODE . refresh IT_TEXT_NODE . clear IT_TEXT_NODE . refresh IT_RANGE_NODE . clear IT_RANGE_NODE . CASE I_S_HIER_SEL-HIENM . WHEN 'ZCHAR_DETAIL' . " Fill Root Text Nodes clear IT_NODE . IT_NODE-IOBJNM = '0HIER_NODE' . " ROOT Node IT_NODE-NODENAME = 'ALPHA_NUMERY' . IT_NODE-NODEID = 1 . IT_NODE-TLEVEL = 1 . IT_NODE-PARENTID = 0 . append IT_NODE . " Fill Text Node Description IT_TEXT_NODE-LANGU = 'E' . IT_TEXT_NODE-IOBJNM = IT_NODE-IOBJNM . IT_TEXT_NODE-NODENAME = IT_NODE-NODENAME . IT_TEXT_NODE-TXTSH = 'Alpha-Numeric Chars' . append IT_TEXT_NODE . " Fill Next Level Text Nodes clear IT_NODE . IT_NODE-IOBJNM = '0HIER_NODE' . " 2-nd Level IT_NODE-NODENAME = 'ALPHA' . IT_NODE-NODEID = 2 . IT_NODE-TLEVEL = 2 . IT_NODE-PARENTID = 1 . append IT_NODE . " Fill Text Node Description IT_TEXT_NODE-LANGU = 'E' . IT_TEXT_NODE-IOBJNM = IT_NODE-IOBJNM . IT_TEXT_NODE-NODENAME = IT_NODE-NODENAME . IT_TEXT_NODE-TXTSH = 'Alpfa Chars' . append IT_TEXT_NODE . " Fill Next Level Text Nodes clear IT_NODE . IT_NODE-IOBJNM = '0HIER_NODE' . " 3 - d level IT_NODE-NODENAME = 'ALPHA_UPPER' . IT_NODE-NODEID = 3 . IT_NODE-TLEVEL = 3 . IT_NODE-PARENTID = 2 . append IT_NODE . " Fill Text Node Description IT_TEXT_NODE-LANGU = 'E' . IT_TEXT_NODE-IOBJNM = IT_NODE-IOBJNM . IT_TEXT_NODE-NODENAME = IT_NODE-NODENAME . IT_TEXT_NODE-TXTSH = 'Upper Case' . append IT_TEXT_NODE . " Fill Next Level Text Nodes clear IT_NODE . IT_NODE-IOBJNM = '0HIER_NODE' . IT_NODE-NODENAME = 'ALPHA_LOWER' . IT_NODE-NODEID = 4 . IT_NODE-TLEVEL = 3 . IT_NODE-PARENTID = 2 . append IT_NODE . " Fill Text Node Description IT_TEXT_NODE-LANGU = 'E' . IT_TEXT_NODE-IOBJNM = IT_NODE-IOBJNM . IT_TEXT_NODE-NODENAME = IT_NODE-NODENAME . IT_TEXT_NODE-TXTSH = 'Lower Case' . append IT_TEXT_NODE . clear IT_NODE . IT_NODE-IOBJNM = '0HIER_NODE' . IT_NODE-NODENAME = 'DIGIT' . IT_NODE-NODEID = 5 . IT_NODE-TLEVEL = 2 . IT_NODE-PARENTID = 1 . append IT_NODE . " Fill Text Node Description IT_TEXT_NODE-LANGU = 'E' . IT_TEXT_NODE-IOBJNM = IT_NODE-IOBJNM . IT_TEXT_NODE-NODENAME = IT_NODE-NODENAME . IT_TEXT_NODE-TXTSH = 'Digits' . append IT_TEXT_NODE . " Fill Info Object Nodes sort t_char by /BIC/ZCHAR . loop at t_char . clear IT_NODE . IT_NODE-IOBJNM = 'ZCHAR' . IT_NODE-NODENAME = t_char-/BIC/ZCHAR . IT_NODE-NODEID = sy-tabix + 5 . if t_char-/BIC/ZCHAR >= 'A' and t_char-/BIC/ZCHAR <= 'Z' . IT_NODE-TLEVEL = 4 . IT_NODE-PARENTID = 3 . elseif t_char-/BIC/ZCHAR >= 'a' and t_char-/BIC/ZCHAR <= 'z'. IT_NODE-TLEVEL = 4 . IT_NODE-PARENTID = 4 . elseif t_char-/BIC/ZCHAR >= '0' and t_char-/BIC/ZCHAR <= '9'. IT_NODE-TLEVEL = 3 . IT_NODE-PARENTID = 5 . else . IT_NODE-TLEVEL = 2 . IT_NODE-PARENTID = 1 . endif . append IT_NODE . endloop . WHEN 'ZCHAR_RANGE' . " Fill Root Text Nodes clear IT_NODE . IT_NODE-IOBJNM = '0HIER_NODE' . " ROOT Node IT_NODE-NODENAME = 'CHAR_RANGE' . IT_NODE-NODEID = 1 . IT_NODE-TLEVEL = 1 . IT_NODE-PARENTID = 0 . append IT_NODE . " Fill Text Node Description IT_TEXT_NODE-LANGU = 'E' . IT_TEXT_NODE-IOBJNM = IT_NODE-IOBJNM . IT_TEXT_NODE-NODENAME = IT_NODE-NODENAME . IT_TEXT_NODE-TXTSH = 'Char Ranhges' . append IT_TEXT_NODE . " Fill Info Object Nodes do 3 times . append t_char_range . enddo. loop at t_char . if t_char-/BIC/ZCHAR >= 'A' and t_char-/BIC/ZCHAR <= 'Z' . if t_char_range-ZCHAR_FROM < 'A' . clear t_char_range-ZCHAR_FROM . endif . if t_char_range-ZCHAR_FROM > t_char-/BIC/ZCHAR . t_char_range-ZCHAR_FROM = t_char-/BIC/ZCHAR . endif . if t_char_range-ZCHAR_TO < t_char-/BIC/ZCHAR . t_char_range-ZCHAR_TO = t_char-/BIC/ZCHAR . endif . if t_char_range-ZCHAR_FROM is initial . t_char_range-ZCHAR_FROM = t_char-/BIC/ZCHAR . endif . modify t_char_range index 1 . elseif t_char-/BIC/ZCHAR >= 'a' and t_char-/BIC/ZCHAR <= 'z'. if t_char_range-ZCHAR_FROM < 'a' . clear t_char_range-ZCHAR_FROM . endif . if t_char_range-ZCHAR_FROM > t_char-/BIC/ZCHAR . t_char_range-ZCHAR_FROM = t_char-/BIC/ZCHAR . endif . if t_char_range-ZCHAR_TO < t_char-/BIC/ZCHAR . t_char_range-ZCHAR_TO = t_char-/BIC/ZCHAR . endif . if t_char_range-ZCHAR_FROM is initial . t_char_range-ZCHAR_FROM = t_char-/BIC/ZCHAR . endif . modify t_char_range index 2 . elseif t_char-/BIC/ZCHAR >= '0' and t_char-/BIC/ZCHAR <= '9'. if t_char_range-ZCHAR_FROM > t_char-/BIC/ZCHAR . t_char_range-ZCHAR_FROM = t_char-/BIC/ZCHAR . endif . if t_char_range-ZCHAR_TO < t_char-/BIC/ZCHAR . t_char_range-ZCHAR_TO = t_char-/BIC/ZCHAR . endif . if t_char_range-ZCHAR_FROM is initial . t_char_range-ZCHAR_FROM = t_char-/BIC/ZCHAR . endif . modify t_char_range index 3 . endif. endloop . loop at t_char_range . clear IT_NODE . IT_NODE-IOBJNM = 'ZCHAR' . concatenate t_char_range-ZCHAR_FROM ' - ' t_char_range-ZCHAR_TO into IT_NODE-NODENAME . IT_NODE-NODEID = sy-tabix + 1 . IT_NODE-TLEVEL = 2 . IT_NODE-PARENTID = 1 . IT_NODE-INTERVL = 'X' . " !!!!! append IT_NODE . IT_RANGE_NODE-NODEID = IT_NODE-NODEID . IT_RANGE_NODE-LEAFFROM = t_char_range-ZCHAR_FROM . IT_RANGE_NODE-LEAFTO = t_char_range-ZCHAR_TO . append IT_RANGE_NODE . endloop . WHEN OTHERS. ENDCASE. refresh C_T_HIENODE . " Clear existing data append lines of IT_NODE to C_T_HIENODE. refresh C_T_FOLDERT . append lines of IT_TEXT_NODE to C_T_FOLDERT . refresh C_T_HIEINTV . append lines of IT_RANGE_NODE to C_T_HIEINTV . WHEN OTHERS. ENDCASE.