Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

hyperlink in an column (ALV REPORT)

Former Member
0 Kudos

HI.

i have an alv report,i used reuse_alv_list_display,

now, i need to place an hyperlink for a column, so that it goes to xk03.

thanks in advance

2 REPLIES 2

RichHeilman
Developer Advocate
Developer Advocate
0 Kudos

I prefer to use the class instead of the function module when handling this kind of stuff. Here is a short sample. Just create screen 100, put a custom control in the dynpro, and name it as ALV_CONTAINER.



REPORT ZRICH_0001.

TABLES: MARA.

DATA: BEGIN OF I_ALV OCCURS 0,
      MATNR TYPE MARA-MATNR,
      MAKTX TYPE MAKT-MAKTX,
      END OF I_ALV.

***********************************************************************
*       CLASS cl_event_receiver DEFINITION      Handles Double Click
***********************************************************************
CLASS CL_EVENT_RECEIVER DEFINITION.
  PUBLIC SECTION.
    METHODS HANDLE_DOUBLE_CLICK
      FOR EVENT DOUBLE_CLICK OF CL_GUI_ALV_GRID
      IMPORTING E_ROW E_COLUMN.
  PRIVATE SECTION.
ENDCLASS.

***********************************************************************
*       CLASS CL_EVENT_RECEIVER IMPLEMENTATION    Handles Double Click
***********************************************************************
CLASS CL_EVENT_RECEIVER IMPLEMENTATION.
  METHOD HANDLE_DOUBLE_CLICK.
    PERFORM DRILL_DOWN USING E_ROW-INDEX.
  ENDMETHOD.
ENDCLASS.


DATA: ALV_CONTAINER  TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA: EVENT_RECEIVER TYPE REF TO CL_EVENT_RECEIVER.
DATA: ALV_GRID       TYPE REF TO CL_GUI_ALV_GRID.
DATA: LAYOUT    TYPE LVC_S_LAYO.
DATA: FIELDCAT  TYPE LVC_T_FCAT.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001 .
SELECT-OPTIONS: S_MATNR FOR MARA-MATNR.
SELECTION-SCREEN END OF BLOCK B1.

START-OF-SELECTION.

  PERFORM GET_DATA.
  CALL SCREEN 100.

************************************************************************
*      Module  status_0100  OUTPUT
************************************************************************
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS '0100'.
  SET TITLEBAR '0100'.

  DATA: LT_EXCLUDE TYPE UI_FUNCTIONS.
  DATA: VARIANT TYPE  DISVARIANT.

  VARIANT-REPORT = SY-REPID.
  VARIANT-USERNAME = SY-UNAME.

* Create Controls
  CREATE OBJECT ALV_CONTAINER
         EXPORTING
               CONTAINER_NAME    = 'ALV_CONTAINER'.

  CREATE OBJECT ALV_GRID
         EXPORTING
               I_PARENT          =  ALV_CONTAINER.

*  Create Event Receiver
  CREATE OBJECT EVENT_RECEIVER.

*  ALV Specific. Data selection.
*  Populate Field Catalog
  PERFORM GET_FIELDCATALOG.


*   Optionally restrict generic functions to 'change only'.
*   (The user shall not be able to add new lines).
  PERFORM EXCLUDE_TB_FUNCTIONS CHANGING LT_EXCLUDE.

  CALL METHOD ALV_GRID->SET_TABLE_FOR_FIRST_DISPLAY
      EXPORTING
           IS_LAYOUT              = LAYOUT
           IS_VARIANT             = VARIANT
           I_SAVE                 = 'U'
           I_STRUCTURE_NAME       = 'I_ALV'
           it_toolbar_excluding   = lt_exclude
      CHANGING
           IT_OUTTAB       = I_ALV[]
           IT_FIELDCATALOG = FIELDCAT[].

*   handler for ALV grid
  SET HANDLER EVENT_RECEIVER->HANDLE_DOUBLE_CLICK FOR ALV_GRID.

ENDMODULE.

************************************************************************
*      Module  USER_COMMAND_0100  INPUT
************************************************************************
MODULE USER_COMMAND_0100 INPUT.

  CASE SY-UCOMM.
    WHEN 'BACK' OR 'CANC'.
      IF NOT ALV_CONTAINER IS INITIAL.
        CALL METHOD ALV_CONTAINER->FREE.
        CLEAR: ALV_CONTAINER.
        FREE : ALV_CONTAINER.
      ENDIF.
      IF SY-SUBRC = 0.
        SET SCREEN 0.
        LEAVE SCREEN.
      ELSE.
        LEAVE PROGRAM.
      ENDIF.
    WHEN 'EXIT'.
      IF NOT ALV_CONTAINER IS INITIAL.
        CALL METHOD ALV_CONTAINER->FREE.
        CLEAR: ALV_CONTAINER.
        FREE : ALV_CONTAINER.
      ENDIF.
      LEAVE PROGRAM.
  ENDCASE.

ENDMODULE.

************************************************************************
* FORM GET_DATA
************************************************************************
FORM GET_DATA.

  SELECT * INTO CORRESPONDING FIELDS OF TABLE I_ALV
        FROM MARA
          INNER JOIN MAKT
            ON MARA~MATNR = MAKT~MATNR
               WHERE MARA~MATNR IN S_MATNR
                 AND MAKT~SPRAS = SY-LANGU.

  SORT I_ALV ASCENDING BY MATNR.

ENDFORM.

************************************************************************
*      Form  Get_Fieldcatalog - Set Up Columns/Headers
************************************************************************
FORM GET_FIELDCATALOG.

  DATA: LS_FCAT TYPE LVC_S_FCAT.
  REFRESH: FIELDCAT.

  CLEAR: LS_FCAT.
  LS_FCAT-REPTEXT    = 'Material Number'.
  LS_FCAT-COLTEXT    = 'Material Number'.
  LS_FCAT-FIELDNAME  = 'MATNR'.
  LS_FCAT-REF_TABLE  = 'I_ALV'.
  LS_FCAT-OUTPUTLEN  = '18'.
  LS_FCAT-COL_POS    = 1.
  APPEND LS_FCAT TO FIELDCAT.

  CLEAR: LS_FCAT.
  LS_FCAT-REPTEXT    = 'Material Description'.
  LS_FCAT-COLTEXT    = 'Material Description'.
  LS_FCAT-FIELDNAME  = 'MAKTX'.
  LS_FCAT-REF_TABLE  = 'I_ALV'.
  LS_FCAT-OUTPUTLEN  = '40'.
  LS_FCAT-COL_POS    = 2.
  APPEND LS_FCAT TO FIELDCAT.

ENDFORM.

************************************************************************
* DRILL_DOWN
************************************************************************
FORM DRILL_DOWN USING INDEX.

  READ TABLE I_ALV INDEX INDEX.
  IF SY-SUBRC = 0.
    SET PARAMETER ID 'MAT' FIELD I_ALV-MATNR.
    CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
    IF NOT ALV_CONTAINER IS INITIAL.
      CALL METHOD ALV_CONTAINER->FREE.
      CLEAR: ALV_CONTAINER.
      FREE : ALV_CONTAINER.
    ENDIF.
  ENDIF.

ENDFORM.

***********************************************************************
*      Form  EXCLUDE_TB_FUNCTIONS
***********************************************************************
FORM EXCLUDE_TB_FUNCTIONS CHANGING PT_EXCLUDE TYPE UI_FUNCTIONS.
* Only allow to change data not to create new entries (exclude
* generic functions).

  DATA LS_EXCLUDE TYPE UI_FUNC.

  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_COPY_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_DELETE_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_APPEND_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_INSERT_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.
  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_LOC_MOVE_ROW.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.

  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_SORT_ASC.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.

  LS_EXCLUDE = CL_GUI_ALV_GRID=>MC_FC_SORT_DSC.
  APPEND LS_EXCLUDE TO PT_EXCLUDE.


**  This excludes all buttons
*  LS_EXCLUDE = '&EXCLALLFC'.
*  APPEND LS_EXCLUDE TO PT_EXCLUDE.

ENDFORM.

Regards,

Rich Heilman

former_member188685
Active Contributor
0 Kudos

Hi,

check this code,.., do it in the same way ...

as mentioned .

set the PF-status, and user-command.

REPORT  ZTEST_ALV_CHECK     message-id zz           .


TYPE-POOLS: SLIS.
DATA: X_FIELDCAT TYPE SLIS_FIELDCAT_ALV,
      IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
      L_LAYOUT type slis_layout_alv,
      x_events type slis_alv_event,
      it_events type SLIS_T_EVENT.

DATA: BEGIN OF ITAB OCCURS 0,
      VBELN LIKE VBAK-VBELN,
      POSNR LIKE VBAP-POSNR,
      CHK(1),
     END OF ITAB.

SELECT VBELN
       POSNR
       FROM VBAP
       UP TO 20 ROWS
       INTO TABLE ITAB.

X_FIELDCAT-FIELDNAME = 'CHK'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = 1.
X_FIELDCAT-INPUT = 'X'.
X_FIELDCAT-EDIT = 'X'.
X_FIELDCAT-CHECKBOX = 'X'.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.

X_FIELDCAT-FIELDNAME = 'VBELN'.
X_FIELDCAT-SELTEXT_L = 'VBELN'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = 2.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.

X_FIELDCAT-FIELDNAME = 'POSNR'.
X_FIELDCAT-SELTEXT_L = 'POSNR'.
X_FIELDCAT-TABNAME = 'ITAB'.
X_FIELDCAT-COL_POS = 3.
APPEND X_FIELDCAT TO IT_FIELDCAT.
CLEAR X_FIELDCAT.
L_LAYOUT-window_titlebar = 'Popup window'.

  x_events-NAME = SLIS_EV_END_OF_PAGE.
  x_events-FORM = 'END_OF_PAGE'.
  APPEND x_events  TO iT_EVENTS.
  CLEAR x_events .
  x_events-NAME = SLIS_EV_TOP_OF_PAGE.
  x_events-FORM = 'TOP_OF_PAGE'.
  APPEND x_events  TO iT_EVENTS.
  CLEAR x_events .
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
  EXPORTING
    I_CALLBACK_PROGRAM       = SY-REPID
    IS_LAYOUT                = L_LAYOUT
    <b>I_CALLBACK_PF_STATUS_SET = 'STATUS'</b>
    <b>I_CALLBACK_USER_COMMAND  = 'USER_COMMAND'</b>
    IT_FIELDCAT              = IT_FIELDCAT
    it_events                = it_events
*    I_SCREEN_START_COLUMN    = 10
*    I_SCREEN_START_LINE      = 1
*    I_SCREEN_END_COLUMN      = 50
*    I_SCREEN_END_LINE        = 20
  TABLES
    T_OUTTAB                 = ITAB
  EXCEPTIONS
    PROGRAM_ERROR            = 1
    OTHERS                   = 2.
IF SY-SUBRC <> 0.
  MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.

FORM TOP_OF_PAGE.
* BREAK-POINT.
  WRITE: / 'TOP_OF_PAGE'.
ENDFORM.

FORM END_OF_PAGE.
* BREAK-POINT.
  WRITE: / 'END_OF_PAGE'.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  STATUS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_EXTAB    text
*----------------------------------------------------------------------*
<b>FORM STATUS USING P_EXTAB TYPE SLIS_T_EXTAB.
*- Pf status double click and add 
*- enable F2 key give PICK to that as Fucntion code
  SET PF-STATUS 'STATUS' excluding p_extab.
ENDFORM.                 " STATUS</b>
*&---------------------------------------------------------------------*
*&      Form  USER_COMMAND
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->R_UCOMM      text
*      -->RS_SELFIELD  text
*----------------------------------------------------------------------*
<b>FORM USER_COMMAND USING R_UCOMM     LIKE SY-UCOMM
                               RS_SELFIELD TYPE SLIS_SELFIELD.

  case r_ucomm.
    when 'BACK' or 'CANC' or 'EXIT'.
      leave to screen 0.
    when '&IC1'.
       if rs_selfield-fieldname = 'VBELN'.
      set parameter id 'AUN' field rs_selfield-value.
      call transaction 'VA03' and skip first screen.
      endif.
  endcase.
ENDFORM.                    "USER_COMMAND</b>

Regards

vijay