0% found this document useful (0 votes)
30 views13 pages

Alv Ida

ALV IDA (ALV with Integrated Data Access) is a reporting tool in SAP ABAP that optimizes performance by processing data-intensive operations in the database layer, particularly suited for large datasets in SAP HANA. The document outlines the steps for creating ALV IDA reports using CDS views and database tables, along with examples of handling selection options and double-click events. It includes full code snippets for implementing these functionalities in ABAP.

Uploaded by

manasagmansi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
30 views13 pages

Alv Ida

ALV IDA (ALV with Integrated Data Access) is a reporting tool in SAP ABAP that optimizes performance by processing data-intensive operations in the database layer, particularly suited for large datasets in SAP HANA. The document outlines the steps for creating ALV IDA reports using CDS views and database tables, along with examples of handling selection options and double-click events. It includes full code snippets for implementing these functionalities in ABAP.

Uploaded by

manasagmansi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 13

ALV_IDA

ALV →ABAP LIST VIEWER


IDA→ INTEGRATED DATA ACCESS

ALV IDA (ALV with Integrated Data Access) is a modern reporting tool in SAP ABAP
designed to leverage the capabilities of SAP HANA. It allows developers to create
high-performance, interactive reports by pushing data-intensive operations to the
database layer rather than processing them at the application server

Why ALV IDA?


❖​ Very large quantities of data to be displayed on the UI
❖​ Best suited to use in-memorydatabase(Hana).
❖​ No internal table concept
❖​ Best way to consume CDS

STEPS:
1.​ Get the reference of ALV table → CL_SALV_GUI_TABLE_IDA
2.​ Get the reference of ALV fullscreen —>IF_SALV_GUI_TABLE_IDA
3.​ Display the data —> IF_SALV_GUI_FULLSCREEN_IDA.

1.​ Using CDS Views:


●​ Create a CDS view .
●​ Use cl_salv_gui_table_ida=>create_for_cds_view to bind the CDS
view to ALV.
2.​ Using Database Tables:
●​ Directly use a database table or view.
●​ Use cl_salv_gui_table_ida=>create to create an ALV IDA instance.

Mullaiventhan M
[email protected]
1.DISPLAY ALL WITHOUT SELECT-OPTIONS

Mullaiventhan M
[email protected]
FULL CODE:
*&---------------------------------------------------------------------*
*& Report ZALV_IDA_PROG1
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZALV_IDA_PROG1.

DATA LV_MATNR TYPE MATNR.


SELECT-OPTIONS S_MATNR FOR LV_MATNR.

DATA O_aLV TYPE REF TO IF_SALV_GUI_TABLE_IDA.


DATA O_ALV_FN TYPE REF TO IF_SALV_GUI_FULLSCREEN_IDA.

START-OF-SELECTION.

* TRY.
CALL METHOD CL_SALV_GUI_TABLE_IDA=>CREATE
EXPORTING
IV_TABLE_NAME = 'MARA'
* IO_GUI_CONTAINER =
* IO_CALC_FIELD_HANDLER =
RECEIVING
RO_ALV_GUI_TABLE_IDA = O_aLV
.

* CATCH CX_SALV_DB_CONNECTION .
* CATCH CX_SALV_DB_TABLE_NOT_SUPPORTED .
* CATCH CX_SALV_IDA_CONTRACT_VIOLATION .
* ENDTRY.

IF O_ALV IS BOUND.

*TRY.
CALL METHOD O_ALV->FULLSCREEN
RECEIVING
RO_FULLSCREEN = O_ALV_FN
.
* CATCH CX_SALV_IDA_CONTRACT_VIOLATION .
*ENDTRY.

IF O_ALV_FN IS BOUND.

O_ALV_FN->DISPLAY( ).
ENDIF.

Mullaiventhan M
[email protected]
ENDIF.

2.WITH SELECT-OPTIONS.

●​ A range table is suitable for providing data selections from a selection


screen. recommend use the helper class CL_SALV_RANGE_TAB_COLLECTOR to
generate the range table

CODE:-
*&---------------------------------------------------------------------*
*& Report ZALV_IDA_PROG1
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZALV_IDA_PROG2.

DATA LV_MATNR TYPE MATNR.


SELECT-OPTIONS S_MATNR FOR LV_MATNR.

Mullaiventhan M
[email protected]
DATA O_aLV TYPE REF TO IF_SALV_GUI_TABLE_IDA.
DATA O_ALV_FN TYPE REF TO IF_SALV_GUI_FULLSCREEN_IDA.
DATA O_RANGE TYPE REF TO CL_SALV_RANGE_TAB_COLLECTOR.

START-OF-SELECTION.

* TRY.
CALL METHOD CL_SALV_GUI_TABLE_IDA=>CREATE
EXPORTING
IV_TABLE_NAME = 'MARA'
* IO_GUI_CONTAINER =
* IO_CALC_FIELD_HANDLER =
RECEIVING
RO_ALV_GUI_TABLE_IDA = O_aLV
.

* CATCH CX_SALV_DB_CONNECTION .
* CATCH CX_SALV_DB_TABLE_NOT_SUPPORTED .
* CATCH CX_SALV_IDA_CONTRACT_VIOLATION .
* ENDTRY.

IF O_ALV IS BOUND.

CREATE OBJECT O_RANGE.

O_RANGE->ADD_RANGES_FOR_NAME(
exporting
IV_NAME = 'MATNR'
IT_RANGES = S_MATNR[]
).

O_RANGE->GET_COLLECTED_RANGES(
importing
ET_NAMED_RANGES = DATA(SEL_OP)
).

IF SEL_OP IS NOT INITIAL.

O_aLV->SET_SELECT_OPTIONS(
exporting
IT_RANGES = SEL_OP[]
* IO_CONDITION =
).
* catch CX_SALV_IDA_ASSOCIATE_INVALID. "
* catch CX_SALV_DB_CONNECTION. "
* catch CX_SALV_IDA_CONDITION_INVALID. "
* catch CX_SALV_IDA_UNKNOWN_NAME. "

Mullaiventhan M
[email protected]
ENDIF.

*TRY.
CALL METHOD O_ALV->FULLSCREEN
RECEIVING
RO_FULLSCREEN = O_ALV_FN
.
* CATCH CX_SALV_IDA_CONTRACT_VIOLATION .
*ENDTRY.

IF O_ALV_FN IS BOUND.

O_ALV_FN->DISPLAY( ).
ENDIF.
ENDIF.

3.WITH DOUBLE_CLICK EVENT


Get reference of IF_SALV_GUI_TABLE_DISPLAY_OPT then enable the double_click
method.

Mullaiventhan M
[email protected]
CODE:
REPORT ZALV_IDA_PROG2.

DATA LV_MATNR TYPE MATNR.


SELECT-OPTIONS S_MATNR FOR LV_MATNR.

DATA O_aLV TYPE REF TO IF_SALV_GUI_TABLE_IDA.


DATA O_ALV_FN TYPE REF TO IF_SALV_GUI_FULLSCREEN_IDA.
DATA O_RANGE TYPE REF TO CL_SALV_RANGE_TAB_COLLECTOR.

"DOUBLE CLICK EVENT


DATA D_EVE TYPE REF TO IF_SALV_GUI_TABLE_DISPLAY_OPT.

Mullaiventhan M
[email protected]
CLASS LCL_EVENT DEFINITION.
PUBLIC SECTION.
METHODS HANDLER FOR EVENT DOUBLE_CLICK OF IF_SALV_GUI_TABLE_DISPLAY_OPT
IMPORTING EO_ROW_DATA EV_FIELD_NAME.

ENDCLASS.

CLASS LCL_eVENT IMPLEMENTATION.

METHOD HANDLER.

MESSAGE ' DOUBLECLICK IS TRIGERED' TYPE 'I'.

ENDMETHOD.

ENDCLASS.

DATA OB TYPE REF TO LCL_eVENT.

START-OF-SELECTION.

* TRY.
CALL METHOD CL_SALV_GUI_TABLE_IDA=>CREATE
EXPORTING
IV_TABLE_NAME = 'MARA'
* IO_GUI_CONTAINER =
* IO_CALC_FIELD_HANDLER =
RECEIVING
RO_ALV_GUI_TABLE_IDA = O_aLV
.

* CATCH CX_SALV_DB_CONNECTION .
* CATCH CX_SALV_DB_TABLE_NOT_SUPPORTED .
* CATCH CX_SALV_IDA_CONTRACT_VIOLATION .
* ENDTRY.

IF O_ALV IS BOUND.

CREATE OBJECT O_RANGE.

O_RANGE->ADD_RANGES_FOR_NAME(
exporting
IV_NAME = 'MATNR'
IT_RANGES = S_MATNR[]

Mullaiventhan M
[email protected]
).

O_RANGE->GET_COLLECTED_RANGES(
importing
ET_NAMED_RANGES = DATA(SEL_OP)
).

IF SEL_OP IS NOT INITIAL.

O_aLV->SET_SELECT_OPTIONS(
exporting
IT_RANGES = SEL_OP[]
* IO_CONDITION =
).
* catch CX_SALV_IDA_ASSOCIATE_INVALID. "
* catch CX_SALV_DB_CONNECTION. "
* catch CX_SALV_IDA_CONDITION_INVALID. "
* catch CX_SALV_IDA_UNKNOWN_NAME. "

ENDIF.

*TRY.
CALL METHOD O_ALV->FULLSCREEN
RECEIVING
RO_FULLSCREEN = O_ALV_FN
.
* CATCH CX_SALV_IDA_CONTRACT_VIOLATION .
*ENDTRY.
CALL METHOD O_ALV->DISPLAY_OPTIONS
RECEIVING
RO_DISPLAY_OPTIONS = D_eVE
.

IF D_eVE IS BOUND.
D_eVE->ENABLE_DOUBLE_CLICK( ).

ENDIF.

IF O_ALV_FN IS BOUND.

CREATE OBJECT OB.


SET HANDLER OB->HANDLER FOR ALL INSTANCES.
O_ALV_FN->DISPLAY( ).
ENDIF.
ENDIF.

Mullaiventhan M
[email protected]
3.1 EX: MARA TO MAKT (INTERACTIVE ALV_IDA)

CODE FOR (MARA TO MAKT) INTERATIVE ALV_IDA AS FOLLOWS;

REPORT ZALV_IDA_INT.

DATA LV_MATNR TYPE MATNR.


SELECT-OPTIONS S_MATNR FOR LV_MATNR.

DATA O_RANGE TYPE REF TO CL_SALV_RANGE_TAB_COLLECTOR.


DATA LS_MARA TYPE MARA.
CLASS LCL_HANDLER DEFINITION.

PUBLIC SECTION.
METHODS EVE_HANDLE FOR EVENT DOUBLE_CLICK OF IF_SALV_GUI_TABLE_DISPLAY_OPT
IMPORTING EO_ROW_DATA EV_FIELD_NAME.

ENDCLASS.
CLASS LCL_HANDLER IMPLEMENTATION.
METHOD EVE_HANDLE.

CASE EV_FIELD_NAME.
WHEN 'MATNR'.
* TRY.
CALL METHOD EO_ROW_DATA->GET_ROW_DATA
* EXPORTING
* IV_REQUEST_TYPE =
IF_SALV_GUI_SELECTION_IDA=>CS_REQUEST_TYPE-KEY_AND_REQUESTED_FIELDS
* ITS_REQUESTED_FIELDS =
IMPORTING
ES_ROW = LS_MARA
.
* CATCH CX_SALV_IDA_CONTRACT_VIOLATION .
* CATCH CX_SALV_IDA_SEL_ROW_DELETED .
* ENDTRY.

IF LS_MARA-MATNR IS NOT INITIAL.

CL_SALV_GUI_TABLE_IDA=>CREATE(
exporting

Mullaiventhan M
[email protected]
IV_TABLE_NAME = 'MAKT' " Name of table for database
access
* IO_GUI_CONTAINER = " Container for ALV display
* IO_CALC_FIELD_HANDLER = " IDA API: Handler for calculated
fields
receiving
RO_ALV_GUI_TABLE_IDA = DATA(O_ALV2) " ALV with integrated
data access (IDA)
).
* catch CX_SALV_DB_CONNECTION. "
* catch CX_SALV_DB_TABLE_NOT_SUPPORTED. "
* catch CX_SALV_IDA_CONTRACT_VIOLATION. "
IF O_aLV2 IS BOUND.

CALL METHOD O_ALV2->CONDITION_FACTORY


receiving
RO_CONDITION_FACTORY = DATA(O_COND_fAC)
.
IF O_COND_FAC IS BOUND.

CALL METHOD O_COND_FAC->EQUALS


exporting
NAME = 'MATNR'
VALUE = LS_MARA-MATNR
receiving
RO_CONDITION = DATA(O_CON)
.
* catch CX_SALV_IDA_UNKNOWN_NAME. "

ENDIF.

IF O_CON IS BOUND.

CALL METHOD O_ALV2->SET_SELECT_OPTIONS


exporting
* IT_RANGES =
IO_CONDITION = O_CON
.
* catch CX_SALV_IDA_ASSOCIATE_INVALID. "
* catch CX_SALV_DB_CONNECTION. "
* catch CX_SALV_IDA_CONDITION_INVALID. "
* catch CX_SALV_IDA_UNKNOWN_NAME. "

ENDIF.

CALL METHOD O_ALV2->FULLSCREEN

Mullaiventhan M
[email protected]
RECEIVING
RO_FULLSCREEN = DATA(O_FULLSCR2)
.
* CATCH CX_SALV_IDA_CONTRACT_VIOLATION .
*ENDTRY.
ENDIF.

IF O_FULLSCR2 IS BOUND.

O_FULLSCR2->DISPLAY( ).

ENDIF.
ENDIF.
WHEN OTHERS.
MESSAGE'CLICK ON MATNR' TYPE 'I'.

ENDCASE.
ENDMETHOD.

ENDCLASS.

DATA OB TYPE REF TO LCL_HANDLER.

START-OF-SELECTION.

cl_salv_gui_table_ida=>CREATE(
exporting
IV_TABLE_NAME = 'MARA' " Name of table for database
access
* IO_GUI_CONTAINER = " Container for ALV display
* IO_CALC_FIELD_HANDLER = " IDA API: Handler for calculated
fields
receiving
RO_ALV_GUI_TABLE_IDA = DATA(o_Alv) " ALV with integrated data
access (IDA)
).
* catch CX_SALV_DB_CONNECTION. "
* catch CX_SALV_DB_TABLE_NOT_SUPPORTED. "
* catch CX_SALV_IDA_CONTRACT_VIOLATION. "

IF O_aLV IS BOUND.

*TRY.
CALL METHOD O_ALV->FULLSCREEN
RECEIVING
RO_FULLSCREEN = DATA(O_FULLSCR)
.

Mullaiventhan M
[email protected]
* CATCH CX_SALV_IDA_CONTRACT_VIOLATION .
*ENDTRY.

IF S_MATNR IS NOT INITIAL.


CREATE OBJECT O_RANGE.

O_RANGE->ADD_RANGES_FOR_NAME(
exporting
IV_NAME = 'MATNR'
IT_RANGES = S_MATNR[]
).
CALL METHOD O_RANGE->GET_COLLECTED_RANGES
IMPORTING
ET_NAMED_RANGES = DATA(E_RANGE)
.
O_aLV->SET_SELECT_OPTIONS(
exporting
IT_RANGES = E_RANGE
* IO_CONDITION =
).
* catch CX_SALV_IDA_ASSOCIATE_INVALID. "
* catch CX_SALV_DB_CONNECTION. "
* catch CX_SALV_IDA_CONDITION_INVALID. "
* catch CX_SALV_IDA_UNKNOWN_NAME. "

ENDIF.

IF O_FULLSCR IS BOUND.

CALL METHOD O_aLV->DISPLAY_OPTIONS


receiving
RO_DISPLAY_OPTIONS = DATA(O_DIS)
.
IF O_DIS IS BOUND.

O_DIS->ENABLE_DOUBLE_CLICK( ).
CREATE OBJECT OB.
SET HANDLER OB->EVE_HANDLE FOR ALL INSTANCES.
ENDIF.
O_FULLSCR->DISPLAY( ).

ENDIF.

ENDIF.

Mullaiventhan M
[email protected]

You might also like