2007 Oct 24 4:20 PM
Hello!!
I have a problem because when I click on the button-luggweight. I can't see any message so my program can't detect any event.
I think that in my code I forget something but I don't know what. Anybody can help me, please?
ZBC405_INCLUDE_CLASS
CLASS LCL_HANDLER DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
ON_LINK_CLICK
FOR EVENT LINK_CLICK OF CL_SALV_EVENTS_TABLE
IMPORTING
ROW
COLUMN.
ENDCLASS.
CLASS LCL_HANDLER IMPLEMENTATION.
METHOD ON_LINK_CLICK.
CASE COLUMN.
WHEN 'LUGGWEIGHT'.
MESSAGE I041.
ENDCASE.
ENDMETHOD.
ENDCLASS._____________________________________
ZBC405_05_COLUM_TOP
TABLES: SBOOK,SCARR,SFLIGHT.
TYPE-POOLS: COL,ICON.
TYPES: BEGIN OF ST_BOOK.
INCLUDE STRUCTURE SBOOK.
TYPES: IT_CELL_TYPES TYPE SALV_T_INT4_COLUMN,
IT_HYPERLINK TYPE SALV_T_INT4_COLUMN,
URL TYPE SERVICE_RL,
END OF ST_BOOK.
DATA: IT_BOOK TYPE TABLE OF ST_BOOK.
DATA: WA_BOOK LIKE LINE OF IT_BOOK,
WA_CELL_TYPES LIKE LINE OF WA_BOOK-IT_CELL_TYPES.
DATA: GR_ALV TYPE REF TO CL_SALV_TABLE,
LR_COLUMNS TYPE REF TO CL_SALV_COLUMNS_TABLE,
LR_COLUMN TYPE REF TO CL_SALV_COLUMN_TABLE.__________________________________________________________
ZBC405_05_COLUMN_PROGRAM
SELECT * FROM SBOOK INTO CORRESPONDING FIELDS OF WA_BOOK
WHERE CARRID = M_CARRID.
INSERT WA_BOOK INTO TABLE IT_BOOK.
ENDSELECT.
CALL METHOD CL_SALV_TABLE=>FACTORY
EXPORTING
LIST_DISPLAY = IF_SALV_C_BOOL_SAP=>FALSE
* R_CONTAINER =
* CONTAINER_NAME =
IMPORTING
R_SALV_TABLE = GR_ALV
CHANGING
T_TABLE = IT_BOOK.
PERFOM PESO.
FORM PESO.
LOOP AT IT_BOOK INTO WA_BOOK.
IF WA_BOOK-LUGGWEIGHT = 0
AND WA_BOOK-WUNIT = 'KG'
AND WA_BOOK-SMOKER = ' '.
CLEAR WA_CELL_TYPES.
WA_CELL_TYPES-COLUMNNAME = 'LUGGWEIGHT'.
WA_CELL_TYPES-VALUE = IF_SALV_C_CELL_TYPE=><b>BUTTON.</b>
APPEND WA_CELL_TYPES TO WA_BOOK-IT_CELL_TYPES.
ENDIF.
MODIFY IT_BOOK FROM WA_BOOK TRANSPORTING IT_CELL_TYPES.
ENDLOOP.
LR_COLUMNS = GR_ALV->GET_COLUMNS( ).
TRY.
LR_COLUMNS->SET_CELL_TYPE_COLUMN( VALUE = 'IT_CELL_TYPES' ).
CATCH CX_SALV_DATA_ERROR.
ENDTRY.
TRY.
CALL METHOD GR_ALV->GET_EVENT
RECEIVING
VALUE = LR_EVENT.
CATCH CX_SALV_DATA_ERROR.
ENDTRY.
SET HANDLER LCL_HANDLER=>ON_LINK_CLICK
FOR LR_EVENT.
ENDFORM. "PESOthanks a lot.
2007 Oct 25 6:05 PM
Hi,
Maybe this code be useful for you, it uses events <b>on_link_click</b> and <b>on_double_click</b> and display a field as icon that trigger its events.
REPORT zsalv_event_mar NO STANDARD PAGE HEADING.
INCLUDE <icon>.
*----------------------------------------------------------------------*
* CLASS lcl_alv DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_alv DEFINITION.
PUBLIC SECTION.
METHODS select_alv IMPORTING amount TYPE i.
METHODS display_alv.
METHODS on_link_click
FOR EVENT link_click OF cl_salv_events_table
IMPORTING row column.
METHODS on_double_click
FOR EVENT double_click OF cl_salv_events_table
IMPORTING row column.
PROTECTED SECTION.
DATA: o_table TYPE REF TO cl_salv_table,
o_columns TYPE REF TO cl_salv_columns_table,
o_column TYPE REF TO cl_salv_column_table,
o_events TYPE REF TO cl_salv_events_table.
DATA: BEGIN OF s_alv2.
INCLUDE TYPE alv_tab.
DATA: button TYPE icon_d,
END OF s_alv2.
DATA t_alv2 LIKE TABLE OF s_alv2.
ENDCLASS. "lcl_alv DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_alv IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_alv IMPLEMENTATION.
METHOD select_alv.
SELECT *
FROM alv_tab
INTO CORRESPONDING FIELDS OF TABLE t_alv2
UP TO amount ROWS.
LOOP AT t_alv2 INTO s_alv2.
MOVE icon_oo_class_event TO s_alv2-button.
MODIFY t_alv2 FROM s_alv2 INDEX sy-tabix.
ENDLOOP.
ENDMETHOD. "SELECT_ALV
METHOD display_alv.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = o_table
CHANGING
t_table = t_alv2 ).
CATCH cx_salv_msg.
ENDTRY.
o_columns = o_table->get_columns( ).
o_columns->set_optimize( abap_true ).
TRY.
o_column ?= o_columns->get_column( 'CARRID' ).
o_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
CATCH cx_salv_not_found.
ENDTRY.
TRY.
o_column ?= o_columns->get_column( 'BUTTON' ).
o_column->set_icon( if_salv_c_bool_sap=>true ).
o_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
o_column->set_long_text( 'My Button' ).
CATCH cx_salv_not_found.
ENDTRY.
o_events = o_table->get_event( ).
SET HANDLER me->on_link_click FOR o_events.
SET HANDLER me->on_double_click FOR o_events.
o_table->display( ).
ENDMETHOD. "display_alv
METHOD on_link_click.
MESSAGE i000(0k) WITH 'You Clicked on Line'
row
'Of Column'
column.
ENDMETHOD. "on_single_click
METHOD on_double_click.
MESSAGE i000(0k) WITH 'You Double Clicked on Line'
row
'Of Column'
column.
ENDMETHOD. "on_double_click
ENDCLASS. "lcl_alv IMPLEMENTATION
DATA o_alv TYPE REF TO lcl_alv.
START-OF-SELECTION.
CREATE OBJECT o_alv.
o_alv->select_alv( 30 ).
o_alv->display_alv( ).
Regards.
Marcelo Ramos
2007 Oct 24 6:02 PM
2007 Oct 24 8:50 PM
Hi Ana,
Take a look at the program SALV_DEMO_TABLE_EVENTS, it's a Demonstration of Event In ALV Model. It does what you want.
<b>Don't forget to reward points for useful answers.</b>
Regards.
Marcelo Ramos
2007 Oct 24 9:22 PM
Hi Ana,
See the follow my example, it was based on 'SALV_DEMO_TABLE_EVENTS.
1 - It seems you forgetting to create a object of your class like
DATA: gr_events TYPE REF TO lcl_handle_events.2 - You must instantiate this object like
CREATE OBJECT gr_events.3 - You can set up your field as Hotspot with this statement
TRY.
lr_column ?= lr_columns->get_column( 'CARRID' ).
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
CATCH cx_salv_not_found. "#EC NO_HANDLER
ENDTRY.
4 - You Must create and instantiate a object of class <b>cl_salv_events_table</b> responsible to get all events. You can do as follow
DATA: lr_events TYPE REF TO cl_salv_events_table.
lr_events = gr_table->get_event( ).
5 - You MUST active event handler for events that you want to work
SET HANDLER gr_events->on_link_click FOR lr_events.
<b>You can see it working running the code below. I hope I have helped you with this informations. Good Look !
Ps.: Don't forget to reward points for useful answers and close this thread when your question be answered !.
</b>
REPORT zsalv_event_mar NO STANDARD PAGE HEADING.
*----------------------------------------------------------------------*
* CLASS lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_handle_events DEFINITION.
PUBLIC SECTION.
METHODS:
on_link_click FOR EVENT link_click OF cl_salv_events_table
IMPORTING row column.
ENDCLASS. "lcl_handle_events DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_handle_events IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.
METHOD on_link_click.
DATA: l_row_string TYPE string,
l_col_string TYPE string,
l_row TYPE char128.
MESSAGE i000(0k) WITH 'You Clicked on Line'
row
'Of Column'
column.
ENDMETHOD. "on_single_click
ENDCLASS. "lcl_handle_events IMPLEMENTATION
DATA: gr_events TYPE REF TO lcl_handle_events.
DATA: gt_outtab TYPE STANDARD TABLE OF alv_tab.
DATA: gr_table TYPE REF TO cl_salv_table.
SELECTION-SCREEN BEGIN OF BLOCK gen WITH FRAME.
PARAMETERS: p_amount TYPE i DEFAULT 30.
SELECTION-SCREEN END OF BLOCK gen.
START-OF-SELECTION.
PERFORM select_data.
PERFORM display.
*&---------------------------------------------------------------------*
*& Form select_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM select_data .
SELECT *
FROM alv_tab
INTO TABLE gt_outtab
UP TO p_amount ROWS.
ENDFORM. " select_data
*&---------------------------------------------------------------------*
*& Form display
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display .
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = gr_table
CHANGING
t_table = gt_outtab ).
CATCH cx_salv_msg. "#EC NO_HANDLER
ENDTRY.
DATA: lr_functions TYPE REF TO cl_salv_functions_list.
lr_functions = gr_table->get_functions( ).
lr_functions->set_default( abap_true ).
*... set the columns technical
DATA: lr_columns TYPE REF TO cl_salv_columns_table,
lr_column TYPE REF TO cl_salv_column_table.
lr_columns = gr_table->get_columns( ).
lr_columns->set_optimize( abap_true ).
TRY.
lr_column ?= lr_columns->get_column( 'CARRID' ).
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
CATCH cx_salv_not_found. "#EC NO_HANDLER
ENDTRY.
DATA: lr_events TYPE REF TO cl_salv_events_table.
lr_events = gr_table->get_event( ).
CREATE OBJECT gr_events.
SET HANDLER gr_events->on_link_click FOR lr_events.
gr_table->display( ).
ENDFORM. " display
Regards.
Marcelo Ramos
2007 Oct 25 9:19 AM
Thanks, your answers have been very useful.
But my problem was that I didn't use a dynpro so the program can't detect the button (I think )but it can detect a hotspot.
I can't see the difference between use BUTTON and HOTSPOT because if my program can detect the HOTSPOT why don't detect the BUTTON?
OK lr_column ?= lr_columns->get_column( 'CARRID' ).
lr_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
KO lr_column ?= lr_columns->get_column( 'CARRID' ).
lr_column->set_cell_type( if_salv_c_cell_type=>BUTTON ).
2007 Oct 25 6:05 PM
Hi,
Maybe this code be useful for you, it uses events <b>on_link_click</b> and <b>on_double_click</b> and display a field as icon that trigger its events.
REPORT zsalv_event_mar NO STANDARD PAGE HEADING.
INCLUDE <icon>.
*----------------------------------------------------------------------*
* CLASS lcl_alv DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_alv DEFINITION.
PUBLIC SECTION.
METHODS select_alv IMPORTING amount TYPE i.
METHODS display_alv.
METHODS on_link_click
FOR EVENT link_click OF cl_salv_events_table
IMPORTING row column.
METHODS on_double_click
FOR EVENT double_click OF cl_salv_events_table
IMPORTING row column.
PROTECTED SECTION.
DATA: o_table TYPE REF TO cl_salv_table,
o_columns TYPE REF TO cl_salv_columns_table,
o_column TYPE REF TO cl_salv_column_table,
o_events TYPE REF TO cl_salv_events_table.
DATA: BEGIN OF s_alv2.
INCLUDE TYPE alv_tab.
DATA: button TYPE icon_d,
END OF s_alv2.
DATA t_alv2 LIKE TABLE OF s_alv2.
ENDCLASS. "lcl_alv DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_alv IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_alv IMPLEMENTATION.
METHOD select_alv.
SELECT *
FROM alv_tab
INTO CORRESPONDING FIELDS OF TABLE t_alv2
UP TO amount ROWS.
LOOP AT t_alv2 INTO s_alv2.
MOVE icon_oo_class_event TO s_alv2-button.
MODIFY t_alv2 FROM s_alv2 INDEX sy-tabix.
ENDLOOP.
ENDMETHOD. "SELECT_ALV
METHOD display_alv.
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = o_table
CHANGING
t_table = t_alv2 ).
CATCH cx_salv_msg.
ENDTRY.
o_columns = o_table->get_columns( ).
o_columns->set_optimize( abap_true ).
TRY.
o_column ?= o_columns->get_column( 'CARRID' ).
o_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
CATCH cx_salv_not_found.
ENDTRY.
TRY.
o_column ?= o_columns->get_column( 'BUTTON' ).
o_column->set_icon( if_salv_c_bool_sap=>true ).
o_column->set_cell_type( if_salv_c_cell_type=>hotspot ).
o_column->set_long_text( 'My Button' ).
CATCH cx_salv_not_found.
ENDTRY.
o_events = o_table->get_event( ).
SET HANDLER me->on_link_click FOR o_events.
SET HANDLER me->on_double_click FOR o_events.
o_table->display( ).
ENDMETHOD. "display_alv
METHOD on_link_click.
MESSAGE i000(0k) WITH 'You Clicked on Line'
row
'Of Column'
column.
ENDMETHOD. "on_single_click
METHOD on_double_click.
MESSAGE i000(0k) WITH 'You Double Clicked on Line'
row
'Of Column'
column.
ENDMETHOD. "on_double_click
ENDCLASS. "lcl_alv IMPLEMENTATION
DATA o_alv TYPE REF TO lcl_alv.
START-OF-SELECTION.
CREATE OBJECT o_alv.
o_alv->select_alv( 30 ).
o_alv->display_alv( ).
Regards.
Marcelo Ramos
2007 Oct 26 3:53 PM
| User | Count |
|---|---|
| 4 | |
| 2 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |