I wrote this code for answer of this question :
https://scn.sap.com/thread/3390691
I inspired from Steve Rumsby blog : https://scn.sap.com/community/abap/blog/2013/04/23/object-oriented-sieve-of-eratosthenes
Here is my code… If you see any misuse of OO or better way to do this, plase let me know.
DATA : BEGIN OF ls_bom, stufe TYPE i, level TYPE char20, END OF ls_bom, it_bom LIKE STANDARD TABLE OF ls_bom. *----------------------------------------------------------------------* * CLASS lcl_determine_level DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_determine_level DEFINITION FINAL. PUBLIC SECTION. METHODS : constructor IMPORTING i_stufe TYPE i. METHODS : get_level IMPORTING i_stufe TYPE i RETURNING value(r_level) TYPE char20, get_level_chr RETURNING value(r_level) TYPE char20. PROTECTED SECTION. DATA : level TYPE REF TO lcl_determine_level. PRIVATE SECTION. DATA : value TYPE i, lvl TYPE i, level_chr TYPE char20. ENDCLASS. "lcl_determine_level DEFINITION *----------------------------------------------------------------------* * CLASS lcl_determine_level IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_determine_level IMPLEMENTATION. METHOD constructor. super->constructor( ). value = i_stufe. ENDMETHOD. "constructor METHOD get_level. IF value = i_stufe. ADD 1 TO lvl. WRITE : lvl TO level_chr. CONDENSE level_chr. r_level = level_chr. ENDIF. ENDMETHOD. "get_level METHOD get_level_chr. r_level = level_chr. ENDMETHOD. "get_level_chr ENDCLASS. "lcl_determine_level IMPLEMENTATION *----------------------------------------------------------------------* * CLASS lcl_bom DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_bom DEFINITION. PUBLIC SECTION. METHODS: constructor IMPORTING i_stufe TYPE i, get_level IMPORTING i_stufe TYPE i RETURNING value(r_level) TYPE char20. PRIVATE SECTION. DATA: level TYPE REF TO lcl_determine_level, bom TYPE REF TO lcl_bom. ENDCLASS. "lcl_bom DEFINITION *----------------------------------------------------------------------* * CLASS lcl_bom IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS lcl_bom IMPLEMENTATION. METHOD constructor. DATA : lo_level TYPE REF TO lcl_determine_level. CREATE OBJECT lo_level EXPORTING i_stufe = i_stufe. level = lo_level. ENDMETHOD. "constructor METHOD get_level. DATA : level_chr TYPE char20. r_level = level->get_level( i_stufe ). IF r_level EQ 0. level_chr = level->get_level_chr( ). IF bom IS NOT BOUND. CREATE OBJECT bom EXPORTING i_stufe = i_stufe. ENDIF. r_level = bom->get_level( i_stufe ). CONCATENATE level_chr '.' r_level INTO r_level. CONDENSE r_level. ELSE. FREE bom. ENDIF. ENDMETHOD. "geT_level ENDCLASS. "lcl_bom IMPLEMENTATION FIELD-SYMBOLS :
this is the result :
Regards
Tolga POLAT
New NetWeaver Information at SAP.com
Very Helpfull