Tuesday, July 22, 2025

🔍Practicals - Interactive ALV Report Using SALV Classes: Hotspot Column with Action Trigger

 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