1 System Architecture Syntax System Architecture 3 Tier

  • Slides: 60
Download presentation

1. System Architecture, Syntax

1. System Architecture, Syntax

System Architecture • 3 Tier 구조 ü Presentation Layer ü Application Layer ü DB

System Architecture • 3 Tier 구조 ü Presentation Layer ü Application Layer ü DB Layer • MS ü Dispatcher 작업 분배 • Dispatcher ü 작업을 WP에 분배 • Work Process ü 실제 작업

Interaction Between Server Layers Load-of-program. Initialization. START-OF-SELECTION. END-OF-SELECTION. Write문 등 출력문 Select, Insert 등

Interaction Between Server Layers Load-of-program. Initialization. START-OF-SELECTION. END-OF-SELECTION. Write문 등 출력문 Select, Insert 등 SQL문

Activate • Saved Program ü Saved 후 Activate하 지 않으면 마지막으로 Save 된 것이

Activate • Saved Program ü Saved 후 Activate하 지 않으면 마지막으로 Save 된 것이 아니라 마지막으로 Activate 된 것이 Execute된다. ü 실행 전 Activate 필수 • Activate ü Save ü Check ü Activate • Activate를 자주 하라.

General ABAP Syntax I • Data선언 • SELECT ~ ENDSELECT – DB에서 조건에 맞는

General ABAP Syntax I • Data선언 • SELECT ~ ENDSELECT – DB에서 조건에 맞는 DATA를 WA_SCARR에 가져옴. • NEW-LINE. (줄바꿈) • wa_scarr-carrid 외 2개 화면 출력. • . (마침표)

Double Click

Double Click

3. 소스 설명 – – – Data 선언, Local & Global Data Type Dictionary

3. 소스 설명 – – – Data 선언, Local & Global Data Type Dictionary Structure, Work area & Internal Table Assignments Event 순서 > 조회 화면 > LOAD-OF-PROGRAM. > INITIALIZATION. > AT SELECTION-SCREEN. > 처리 로직 > START-OF-SELECTION. > DB ACCESS > SYSTEM 변수 > 화면 출력 > END-OF-SELECTION. > 더블 클릭 > AT SELECTION-SCREEN. > 제어문, 반복문 > DETAIL LIST > HIDE AREA Source 코드 설명 15 16 17 19 24 26 28 28 29 30 31 38 39 41 42 44 46

Data 선언 DATA : gv_char(10) TYPE c, “Character length 10 gv_numc(4) TYPE n, “Numerical

Data 선언 DATA : gv_char(10) TYPE c, “Character length 10 gv_numc(4) TYPE n, “Numerical Char length 4 gv_pack(5) TYPE p DECIMALS 2, “ Length 는 5바이트 소수점 2자리(length 5 아님) gv_date TYPE d, “Date (ex)2006. 08. 27 gv_time TYPE t, “Time (ex)12: 30: 26 gv_int TYPE i. “정수형 등이 있다.

Local & Global Data Type * wa_scarr 2 : Local Data Type * 프로그램

Local & Global Data Type * wa_scarr 2 : Local Data Type * 프로그램 내에서 선언하면 Local Data Type DATA : BEGIN OF wa_scarr 2, carrid TYPE scarr-carrid, carrname TYPE scarr-carrname, END OF wa_scarr 2. * scarr : Global Data Type * ABAP Dictionary에 정의되어 있으면 Global Data type DATA wa_scarr TYPE scarr. DATA it_scarr LIKE TABLE OF wa_scarr.

Using Dictionary Elements to Define Data Objects Within the Program • Data type 선언

Using Dictionary Elements to Define Data Objects Within the Program • Data type 선언 DATA it_spfli TYPE spfli_tab Table Type ü Dictionary 이용 ü DATA name TYPE dictionary. ü field : 하나의 값 ü Work area : 여러 개의 값을 Set으로 저장. ü Internal Table : Work area의 set

Access to Structure Components Work Area – Fieldname 하나의 Data처럼 사용 가능

Access to Structure Components Work Area – Fieldname 하나의 Data처럼 사용 가능

Work Area, Internal Table 선언 * TYPE : ABAP Dictionary에 있는 것 사용. *

Work Area, Internal Table 선언 * TYPE : ABAP Dictionary에 있는 것 사용. * Like : Program내에서 선언 된 것을 재사용. * Dictionary를 TYPE으로 가능하지만 권장 안함. DATA wa_scarr TYPE scarr. “Work area DATA it_scarr LIKE TABLE OF wa_scarr. “Itab DATA it_scarr TYPE TABLE OF scarr. DATA wa_scarr LIKE LINE OF it_scarr. “Itab “Work area DATA wa_scarr TYPE s_carr_id. DATA it_scarr TYPE TABLE OF scarr. “Data Element, W. A. “Itab DATA it_scarr TYPE scarr_tab. DATA wa_scarr LIKE LINE OF it_scarr. “Table Type, Itab “Work area

Internal Table with Header line • DATA : BEGIN OF it_scarr OCCURS 0, carrid

Internal Table with Header line • DATA : BEGIN OF it_scarr OCCURS 0, carrid TYPE scarr-carrid, carrname TYPE scarr-carrname, currcode TYPE scarr-currcode, url TYPE scarr-url, END OF it_scarr. DATA it_scarr 2 TYPE TABLE OF scarr WITH HEADER LINE.

Internal Table with Header line * 참고 1. LOOP AT itab-carrid = itab-carrname. •

Internal Table with Header line * 참고 1. LOOP AT itab-carrid = itab-carrname. • 일반적으로 1번 사용 MODIFY itab. • SAP에서 3번 권장. CLEAR itab. ENDLOOP. • 1번 = 2번 = 3번 • 1번의 LOOP At itab 다음 2. LOOP AT itab INTO itab-carrid = itab-carrname. 에 “INTO itab. ” 생략 MODIFY itab. CLEAR itab. ENDLOOP. 3. LOOP AT itab INTO wa. wa-carrid = wa-carrname. MODIFY wa. CLEAR wa. ENDLOOP.

Internal Tables with and Without Header Lines • 헤더라인 없는 Internal Table 사용 권장

Internal Tables with and Without Header Lines • 헤더라인 없는 Internal Table 사용 권장 Why? Class에서 헤더라 인 있는 Internal Table을 사용할 수 없다. 그래서 헤더라인 없는 Internal Table + Work Area를 사용 권장

Value Assignments carrid 1 = c_qf Counter 1증가 Field를 Initial Value로 Clear

Value Assignments carrid 1 = c_qf Counter 1증가 Field를 Initial Value로 Clear

Copying Structure Components with the Same Name Corresponding은 같은 Field name을 찾아 자동으로 Data의

Copying Structure Components with the Same Name Corresponding은 같은 Field name을 찾아 자동으로 Data의 값을 넣어 줌.

Event 순서 • LOAD-OF-PROGRAM. & INITIALIZATION. Selection Screen 전 PARAMETERS & SELECTOPTIONS의 초기 값을

Event 순서 • LOAD-OF-PROGRAM. & INITIALIZATION. Selection Screen 전 PARAMETERS & SELECTOPTIONS의 초기 값을 넣 어 준다. • AT SELECTION-SCREEN Selection Screen 값 또는 권한 체크 • START-OF-SELECTION. Select 등의 구문 • END-OF-SELECTION. 일반적으로 출력문. • AT SELECTION-SCREEN 더블 클릭 이벤트만 빼고 나머지는 위에서 아래의 순서로

조회 화면 PARAMETERS : pa_scarr TYPE s_carr_id. SELECT-OPTIONS : so_scarr FOR wa_scarr-carrid. Select-options에서 선언

조회 화면 PARAMETERS : pa_scarr TYPE s_carr_id. SELECT-OPTIONS : so_scarr FOR wa_scarr-carrid. Select-options에서 선언 한 so_scarr은 sign, option, low, high 값을 가지는 헤더라인을 가지는Internal table.

조회화면 실행 전 LOAD-OF-PROGRAM. so_scarr-sign = 'I'. so_scarr-option = 'BT'. so_scarr-low = 'AA'. so_scarr-high

조회화면 실행 전 LOAD-OF-PROGRAM. so_scarr-sign = 'I'. so_scarr-option = 'BT'. so_scarr-low = 'AA'. so_scarr-high = 'AZ'. APPEND so_scarr. INITIALIZATION. pa_scarr = 'AB'. • 프로그램 Execute 시키면 조회화면 나오기 전 실행.

조회 조건 체크 • AT SELECTION-SCREEN. IF pa_scarr = 'AA'. MESSAGE 'Another value input'

조회 조건 체크 • AT SELECTION-SCREEN. IF pa_scarr = 'AA'. MESSAGE 'Another value input' TYPE 'E'. ENDIF. • 위의 값이 ‘AA’이여서 ERROR Message

프로그램 처리 부분 START-OF-SELECTION. SELECT * FROM scarr INTO CORRESPONDING FIELDS OF TABLE it_scarr

프로그램 처리 부분 START-OF-SELECTION. SELECT * FROM scarr INTO CORRESPONDING FIELDS OF TABLE it_scarr WHERE carrid IN so_scarr. IF sy-subrc <> '0'. STOP. ENDIF. • Scarr table에서 where 조건을 만족하는 데이터를 select하 여 it_scarr에 넣는다. • 조건을 만족하는 Data가 있으면 sy-subrc =‘ 0’ 없으면 sy-subrc = ‘ 4’

Database Access (Architecture) • Open SQL ü DB interface를 통해 Native SQL로 변경 ü

Database Access (Architecture) • Open SQL ü DB interface를 통해 Native SQL로 변경 ü 검색 결과 Table buffer에 저장 ü SELECT … • Native SQL ü DB에 직접 Access DBMS에 Dependent ü EXEC. ~ ENDEXEC.

Database Read Access

Database Read Access

Suitable Target Structure for the Field List • SELECT SINGLE… ü SELECT SINGLE 필드

Suitable Target Structure for the Field List • SELECT SINGLE… ü SELECT SINGLE 필드 1, 필드 2, 필드 3, 필드 4, 필드 5 … ü 필드 1, 필드 2, 필드 3, 필드 4, 필드 5 … 순으로 Work Area에 들어간다.

Fields in the Target Structure that have the Same Names as those in the

Fields in the Target Structure that have the Same Names as those in the Field List • SELECT SINGLE… INTO CORRESPONDING FIELDS OF … ü 필드 name이 같은 것을 자동으로 찾아 Work area 에 들어간다.

Reading Several Rows Using an Array Fetch • SELECT … INTO TABLE ITAB …

Reading Several Rows Using an Array Fetch • SELECT … INTO TABLE ITAB … ü DB Interface에서 Table 전체를 가져오기 때 문에 속도가 빠르다. ü … Into corresponding fields of table itab … 을 하면 fields name을 자동 으로 찾아서 입력해 주기 때문에 에러 제거에 좋다.

System 변수 • sy-subrc –Select문 Data 있으면 0, 없으면 4 –그 외 true =

System 변수 • sy-subrc –Select문 Data 있으면 0, 없으면 4 –그 외 true = 0, false <> 0 • sy-index – loop counter – DO. ~ ENDDO. DO n TIMES. ~ ENDDO. WHILE. ~ ENDWHILE. • sy-tabix – loop counter, LOOP AT itab. ENDLOOP. • sy-lsind – 화면의 깊이. BACK 가능한 화면. • sy-ucomm – SCREEN 화면에서 사용자 입력한 이벤트 명령어 • sy-langu – 사용 언어 • sy-datum – 현재 시간

화면 출력 • END-OF-SELECTION. LOOP AT it_scarr INTO wa_scarr. WRITE : / wa_scarr-carrid, wa_scarr-carrname,

화면 출력 • END-OF-SELECTION. LOOP AT it_scarr INTO wa_scarr. WRITE : / wa_scarr-carrid, wa_scarr-carrname, wa_scarr-currcode. HIDE : wa_scarr-carrid, wa_scarr-carrname. CLEAR wa_scarr. ENDLOOP. • START-OF-SELECTION에서 가져온 값을 화면에 출력. it_scarr은 internal table이라서 data가 여러건 있다. it_scarr 순차적으로 wa_scarr에 넣어서 화면에 출력한다. HIDE는 더블 클릭하여 AT LINE-SELECTION. 으로 값을 넘기기 위해 사용된다.

더블 클릭 Event • AT LINE-SELECTION. IF sy-lsind = '1'. SELECT * FROM sflight

더블 클릭 Event • AT LINE-SELECTION. IF sy-lsind = '1'. SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE it_sflight WHERE carrid = wa_scarr-carrid. IF sy-subrc = '0'. WRITE: / 'New Page Start'. ELSE. WRITE: / 'No Data in Database'. ENDIF. LOOP AT it_sflight INTO wa_sflight. WRITE : / wa_sflight-carrid, wa_sflight-connid, wa_sflight-fldate, wa_sflight-price. CLEAR wa_sflight. ENDLOOP. ENDIF.

Conditional Branches(제어문)

Conditional Branches(제어문)

Loops(반복문) • Loop Counter – sy-index ü DO. ~ ENDDO. ü DO n TIMS.

Loops(반복문) • Loop Counter – sy-index ü DO. ~ ENDDO. ü DO n TIMS. ~ ENDDO. ü WHILE. ~ ENDWHILE. – sy-tabix ü LOOP AT <ITAB>. ~ ENDLOOP.

Generating a Details List • AT LINESELECTION. ü Double click Event

Generating a Details List • AT LINESELECTION. ü Double click Event

Buffering Row-Specific Data in the Hide Area • Hide Area ü Hide 를 하면

Buffering Row-Specific Data in the Hide Area • Hide Area ü Hide 를 하면 Data Area에 Line과 Field name과 Value를 저장하 고 있다.

Data Flow for the Row Selection • Hide Area ü Double Click하여 At line-selection.

Data Flow for the Row Selection • Hide Area ü Double Click하여 At line-selection. 으로 이 동하면 Hide 값을 가지고 와서 사용할 수 있다.

4. Full Source Code

4. Full Source Code

Full Source 1/2 • REPORT zabap 19_11. * Data type DATA : gv_char(10) gv_numc(4)

Full Source 1/2 • REPORT zabap 19_11. * Data type DATA : gv_char(10) gv_numc(4) gv_pack(5) gv_date gv_time gv_int TYPE TYPE c, "Character Length 10 n, "Numerical character Length 4 p DECIMALS 2, "Packed Number XXX. XX d, "Date 2006. 08. 27 t, "Time 12: 16: 30 i. "Integer * Local Data Type DATA : BEGIN OF wa_scarr 2, carrid TYPE scarr-carrid, carrname TYPE scarr-carrname, END OF wa_scarr 2. * scarr, sflight : Global Data Type DATA wa_scarr TYPE scarr. DATA it_scarr LIKE TABLE OF wa_scarr. DATA wa_sflight TYPE sflight. DATA it_sflight LIKE TABLE OF wa_sflight. PARAMETERS : pa_scarr TYPE s_carr_id. SELECT-OPTIONS : so_scarr FOR wa_scarr-carrid. LOAD-OF-PROGRAM. so_scarr-sign = 'I'. so_scarr-option = 'BT'. so_scarr-low = 'AA'. so_scarr-high = 'AZ'. APPEND so_scarr.

Full Source 2/2 • INITIALIZATION. pa_scarr = 'AB'. AT SELECTION-SCREEN. IF pa_scarr = 'AA'.

Full Source 2/2 • INITIALIZATION. pa_scarr = 'AB'. AT SELECTION-SCREEN. IF pa_scarr = 'AA'. MESSAGE 'Another value input' TYPE 'E'. ENDIF. START-OF-SELECTION. SELECT * FROM scarr INTO CORRESPONDING FIELDS OF TABLE it_scarr WHERE carrid IN so_scarr. IF sy-subrc <> '0'. STOP. ENDIF. END-OF-SELECTION. LOOP AT it_scarr INTO wa_scarr. WRITE : / wa_scarr-carrid, wa_scarr-carrname, wa_scarr-currcode. HIDE : wa_scarr-carrid, wa_scarr-carrname. CLEAR wa_scarr. ENDLOOP. AT LINE-SELECTION. IF sy-lsind = '1'. SELECT * FROM sflight INTO CORRESPONDING FIELDS OF TABLE it_sflight WHERE carrid = wa_scarr-carrid. IF sy-subrc = '0'. WRITE: / 'New Page Start'. ELSE. WRITE: / 'No Data in Database'. ENDIF. LOOP AT it_sflight INTO wa_sflight. WRITE : / wa_sflight-carrid, wa_sflight-connid, wa_sflight-fldate, wa_sflight-price. CLEAR wa_sflight. ENDLOOP. ENDIF.

5. Subroutine

5. Subroutine

Actual & Formal parameters

Actual & Formal parameters

Call by value, Call by value result, Call by reference • Call by value

Call by value, Call by value result, Call by reference • Call by value 값을 복사해서 사용하고 지운다. • Call by value and result 값을 복사해서 사용하고 Subroutine이 끝나면 값 을 리턴한다. • Call by reference Actual parameter를 그 대로 사용한다.

Call by value, Call by value result, Call by reference • Call by value

Call by value, Call by value result, Call by reference • Call by value 값을 복사해서 사용하고 Subroutine이 끝나면 지 운다. • Call by value and result 값을 복사해서 사용하고 Subroutine이 끝나면 값 을 리턴한다. • Call by reference Actual parameter를 그 대로 사용한다.

Call by value 외 2개 소스 1/2 REPORT zabap 19_13. DATA: pv_a(3) TYPE n,

Call by value 외 2개 소스 1/2 REPORT zabap 19_13. DATA: pv_a(3) TYPE n, pv_b(3) TYPE n, pv_sum(3) TYPE n. WRITE : /'Initial value : ', 50 'a = ', pv_a, 'b = ', pv_b, 'sum = ', pv_sum. pv_a = 1. pv_b = 2. PERFORM call_by_value USING pv_a pv_b pv_sum. WRITE : /'Main : ', 50 ' a = ', pv_a, ' b = ', pv_b, ' sum = ', pv_sum COLOR 3. WRITE : / 'Change call by value but main is not change. '. PERFORM call_by_value_result CHANGING pv_a pv_b pv_sum. WRITE : /'Main : ', 50 ' a = ', pv_a, ' b = ', pv_b, ' WRITE : / 'Change after function' COLOR 5. sum = ', pv_sum COLOR 1. PERFORM call_by_reference USING pv_a pv_b pv_sum. WRITE : /'Main : ', 50 ' a = ', pv_a, ' b = ', pv_b, ' WRITE : / 'Actual parameter = Formal parameter' COLOR 5. sum = ', pv_sum COLOR 4. FORM call_by_value USING value(p_pv_a) value(p_pv_b) value(p_pv_sum). WRITE: / '====== start function ======'. WRITE: / 'Call by value Start'. p_pv_sum = p_pv_a + p_pv_b. WRITE : /'Call by value : ', 50 'p_a = ', p_pv_a, 'p_b = ', p_pv_b, 'p_sum = ', p_pv_sum COLOR 3. WRITE : /'Call by value : ', 50 ' a = ', pv_a, ' b = ', pv_b, ' sum = ', pv_sum COLOR 3. WRITE: / '====== end function ======'. ENDFORM. " call_by_value

Call by value 외 2개 소스 2/2 FORM call_by_value_result CHANGING value(p_pv_a) value(p_pv_b) value(p_pv_sum). p_pv_a

Call by value 외 2개 소스 2/2 FORM call_by_value_result CHANGING value(p_pv_a) value(p_pv_b) value(p_pv_sum). p_pv_a = 10. p_pv_b = 20. WRITE: / '====== start function ======'. WRITE: / 'Call by value and result Start'. p_pv_sum = p_pv_a + p_pv_b. WRITE : /'Call by value result pv_a pv_b pv_sum : ', 50 'p_a = ', p_pv_a, 'p_b = ', p_pv_b, 'p_sum = ', p_pv_sum. WRITE : /'Call by value result : ', 50 ' a = ', pv_a, ' b = ', pv_b, ' sum = ', pv_sum COLOR 1. WRITE: / '====== end function ======'. ENDFORM. " call_by_value_result FORM call_by_reference USING p_pv_a p_pv_b p_pv_sum. p_pv_a = 100. p_pv_b = 200. WRITE: / '====== start function ======'. WRITE: / 'Call by reference Start'. p_pv_sum = p_pv_a + p_pv_b. WRITE : /'Call by reference pv_a pv_b pv_sum : ', 50 'p_a = ', p_pv_a, 'p_b = ', p_pv_b, 'p_sum = ', p_pv_sum COLOR 4. WRITE : /'Call by reference : ', 50 ' a = ', pv_a, ' b = ', pv_b, ' WRITE: / '====== end function ======'. ENDFORM. " call_by_reference sum = ', pv_sum COLOR 4.

5. TABLE JOIN

5. TABLE JOIN

Implementation Options for Table Joins 사용 예 SELECT a~sabun a~name a~parts b~parts_area FROM emp

Implementation Options for Table Joins 사용 예 SELECT a~sabun a~name a~parts b~parts_area FROM emp AS a INNER JOIN dep AS b ON a~parts = b~parts INTO CORRESPONDING FIELDS OF TABLE it_people. emp INNER JOIN dep emp 와 dep table을 inner join ON a~parts = b~parts 테이블 두개의 연결 키