!--a11y-->

ÈșÌáĆÍAABAP IuWFNgÌ\bhđéŸAÀAgp·éû@đДܷB
±ÌáĆÍA3 ÂÌNX C_TEAM AC_BIKER AC_BICYCLE đgp”Ü·B[U ( vO) ÍANX C_TEAM ÌIuWFNgđo^·é±ÆȘƫܷBIđæÊĆANX C_TEAM ©çe`[Ìođwè·éæ€ÉwŠłêÜ·B
NX C_TEAM àÌeIuWFNgÍANXC_BIKER ÌCX^Xđ`[àÌoÆŻ¶ŸŻo^·é±ÆȘƫܷBNX C_BIKER ÌeCX^XÍANX C_BICYCLE ÌCX^Xđo^”Ü·B
NX C_TEAM ÌeCX^XÍAÎbźêđî”ÄvO[UÆÊM·é±ÆȘƫܷBvO[UÍAANVÌÎÛÆÈéÂXÌ`[ođIđ·é±ÆȘƫܷBNX C_BIKER ÌCX^XÉæÁÄAvO[UÍÇÁÌIđæÊĆANVđIđ·é±ÆȘƫܷB


êÉgpłêé ABAP œßÍAABAP IuWFNgĆÜŸźSÉpÂ\ÆÈÁÄąÜčńBœŸ”APÈeXgoÍđ¶Ź·éêÍAÈșÌœßđgp·é±ÆȘƫܷB
· WRITE [AT] /<offset>(<length>) <f>
· ULINE
· SKIP
· NEW-LINE
L: źĘèÆÎbźê@\Ì»óÌźìÍÛŰłêÄąÜčńBĄăÌ[XĆAĘ·«ÌÈąÏXȘsíêéÂ\«Ș èÜ·B
±ÌáÍA[JNXđgÁÄÀłêÜ·B±êÍAIđæÊȘ ABAP vOÉź”ÄąÄAO[oNXĆè`ÜœÍÄŃo·±ÆȘĆ«ÈąœßĆ·BÈșÉŠ·ÌÍA2 ÂÌIđæÊÆ 3 ÂÌNXÌè`Ć·B
*******************************************************************
*
O[oIđæÊ
*******************************************************************
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.
*******************************************************************
*
NXè`
*******************************************************************
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.
*******************************************************************
3 ÂÌNXÉÍAąžêàpubNź«ȘÈąÌĆӔğłąBNXÌóÔÍA»êŒêÌ\bhÉæÁÄÌĘÏX·é±ÆȘƫܷBNX C_TEAM ÉÍAĂIRXgN^ CLASS_CONSTRUCTOR ȘÜÜêĹܷBC_TEAM Æ C_BIKER ÉÍACX^XRXgN^ȘÜÜêĹܷB
NXÌÀȘÉÍAηééŸȘĆéŸłêœ·ŚÄÌ\bhÌÀȘÜÜêĹܷB\bhÌC^tF[XÍA·ĆÉéŸĆè`łêĹܷBÀĆÍAC^tF[Xp[^Ș[Jf[^Ìæ€Éźì”Ü·B
ÈșÉŠ·\bhÍAÌZNVĆÀłêÜ·B
CLASS C_TEAM IMPLEMENTATION.
...
ENDCLASS.
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.
NX C_TEAM ȘvOĆĆÉgpłêéOÉAĂIRXgN^ȘÀsłêÜ·B±ÌRXgN^ÉæÁÄAIđæÊ 100 ȘÄŃołêAĂIź« TEAM_MEMBERS ȘvO[UÉæÁÄüÍłêœlÉĘèłêÜ·B±Ìź«ÌlÍANX C_TEAM Ì·ŚÄÌCX^XĆŻ¶Ć·B
METHOD CONSTRUCTOR.
COUNTER = COUNTER + 1.
ID = COUNTER.
ENDMETHOD.
NX C_TEAM ÌCX^XȘo^łêéœŃÉACX^XRXgN^ȘÀsłêÜ·B»êđgp”Ä C_TEAM ÌCX^XÌȘĂIź« COUNTER ĆJEgłêAηélȘNXÌeCX^XÌCX^Xź« ID ÉèÄçêÜ·B
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.
pubNCX^X\bh CREATE_TEAM ÍANXÌCX^XÖÌQÆȘĘèłêœQÆÏđÜńĆąéNXÌ·ŚÄÌ[UȘÄŃo·±ÆȘƫܷB±Ì\bhÍANX C_BIKER ÌCX^Xđo^·éœßÉgpłêA»ÌÛÉNX C_TEAM ÌvCx[gQÆÏ BIKER ȘgpłêÜ·BCREATE OBJECT œßĆÍANX C_BIKER ÌCX^XRXgN^ÌüÍp[^đŒûÆàn·KvȘ èÜ·BVœÉo^łêœCX^XÖÌQÆÍAvCx[gàe[u BIKER_TAB É}üłêÜ·B\bhȘÀsłêéÆA±Ìàe[uÌesÉNX C_BIKER ÌCX^XÖÌQÆȘi[łêÜ·B±êçÌQÆÍANX C_TEAM ÌĆÌĘÂÆÈèÜ·BO[UÍANX C_BIKER ÌIuWFNgđAhX·é±ÆȘĆ«ÜčńB
CREATE_TEAM ÍAVœÉo^łêœIuWFNgČÆÉ\bh STATUS_LINE đÄŃo”AìÆÌæSTATUS_LINE đgp”Ä»ÌoÍp[^ LINE đvCx[gàe[uSTATUS_LIST ÉAyh”Ü·B
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.
pubNCX^X\bh SELECTION ÍANXÌCX^XÖÌQÆȘĘèłêœQÆÏđÜńĆąéNXÌ·ŚÄÌ[UȘÄŃo·±ÆȘƫܷB±Ì\bhÉæÁÄA»ĘÌêĆ 1 ńÚÌ`FbN{bNXȘIđłêÄąé·ŚÄÌsȘIđłêÜ·B±êçÌsÉÂąÄÍAηéQÆÏȘe[uBIKER_TAB ©çÇÁÌvCx[gàe[u BIKER_SELECTION ÉRs[łêÜ·B»Ì ÆÉAêđ\Š·évCx[g\bh WRITE_LIST Ș SELECTION ÉæÁÄÄŃołêÜ·B
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.
pubNCX^X\bh EXECUTION ÍANXÌCX^XÖÌQÆȘĘèłêœQÆÏđÜńĆąéNXÌ·ŚÄÌ[UȘÄŃo·±ÆȘƫܷB±Ì\bhÍAe[uBIKER_SELECTION ÉQÆȘ¶Ę·éNX C_BIKER ÌCX^XČÆÉA2 ÂÌ\bh SELECT_ACTION Æ STATUS_LINE đÄŃo”Ü·BìÆÌæ STATUS_LINE ÌR|[lg ID ÆŻ¶L[đÂe[uSTATUS_LIST ÌsȘAvCx[g\bh WRITE_LIST ÉæÁÄ㫳êA\ŠłêÜ·B
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.
vCx[gCX^X\bh WRITE_LIST ÍANX C_TEAM Ì\bh©ç”©ÄŃo·±ÆȘĆ«ÜčńB±Ì\bhÍAvOÌî{ê(SY_LSIND = 0) ăÉvCx[gàe[u STATUS_LIST đ\Š·éœßÉgpłêÜ·B
ÈșÉŠ·\bhÍAÌZNVàĆÀłêÜ·B
CLASS C_BIKER IMPLEMENTATION.
...
ENDCLASS.
METHOD CONSTRUCTOR.
COUNTER = COUNTER + 1.
ID = COUNTER - MEMBERS * ( TEAM_ID -
1).
CREATE OBJECT BIKE.
ENDMETHOD.
NX C_BIKER ÌCX^XȘo^łêéœŃÉACX^XRXgN^ȘÀsłêÜ·B»êđgp”ÄAC_BIKER ÌCX^XÌȘĂIź« COUNTER ĆJEgłêAηélȘNXÌeCX^XÌCX^Xź« ID ÉèÄçêÜ·B±ÌRXgN^ÉÍA2 ÂÌüÍp[^ TEAM_ID šæŃ MEMBERS Ș èÜ·B±êçÌp[^ÍAC_BIKER ÌCX^Xđo^·éÛÉ CREATE OBJECT œßĆn·KvȘ èÜ·B
ÜœA±ÌCX^XRXgN^ÉæÁÄANX C_BIKER ÌV”ąCX^XČÆÉANXC_BICYCLE ÌCX^XȘo^łêÜ·BC_BIKER ÌeCX^XÌvCx[gQÆÏ BIKE ÉĘèłêÄąéQÆÍAηéNXC_BICYCLE ÌCX^Xđw”ĹܷBO[UÍANX C_BICYCLE ̱êçÌCX^XđAhX·é±ÆȘĆ«ÜčńB
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.
pubNCX^X\bh SELECT_ACTION ÍANXÌCX^XÖÌQÆȘĘèłêœQÆÏđÜńĆąéNXÌ·ŚÄÌ[UȘÄŃo·±ÆȘƫܷB±Ì\bhÍAIđæÊ 200 đÄŃo”A[UÌüÍđȘ͔ܷB»Ì ÆÉAݶNXÌvCx[g\bh BIKER_ACTION đÄŃo”Ü·B±Ì\bhÌÄoĆÍAZą`źđgÁÄÀp[^ ACTIVITY ȘŒp[^ ACTION ÉnłêÜ·B
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.
vCx[gCX^X\bh BIKER_ACTION ÍANXC_BIKER Ì\bh©ç”©ÄŃo·±ÆȘĆ«ÜčńB±Ì\bhÍAQÆÏ BIKE àÌQÆȘw”ÄąéNX C_BICYCLE ÌCX^XàĆAüÍp[^ ACTION ÌlÉ]ÁÄŒÌ\bhđÄŃo”Ü·B
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.
pubNCX^X\bh STATUS_LINE ÍANXÌCX^XÖÌQÆȘĘèłêœQÆÏđÜńĆąéNXÌ·ŚÄÌ[UȘÄŃo·±ÆȘƫܷB±Ì\bhÍA\ą»łêœoÍp[^ LINE ÉAηéCX^XÌ»ĘÌź«lđ«ĘÜ·B
ÈșÉŠ·\bhÍAÌZNVĆÀłêÜ·B
CLASS C_BICYCLE IMPLEMENTATION.
...
ENDCLASS.
METHOD DRIVE.
SPEED = SPEED + GEAR * 10.
VELOCITY = SPEED.
ENDMETHOD.
pubNCX^X\bh DRIVE ÍANXÌCX^XÖÌQÆȘĘèłêœQÆÏđÜńĆąéNXÌ·ŚÄÌ[UȘÄŃo·±ÆȘƫܷB±Ì\bhÍAvCx[gź« SPEED ÌlđÏX”AoÍp[^ VELOCITY đgÁÄ»ÌlđÄołÉn”Ü·B
METHOD STOP.
SPEED = 0.
VELOCITY = SPEED.
ENDMETHOD.
pubNCX^X\bh STOP ÍANXÌCX^XÖÌQÆȘĘèłêœQÆÏđÜńĆąéNXÌ·ŚÄÌ[UȘÄŃo·±ÆȘƫܷB±Ì\bhÍAvCx[gź« SPEED ÌlđÏX”AoÍp[^ VELOCITY đgÁÄ»ÌlđÄołÉn”Ü·B
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.
pubNCX^X\bh CHANGE_GEAR ÍANXÌCX^XÖÌQÆȘĘèłêœQÆÏđÜńĆąéNXÌ·ŚÄÌ[UȘÄŃo·±ÆȘƫܷB±Ì\bhÍAvCx[gź« GEAR ÌlđÏX”Ü·BݶŒÌÌŒp[^ÉæÁÄ\bhàÌź«ȘsŸÄ»łêéœßAź«Í©ÈQÆ ME->GEAR đgÁÄAhX·éKvȘ èÜ·B
ÌvOÍAăLÌNXȘvOĆÇÌæ€Égpłêé©đŠ”ÄąÜ·B±ÌvOÉÍAIđæÊÆ[JNXÌéŸAšæŃ\bhÌÀàgĘȚKvȘ èÜ·B
REPORT OO_METHODS_DEMO NO STANDARD PAGE HEADING.
*******************************************************************
*
éŸÆÀ
*******************************************************************
...
*******************************************************************
*
O[ovOf[^
*******************************************************************
TYPES TEAM TYPE REF TO C_TEAM.
DATA:
TEAM_BLUE TYPE TEAM,
TEAM_GREEN TYPE TEAM,
TEAM_RED TYPE
TEAM.
DATA COLOR(5).
*******************************************************************
*
vOCxg
*******************************************************************
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.
*******************************************************************
vOĆÍANX C_TEAM đQÆ·é 3 ÂÌNXQÆÏȘgpłêĹܷB±ÌvOÉæÁÄNX©ç 3 ÂÌIuWFNgȘo^łêA»êçÌIuWFNgđQÆÏàÌQÆȘw·æ€ÉÈèÜ·BeIuWFNgĆA\bhCREATE_TEAM ȘÄŃołêÜ·BĆÌIuWFNgȘo^łêéOÉANX C_TEAM Ì\bh CLASS_CONSTRUCTOR ȘÀsłêÜ·Bî{êÌXe[^XTEAMLIST ÉæÁÄA[UÍÌ 4 ÂÌ@\©ç 1 ÂđIđ·é±ÆȘƫܷB

[UȘ@\đIđ·éÆA»ÌIđÉ¶Ä C_TEAM Ì 3 ÂÌCX^XÌąžê©ĆCxgAT USER-COMMAND ȘgKłêApubN\bhȘÄŃołêÜ·B[UÍAXe[^XêÌηésđIđ·é±ÆĆAIuWFNgÌóÔđÏX·é±ÆȘƫܷB