Enterprise Resource
Planning Portal

 

Advertise | Founder BLOG

ERPGenie.COM ABAP Tips and Tricks Database

THE ultimate
ERP website

 

Forums | Vote for us |

Google    Other Search Options

Home arrow Sample Code arrow ABAP OO arrow Using ABAP OO Methods
Using ABAP OO Methods PDF Print E-mail
User Rating: / 0
PoorBest 
Written by Anon.   
Sunday, 27 May 2007
REPORT demo_abap_objects_methods NO STANDARD PAGE HEADING.

************************************************************************
* Global Selection Screens
************************************************************************

SELECTION-SCREEN BEGIN OF: SCREEN 100 TITLE tit1, LINE.
PARAMETERS members TYPE i DEFAULT 10.
SELECTION-SCREEN END OF: LINE, SCREEN 100.

*-----------------------------------------------------------------------

SELECTION-SCREEN BEGIN OF: SCREEN 200 TITLE tit2.
PARAMETERS: drive    RADIOBUTTON GROUP actn,
            stop     RADIOBUTTON GROUP actn,
            gearup   RADIOBUTTON GROUP actn,
            geardown RADIOBUTTON GROUP actn.
SELECTION-SCREEN END OF: SCREEN 200.

************************************************************************
* Class Definitions
************************************************************************

CLASS: c_biker DEFINITION DEFERRED,
       c_bicycle DEFINITION DEFERRED.

*-----------------------------------------------------------------------

CLASS c_team DEFINITION.
  PUBLIC SECTION.
    TYPES: biker_ref TYPE REF TO c_biker,
           biker_ref_tab TYPE STANDARD TABLE OF biker_ref
                                       WITH DEFAULT KEY,
           BEGIN OF status_line_type,
             flag(1)  TYPE c,
             text1(5) TYPE c,
             id       TYPE i,
             text2(7) TYPE c,
             text3(6) TYPE c,
             gear     TYPE i,
             text4(7) TYPE c,
             speed    TYPE i,
           END OF status_line_type.
    CLASS-METHODS: class_constructor.
    METHODS: constructor,
             create_team,
             selection,
             execution.
  PRIVATE SECTION.
    CLASS-DATA: team_members TYPE i,
                counter TYPE i.
    DATA: id TYPE i,
          status_line TYPE status_line_type,
          status_list TYPE SORTED TABLE OF status_line_type
                           WITH UNIQUE KEY id,
          biker_tab TYPE biker_ref_tab,
          biker_selection LIKE biker_tab,
          biker LIKE LINE OF biker_tab.
    METHODS: write_list.
ENDCLASS.

*-----------------------------------------------------------------------

CLASS c_biker DEFINITION.
  PUBLIC SECTION.
    METHODS: constructor IMPORTING team_id TYPE i members TYPE i,
             select_action,
             status_line EXPORTING line TYPE c_team=>status_line_type.
  PRIVATE SECTION.
    CLASS-DATA counter TYPE i.
    DATA: id TYPE i,
          bike TYPE REF TO c_bicycle,
          gear_status  TYPE i VALUE 1,
          speed_status TYPE i VALUE 0.
    METHODS biker_action IMPORTING action TYPE i.
ENDCLASS.

*-----------------------------------------------------------------------

CLASS c_bicycle DEFINITION.
  PUBLIC SECTION.
    METHODS: drive EXPORTING velocity TYPE i,
             stop  EXPORTING velocity TYPE i,
             change_gear IMPORTING change TYPE i
                         RETURNING value(gear) TYPE i
                         EXCEPTIONS gear_min gear_max.
  PRIVATE SECTION.
    DATA: speed TYPE i,
          gear  TYPE i VALUE 1.
    CONSTANTS: max_gear TYPE i VALUE 18,
               min_gear TYPE i VALUE 1.
ENDCLASS.

************************************************************************
* Class Implementations
************************************************************************

CLASS c_team IMPLEMENTATION.

  METHOD class_constructor.
    tit1 = 'Team members ?'.
    CALL SELECTION-SCREEN 100 STARTING AT 5 3.
    IF sy-subrc NE 0.
      LEAVE PROGRAM.
    ELSE.
      team_members = members.
    ENDIF.
  ENDMETHOD.

  METHOD constructor.
    counter = counter + 1.
    id = counter.
  ENDMETHOD.

  METHOD create_team.
    DO team_members TIMES.
      CREATE OBJECT biker EXPORTING team_id = id members = team_members.
      APPEND biker TO biker_tab.
      CALL METHOD biker->status_line IMPORTING line = status_line.
      APPEND status_line TO status_list.
    ENDDO.
  ENDMETHOD.

  METHOD selection.
    CLEAR biker_selection.
    DO.
      READ LINE sy-index.
      IF sy-subrc <> 0. EXIT. ENDIF.
      IF sy-lisel+0(1) = 'X'.
        READ TABLE biker_tab INTO biker INDEX sy-index.
        APPEND biker TO biker_selection.
      ENDIF.
    ENDDO.
    CALL METHOD write_list.
  ENDMETHOD.

  METHOD execution.
    CHECK NOT biker_selection IS INITIAL.
    LOOP AT biker_selection INTO biker.
      CALL METHOD biker->select_action.
      CALL METHOD biker->status_line IMPORTING line = status_line.
      MODIFY TABLE status_list FROM status_line.
    ENDLOOP.
    CALL METHOD write_list.
  ENDMETHOD.

  METHOD write_list.
    SET TITLEBAR 'TIT'.
    sy-lsind = 0.
    SKIP TO LINE 1.
    POSITION 1.
    LOOP AT status_list INTO status_line.
      WRITE: / status_line-flag AS CHECKBOX,
               status_line-text1,
               status_line-id,
               status_line-text2,
               status_line-text3,
               status_line-gear,
               status_line-text4,
               status_line-speed.
    ENDLOOP.
  ENDMETHOD.

ENDCLASS.

*-----------------------------------------------------------------------

CLASS c_biker IMPLEMENTATION.

  METHOD constructor.
    counter = counter + 1.
    id = counter - members * ( team_id - 1 ).
    CREATE OBJECT bike.
  ENDMETHOD.

  METHOD select_action.
    DATA activity TYPE i.
    tit2 = 'Select action for BIKE'.
    tit2+24(3) = id.
    CALL SELECTION-SCREEN 200 STARTING AT 5 15.
    CHECK NOT sy-subrc GT 0.
    IF gearup = 'X' OR geardown = 'X'.
      IF gearup = 'X'.
        activity = 1.
      ELSEIF geardown = 'X'.
        activity = -1.
      ENDIF.
    ELSEIF drive = 'X'.
      activity = 2.
    ELSEIF stop = 'X'.
      activity = 3.
    ENDIF.
    CALL METHOD biker_action( activity ).
  ENDMETHOD.

  METHOD biker_action.
    CASE action.
      WHEN -1 OR 1.
        CALL METHOD bike->change_gear
                          EXPORTING change = action
                          RECEIVING gear = gear_status
                          EXCEPTIONS gear_max = 1
                                     gear_min = 2.
        CASE sy-subrc.
          WHEN 1.
            MESSAGE i315(at) WITH 'BIKE' id
                                  ' is already at maximal gear!'.
          WHEN 2.
            MESSAGE i315(at) WITH 'BIKE' id
                                  ' is already at minimal gear!'.
        ENDCASE.
      WHEN 2.
        CALL METHOD bike->drive IMPORTING velocity = speed_status.
      WHEN 3.
        CALL METHOD bike->stop  IMPORTING velocity = speed_status.
    ENDCASE.
  ENDMETHOD.

  METHOD status_line.
    line-flag = space.
    line-text1 = 'Biker'.
    line-id = id.
    line-text2 = 'Status:'.
    line-text3 = 'Gear = '.
    line-gear  = gear_status.
    line-text4 = 'Speed = '.
    line-speed = speed_status.
  ENDMETHOD.

ENDCLASS.

*-----------------------------------------------------------------------

CLASS c_bicycle IMPLEMENTATION.

  METHOD drive.
    speed = speed  + gear * 10.
    velocity = speed.
  ENDMETHOD.

  METHOD stop.
    speed = 0.
    velocity = speed.
  ENDMETHOD.

  METHOD change_gear.
    gear = me->gear.
    gear = gear + change.
    IF gear GT max_gear.
      gear = max_gear.
      RAISE gear_max.
    ELSEIF gear LT min_gear.
      gear = min_gear.
      RAISE gear_min.
    ENDIF.
    me->gear = gear.
  ENDMETHOD.

ENDCLASS.

************************************************************************
* Global Program Data
************************************************************************

TYPES team TYPE REF TO c_team.
DATA: team_blue  TYPE team,
      team_green TYPE team,
      team_red   TYPE team.

DATA  color(5) TYPE c.

************************************************************************
* Program events
************************************************************************

START-OF-SELECTION.
  CREATE OBJECT: team_blue,
                 team_green,
                 team_red.

  CALL METHOD: team_blue->create_team,
               team_green->create_team,
               team_red->create_team.

  SET PF-STATUS 'TEAMLIST'.

  WRITE '                   Select a team!             ' COLOR = 2.

*-----------------------------------------------------------------------

AT USER-COMMAND.
  CASE sy-ucomm.
    WHEN 'TEAM_BLUE'.
      color = 'BLUE '.
      FORMAT COLOR = 1 INTENSIFIED ON INVERSE ON.
      CALL METHOD team_blue->selection.
    WHEN 'TEAM_GREEN'.
      color = 'GREEN'.
      FORMAT COLOR = 5 INTENSIFIED ON INVERSE ON.
      CALL METHOD team_green->selection.
    WHEN 'TEAM_RED'.
      color = 'RED '.
      FORMAT COLOR = 6 INTENSIFIED ON INVERSE ON.
      CALL METHOD team_red->selection.
    WHEN 'EXECUTION'.
      CASE color.
        WHEN 'BLUE '.
          FORMAT COLOR = 1 INTENSIFIED ON INVERSE ON.
          CALL METHOD team_blue->selection.
          CALL METHOD team_blue->execution.
        WHEN 'GREEN'.
          FORMAT COLOR = 5 INTENSIFIED ON INVERSE ON.
          CALL METHOD team_green->selection.
          CALL METHOD team_green->execution.
        WHEN 'RED '.
          FORMAT COLOR = 6 INTENSIFIED ON INVERSE ON.
          CALL METHOD team_red->selection.
          CALL METHOD team_red->execution.
      ENDCASE.
  ENDCASE.

************************************************************************

Related Items:

 
< Prev   Next >

Google Search

Google Ads