ALV Hot Spot Click Event

Abap ile geliştirilen programlarda custom screen içerisinde yer alan ALV raporlarında istenilen bir alanda click event tetikelenerek istenilen bir transaction çağırılabilir ve bu transaction’a seçilen alan değeri parametre olarak gönderilebilmektedir.

Bu işlem için oluşturduğumuz screen içerisindeki ALV custom control yapısına ait olan Field Catalog’da ilgili değere HOT SPOT parametresini ‘X’ olarak belirtmemiz gerekmektedir. Bununla ilgili örnek geliştirmeyi aşağıda görebilirsiniz.

Demo olarak oluşturulmuş bir tabloya ait datayı çekerek screen içerisinde oluşturduğumuz Custom Control’e veriyoruz. Bu ALV içerisinde MATNR değerine tıkladığımızda MB51 transaction’u içerisindeki malzeme alanını seçtiğimiz MATNR değeri ile çağırmak istiyoruz.

İlk olarak screen oluşturuyoruz. oluşturduğumuz ekran içerisinde custom control ekliyoruz ve adını ALV_GRID olarak belirliyoruz.

Ekran içerisindeki ALV’nin tanımlamaları için container oluşturulması ve bu container yapısı içerisinde ilgili tablo verilerini ve field catalog değerlerinin tanımlanması gerekmektedir. Bu tanımlamalar tamamlandıktan sonra HANDLE_HOTSPOT_CLICK event’i tetiklenir.

MB51 transaction’u içerisinde Malzeme Numarası alanına göndereceğimiz parametreyi MB51’deki alan ID’sine göre göndermemiz gerekli. Bunun için CLICK tetiklendiğinde, seçili olan malzeme numarası MB51 ekranında aşağıdaki gibi ID bulunur ve bu ID’ye göre paramtre gönderilir.

DATA : WA_FCAT             TYPE LVC_S_FCAT,
       IT_FCAT             TYPE STANDARD TABLE OF LVC_S_FCAT,
       OB_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
       OB_GRID             TYPE REF TO CL_GUI_ALV_GRID,
       G_VARIANT           LIKE DISVARIANT,
       LT_DEMO_DATA        TYPE TABLE OF ZDEMO_TABLE.

INITIALIZATION.

START-OF-SELECTION.

  " GET DATA .
  REFRESH LT_DEMO_DATA.
  SELECT * INTO TABLE LT_DEMO_DATA FROM ZDEMO_TABLE.

  PERFORM FIELDCAT.

  CALL SCREEN 1001.

CLASS LCL_EVENT_HANDLER DEFINITION.
  PUBLIC SECTION.
    METHODS HANDLE_HOTSPOT_CLICK FOR EVENT HOTSPOT_CLICK OF CL_GUI_ALV_GRID
      IMPORTING E_ROW_ID E_COLUMN_ID ES_ROW_NO.
ENDCLASS.

CLASS LCL_EVENT_HANDLER IMPLEMENTATION.
  METHOD HANDLE_HOTSPOT_CLICK .
    PERFORM HOTSPOT_CLICK USING E_ROW_ID E_COLUMN_ID.
  ENDMETHOD.
ENDCLASS.

FORM HOTSPOT_CLICK USING E_ROW TYPE LVC_S_ROW E_COLUMN_ID TYPE  LVC_S_COL.

  DATA : WA_DEMO TYPE ZDEMO_TABLE.
  READ TABLE LT_DEMO_DATA  INTO WA_DEMO INDEX E_ROW-INDEX.

  SET PARAMETER ID 'MAT' FIELD WA_DEMO-MATNR.
  CALL TRANSACTION 'MB51'.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Module  STATUS_1001  OUTPUT
*&---------------------------------------------------------------------*
MODULE STATUS_1001 OUTPUT.
  SET PF-STATUS 'STANDARD_FULLSCREEN'.
  SET TITLEBAR 'TITLE'.

  IF G_VARIANT IS INITIAL.
    G_VARIANT-REPORT   = SY-REPID.
    G_VARIANT-USERNAME = SY-UNAME.
  ENDIF.


  "Object creation for custom container exporting the name
  CREATE OBJECT OB_CUSTOM_CONTAINER
    EXPORTING
      CONTAINER_NAME = 'ALV_GRID'.

  CREATE OBJECT OB_GRID
    EXPORTING
      I_PARENT = OB_CUSTOM_CONTAINER.

  CALL METHOD OB_GRID->SET_TABLE_FOR_FIRST_DISPLAY
    EXPORTING
      IS_VARIANT      = G_VARIANT
      I_DEFAULT       = 'X'
      I_SAVE          = 'A'
    CHANGING
      IT_FIELDCATALOG = IT_FCAT
      IT_OUTTAB       = LT_DEMO_DATA.

**** For Hotspot Event Handling
  DATA: G_HANDLER TYPE REF TO LCL_EVENT_HANDLER.
  CREATE OBJECT G_HANDLER.
  SET HANDLER G_HANDLER->HANDLE_HOTSPOT_CLICK FOR OB_GRID.
ENDMODULE.
*&---------------------------------------------------------------------*
*&      Form  FIELDCAT
*&---------------------------------------------------------------------*
FORM FIELDCAT .

  CLEAR WA_FCAT.
  REFRESH IT_FCAT.

  DATA: LV_COL TYPE I VALUE 0.

  LV_COL                 = 1 + LV_COL.
  WA_FCAT-COL_POS   = LV_COL.
  WA_FCAT-FIELDNAME = 'MATNR'.
  WA_FCAT-TABNAME   = 'LT_DEMO_DATA'.
  WA_FCAT-REPTEXT   = 'Malzeme No'.
  WA_FCAT-COL_OPT   = 'X'.
  WA_FCAT-EMPHASIZE = 'X'.
  WA_FCAT-KEY       = 'X'.
  WA_FCAT-HOTSPOT   = 'X'.
  APPEND WA_FCAT TO IT_FCAT.
  CLEAR WA_FCAT.

  LV_COL                 = 1 + LV_COL.
  WA_FCAT-COL_POS   = LV_COL.
  WA_FCAT-FIELDNAME = 'WERKS'.
  WA_FCAT-TABNAME   = 'LT_DEMO_DATA'.
  WA_FCAT-REPTEXT   = 'Üretim Yeri'.
  WA_FCAT-COL_OPT   = 'X'.
  APPEND WA_FCAT TO IT_FCAT.
  CLEAR WA_FCAT.

  LV_COL                 = 1 + LV_COL.
  WA_FCAT-COL_POS   = LV_COL.
  WA_FCAT-FIELDNAME = 'URETIM_TARIHI'.
  WA_FCAT-TABNAME   = 'LT_DEMO_DATA'.
  WA_FCAT-REPTEXT   = 'Üretim Tarihi'.
  WA_FCAT-COL_OPT   = 'X'.
  APPEND WA_FCAT TO IT_FCAT.
  CLEAR WA_FCAT.

  LV_COL                 = 1 + LV_COL.
  WA_FCAT-COL_POS   = LV_COL.
  WA_FCAT-FIELDNAME = 'COST'.
  WA_FCAT-TABNAME   = 'LT_DEMO_DATA'.
  WA_FCAT-REPTEXT   = 'Malzeme Tutar'.
  WA_FCAT-COL_OPT   = 'X'.
  APPEND WA_FCAT TO IT_FCAT.
  CLEAR WA_FCAT.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_1001  INPUT
*&---------------------------------------------------------------------*
MODULE USER_COMMAND_1001 INPUT.
  IF   SY-UCOMM = '&F03' OR SY-UCOMM = '&F12' OR SY-UCOMM = '&F15'.

    FREE: OB_GRID.
    REFRESH: LT_DEMO_DATA.
    LEAVE TO SCREEN 0.
  ENDIF.
ENDMODULE.

   Malzeme Numarası alanına tıklandığında MB51 ekranı açılır ve tıklanan malzeme numarası alanı seçili olarak gelir.



Yorum bırakın