You are on page 1of 39

IBM Global Services

Modularization Techniques

Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Objectives

 The participants will be able to:


 Create Subroutines
 Describe the various methods for passing Parameters to Subroutines
 Create Function Modules
 Call Function Modules from ABAP Programs

2 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

What Are Subroutines ?

REPORT YEXAMPLE1. REPORT YEXAMPLE2.

Calculate tax Call calculated_tax

Calculate tax Call calculated_tax

Subroutine
Calculate_tax

3 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Modularization

REPORT YEXAM1. REPORT YEXAM2. REPORT YEXAM3.


Perform sub
Perform sub(YDEMOSB1) Call Function ZZCALC
Form sub

External FunctionModule
Call Call
REPORT YEXAMS1. ABAP Function Builder
Function module
Form sub ZZCALC

4 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Actual / Formal Parameters

Main 99 1
Program a1 a2 a3
Call Calculate_tax
Transfer values of fields a1 a2
Get value of field a3
Actual parameters a1 a2 a3

Parameter transfer

r ou t ine Formal parameters f1 f2 f3


Su b
Subroutine calculate_tax
99 1
f1 f2 f3
f3 = f1 +f2 . . . .

5 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Methods of Passing Parameters

Pass by Value a1

b r ou tine
Su
Pass by Value and Result
f1
a1
Subro
u tine

Pass by Reference a1 f1

r ou t ine
Su b
f1

6 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

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


Reference(2)

REPORT Y170D091.
TABLES: ....
DATA: .…
.
.
.
PERFORM <name> USING
<a1> <a2>
<a3> <a4>.
.
.
.
FORM <name> USING
VALUE(<f1>)
VALUE(<f2>)
<f3> Pass by value
<f4>.
<statements> Pass by reference
ENDFORM.

7 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

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>) Pass by value
CHANGING VALUE(<f3>).
. Pass by value and result
.
f 3 =“A”.
.
.
ENDFORM.

8 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Global versus Local Data


report y170dm86.

data: num(9) value ‘999999999’.

data: id like tabna-id, Global Data


name like tabna-name1.
. . . <statements>
perform sub1.
. . . <statements>

* ------------------------------------------------------------------------------------------------*
* FORM SUB1 *
* ------------------------------------------------------------------------------------------------*
form sub1.
data: begin of tab occurs 10, “ <----------- local data
id like tabna-id,
name1 like tabna-name1, Local Data
end of tab.
local: num . “ <----------- local data
. . . <statements>
endform.

9 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Local Data in Subroutines

Statement Value Upon Value Upon Value Upon


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

STATICS Whatever the local If declared globally, Last set value from
STATICS statement returns to old value, inside subroutine
initializes otherwise not
recognized

LOCAL Last set value from Last set value from Last set value from
main program main program main program

10 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Passing Structures as Parameters

REPORT Y170D095.
TABLES: TABNA. This is passing the
DATA: ZTAB LIKE TABNA. TABNA work area
DATA: FLAG. only
.
.
PERFORM SUB1 USING TABNA. This is passing the
PERFORM SUB1 USING ZTAB. ZTAB structure
.
.
.

FORM SUB1 USING


REC STRUCTURE TABNA.
WRITE: / REC-COUNTRY,
REC-NAME1.

ENDFORM.

11 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

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 .

12 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

External Subroutines

PERFORM <name>(<prog name>) USING . . .

REPORT Y170D096. REPORT Y170D097.


TABLES : TABNA, TABLES : TABNA,
T001, T005. T001, T001G.
. .
. . Roll Area
. .
TABNA
START-OF-SELECTION. START-OF-SELECTION
. . T001
. .
. . T005
PERFORM FORM SUB1 . . . . T001G
SUB1(Y170D097) . . . . .
. Y170D108
.
. . Y170D109
. NEW-PAGE.
.
.
. Storage Allocation
ENDFORM

13 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Demonstration

 Creating a subroutine in a program to modularize the logic.

14 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Practice

 Creating a subroutine in a program to modularize the logic.

15 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Function Modules

Function Builder

FM Group : FIBU
FM_01 ...
Program 1 FM_02 ... Program 2
FM Group : XYZ
CALL FUNCTION CALL FUNCTION
FM_03 ...
‘FM_02’ ‘FM_02’
FM_04 ... ...
...
Program 3

CALL FUNCTION
‘FM_02’
...

16 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Function Module Parts

FM -02
Section I … Administration FM Group : FIBU
Section II … Interface
FM_01 ...
Chapter 1 … Import FM_02 ...
Chapter 2 … Changing
Chapter 3 … Export
Chapter 4 … Tables
Chapter 5 … Exceptions
FM Group : XYZ
Section III … Documentation
FM_03 ...
Section IV … Source Code
FM_04 ...
Section V … Global Data

Section VI … Main Program

17 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Creating a Function Group

18 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Function Module

19 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Interfaces
Program XYZ.

Call function
‘Y_DEMO_FUNC’

Import
Changing
Export
Tables
Function Module
Exceptions Y_DEMO_FUNC

20 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Import/Export Parameter Interface

‘LIKE’ Default value

Pass parameter
Parameter name by reference

‘TYPE’ Flag parameter


as optional

21 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Table Parameters/Exceptions Interface & Documentation

‘LIKE’

Flag parameter
as optional

Parameter name

‘TYPE’

22 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

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.

23 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Exceptions

INVALID_OPERATOR

Function Module

...

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

24 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

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.

25 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

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 = 3.

26 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Calling a Function Module (Contd.)


exceptions
invalid_operator = 1
division_by_zero = 2
others = 3.

case sy-subrc.
when 1.
message e001.
when 2.
message e005.
when 3.
message e007.
endcase.

27 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Program Organisation

SAPL <gr>
L<gr>TOP
*System-defined include files
FUNCTION-POOL <gr>
INCLUDE L<gr>TOP. Message-ID ZZ.
INCLUDE L<gr>UXX DATA: “Global DATA
*User-defined include files
L<gr>UXX
INCLUDE L<gr> U01.
L<gr>U01 INCLUDE L<gr> U02.
FUNCTION FA. .
.
L<gr>U02 .
FUNCTION FB.

28 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

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 Call


FORM SUB1 USING . . . . FUNCTION . . .
. .
. .
. .
ENDFORM. PERFORM SUB1 USING . . .
FORM SUB2 USING . . . . .
. .
. .
. ENDFUNCTION.
ENDFORM.
.
.
.

29 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Global Data / Local Memory in the Function Group

Global Data

L <gr> TOP
FUNCTION-POOL <gr>.
DATA: X
TABLES: . . .

Program Subroutines
FUNCTION . . . L <gr> F01
DATA: . . . FORM SUB1 USING...
MOVE X TO . . . DATA: . . .
ENDFUNCTION. MOVE. . . TO X.
ENDFORM.

30 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Test Environment

Import parameters Tables

FM: Y170 DEMO


Does it work?

Export Parameters

31 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Managing Function Modules

Administration

32 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Remote Function Call (RFC)

Program Function Group


CALL FUNCTION. . . ABAP
FUNCTION-POOL . . . .
DESTINATION. . .
EXPORTING. . . Function
IMPORTING. . . Function Module
Module
TABLES. . . FUNCTION REMOTE_CALL
EXCEPTIONS. . . ...
RAISE ERROR.
...
ENDFUNCTION.

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

33 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Displaying Function Module

34 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Modularization: The Include Technique


REPORT yinclude_technique.
*---------------------------------------------------------------------*
* YINCLUDE_TECHNIQUE_GLOBAL_DATA
*---------------------------------------------------------------------*
CONSTANTS : yes(1) type c value ‘Y’, “ Yes Flag
no(1) type c value ‘N’. “ No Flag.
Data : company_name(50) type c, “ Holds company report is for
Include yinclude_technique_global_data. Report_id type sy-repid, “ Holds SAP report ID
Include yinclude_technique_subroutines. Report_name(30) type c, “ Holds IBM description
Errors(1) type c value ‘E’, “Flag if errors have occurred
Error_num type I value 0. “ Number of errors that occurred

* The use of START-OF-SELECTION is discussed in the interactive reporting


* Usually it is not required, unless using includes in this manner
START-OF-SELECTION.
* Set variables for this report
company_name = ‘Demo Company’(501). “ Text elements cannot clash with
report_name = ‘Include Demo’(502). “ those in includes

* All the code for the report would be here


* Errors variables will be set depending on if errors occurred *---------------------------------------------------------------------*
* YINCLUDE_TECHNIQUE_SUBROUTINES
*---------------------------------------------------------------------*
* At the end FORM sub_print_report_heading.
If errors = ‘E’.
Write : / ‘Report for:’(001) , company_name,
PERFORM sub_print_report_heading. / ‘Date is :’(002), sy-datum,
* Write rest of report / ‘Report Name:’(003) , report_name,
/ ‘Report ID:’(004), sy-repid.
ENDFORM. “SUB_PRINT_REPORT_HEADING

35 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Demonstration

 Creating a function module and using it in a program.

36 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Practice

 Creating a function module and using it in a program.

37 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Summary

 Redundancy in program can be avoided using subroutines.


 Subroutines are used in three different ways: internal call, external call, a function
module stored centrally in the Function Builder.
 Parameters passed to the subroutine using one of the following three methods.
Pass by value, Pass by value and result, Pass by reference.
 The benefit of function modules lies in their reusability, which saves developers
from creating redundant code and increases programming efficiency.
 Function groups are collections of logically related functions modules.
Specification of a function group is required when creating a function module.
 The additional parameter DESTINATION is required for the remote call of a
Function Module.

38 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation


IBM Global Services

Questions

 Why subroutine is used in the program?


 What is function module? What is the advantage of using it in the program?
 What are the different parameters of a function module?
 What is function group?
 How a function module can be remote enabled?

39 Modularization Techniques | 3.08 March-2005 © 2005 IBM Corporation

You might also like