Application Development Blog Posts
Learn and share on deeper, cross technology development topics such as integration and connectivity, automation, cloud extensibility, developing at scale, and security.
cancel
Showing results for 
Search instead for 
Did you mean: 
tolga_polat
Active Participant
0 Kudos

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

2 Comments