Level assignment dynamicaly, OO Example
I wrote this code for answer of this question :
http://scn.sap.com/thread/3390691
I inspired from Steve Rumsby blog : http://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 : <wa> LIKE LINE OF it_bom.
DATA : lo_bom TYPE REF TO lcl_bom.
START-OF-SELECTION.
ls_bom-stufe = 1.
APPEND ls_bom
TO it_bom.
ls_bom-stufe = 2.
APPEND ls_bom
TO it_bom.
ls_bom-stufe = 2.
APPEND ls_bom
TO it_bom.
ls_bom-stufe = 3.
APPEND ls_bom
TO it_bom.
ls_bom-stufe = 3.
APPEND ls_bom
TO it_bom.
ls_bom-stufe = 4.
APPEND ls_bom
TO it_bom.
ls_bom-stufe = 4.
APPEND ls_bom
TO it_bom.
ls_bom-stufe = 2.
APPEND ls_bom
TO it_bom.
ls_bom-stufe = 2.
APPEND ls_bom
TO it_bom.
ls_bom-stufe = 3.
APPEND ls_bom
TO it_bom.
ls_bom-stufe = 4.
APPEND ls_bom
TO it_bom.
ls_bom-stufe = 4.
APPEND ls_bom
TO it_bom.
ls_bom-stufe = 4.
APPEND ls_bom
TO it_bom.
ls_bom-stufe = 5.
APPEND ls_bom
TO it_bom.
ls_bom-stufe = 5.
APPEND ls_bom
TO it_bom.
BREAK-POINT.
DATA : lv_level TYPE i.
LOOP AT it_bom
ASSIGNING <wa>.
IF lo_bom IS NOT BOUND.
CREATE OBJECT lo_bom
EXPORTING
i_stufe = <wa>-stufe.
ENDIF.
<wa>-level = lo_bom->get_level( <wa>-stufe ).
ENDLOOP.
BREAK-POINT.
this is the result :
Regards
Tolga POLAT
Nice one...
thank you