SAP Database - The Unofficial SAP Knowledge Base

Free Business and Tech Magazines and eBooks

ABAP Programs:Sample dialog program (flight reservation)

Print This Post Email This Post Written by admin on Jan 17th, 2008 | Filed under: ABAP Programs

* This program source contains all modules and subroutines of the
* flight reservation program, but screen and GUI status definitions
* are not included.
*&———————————————————————*

*&———————————————————————*
*& Include MSABBTOP Modulpool SAPMSABB *
*& *
*&———————————————————————*
PROGRAM SAPMSABB MESSAGE-ID SU.

* Database tables
TABLES:
PLANFLI, ” Flight connections
ACTFLI, ” Dates of flights
CUSTOMERS, ” Customer data
BOOKINGS. ” Booking informations

* User defined types
TYPES:
BOOLEAN TYPE C, ” true = ‘X’, false otherwise
SCREEN_CODE LIKE SY-DYNNR,
STATUS_CODE LIKE SY-PFKEY,
TITLEBAR_CODE(3) TYPE N,
FUNCTION_CODE(4) TYPE C.

DATA:
* Global data
FCODE TYPE FUNCTION_CODE,
FLAG_FOUND TYPE BOOLEAN,
FLAG_KEEP_INPUT TYPE BOOLEAN,

* Screen fields which do not come from the dictionary
SEATS_FREE TYPE I,
SEATS_REQUIRED TYPE I.

DATA:
* table of all customers
ALL_CUSTOMERS LIKE CUSTOMERS OCCURS 100
WITH HEADER LINE.

CONSTANTS:
* Boolean constants
TRUE TYPE C VALUE ‘X’,
FALSE TYPE C VALUE ‘ ‘,

* Screen codes
C_SCREEN_REQUEST TYPE SCREEN_CODE VALUE ‘0100′,
C_SCREEN_BOOKING TYPE SCREEN_CODE VALUE ‘0200′,

* Status codes
C_STATUS_REQUEST TYPE STATUS_CODE VALUE ‘REQUEST’,
C_STATUS_BOOKING TYPE STATUS_CODE VALUE ‘BOOKING’,
C_STATUS_LIST TYPE STATUS_CODE VALUE ‘LIST’,

* Titlebar codes
C_TITLE_REQUEST TYPE TITLEBAR_CODE VALUE ‘100′,
C_TITLE_BOOKING TYPE TITLEBAR_CODE VALUE ‘200′,
C_TITLE_LIST_CUSTOMERS TYPE TITLEBAR_CODE VALUE ‘110′,

* Function codes
C_FCODE_REQUEST TYPE FUNCTION_CODE VALUE ‘REQU’,
C_FCODE_BOOKING TYPE FUNCTION_CODE VALUE ‘BOOK’,
C_FCODE_CLEAR TYPE FUNCTION_CODE VALUE ‘CLEA’,
C_FCODE_BACK TYPE FUNCTION_CODE VALUE ‘BACK’,
C_FCODE_EXIT TYPE FUNCTION_CODE VALUE ‘EXIT’.

*———————————————————————–
***INCLUDE MSABBI01 .
*———————————————————————–

*&———————————————————————*
*& Module EXIT_SCREEN INPUT
*&———————————————————————*
* Handles back, exit, and clear command. *
*———————————————————————-*
MODULE EXIT_SCREEN INPUT.
CASE FCODE.
WHEN C_FCODE_Clear.
* Just clear the input fields
CASE SY-DYNNR.
WHEN c_screen_request. CLEAR: PLANFLI, ACTFLI.
WHEN C_SCREEN_BOOKING. CLEAR CUSTOMERS.
SEATS_REQUIRED = 1.
ENDCASE.
WHEN C_FCODE_BACK.
* Switch to previous screen.
CASE SY-DYNNR.
WHEN c_screen_request. SET SCREEN 0.
WHEN C_SCREEN_BOOKING. FLAG_KEEP_INPUT = FALSE.
SET SCREEN c_screen_request.
ENDCASE.
WHEN C_FCODE_EXIT.
* Exit program
SET SCREEN 0.
ENDCASE.
LEAVE SCREEN.
ENDMODULE. ” EXIT_SCREEN INPUT

*&———————————————————————*
*& Module ACTION_REQUEST INPUT
*&———————————————————————*
* Check input data to represent a valid flight connection. *
*———————————————————————-*
MODULE ACTION_REQUEST INPUT.
CASE FCODE.
WHEN C_FCODE_REQUEST.
* Check for a valid connection
PERFORM FLIGHT_REQUEST CHANGING FLAG_FOUND.

IF FLAG_FOUND = FALSE.
MESSAGE E001. ” Flight connection not available
ELSE.
SET SCREEN 200. ” Next screen: entering customer data
LEAVE SCREEN.
ENDIF.
ENDCASE.
ENDMODULE. ” ACTION_REQUEST INPUT

*&———————————————————————*
*& Module ACTION_BOOKING INPUT
*&———————————————————————*
* Get customer data to make the booking. *
*———————————————————————-*
MODULE ACTION_BOOKING INPUT.
CASE FCODE.
WHEN C_FCODE_BOOKING.
* Make the booking
PERFORM FLIGHT_BOOKING.

* Return to previous screen for another request.
FLAG_KEEP_INPUT = FALSE.
SET SCREEN C_SCREEN_REQUEST.
LEAVE SCREEN.
ENDCASE.
ENDMODULE. ” ACTION_BOOKING INPUT

*&———————————————————————*
*& Module VALUES_CUSTOMERS INPUT
*&———————————————————————*
* Display list of customers *
*———————————————————————-*
MODULE VALUES_CUSTOMERS INPUT.
* Display all customers in a dialog box
CALL SCREEN 110
STARTING AT 10 10
ENDING AT 30 20.
ENDMODULE. ” VALUES_CUSTOMERS INPUT

*&———————————————————————*
*& Module ACTION_LIST INPUT
*&———————————————————————*
* Write list of customers *
*———————————————————————-*
MODULE ACTION_LIST INPUT.

* Read all customers
SELECT * FROM CUSTOMERS INTO TABLE ALL_CUSTOMERS.

* Write all customers
NEW-PAGE NO-TITLE.
LOOP AT ALL_CUSTOMERS.
WRITE / ALL_CUSTOMERS-NAME.
HIDE ALL_CUSTOMERS-ID.
ENDLOOP.

ENDMODULE. ” ACTION_LIST INPUT

*——————————————————————-
***INCLUDE MSABBO01 .
*——————————————————————-

*&———————————————————————*
*& Module INIT_REQUEST OUTPUT
*&———————————————————————*
* Initializes titlebar and status of the screen for a flight *
* request. *
*———————————————————————-*
MODULE INIT_REQUEST OUTPUT.
* Initialize titlebar and status
SET TITLEBAR C_TITLE_REQUEST.
SET PF-STATUS C_STATUS_REQUEST.
ENDMODULE. ” INIT_REQUEST OUTPUT

*&———————————————————————*
*& Module INIT_BOOKING OUTPUT
*&———————————————————————*
* Initializes titlebar and status of the screen for a flight *
* request. The fields for the number of free and required seats *
* and for the customer’s data are initialized. *
*———————————————————————-*
MODULE INIT_BOOKING OUTPUT.
* Initialize titlebar and status
SET TITLEBAR C_TITLE_BOOKING.
SET PF-STATUS C_STATUS_BOOKING.

* Get number of seats free
SEATS_FREE = ACTFLI-SEATSMAX – ACTFLI-SEATSOCC.

* While processing the booking screen, the contents of the
* input fields are kept, e.g. if ENTER is pressed.
IF FLAG_KEEP_INPUT = FALSE.
CLEAR CUSTOMERS.
SEATS_REQUIRED = 1.
FLAG_KEEP_INPUT = TRUE. ” kept while processing the screen
ENDIF.
ENDMODULE. ” INIT_BOOKING OUTPUT
*&———————————————————————*
*& Module INIT_LIST OUTPUT
*&———————————————————————*
* Write list of customers *
*———————————————————————-*
MODULE INIT_LIST OUTPUT.

* Initialize titlebar and status
SET TITLEBAR C_TITLE_LIST_CUSTOMERS.
SET PF-STATUS C_STATUS_LIST.

* Prepare list
SUPPRESS DIALOG.
LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 0.

ENDMODULE. ” INIT_LIST OUTPUT

*——————————————————————-
***INCLUDE MSABBF01 .
*——————————————————————-

*&———————————————————————*
*& Form FLIGHT_REQUEST
*&———————————————————————*
* Check for a valid connection *
*———————————————————————-*
FORM FLIGHT_REQUEST CHANGING F_FLAG_FOUND TYPE BOOLEAN.

* First check for a valid connection, i.e. check if carrier CARRID
* offers a flight starting in city CITYFROM with destination CITYTO.
F_FLAG_FOUND = FALSE.
SELECT * FROM PLANFLI
WHERE CARRID = PLANFLI-CARRID
AND CITYFROM = PLANFLI-CITYFROM
AND CITYTO = PLANFLI-CITYTO.

* Then check if the connection is also offered for the
* specified date.
SELECT SINGLE * FROM ACTFLI
WHERE CARRID = PLANFLI-CARRID
AND CONNID = PLANFLI-CONNID
AND FLDATE = ACTFLI-FLDATE.
IF SY-SUBRC = 0.
F_FLAG_FOUND = TRUE.
EXIT.
ENDIF.
ENDSELECT.
ENDFORM. ” FLIGHT_REQUEST

*&———————————————————————*
*& Form FLIGHT_BOOKING
*&———————————————————————*
* Insert the booking into database tables *
*———————————————————————-*
FORM FLIGHT_BOOKING.

DATA: L_CUSTOMERS LIKE CUSTOMERS OCCURS 10
WITH HEADER LINE,
L_LINE_COUNT TYPE I,
L_INDEX LIKE SY-TABIX.

* 1. Check if seats are available
IF SEATS_REQUIRED > SEATS_FREE.
MESSAGE E003 WITH SEATS_FREE. ” Not enough seats
endif.

* 2. Booking is only allowed for registered customers. Thus,
* check if a customer id is available in table CUSTOMERS.
SELECT * FROM CUSTOMERS INTO TABLE L_CUSTOMERS
WHERE NAME = CUSTOMERS-NAME.

* Check number of matching entries
DESCRIBE TABLE L_CUSTOMERS LINES L_LINE_COUNT.
IF L_LINE_COUNT = 0.
message e004 with customers-name. ” Customer id not available
ELSEIF L_LINE_COUNT > 1.
* Process dialog to select the appropriate customer
… ” To be implemented: sets L_INDEX
endif.

L_INDEX = 1. ” Must be deleted if L_INDEX is set above
READ TABLE L_CUSTOMERS INDEX L_INDEX.
IF SY-SUBRC <> 0.
MESSAGE A006. ” Internal booking error: missing entry
ENDIF.

* 3. Update bookings information in table BOOKINGS
MOVE-CORRESPONDING ACTFLI TO BOOKINGS.
PERFORM SET_BOOKID CHANGING BOOKINGS-BOOKID.
BOOKINGS-CUSTOMID = L_CUSTOMERS-ID.
BOOKINGS-ORDER_DATE = SY-DATUM.

INSERT BOOKINGS. ” Optional: call function in update task
IF SY-SUBRC <> 0.
MESSAGE A005. ” Internal booking error: duplicate entries
ENDIF.

* 4. Update number of occupied seats in table ACTFLI
ADD SEATS_REQUIRED TO ACTFLI-SEATSOCC.
UPDATE ACTFLI. ” Optional: call function in update task
IF SY-SUBRC <> 0.
MESSAGE A006. ” Internal booking error: missing entry
ENDIF.

* Optional: using an update task
* call function ‘ABAP_BOOK_INSERT_BOOKINGS’
* in update task
* exporting
* i_bookings = bookings
* i_actfli = actfli.
* commit work.

* 5. Message: booking successful for customer …
MESSAGE I002 WITH ACTFLI-CONNID CUSTOMERS-NAME.

ENDFORM. ” FLIGHT_BOOKING

*&———————————————————————*
*& Form SET_BOOKID
*&———————————————————————*
* Determine a new booking id. *
*———————————————————————-*
FORM SET_BOOKID CHANGING F_BOOKID LIKE BOOKINGS-BOOKID.

* Get maximum bookid and increment it by 1
SELECT MAX( BOOKID ) INTO (F_BOOKID) FROM BOOKINGS.
ADD 1 TO F_BOOKID.
ENDFORM. ” SET_BOOKID

*——————————————————————-
***INCLUDE MSABBE01 .
*——————————————————————-

*&———————————————————————*
*& Event AT LINE-SELECTION
*&———————————————————————*

at line-selection.
* Get selected customer and display name
read table all_customers with key id = all_customers-id.
if sy-subrc = 0.
customers-name = all_customers-name.
endif.
leave to screen 0.

If you like this post, you may as well like these too:

  1. ABAP Program: Sample program for OLE Automation REPORT ZSOURCE2801. * Including OLE types INCLUDE OLE2INCL. * Tables and variables for later use TABLES: CUSTOMERS. DATA: APPLICATION TYPE OLE2_OBJECT, WORKBOOK TYPE OLE2_OBJECT, SHEET TYPE OLE2_OBJECT, CELLS TYPE...
  2. ABAP Programs: Sample report with selection criteria REPORT ZSOURCE1801. TABLES: CUSTOMERS, BOOKINGS. PARAMETERS P_DATE TYPE D. SELECT-OPTIONS S_NAME FOR CUSTOMERS-NAME. SELECT * FROM CUSTOMERS WHERE NAME IN S_NAME. WRITE / CUSTOMERS-NAME. SELECT * FROM BOOKINGS WHERE ORDER_DATE...
  3. ABAP Program : Working with Temporary Programs Ever had a need to create a temporary program during the run time. Here is a simple program which will allow you to learn that. REPORT ZSOURCE2501. * Internal table...
  4. ABAP Sample Codes Download a huge collection of  on: ABAP Code Sample Business Scenario For PerFormance Issues Of HR Positions Holders ABAP Code Sample CAPTCHA For BSP Application s ABAP Code Sample Data...
  5. Dialog Programming / Module Pool Dialog Programming / Module Pool A Module Pool also called as Dialog Program is a ABAP Program of type “M” that requires at least one transaction code in order to...



This website uses IntenseDebate comments, but they are not currently loaded because either your browser doesn't support JavaScript, or they didn't load fast enough.

Leave a Reply

  • Subscribe to RSS

  • Free Ebooks