You are on page 1of 31

What Are Subroutines

REPORT YDEMOSB7. Calculate tax Calculate tax REPORT YDEMOSB8. Call calculated_tax Call calculated_tax

Subroutine Calculate_tax

August-2003

Modularization Techniques | 1.08

Modularization
REPORT YDEMOSB1.
Perform sub Perform sub(YDEMOSB1) Form sub Call Function ZZCALC

REPORT YDEMOSB2.

REPORT YDEMOSB3.

External Call
REPORT YDEMOSB1.
Form sub

FunctionModule Call
ABAP Function Builder
Function module ZZCALC

August-2003

Modularization Techniques | 1.08

Actual / Formal Parameters


Main Program
99 1

a1

a2

a3

Call Calculate_tax Transfer values of fields a1 a2 Get value of field a3

Actual parameters

a1

a2

a3

Parameter transfer

Formal parameters
Subroutine calculate_tax

f1

f2

f3

99 1 f1 f2 f3 f3 = f1 +f2 . . . .
August-2003 Modularization Techniques | 1.08 3

Methods of Passing Parameters


Pass by Value
a1

f1

Pass by Value and Result a1

Pass by Reference

a1

f1

f1
August-2003 Modularization Techniques | 1.08 4

Declaring and Calling a Subroutine - Pass by Value(1) & Reference(2)

August-2003

REPORT Y170D091. TABLES: .... DATA: . . . . PERFORM <name> USINGPass by value <a1> <a2> Pass by reference <a3> <a4>. <statements> . . Modularization Techniques | 1.08 5 .

Declaring and Calling a Subroutine - Pass by Value and Result(3)


REPORT YSDEM000. TABLES: ... . DATA: ... . . . . PERFORM <name> USING <a1> <a2> CHANGING<a3>. . . . FORM <name> USING VALUE(<f1>) VALUE(<f2>) CHANGING VALUE(<f3>). . . . f 3 =A. . . . ENDFORM.

Pass by value Pass by value and result

August-2003

Modularization Techniques | 1.08

Global versus Local Data


report y170dm86. data: num(9) value 999999999. data: id like tabna-id, name like tabna-name1. . . . <statements> perform sub1. . . . <statements>

Global Data

* ------------------------------------------------------------------------------------------------------------------------------------- * * FORM SUB1 *


* ------------------------------------------------------------------------------------------------------------------------------------*

Local Data

August-2003

form sub1. data: begin of tab occurs 10, id like tabna-id, name1 like tabna-name1, end of tab. local: num . . . . <statements> endform.

<----------- local data

<----------- local data

Modularization Techniques | 1.08

Local Data in Subroutines


Statement Value Upon Entering Value Upon Value Upon Entering between Subroutine First Time Returning to Subroutine Next FORM Main Program Time ENDFORM DATA Whatever the local If declared Re-initializes based
DATA statement initializes globally, returns to old value, otherwise not recognized If declared globally, returns to old value, otherwise not recognized on local DATA statement

STATICS

Whatever the local STATICS statement initializes

Last set value from inside subroutine

LOCAL
August-2003

Last set value from main program

Last set value from main Modularization Techniques | 1.08 program

Last set value from main program


8

Passing Structures as Parameters


REPORT Y170D095. TABLES: TABNA. DATA: ZTAB LIKE TABNA. DATA: FLAG. . . PERFORM SUB1 USING TABNA. PERFORM SUB1 USING ZTAB. . . .

This is passing the TABNA work area only

This is passing the ZTAB structure

FORM SUB1 USING REC STRUCTURE TABNA. WRITE: / REC-COUNTRY, REC-NAME1.


August-2003

ENDFORM.

Modularization Techniques | 1.08

Passing Internal Tables as Parameters


REPORT Y170D093. DATA : BEGIN OF TAB OCCURS 10, F1 LIKE TABNA-COUNTRY, F2 LIKE TABNA-NAME1, . . . END OF TAB. DATA : X. . . . PERFORM SUB1 TABLES TAB . USING X. . .
FORM SUB1 TABLES FRED STRUCTURE TAB USING Z. LOOP AT FRED. WRITE: / FRED-F1 FRED-F2. ENDLOOP. ENDFORM . Modularization Techniques | 1.08

August-2003

10

External Subroutines
PERFORM <name>(<prog name>) USING . . . REPORT Y170D096. TABLES : TABNA, T001, T005. . . . START-OF-SELECTION. . . . PERFORM SUB1(Y170D097) . . . . . . . REPORT Y170D097. TABLES : TABNA, T001, T001G. . . . START-OF-SELECTION . . . FORM SUB1 . . . . . . . NEW-PAGE. . . . ENDFORM

Roll Area
TABNA T001 T005 T001G Y170D108 Y170D109

Storage Allocation
11

August-2003

Modularization Techniques | 1.08

Function Modules
Function Builder
FM Group : FIBU FM_01 ... FM_02 ...
FM Group : XYZ FM_03 ... FM_04 ...

Program 1 CALL FUNCTION FM_0 ...

Program 2 CALL FUNCTION FM_02 ...

Program 3 CALL FUNCTION FM_02 .. . Modularization Techniques | 1.08

August-2003

12

Function Module Parts

FM -02
Section I Administration Section II Interface
Chapter 1 Import Chapter 2 Changing Chapter 3 Export Chapter 4 Tables Chapter 5 Exceptions

FM Group : FIBU FM_01 FM_02 ... ...

Section III Documentation Section IV Source Code Section V Global Data Section VI Main Program

FM Group : XYZ

FM_03 FM_04

... ...

August-2003

Modularization Techniques | 1.08

13

Creating a Function Group

August-2003

Modularization Techniques | 1.08

14

Administration

August-2003

Modularization Techniques | 1.08

15

Interfaces
Program XYZ.

Call function Y_DEMO_FUNC

Import Changing Export Tables Exceptions

Function Module Y_DEMO_FUNC

August-2003

Modularization Techniques | 1.08

16

Import/Export Parameter Interface


Parameter name Default value Flag parameter as optional

LIKE TYPE

Pass parameter by reference

August-2003

Modularization Techniques | 1.08

17

Table Parameters/Exceptions Interface & Documentation


Parameter name Flag parameter as optional

LIKE

TYPE

August-2003

Modularization Techniques | 1.08

18

Function Module Source Code


function y_demo_function_module.

* -------------------------------------------------------------------------------------------------* Local interface: IMPORTING * REFERENCE(FIELD1) LIKE TABNA-COUNTRY * EXPORTING * VALUE(FIELD3) LIKE TABNA-NAME1 * TABLES * TAB STRUCTURE TABNA * CHANGING * VALUE(FIELD2) LIKE TABNA-ID * EXCEPTIONS * INVALID_DATA * SYSTEM_ERROR * * ------------------------------------------------------------------------------------------------endfunction. August-2003 Modularization Techniques | 1.08 19

Exceptions
INVALID_OPERATOR

Function Module ...

IF... RAISE INVALID_OPERATOR. * MESSAGE. . . RAISING INVALID_OPERATOR. ENDIF. ...


August-2003 Modularization Techniques | 1.08 20

Example - Raising Exceptions


case operator. when +. result = operand1 + operand2. when -. result = operand1 - operand2. when /. if operand2 <> 0. result = operand1 / operand2. else. raise division_by_zero. endif. when * result = operand1 * operand2. when others. raise invalid_operator. endcase.

August-2003

Modularization Techniques | 1.08

21

Calling a Function Module


report ymodemo message-id yj. parameters: operand1 type i, operator, operand2 like operand1. data: result type p decimals 2. call function Y_CALCULATOR exporting operand1 = operand1 operator = operator operand2 = operand2 importing result = result exceptions invalid_operator =1 division_by_zero = 2 others Modularization = 3. August-2003 Techniques | 1.08

22

Calling a Function Module


(Continued)
exceptions invalid_operator = 1 division_by_zero = 2 others case sy-subrc. e001. e005. e007. = 3.

when 1. message when 2. message when 3. message endcase.

August-2003

Modularization Techniques | 1.08

23

Program Organisation
SAPL <gr> *System-defined include files INCLUDE L<gr>TOP. INCLUDE L<gr>UXX *User-defined include files L<gr>UXX L<gr>TOP FUNCTION-POOL <gr> Message-ID ZZ. DATA: Global DATA

L<gr>U01 FUNCTION FA.


L<gr>U02 FUNCTION FB.

INCLUDE L<gr> U01. INCLUDE L<gr> U02. . . .

August-2003

Modularization Techniques | 1.08

24

Subroutine Includes for Function Groups


Main Program
System-defined include files INCLUDE L<gr> TOP. Global Data User defined include files INCLUDE L<gr> F01. Subroutines ABAP program L<gr> F01
FORM SUB1 USING . . . . . . . ENDFORM. FORM SUB2 USING . . . . . . . ENDFORM. . . .

Call
FUNCTION . . . . . . PERFORM SUB1 USING . . . . . . ENDFUNCTION.

August-2003

Modularization Techniques | 1.08

25

Global Data / Local Memory in the Function Group


Global Data
L <gr> TOP FUNCTION-POOL <gr>. DATA: X TABLES: . . . Program FUNCTION . . . DATA: . . . MOVE X TO . . . ENDFUNCTION. Subroutines L <gr> F01 FORM SUB1 USING... DATA: . . . MOVE. . . TO X. ENDFORM.
Modularization Techniques | 1.08 26

August-2003

Test Environment
Import parameters
FM: Y170 DEMO

Tables

Does it work?

Export Parameters

August-2003

Modularization Techniques | 1.08

27

Managing Function Modules


Administration

August-2003

Modularization Techniques | 1.08

28

Remote Function Call (RFC)


Program

ABAP
Function Group

\/4

CALL FUNCTION. . . DESTINATION. . . EXPORTING. . . IMPORTING. . . TABLES. . . EXCEPTIONS. . .

FUNCTION-POOL . . . . Function Module FUNCTION REMOTE_CALL ... RAISE ERROR. ... ENDFUNCTION.

External program External Program. . . RfcOpen (. . .) RfcCallReceive (. . .) RfcClose (. . .)


August-2003

RFCLid

Modularization Techniques | 1.08

29

Displaying Function Module

August-2003

Modularization Techniques | 1.08

30

Modularization: The Include Technique

August-2003

Modularization Techniques | 1.08

31

You might also like