Quantcast
Channel: SCN : Blog List - ABAP Development
Viewing all articles
Browse latest Browse all 943

Level assignment dynamicaly, OO Example

$
0
0

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 :

 

Level.JPG

Regards

Tolga POLAT


Viewing all articles
Browse latest Browse all 943

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>