!--a11y-->

ÈșÌáĆÍAABAP IuWFNgĆCxgđ韔AÄŃo”A·éû@đДܷB
±ÌIuWFNgÍAÈșÉŠłêÄąéÎbźêÆAź”Ü·B[UȘÎbđs€œŃÉAABAP IuWFNgĆCxgȘgKłêÜ·B±ÌêÆ»Ìf[^ÍANX C_LIST ĆìŹłêÜ·B[UANVđ·éœßÌ STATUS Æą€NXȘ èÜ·B±ÌNXÍAAT USER-COMMAND CxgĆCxg BUTTON_CLICKED đgK”Ü·B±ÌCxgÍANX C_LIST ĆłêÜ·B±ÌNXÉÍAêÌsČÆÉANX C_SHIP ÜœÍ C_TRUCK ÌIuWFNgȘÜÜêĹܷB±êçÌNXÍÇżçàAC^tF[X I_VEHICLE đÀ”ĹܷBąžê©ÌIuWFNgÌŹxȘÏíéÆACxg SPEED_CHANGE ȘgKłêÜ·BNX C_LIST ÍA±ÌCxgÉœ”ÄêđXV”Ü·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[JÈC^tF[XÆNXđgÁÄÀłêÜ·BÈșÉŠ·ÌÍAC^tF[XÆNXÌéŸĆ·B
*****************************************************************
*
C^tF[XÆNXÌéŸ
*****************************************************************
INTERFACE I_VEHICLE.
DATA MAX_SPEED TYPE I.
EVENTS SPEED_CHANGE EXPORTING VALUE(NEW_SPEED) TYPE I.
METHODS: DRIVE,
STOP.
ENDINTERFACE.
*----------------------------------------------------------------
CLASS C_SHIP DEFINITION.
PUBLIC SECTION.
METHODS CONSTRUCTOR.
INTERFACES I_VEHICLE.
PRIVATE SECTION.
ALIASES MAX FOR I_VEHICLE~MAX_SPEED.
DATA SHIP_SPEED TYPE I.
ENDCLASS.
*----------------------------------------------------------------
CLASS C_TRUCK DEFINITION.
PUBLIC SECTION.
METHODS CONSTRUCTOR.
INTERFACES I_VEHICLE.
PRIVATE SECTION.
ALIASES MAX FOR I_VEHICLE~MAX_SPEED.
DATA TRUCK_SPEED TYPE I.
ENDCLASS.
*----------------------------------------------------------------
CLASS STATUS DEFINITION.
PUBLIC SECTION.
CLASS-EVENTS BUTTON_CLICKED EXPORTING VALUE(FCODE) LIKE SY-UCOMM.
CLASS-METHODS: CLASS_CONSTRUCTOR,
USER_ACTION.
ENDCLASS.
*----------------------------------------------------------------
CLASS C_LIST DEFINITION.
PUBLIC SECTION.
METHODS: FCODE_HANDLER FOR EVENT BUTTON_CLICKED OF
STATUS
IMPORTING FCODE,
LIST_CHANGE FOR EVENT SPEED_CHANGE OF I_VEHICLE
IMPORTING NEW_SPEED,
LIST_OUTPUT.
PRIVATE SECTION.
DATA: ID TYPE I,
REF_SHIP TYPE REF
TO C_SHIP,
REF_TRUCK TYPE REF TO
C_TRUCK,
BEGIN OF LINE,
ID TYPE I,
FLAG,
IREF TYPE
REF TO I_VEHICLE,
SPEED TYPE I,
END OF LINE,
LIST LIKE SORTED TABLE OF LINE
WITH UNIQUE KEY ID.
ENDCLASS.
*****************************************************************
±ÌáĆÍÈșÌCxgȘéŸłêÜ·B
· C^tF[X I_VEHICLE àÌCX^XCxg SPEED_CHANGE
· NX STATUS àÌĂICxg BUTTON_CLICKED
NX C_LIST ÉÍAŒûÌCxgÉηéCxgnh\bhȘÜÜêĹܷB
NX STATUS Íź«đœÈąœßAĂIÈ\bhšæŃCxgÌĘđ·é±ÆÉӔğłąB
ÈșÉŠ·ÌÍAăLÌNXÌ\bhÌÀĆ·B
*****************************************************************
*
À
*****************************************************************
CLASS C_SHIP IMPLEMENTATION.
METHOD CONSTRUCTOR.
MAX = 30.
ENDMETHOD.
METHOD I_VEHICLE~DRIVE.
CHECK SHIP_SPEED < MAX.
SHIP_SPEED = SHIP_SPEED + 10.
RAISE EVENT I_VEHICLE~SPEED_CHANGE
EXPORTING
NEW_SPEED = SHIP_SPEED.
ENDMETHOD.
METHOD I_VEHICLE~STOP.
CHECK SHIP_SPEED > 0.
SHIP_SPEED = 0.
RAISE EVENT I_VEHICLE~SPEED_CHANGE
EXPORTING
NEW_SPEED = SHIP_SPEED.
ENDMETHOD.
ENDCLASS.
*----------------------------------------------------------------
CLASS C_TRUCK IMPLEMENTATION.
METHOD CONSTRUCTOR.
MAX = 150.
ENDMETHOD.
METHOD I_VEHICLE~DRIVE.
CHECK TRUCK_SPEED < MAX.
TRUCK_SPEED = TRUCK_SPEED + 50.
RAISE EVENT I_VEHICLE~SPEED_CHANGE
EXPORTING
NEW_SPEED = TRUCK_SPEED.
ENDMETHOD.
METHOD I_VEHICLE~STOP.
CHECK TRUCK_SPEED > 0.
TRUCK_SPEED = 0.
RAISE EVENT I_VEHICLE~SPEED_CHANGE
EXPORTING
NEW_SPEED = TRUCK_SPEED.
ENDMETHOD.
ENDCLASS.
*----------------------------------------------------------------
CLASS STATUS IMPLEMENTATION.
METHOD
CLASS_CONSTRUCTOR.
SET
PF-STATUS 'VEHICLE'.
WRITE 'Click a button!'.
ENDMETHOD.
METHOD USER_ACTION.
RAISE EVENT BUTTON_CLICKED EXPORTING FCODE = SY-UCOMM.
ENDMETHOD.
ENDCLASS.
*----------------------------------------------------------------
CLASS C_LIST IMPLEMENTATION.
METHOD FCODE_HANDLER.
CLEAR LINE.
CASE FCODE.
WHEN 'CREA_SHIP'.
ID = ID + 1.
CREATE OBJECT
REF_SHIP.
LINE-ID = ID.
LINE-FLAG =
'C'.
LINE-IREF = REF_SHIP.
APPEND LINE TO LIST.
WHEN 'CREA_TRUCK'.
ID = ID + 1.
CREATE OBJECT
REF_TRUCK.
LINE-ID = ID.
LINE-FLAG =
'T'.
LINE-IREF = REF_TRUCK.
APPEND LINE TO LIST.
WHEN 'DRIVE'.
CHECK SY-LILLI > 0.
READ TABLE LIST INDEX SY-LILLI
INTO LINE.
CALL METHOD LINE-IREF->DRIVE.
WHEN 'STOP'.
LOOP AT LIST INTO LINE.
CALL METHOD LINE-IREF->STOP.
ENDLOOP.
WHEN 'CANCEL'.
LEAVE PROGRAM.
ENDCASE.
CALL METHOD LIST_OUTPUT.
ENDMETHOD.
METHOD LIST_CHANGE.
LINE-SPEED = NEW_SPEED.
MODIFY TABLE LIST FROM LINE.
ENDMETHOD.
METHOD LIST_OUTPUT.
SY-LSIND = 0.
SET TITLEBAR 'TIT'.
LOOP AT LIST INTO LINE.
IF LINE-FLAG = 'C'.
WRITE / ICON_WS_SHIP AS ICON.
ELSEIF LINE-FLAG = 'T'.
WRITE / ICON_WS_TRUCK AS ICON.
ENDIF.
WRITE: 'Speed = ', LINE-SPEED.
ENDLOOP.
ENDMETHOD.
ENDCLASS.
*****************************************************************
NX STATUS ÌĂI\bhUSER_ACTION ÉæÁÄAĂICxg BUTTON_CLICKED ȘgKłêÜ·BCX^X\bh I_VEHICLE~DRIVE šæŃI_VEHICLE~STOP ÉæÁÄANX C_SHIP šæŃ C_TRUCK àÌCX^X\bhI_VEHICLE~SPEED_CHANGE ȘgKłêÜ·B
ÈșÌvOĆÍAăLÌNXȘgpłêÜ·B
REPORT OO_EVENTS_DEMO NO STANDARD PAGE HEADING.
*****************************************************************
*
vOÌO[of[^
*****************************************************************
DATA LIST TYPE REF TO C_LIST.
*****************************************************************
*
CxgÌvO~O
*****************************************************************
START-OF-SELECTION.
CREATE OBJECT LIST.
SET
HANDLER: LIST->FCODE_HANDLER,
LIST->LIST_CHANGE FOR ALL INSTANCES.
*----------------------------------------------------------------
AT USER-COMMAND.
CALL METHOD STATUS=>USER_ACTION.
*****************************************************************
±ÌvOÉæÁÄANX C_LIST ÌIuWFNgȘo^łêA»ÌIuWFNgÌCxgnh\bh FCODE_HANDLER ȘNXCxg BUTTON_CLICKED ÉΔÄo^łêÜ·BÜœAC^tF[X I_VEHICLE đÀ·é·ŚÄÌCX^XÌCxg SPEED_CHANGE ÉΔÄCxgnh\bh LIST_CHANGE Șo^łêÜ·B