You are on page 1of 53

Chapter 4 – Basic Concepts

1
목차

1. Data types and Data declaration


2. Important instructions
3. Local modularization
4. Background processing

2
Data type

❖ Data type
▪ ABAP 프로그램에서 사용할 Data variable의 타입을 정의
▪ Data type은 Data variable과 독립적으로 선언
▪ TYPES 구문을 사용하여 선언하면 해당 프로그램에서만 사용할
수 있기 때문에 Local Data Type이라고 한다.
▪ Local Data Type은 이미 정의되어 있는 ABAP Data Type을 참
고하여 선언한다.
▪ 예: TYPES dtype TYPE C
▪ ABAP Program의 특징은 ABAP Dictionary의 Data type을 프
로그램에서 참고하여 사용할 수 있다는 것이다.
▪ 테이블 구조를 그대로 변수로 사용할 수 있기 때문에 개발자가 편
리하게 프로그래밍할 수 있도록 도와준다.

3
Data type과 Data variable

❖ Data variables
▪ Data type을 참고하여 선언된다.
▪ 프로그램에서 사용할 수 있는 변수
▪ 프로그램의 실행 시점에 메모리를 차지
▪ ABAP 프로그램에서는 Data variable의 이름을 통해서 값에 접근
할 수 있다.
▪ Data variable은 Data Object와 동일한 의미이다.
▪ ABAP 구문은 Data Object의 이름을 이용해 주소를 확인하고,
Data Type을 참고해 필드의 길이와 소수 자릿수 등과 같은
Contents를 해석하게 된다.

4
Data Types

Data type

Predefined Local data type Global data type


ABAP type In Program In ABAP Dictionary

elementary complex

structured table type

5
Data Types
❖ Predefined ABAP Type
▪ Kernel 레벨에서 정의되어 있는 기본 데이터 타입
▪ C, JAVA의 (c, f, i) 타입과 같이 이미 정의되어 있는 데이터 타입
▪ ABAP은 추가로 p, d, t와 같은 타입들이 존재함
❖ Local data type
▪ ABAP 프로그램 내에서 Predefined ABAP type을 이용하여 생성한다.
▪ Predefined ABAP type을 조합하여 여러 필드가 추가된 Structure 타입
을 정의하여 사용할 수 있다.
▪ 예: TYPES dtype [TYPE type l LIKE dobj] …
❖ Global data type
▪ 모든 ABAP 프로그램에서 사용할 수 있는 데이터 타입이다.
▪ ABAP Dictionary Data type은 ABAP 프로그램 내에서 TYPE 구문을 이
용할 수 있다.
▪ 예: TYPES : types TYPE tables.
DATA : gv_data LIKE table-field…

6
Predefined data types in ABAP

7
Data declaration

8
Data declaration

9
Elemental field definition
• Predefined ABAP type을 이용한 데이터 변수 선언:

DATA : gv_num TYPE I,


gv_deci TYPE f,
gv_date TYPE d,
gv_time TYPE t,
gv_text1 TYPE c,
gv_text2(2) TYPE c,
gv_longtext TYPE string

10
Structured data object definition
• Local 프로그램에서 자주 사용하게 되는 데이터 및 구조를
TYPE으로 선언하여, 프로그램 내에서만 사용할 수 있다.

11
ABAP dictionary를 이용한 Definition
• ABAP dictionary를 이용한 변수 선언:
ABAP Dictionary(Table, Structure, Data Element 등)는 모든
프로그램에서 선언하여 사용할 수 있다.

DATA : gv_carrid TYPE s_carr_id,


gv_connid TYPE sflight-carrid,
gv_matnr TYPE mara-matnr.

12
Internal table
❖ Internal table은 프로그램이 실행되는 동안 프로그램 내에서 정의하
여 사용할 수 있는 Local table.

13
Parameter Definition

⚫ Screen에서 사용자가 값을 입력하도록 Input 필드를 정의


PARAMETERS <p>[(<length>)] <type> [<decimals>].
⚫ PARAMETER의 TYPE을 정의하지 않으면 기본 CHAR1 자리
TYPE으로 정의된다.
⚫ PARAMETER에 입력된 값은 데이터를 조회하는 SELECT
구문의 조건 등에 사용된다.
⚫ PARAMETER는 1개의 값만 입력 받을 수 있으며, 체크 박스
같은 옵션을 추가할 수 있다.
⚫ 다양한 PARAMETER 옵션은 교과서 545P 참조

14
Selection Screen

15
System Values – Structure SY

• Structure SY 는 많은
시스템 변수들을 가지고
있음.
• Structure는 Data
Dictionary (SE11)에서 data
type SYST를 입력하여
확인할 수 있음.

16
DATA 구문
❖ Data variable을 선언할 때 사용하는 구문

❖ 변수명은 언더라인( _ ) 기호를 포함하여 30자까지 가능함

1) TYPE

- 데이터 변수의 타입을 정의

DATA : gv_num1 TYPE i.

2) Like

앞에서 생성한 Data variable인 gv_num1과 동일한 타입의 variable을

선언할 때 사용. 타입이 있는 모든 데이터 variable을 사용할 수 있음.

DATA : gv_num2 LIKE gv_num1

17
DATA 구문
3) VALUE int

- 모든 데이터 타입은 Initial Value가 존재함

- VALUE 옵션을 사용하면 기본 initial Value 대신에 int로 초기값을 설정

- Constants 변수를 선언할 때는 VALUE 옵션이 필수사항임.

DATA : gv_num TYPE I VALUE 123,

gv_flag VALUE ‘X’,

gv_val VALUE IS INITIAL,

gv_idx LIKE sy-tabix VALUE 45.

18
DATA 구문

4) LENGTH n
- 필드의 길이를 설정한다.
- C, N, P, X 타입에서만 사용할 수 있음.

DATA : gv_num TYPE n VALUE 2.

5) DECIMALS n
- DATA type P에서만 사용 가능하며 1 ~ 14 사이의 소수 자리 수를 설정

DATA : gv_num TYPE p DECIMALS 3.

19
DATA 구문

• Instead of defining every single data object by itself:


data a type c.
data b type i.
data c type c.
data d type i.

• Usage of chain statements is possible:


data: a type c, b type i, c type c, d type i.

20
WRITE 구문
• WRITE 구문은 OUTPUT 리스트에 데이터를 쓰는 기능을 주로 하게
되며, 값을 할당하는 (MOVE) 기능도 수행한다.
• 리스트용으로 사용될 때에는 데이터를 LIST BUFFER에 저장한다.
• Syntax: WRITE [/][<pos>][(<len>)] <text>.
• ‘/’: 새로운 라인; ‘pos’: column number; ‘len’: text length
• Simple Text output:
WRITE ‘Hello World’.
• Combination of Substrings and Output of Variable values:
WRITE: ‘Hello’, sy-uname, /5 ‘Nice to see you here’.

Hello Max
Nice to see you here

21
WRITE 구문

• 빈 라인을 만들기 위해 복수의 ‘/’을 사용하지 않는다.


• SET BLANK LINES ON.
• Or ‘Skip <n>’; n = number of blank lines

22
Data manipulation과 control 구조

• Data manipulation
• Control structures
– Loops
– 조건을 이용한 분기

23
Data manipulation
• Assign: MOVE f TO g or g = f
• Numeric: ADD n TO m or m = m + n
• String: CONCATENATE, SPLIT, SEARCH, REPLACE,
CONDENSE, TRANSLATE …
• Logical:
– For all data types:

– For character like types:


• CO (contains only)
• CN (contains not only)
• CA (contains any) …

24
Control structures: 분기 (1)
• IF:
IF <logical expression>.
<instruction 1>.
[ELSEIF <logical expression>.
[<instruction 2>.
[ELSE.
[<instruction 3>.
ENDIF.

• Example:
IF a > b.
WRITE ‘a is bigger than b’.

ELSEIF a < b.
WRITE ‘b is bigger than a’.
ELSE.
WRITE ‘a equals b’.
ENDIF.

25
Control structures: 분기 (2)
• CASE:
CASE <variable name>.
[WHEN <value 1>.
[<instruction 1>.
[WHEN <value 2>.
[<instruction 2>.
[WHEN OTHERS.
[<instruction 3>.
ENDCASE.

• Example:
READ TABLE l_tab_customers INDEX 1 INTO l_str_customer.
CASE sy-subrc.
WHEN 0 or 2.
WRITE: / ‘Entry found’.
WHEN OTHERS.
WRITE: / ‘Entry not found’.
ENDCASE.

26
Control structures: loops

• WHILE – ENDWHILE (conditional loop):


WHILE <logical expression>.
<instructions>.
ENDWHILE.
• DO – ENDDO (count loop)
DO <n> TIMES.
<instructions>
ENDDO.

27
Comments

28
Modularization
❖ 재사용성과 유지보수를 위해 ABAP 프로그램을 구조화하고
모듈화한다.
❖ Modularization의 필요성
• Improve the structure of the program.
• Easy to read the code
• Easy to maintain the code
• Avoid redundancy and promotes code reuse

❖ Modularization in ABAP:
• Use of Macros
• Use of includes
• Subroutines
• Function Modules

29
Modularization: Macro
❖ 동일한 Statement set을 하나의 프로그램에서 여러 번 사용하고자 할
경우 Macro를 사용
❖ Macro가 정의된 프로그램 내에서만 호출하여 사용할 수 있음.
❖ Macro는 긴 계산식 또는 복잡한 WRITE statements에 유용함.
❖ 샘플
DATA sum TYPE i.

"Macro definition
DEFINE add_macro.
sum = &1 + &3 + &2.
sum = sum + &3.
END-OF-DEFINITION.

START-OF-SELECTION.
add_macro 10 20 30.
WRITE sum.

Macro는 Parameter &N where N = 1,2,3... 사용할 수 있음

30
Modularization: Include
• Include Program은 소스 코드를 모듈화하기 위해 사용되며, Parameter
인터페이스를 가지지 않는다.
• Include program은 동일한 소스 코드를 다른 프로그램들에서 사용할 수
있도록 한다.
• 사용하고자 하는 다른 프로그램의 데이터 선언이 긴 경우 유용하다.

31
Modularization: Includes
• INCLUDE는 독립적으로 실행될 수 없다.
• INCLUDE 프로그램은 또 다른 INCLUDE를 포함할 수 있다.
• INCLUDE 프로그램은 자기 자신을 호출할 수 없다.
• INCLUDE 프로그램은 complete statement를 가져야 한다.
• Manual check of calling program by software developer necessary
→ does the include program fit logically?
• INCLUDE vs. TOP INCLUDE:

INCLUDE TOP-INCLUDE
no data declaration necessary contains data declaration
operational code considered for all syntax checks
always integrated for compiler
no operational code

32
Modularization: Includes
Include의 단점

• Bad maintenance: changes in include programs may cause syntax


errors in main programs
• High memory consumption → multiple memory allocation of include
program

33
Modularization: Subroutine (1)
• Subroutine은 모든 ABAP 프로그램에서 정의할 수 있고 호출할 수
있는 procedure
• Subroutine은 보통 내부적으로 호출된다.
• 로컬에서 자주 사용되는 알고리즘 또는 code section을 포함한다.
• 하나의 Function을 시스템 전체에서 재사용하려면 function module을
사용하는 것이 좋다.
• Subroutine은 FORM으로 시작하여 END FORM으로 종료되는 구문:

FORM <procedure name>

USING [VALUE] <input parameter> TYPE <type>

CHANGING [VALUE] <input/output parameter> TYPE <type>

ENDFORM.

34
예제
REPORT zd_###_019

PERFORM write data .


FORM write data
WRITE ’ Subroutine Test ' .
ENDFORM. " WRITE DATA

35
Modularization: Subroutine (2)

36
예제_Pass by value
REPORT zd_###_020

DATA : gv_val TYPE c LENGTH 20 VALUE ’ Passed by value test ’.


PERFORM pass_byvalue USING gv_val.
FORM pass_byvalue USING VALUE(p_val).
WRITE P val.
ENDFORM. “Pass_value

37
예제_Pass by reference
REPORT zd_###_021

DATA gv_val TYPE c LENGTH 30 VALUE ‘Pass by reference Test ’.


WRITE / gv_val.
PERFORM pass_byvref CHANGING gv_val
WRITE / gv_val.
FORM pass_byvref CHANGING p_val.
p_val = ’Value is changed ’.
ENDFORM. “Pass value

38
예제_Pass by value and result
REPORT zd_###_22.

DATA gv_vall TYPE i VALUE 2.


DATA gv_val2 TYPE i VALUE 3.
DATA gv_sum TYPE i

PERFORM sum data USING gv_vall gv_val2


CHANGING gv_sum.
WRITE / ’ Result is :’ GV_SUM.
FORM sum_data USING value (p_vall)
value(p_val2)
CHANGING value(p_sum).
p_sum = p_ vall + p_ val2.
ENDFORM. “SUM DATA

39
Modularization: Subroutine (3)
Subroutine의 유형
❖ Internal
• 프로그램 내에 정의된 Subroutine을 호출하는 경우
• main ABAP/4 program에서 선언된 모든 데이터 오브젝트에 접근 가능

❖ External
• 프로그램 외부에 정의된 Subroutine을 호출하는 경우
• <pass> option을 사용하거나 메모리의 common part에 데이터
오브젝트를 선언해야 함.

40
Modularization: Subroutine(4)
Call an existing subroutine

41
Modularization: Function modules (1)

• Function module은 중앙 라이브러리에 저장되는 특별한 글로벌


서브 루틴이다.
• 하나의 프로그램에서 같은 기능의 구문을 여러 번 사용하면
스크립트가 길어지고, 변경 사항이 발생할 경우 구문마다 수정해야
하는 비효율 문제가 발생한다. Function module을 이용한 모듈화를
구현하여 재사용성을 높일 수 있다.

42
Modularization: Function modules (2)

• 100,000개 이상의 function modules

• Function group은 여러 function module들을 모아 놓은 컨테이너

• Function Group은 직접 실행될 수 없으며, Function을 호출할 때, 호출한


프로그램의 Internal session 안으로 Function Group 전체를 Load한다.
하나의 Function에 에러가 생기면 동일 그룹 내의 모든 Function이
실행되지 않는다.

• Function modules는 remote accessible 하다.

• Function groups은 자신의 TOP include를 가질 수 있다.

• Function Builder (transaction SE37)에서 생성됨

43
Modularization: Function modules (3)
• Call Syntax:
CALL Function ‘function name’
[EXPORTING par1 = var1]
[IMPORTING par2 = var2]
[CHANGING par3 = var3].
• IMPORTING = Input Parameter
• EXPORTING = Output Parameter
• CHANGING = Parameters that are changed during function execution

Function을 만들 때
Import로 선언한 파라미터가 ABAP
프로그램 내에는 EXPORTING
위치에 존재하고,Export로 선언한
파라미터는 IMPORTING 위치에
존재한다.

44
Modularization: Function Group
❖ Function groups are containers for function modules.
❖ In fact, there are a large number of standard Function Groups.
❖ All of the function modules in a function group can access the
global data of the group.
❖ Like executable programs (type 1) and module pools (type M),
function groups can contain screens, selection screens, and lists.

Points to Note
❖ Function Groups cannot be executed.
❖ The name of a function group can be up to 26 characters long.
❖ When you create a function group or function module, the main
program and include programs are generated automatically.
❖ Function groups encapsulate data.

45
Modularization: Function Group

How to create a Function Group

❖ Goto Transaction SE80.


❖ Select Program in the DropDown.
❖ Write the name of the Function Group That you want to create.
Generally User made Function groups start with "Z". e.g. -
<Z_FUNCTION_GROUP_NAME> . Hit Enter Key.
❖ Note that The TOP Include is create by default if the user checks
the option of creating a TOP include.

46
Modularization: Function modules (4)

Function Modules

Remote enabled function modules

BAPI

47
Modularization: BAPI’s (1)

• BAPI = Business Application


Programming Interface
• RFC enabled function
modules
• 모든 BAPI는 BAPI explorer
(transaction BAPI)에서
찾아볼 수 있다.

48
Modularization: BAPI’s (2)

• BAPI 사용방법:
– BAPI는 SAP 트랜잭션의 기능을 제공한다.
– 적당한 BAPI를 찾고 관련 문서를 숙지한다.
– Function Builder를 통해 BAPI를 테스트한다.
– BAPI를 적용한다.
• 주의사항:
– data type과 필수 data를 주의해야함.

49
Background processing

• Usual programs use dialog work processes


• Long running programs should always run in the
background
• All ABAP programs can be scheduled as background jobs
in TA SM36
• For ABAP programs with a user interface you can predefine
the user input by using variants

50
RFC(Remote Function Call)
❖ RFC는 비즈니스 애플리케이션들이 다른 시스템과 정보를 교환하고
커뮤니케이션할 수 있도록 하는 매커니즘이다.
❖ RFC는 2개의 인터페이스로 구성된다.
▪ A calling interface for ABAP Programs
▪ A calling interface for Non-SAP programs.
❖ 어떤 ABAP program도 CALL FUNCTION...DESTINATION 구문을 사용
하여 Remote function을 호출할 수 있다.
❖ DESTINATION parameter는 호출되는 function run을 SAP System
에게 알려준다.
❖ Logical Destination은 SM59에서 정의되고 RFCDES 테이블에 저장
된다.

51
RFC(Remote Function Call)

RFC is a SAP protocol


to handle
communications
between systems to
simplify the related
programming

52
실습: Basic concept
❖ Use data declaration to declare a new data structure
for your variables and use the debugger to get
information about the variables during runtime
❖ Use selection screens and control structure to
create a simple calculation program
❖ Use a function module to separate the calculation
from the main program

53

You might also like