ƒRƒ“ƒeƒ“ƒcƒtƒŒ[ƒ€‹N“ź

ABAP ƒIƒuƒWƒFƒNƒg‚Ć‚ÌƒCƒxƒ“ƒg - —á •¶‘‚đ SAP ƒ‰ƒCƒuƒ‰ƒŠƒXƒgƒ‰ƒNƒ`ƒƒ‚É‘g‚ʍž‚Ț

ˆÈ‰ș‚Ì—á‚Ƃ́AABAP ƒIƒuƒWƒFƒNƒg‚ĆƒCƒxƒ“ƒg‚đéŒŸ‚”AŒÄ‚яo‚”Aˆ—‚·‚é•û–@‚đŽŠ‚”‚Ü‚·B

ŠT—v

‚±‚̃IƒuƒWƒFƒNƒg‚́AˆÈ‰ș‚ÉŽŠ‚ł‚ê‚Ä‚ą‚é‘ΘbŽźˆê——‚ƘA“ź‚”‚Ü‚·Bƒ†[ƒU‚Ș‘Θb‚đs‚€‚œ‚тɁAABAP ƒIƒuƒWƒFƒNƒg‚ĆƒCƒxƒ“ƒg‚ȘƒgƒŠƒK‚ł‚ê‚Ü‚·B‚±‚̈ꗗ‚Æ‚»‚̃f[ƒ^‚́AƒNƒ‰ƒX C_LIST ‚ĆìŹ‚ł‚ê‚Ü‚·Bƒ†[ƒUƒAƒNƒVƒ‡ƒ“‚đˆ—‚·‚邜‚ß‚Ì STATUS ‚Æ‚ą‚€ƒNƒ‰ƒX‚Ș‚ ‚è‚Ü‚·B‚±‚̃Nƒ‰ƒX‚́AAT USER-COMMAND ƒCƒxƒ“ƒg‚ĆƒCƒxƒ“ƒg BUTTON_CLICKED ‚đƒgƒŠƒK‚”‚Ü‚·B‚±‚̃Cƒxƒ“ƒg‚́AƒNƒ‰ƒX C_LIST ‚Əˆ—‚ł‚ê‚Ü‚·B‚±‚̃Nƒ‰ƒX‚ɂ́Aˆê——‚̍s‚Č‚Æ‚ÉAƒNƒ‰ƒX C_SHIP ‚Ü‚œ‚Í C_TRUCK ‚̃IƒuƒWƒFƒNƒg‚ȘŠÜ‚Ü‚ê‚Ä‚ą‚Ü‚·B‚±‚ê‚ç‚̃Nƒ‰ƒX‚͂ǂż‚ç‚àAƒCƒ“ƒ^ƒtƒF[ƒX I_VEHICLE ‚đŽÀ‘•‚”‚Ä‚ą‚Ü‚·B‚ą‚ž‚ê‚©‚̃IƒuƒWƒFƒNƒg‚Ì‘Ź“x‚Ș•Ï‚í‚邯AƒCƒxƒ“ƒg SPEED_CHANGE ‚ȘƒgƒŠƒK‚ł‚ê‚Ü‚·BƒNƒ‰ƒX C_LIST ‚́A‚±‚̃Cƒxƒ“ƒg‚É”œ‰ž‚”‚Ĉꗗ‚đXV‚”‚Ü‚·B

‚±‚̃Oƒ‰ƒtƒBƒbƒN‚Í“Y•t‚̃eƒLƒXƒg‚Éà–Ÿ‚ł‚ê‚Ä‚ą‚Ü‚·

§–ńŽ–€

’ˆÓ

ˆê——ˆ—‚ÉŽg—p‚ł‚ê‚é ABAP –œ—߂́AABAP ƒIƒuƒWƒFƒNƒg‚Ƃ܂ŸŠź‘S‚É—˜—p‰Â”\‚ƂȂÁ‚Ä‚ą‚Ü‚č‚ńB‚œ‚Ÿ‚”A’Pƒ‚ȃeƒXƒgo—Í‚đ¶Ź‚·‚éê‡‚́AˆÈ‰ș‚Ì–œ—ß‚đŽg—p‚·‚邱‚Æ‚Ș‚Ć‚«‚Ü‚·B

·         WRITE [AT] /<offset>(<length>) <f>

·         ULINE

·         SKIP

·         NEW-LINE

’‹L: ‘ŽźĘ’è‚Æ‘ΘbŽźˆê——‹@”\‚ÌŒ»ó‚Ì“źì‚Í•ÛŰ‚ł‚ê‚Ä‚ą‚Ü‚č‚ńBĄŒă‚ÌƒŠƒŠ[ƒX‚ƁAŒĘŠ·«‚̂Ȃą•ύX‚Șs‚í‚ê‚é‰Â”\«‚Ș‚ ‚è‚Ü‚·B

éŒŸ

 

‚±‚Ì—á‚́Aƒ[ƒJƒ‹‚ȃCƒ“ƒ^ƒtƒF[ƒX‚ƃNƒ‰ƒX‚đŽg‚Á‚ÄŽÀ‘•‚ł‚ê‚Ü‚·BˆÈ‰ș‚ÉŽŠ‚·‚̂́AƒCƒ“ƒ^ƒtƒF[ƒX‚ƃNƒ‰ƒX‚̐錟‚Ć‚·B

*****************************************************************
*
ƒCƒ“ƒ^ƒtƒF[ƒX‚ƃNƒ‰ƒX‚̐錟 *****************************************************************

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.

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

 

‚±‚Ì—á‚Ć‚ÍˆÈ‰ș‚̃Cƒxƒ“ƒg‚ȘéŒŸ‚ł‚ê‚Ü‚·B

·        ƒCƒ“ƒ^ƒtƒF[ƒX I_VEHICLE “à‚̃Cƒ“ƒXƒ^ƒ“ƒXƒCƒxƒ“ƒg SPEED_CHANGE

·        ƒNƒ‰ƒX STATUS “à‚ÌĂ“IƒCƒxƒ“ƒg BUTTON_CLICKED

ƒNƒ‰ƒX C_LIST ‚ɂ́A—Œ•û‚̃Cƒxƒ“ƒg‚ɑ΂·‚éƒCƒxƒ“ƒgƒnƒ“ƒhƒ‰ƒƒ\ƒbƒh‚ȘŠÜ‚Ü‚ê‚Ä‚ą‚Ü‚·B

ƒNƒ‰ƒX STATUS ‚Í‘ź«‚đŽ‚œ‚È‚ą‚œ‚߁AĂ“I‚ȃƒ\ƒbƒh‚š‚æ‚ŃƒCƒxƒ“ƒg‚Ì‚Ę‚đˆ—‚·‚邱‚ƂɒˆÓ‚”‚Ä‚­‚Ÿ‚ł‚ąB

ŽÀ‘•

ˆÈ‰ș‚ÉŽŠ‚·‚̂́Aă‹L‚̃Nƒ‰ƒX‚̃ƒ\ƒbƒh‚ÌŽÀ‘•‚Ć‚·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.

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

 

ƒNƒ‰ƒX STATUS ‚ÌĂ“Iƒƒ\ƒbƒhUSER_ACTION ‚É‚æ‚Á‚āAĂ“IƒCƒxƒ“ƒg BUTTON_CLICKED ‚ȘƒgƒŠƒK‚ł‚ê‚Ü‚·BƒCƒ“ƒXƒ^ƒ“ƒXƒƒ\ƒbƒh I_VEHICLE~DRIVE ‚š‚æ‚ŃI_VEHICLE~STOP ‚É‚æ‚Á‚āAƒNƒ‰ƒX C_SHIP ‚š‚æ‚Ń C_TRUCK “à‚̃Cƒ“ƒXƒ^ƒ“ƒXƒƒ\ƒbƒhI_VEHICLE~SPEED_CHANGE ‚ȘƒgƒŠƒK‚ł‚ê‚Ü‚·B

ƒvƒƒOƒ‰ƒ€‚Ć‚ÌƒNƒ‰ƒX‚ÌŽg—p

ˆÈ‰ș‚̃vƒƒOƒ‰ƒ€‚Ƃ́Aă‹L‚̃Nƒ‰ƒX‚ȘŽg—p‚ł‚ê‚Ü‚·B

REPORT OO_EVENTS_DEMO NO STANDARD PAGE HEADING.

*****************************************************************
*
ƒvƒƒOƒ‰ƒ€‚̃Oƒ[ƒoƒ‹ƒf[ƒ^
*****************************************************************

DATA LIST TYPE REF TO C_LIST.

*****************************************************************
*
ƒCƒxƒ“ƒg‚̃vƒƒOƒ‰ƒ~ƒ“ƒ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.

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

‚±‚̃vƒƒOƒ‰ƒ€‚É‚æ‚Á‚āAƒNƒ‰ƒX C_LIST ‚̃IƒuƒWƒFƒNƒg‚Ș“o˜^‚ł‚êA‚»‚̃IƒuƒWƒFƒNƒg‚̃Cƒxƒ“ƒgƒnƒ“ƒhƒ‰ƒƒ\ƒbƒh FCODE_HANDLER ‚ȘƒNƒ‰ƒXƒCƒxƒ“ƒg BUTTON_CLICKED ‚ɑ΂”‚Ä“o˜^‚ł‚ê‚Ü‚·B‚Ü‚œAƒCƒ“ƒ^ƒtƒF[ƒX I_VEHICLE ‚đŽÀ‘•‚·‚é‚·‚Ś‚Ä‚ÌƒCƒ“ƒXƒ^ƒ“ƒX‚̃Cƒxƒ“ƒg SPEED_CHANGE ‚ɑ΂”‚ăCƒxƒ“ƒgƒnƒ“ƒhƒ‰ƒƒ\ƒbƒh LIST_CHANGE ‚Ș“o˜^‚ł‚ê‚Ü‚·B

 

 

 

 

 

ƒRƒ“ƒeƒ“ƒcƒtƒŒ[ƒ€I—č