Example: ALV Interactive Report using ALV Object Model
(SALV classes-Displaying ALV column as hotspot and action related to that)
REPORT ztestalv.
TYPES : BEGIN OF ty_kna1,
kunnr TYPE kna1-kunnr,
name1 TYPE kna1-name1,
ort01 TYPE kna1-ort01,
END OF ty_kna1.
DATA : t_kna1 TYPE TABLE OF ty_kna1,
wa_kna1 TYPE ty_kna1.
TYPES : BEGIN OF ty_vbak.
INCLUDE TYPE zcvbak.
TYPES END OF ty_vbak.
DATA t_vbak TYPE TABLE OF ty_vbak.
DATA o_alv_kna1 TYPE REF TO cl_salv_table.
DATA o_kna1_events TYPE REF TO cl_salv_events_table.
CLASS lcl_eventreceiver DEFINITION.
PUBLIC SECTION.
METHODS handle_link_click FOR EVENT
if_salv_events_actions_table~link_click OF cl_salv_events_table
IMPORTING row column.
ENDCLASS.
CLASS lcl_eventreceiver IMPLEMENTATION.
METHOD handle_link_click.
CASE column.
WHEN 'KUNNR'.
* message 'Customer No Selected' type 'I'.
CLEAR wa_kna1.
READ TABLE t_kna1 INTO wa_kna1 INDEX row TRANSPORTING kunnr.
IF sy-subrc EQ 0.
* get the sales orders for the selected customer
SELECT vbeln erdat erzet ernam
FROM vbak
INTO TABLE t_vbak
WHERE kunnr = wa_kna1-kunnr.
IF sy-subrc EQ 0.
* get the reference of alv table object based on sales orders data
DATA o_alv_vbak TYPE REF TO cl_salv_table.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = o_alv_vbak
CHANGING
t_table = t_vbak.
CATCH cx_salv_msg .
MESSAGE 'Exception in getting reference of alv table object for sales orders data' TYPE 'I'.
ENDTRY.
IF o_alv_vbak IS BOUND.
* display the sales orders data in alv grid
CALL METHOD o_alv_vbak->display.
ENDIF.
ELSE.
MESSAGE 'No sales orders for selected customer' TYPE 'I'.
ENDIF.
ENDIF.
WHEN OTHERS.
MESSAGE 'Please select customer no' TYPE 'I'.
ENDCASE.
ENDMETHOD.
ENDCLASS.
DATA ob TYPE REF TO lcl_eventreceiver.
START-OF-SELECTION.
PERFORM getcustomers.
IF t_kna1 IS NOT INITIAL.
* get the reference of ALV table object based on customer data
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = o_alv_kna1
CHANGING
t_table = t_kna1.
CATCH cx_salv_msg .
MESSAGE 'Exception in creating alv object for customer data' TYPE 'I'.
ENDTRY.
ELSE.
MESSAGE 'No Customers' TYPE 'I'.
ENDIF.
IF o_alv_kna1 IS BOUND.
* get the reference of ALV columns
DATA o_alv_cols TYPE REF TO cl_salv_columns_table.
CALL METHOD o_alv_kna1->get_columns
RECEIVING
value = o_alv_cols.
IF o_alv_cols IS BOUND.
* get the reference of specific column (kunnr)
DATA o_alv_col TYPE REF TO cl_salv_column.
TRY.
CALL METHOD o_alv_cols->get_column
EXPORTING
columnname = 'KUNNR'
RECEIVING
value = o_alv_col.
CATCH cx_salv_not_found .
MESSAGE 'Exception in getting reference of ALV column KUNNR' TYPE 'I'.
ENDTRY.
ENDIF.
IF o_alv_col IS BOUND.
* type cast the object to ALV column table
DATA o_alv_col_table TYPE REF TO cl_salv_column_table.
o_alv_col_table ?= o_alv_col. "widening cast
ENDIF.
IF o_alv_col_table IS BOUND.
* set the cell type to hotspot
CALL METHOD o_alv_col_table->set_cell_type
EXPORTING
value = if_salv_c_cell_type=>hotspot.
ENDIF.
* Register the handler for executing event handler method
*get the alv events object
CALL METHOD o_alv_kna1->get_event
RECEIVING
value = o_kna1_events.
CREATE OBJECT ob.
SET HANDLER ob->handle_link_click FOR o_kna1_events.
* display the customer data in alv grid
CALL METHOD o_alv_kna1->display.
ENDIF.
FORM getcustomers .
SELECT kunnr name1 ort01
FROM kna1
INTO TABLE t_kna1.
ENDFORM.
Output:
No comments:
Post a Comment