09-21-2008 10:23 AM
Hi,
i copy &paste this sample code to learn events in oo and i have to create pf-status
i do that create pf-status name VEHICLE but nothing happen ,
when i run the program i get just the line Click a button! and i dont see the more push butten that i add ,
i do that in (Freely Assigned Function Keys) way ?
Regards .
REPORT zztest_events.
TYPE-POOLS: icon.
*****************************************************************
* Interface and Class declarations
*****************************************************************
INTERFACE i_vehicle.
DATA max_speed TYPE i.
EVENTS speed_change EXPORTING value(new_speed) TYPE i.
METHODS: drive,
stop.
ENDINTERFACE. "I_VEHICLE
*----------------------------------------------------------------
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. "C_SHIP DEFINITION
*----------------------------------------------------------------
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. "C_TRUCK DEFINITION
*----------------------------------------------------------------
CLASS status DEFINITION.
PUBLIC SECTION.
CLASS-EVENTS button_clicked EXPORTING value(fcode) LIKE sy-ucomm.
CLASS-METHODS: class_constructor,
user_action.
ENDCLASS. "STATUS DEFINITION
*----------------------------------------------------------------
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_LIST DEFINITION
*****************************************************************
*****************************************************************
* Implementations
*****************************************************************
CLASS c_ship IMPLEMENTATION.
METHOD constructor.
max = 30.
ENDMETHOD. "CONSTRUCTOR
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. "I_VEHICLE~DRIVE
METHOD i_vehicle~stop.
CHECK ship_speed > 0.
ship_speed = 0.
RAISE EVENT i_vehicle~speed_change
EXPORTING new_speed = ship_speed.
ENDMETHOD. "I_VEHICLE~STOP
ENDCLASS. "C_SHIP IMPLEMENTATION
*----------------------------------------------------------------
CLASS c_truck IMPLEMENTATION.
METHOD constructor.
max = 150.
ENDMETHOD. "CONSTRUCTOR
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. "I_VEHICLE~DRIVE
METHOD i_vehicle~stop.
CHECK truck_speed > 0.
truck_speed = 0.
RAISE EVENT i_vehicle~speed_change
EXPORTING new_speed = truck_speed.
ENDMETHOD. "I_VEHICLE~STOP
ENDCLASS. "C_TRUCK IMPLEMENTATION
*----------------------------------------------------------------
CLASS status IMPLEMENTATION.
METHOD class_constructor.
SET PF-STATUS 'VEHICLE'.
WRITE 'Click a button!'.
ENDMETHOD. "CLASS_CONSTRUCTOR
METHOD user_action.
RAISE EVENT button_clicked EXPORTING fcode = sy-ucomm.
ENDMETHOD. "USER_ACTION
ENDCLASS. "STATUS IMPLEMENTATION
*----------------------------------------------------------------
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. "FCODE_HANDLER
METHOD list_change .
line-speed = new_speed.
MODIFY TABLE list FROM line.
ENDMETHOD. "LIST_CHANGE
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. "LIST_OUTPUT
ENDCLASS. "C_LIST IMPLEMENTATION
*****************************************************************
*****************************************************************
* Global data of program
*****************************************************************
DATA list TYPE REF TO c_list.
*****************************************************************
* Program Events
*****************************************************************
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.
09-21-2008 2:15 PM
You have to create the PF-STATUS "VEHICLE" with the following function codes from your code:
WHEN 'CREA_SHIP'.
WHEN 'CREA_TRUCK'.
WHEN 'DRIVE'.
WHEN 'STOP'.
WHEN 'CANCEL'.
then activate the PF-STATUS. it will work.
09-21-2008 2:15 PM
You have to create the PF-STATUS "VEHICLE" with the following function codes from your code:
WHEN 'CREA_SHIP'.
WHEN 'CREA_TRUCK'.
WHEN 'DRIVE'.
WHEN 'STOP'.
WHEN 'CANCEL'.
then activate the PF-STATUS. it will work.
09-21-2008 2:47 PM
Hi Sourav ,
Thanks i do that and it don't work.,
i put CREA_SHIP and & CREA_TRUCK in Freely Assigned Function Keys annd activate and nothing happen.
what i miss?
Regards
09-21-2008 2:54 PM