You are on page 1of 14

SAP R/3 Release 4.

7
Exercises: ABAP List Viewer

SAP Development ABAP Training

Chapter 1
Exercise 1.1
Create a program that uses REUSE_ALV_LIST_DISPLAY function module to show Airline and
Flight Schedule from SCARR (Airline) and SPFLI (Flight schedule).
1. Populate the Field Catalog before calling the AVL List display function module.
2. Display the following columns in the output.

Solution: Follow the standard SAP program BALVSD03.


REPORT YALVXX01_1.
* Data declaration
TYPE-POOLS: SLIS.
* Global structure of list
TYPES:
BEGIN OF UD_STRUCT,
SCARR LIKE SCARR,
SPFLI LIKE SPFLI,
END OF UD_STRUCT.
TABLES: SCARR, SPFLI.
DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: GT_OUTTAB TYPE UD_STRUCT OCCURS 0 WITH HEADER LINE.
DATA: G_REPID LIKE SY-REPID.
* Initialization fieldcatalog
INITIALIZATION.
G_REPID = SY-REPID.
PERFORM FIELDCAT_INIT USING GT_FIELDCAT[].
* Data selection
START-OF-SELECTION.
PERFORM SELECT_DATA TABLES GT_OUTTAB.
* Display list
END-OF-SELECTION.
March 2005
Page 1

SAP R/3 Release 4.7


Exercises: ABAP List Viewer

SAP Development ABAP Training

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'


EXPORTING
I_CALLBACK_PROGRAM = G_REPID
IT_FIELDCAT
= GT_FIELDCAT[]
TABLES
T_OUTTAB
= GT_OUTTAB.
*----------------------------------------------------------------------* Forms
*----------------------------------------------------------------------* Initialization fieldcatalog
FORM FIELDCAT_INIT
USING RT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
DATA: POS TYPE I VALUE 1.
clear ls_fieldcat.
LS_FIELDCAT-COL_POS
= POS.
LS_FIELDCAT-FIELDNAME
= 'SCARR-CARRID'.
ls_fieldcat-ref_fieldname
= 'CARRID'.
LS_FIELDCAT-REF_TABNAME = 'SCARR'.
LS_FIELDCAT-KEY
= 'X'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS
= POS.
LS_FIELDCAT-FIELDNAME = 'SCARR-CARRNAME'.
ls_fieldcat-ref_fieldname = 'CARRNAME'.
LS_FIELDCAT-REF_TABNAME = 'SCARR'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS
= POS.
LS_FIELDCAT-FIELDNAME = 'SPFLI-CONNID'.
ls_fieldcat-ref_fieldname = 'CONNID'.
LS_FIELDCAT-REF_TABNAME = 'SPFLI'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS
= POS.
LS_FIELDCAT-FIELDNAME = 'SPFLI-CITYFROM'.
March 2005
Page 2

SAP R/3 Release 4.7


Exercises: ABAP List Viewer

SAP Development ABAP Training

ls_fieldcat-ref_fieldname = 'CITYFROM'.
LS_FIELDCAT-REF_TABNAME = 'SPFLI'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS
= POS.
LS_FIELDCAT-FIELDNAME = 'SPFLI-AIRPFROM'.
ls_fieldcat-ref_fieldname = 'AIRPFROM'.
LS_FIELDCAT-REF_TABNAME = 'SPFLI'.
LS_FIELDCAT-NO_OUT
= 'X'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS
= POS.
LS_FIELDCAT-FIELDNAME = 'SPFLI-CITYTO'.
ls_fieldcat-ref_fieldname = 'CITYTO'.
LS_FIELDCAT-REF_TABNAME = 'SPFLI'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS
= POS.
LS_FIELDCAT-FIELDNAME = 'SPFLI-AIRPTO'.
ls_fieldcat-ref_fieldname = 'AIRPTO'.
LS_FIELDCAT-REF_TABNAME = 'SPFLI'.
LS_FIELDCAT-NO_OUT
= 'X'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS
= POS.
LS_FIELDCAT-FIELDNAME = 'SPFLI-DEPTIME'.
ls_fieldcat-ref_fieldname = 'DEPTIME'.
LS_FIELDCAT-REF_TABNAME = 'SPFLI'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS
= POS.
LS_FIELDCAT-FIELDNAME = 'SPFLI-ARRTIME'.
ls_fieldcat-ref_fieldname = 'ARRTIME'.
LS_FIELDCAT-REF_TABNAME = 'SPFLI'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS
= POS.
LS_FIELDCAT-FIELDNAME = 'SPFLI-DISTANCE'.
March 2005
Page 3

SAP R/3 Release 4.7


Exercises: ABAP List Viewer

SAP Development ABAP Training

ls_fieldcat-ref_fieldname = 'DISTANCE'.
LS_FIELDCAT-REF_TABNAME = 'SPFLI'.
LS_FIELDCAT-NO_OUT
= 'X'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
clear ls_fieldcat.
POS = POS + 1.
LS_FIELDCAT-COL_POS
= POS.
LS_FIELDCAT-FIELDNAME = 'SPFLI-DISTID'.
ls_fieldcat-ref_fieldname = 'DISTID'.
LS_FIELDCAT-REF_TABNAME = 'SPFLI'.
LS_FIELDCAT-NO_OUT
= 'X'.
APPEND LS_FIELDCAT TO RT_FIELDCAT.
ENDFORM. "fieldcat_init
* Data selection
FORM SELECT_DATA
TABLES RT_OUTTAB LIKE GT_OUTTAB[].
SELECT DISTINCT SCARR~CARRID SCARR~CARRNAME
SPFLI~CONNID SPFLI~CITYFROM
SPFLI~AIRPFROM SPFLI~CITYTO
SPFLI~AIRPTO SPFLI~DEPTIME
SPFLI~ARRTIME SPFLI~DISTANCE
SPFLI~DISTID
INTO (RT_OUTTAB-SCARR-CARRID, RT_OUTTAB-SCARR-CARRNAME,
RT_OUTTAB-SPFLI-CONNID, RT_OUTTAB-SPFLI-CITYFROM,
RT_OUTTAB-SPFLI-AIRPFROM, RT_OUTTAB-SPFLI-CITYTO,
RT_OUTTAB-SPFLI-AIRPTO, RT_OUTTAB-SPFLI-DEPTIME,
RT_OUTTAB-SPFLI-ARRTIME, RT_OUTTAB-SPFLI-DISTANCE,
RT_OUTTAB-SPFLI-DISTID)
FROM SCARR INNER JOIN SPFLI
ON SCARR~CARRID = SPFLI~CARRID
WHERE SCARR~CARRID BETWEEN 'AA' AND 'LH'.
APPEND RT_OUTTAB.
ENDSELECT.
ENDFORM. " select_data

March 2005
Page 4

SAP R/3 Release 4.7


Exercises: ABAP List Viewer

SAP Development ABAP Training

The output should be displayed as follows:

Exercise 1.2
Create a program that uses REUSE_ALV_GRID_DISPLAY function module to show the content
of YCONCERT table.
1. Modify the program so that the report displays a title Concert Information as report title.
2. Change the display position of CDATE as column 1 and ARTIST as column 2.
3. Do not show the column MAXSEATS in the output.
4. Optimize width of the output columns.
Solution:
*&---------------------------------------------------------------------*
*& Report YALVXX01_2
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT YALVXX01_2.

March 2005
Page 5

SAP R/3 Release 4.7


Exercises: ABAP List Viewer

SAP Development ABAP Training

* Data declaration
TYPE-POOLS: SLIS.
DATA : BEGIN OF GT_OUTTAB occurs 0,
ARTIST LIKE YCONCERT-ARTIST, " Artist Name
CDATE LIKE YCONCERT-CDATE, " Concert Date
OCCUPIED LIKE YCONCERT-OCCUPIED, " Occupied Seats
MAXSEATS LIKE YCONCERT-MAXSEATS, " Maximum Seats
LOCATION LIKE YCONCERT-LOCATION, " Concert Location
PRICE LIKE YCONCERT-PRICE, " Price of Concert Ticket
END OF GT_OUTTAB.
DATA: GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.
DATA: G_REPID LIKE SY-REPID.
DATA: wa_layout TYPE slis_layout_alv, "ALV Layout
* Initialization fieldcatalog
INITIALIZATION.
G_REPID = SY-REPID.
* Preapare the Field Catalog
PERFORM FIELDCAT_INIT USING GT_FIELDCAT[].
* Customize the Layout
wa_layout-Colwidth_optimize = 'X'.
* Data selection
START-OF-SELECTION.
PERFORM SELECT_DATA TABLES GT_OUTTAB.
* Display Grid output
END-OF-SELECTION.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK
=''
* I_BYPASSING_BUFFER
=''
* I_BUFFER_ACTIVE
=''
I_CALLBACK_PROGRAM
= G_REPID
* I_CALLBACK_PF_STATUS_SET
=''
* I_CALLBACK_USER_COMMAND
=''
* I_CALLBACK_TOP_OF_PAGE
=''
* I_CALLBACK_HTML_TOP_OF_PAGE
=''
* I_CALLBACK_HTML_END_OF_LIST
=''
* I_STRUCTURE_NAME
=
* I_BACKGROUND_ID
=''
* I_GRID_TITLE
=
* I_GRID_SETTINGS
=
March 2005
Page 6

SAP R/3 Release 4.7


Exercises: ABAP List Viewer

SAP Development ABAP Training

IS_LAYOUT
= WA_LAYOUT
IT_FIELDCAT
= GT_FIELDCAT[]
* IT_EXCLUDING
=
* IT_SPECIAL_GROUPS
=
* IT_SORT
=
* IT_FILTER
=
* IS_SEL_HIDE
=
* I_DEFAULT
= 'X'
* I_SAVE
=''
* IS_VARIANT
=
* IT_EVENTS
=
* IT_EVENT_EXIT
=
* IS_PRINT
=
* IS_REPREP_ID
=
* I_SCREEN_START_COLUMN
=0
* I_SCREEN_START_LINE
=0
* I_SCREEN_END_COLUMN
=0
* I_SCREEN_END_LINE
=0
* I_HTML_HEIGHT_TOP
=0
* I_HTML_HEIGHT_END
=0
* IT_ALV_GRAPHICS
=
* IT_HYPERLINK
=
* IT_ADD_FIELDCAT
=
* IT_EXCEPT_QINFO
=
* IR_SALV_FULLSCREEN_ADAPTER
=
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER
=
* ES_EXIT_CAUSED_BY_USER
=
TABLES
T_OUTTAB
= GT_OUTTAB
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.
*----------------------------------------------------------------------* Forms
*----------------------------------------------------------------------* Initialization fieldcatalog
FORM FIELDCAT_INIT
USING RT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

March 2005
Page 7

SAP R/3 Release 4.7


Exercises: ABAP List Viewer

SAP Development ABAP Training

DATA: LS_FIELDCAT TYPE SLIS_FIELDCAT_ALV.


CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME
= G_REPID
I_INTERNAL_TABNAME
= 'GT_OUTTAB'
* I_STRUCTURE_NAME
=
* I_CLIENT_NEVER_DISPLAY
= 'X'
I_INCLNAME
= G_REPID
* I_BYPASSING_BUFFER
=
* I_BUFFER_ACTIVE
=
CHANGING
CT_FIELDCAT
= RT_FIELDCAT
EXCEPTIONS
INCONSISTENT_INTERFACE
=1
PROGRAM_ERROR
=2
OTHERS
=3
.
IF SY-SUBRC = 0.
* Set CDATE at Column 1
LS_FIELDCAT-COL_POS = 1.
modify RT_FIELDCAT from LS_FIELDCAT transporting COL_POS
where FIELDNAME = 'CDATE'.
* Set ARTIST at Column 2
LS_FIELDCAT-COL_POS = 2.
modify RT_FIELDCAT from LS_FIELDCAT transporting COL_POS
where FIELDNAME = 'ARTIST'.
* Hide MAXSEATS in the Output
LS_FIELDCAT-NO_OUT = 'X'.
modify RT_FIELDCAT from LS_FIELDCAT transporting NO_OUT
where FIELDNAME = 'MAXSEATS'.
ELSE.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.
FORM SELECT_DATA TABLES RT_OUTTAB LIKE GT_OUTTAB[].
SELECT ARTIST " Artist Name
CDATE
" Concert Date
OCCUPIED " Occupied Seats
MAXSEATS " Maximum Seats
March 2005
Page 8

SAP R/3 Release 4.7


Exercises: ABAP List Viewer

SAP Development ABAP Training

LOCATION " Concert Location


PRICE
" Price of Concert Ticket
from YCONCERT " Concert Table
into table GT_OUTTAB.
ENDFORM.

The output should be displayed as follows:

Chapter 4
Exercise 4.1
Create a simple dialog program to display Plane information.
Following are the specifications:
Launch via transaction code
Display all columns from table SAPLANE
Display rows based on user input Aircraft Type (PLANETYPE)
Use single screen to display data with menu controls to back out of the screen
Use custom control to display the data in SAP List Viewer (ALV) format
Solution:

March 2005
Page 9

SAP R/3 Release 4.7


Exercises: ABAP List Viewer

SAP Development ABAP Training

Program: SAPMZOBJALVDEMO1
Transaction code: YALVDEMOOBJ1
Top Include:
*&---------------------------------------------------------------------*
*& Include MZDEMOOBJALVTOP
Module pool
SAPMZDEMOOBJALV
*&
*&---------------------------------------------------------------------*
PROGRAM SAPMZDEMOOBJALV.
* Flight schedule
TABLES: SPFLI.
* Class Definitions
CLASS application Definition.
PUBLIC SECTION.
METHODS: constructor,
read_data IMPORTING l_carrid TYPE spfli-carrid,
fill_list.
PROTECTED SECTION.
PRIVATE SECTION.
DATA:
* Internal table for the SPFLI database table data
spfli_tab TYPE table of spfli,
* Interface to the table control area defined in the screen layout
container type ref to cl_gui_custom_container,
alv_list type ref to cl_gui_alv_grid.
endclass.

"application DEFINITION

* Class Implementations
CLASS application Implementation.
method constructor.
create object container Exporting container_name = 'LIST_AREA'.
create object alv_list Exporting i_parent = container.
CALL METHOD alv_list->set_table_for_first_display
EXPORTING
i_structure_name = 'SPFLI'
March 2005
Page 10

SAP R/3 Release 4.7


Exercises: ABAP List Viewer

CHANGING
it_outtab

SAP Development ABAP Training

= spfli_tab.

endmethod.

"constructor

method read_data.
select * from spfli into table spfli_tab
where carrid = l_carrid.
endmethod.

"read_data

method fill_list.
call method alv_list->refresh_table_display.
endmethod.
"fill_list
ENDClass.

"application IMPLEMENTATION

* Define a data object as a pointer to the class application.


data: object_ref type ref to application.
data: first_time VALUE 'Y'. " flag for first time or not

PBO Module:
*----------------------------------------------------------------------*
***INCLUDE MZDEMOOBJALV_STATUS_9000O01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&
Module STATUS_9000 OUTPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE STATUS_9000 OUTPUT.
* Check if this is the first time
if first_time = 'Y'.
* If yes create the Object
create object object_ref.
endif.
* Turn off first time switch
first_time = 'N'.
SET PF-STATUS 'SCREEN_9000'.
* Output data to the screen table control
call method object_ref->fill_list.
ENDMODULE.

" STATUS_9000 OUTPUT


March 2005
Page 11

SAP R/3 Release 4.7


Exercises: ABAP List Viewer

SAP Development ABAP Training

PAI Module:
*----------------------------------------------------------------------*
***INCLUDE MZDEMOOBJALV_USER_COMMAND_9I01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&
Module USER_COMMAND_9000 INPUT
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_9000 INPUT.
* Check user response
if sy-ucomm = 'BACK'
or sy-ucomm = 'CANCEL'
or sy-ucomm = 'EXIT'.
LEAVE PROGRAM.
else.
* Retrieve the data
call method object_ref->read_data
EXPORTING
l_carrid = spfli-carrid.
endif.
ENDMODULE.
" USER_COMMAND_9000 INPUT

March 2005
Page 12

SAP R/3 Release 4.7


Exercises: ABAP List Viewer

SAP Development ABAP Training

Screen Layout:

Screen Flow logic:


PROCESS BEFORE OUTPUT.
MODULE STATUS_9000.
PROCESS AFTER INPUT.
March 2005
Page 13

SAP R/3 Release 4.7


Exercises: ABAP List Viewer

SAP Development ABAP Training

MODULE USER_COMMAND_9000.

The Output should look as follows:

March 2005
Page 14

You might also like