• 630 likes • 1.01k Views
SAP BC400. 테크윈 IS 팀 서기준. 목 차. 1. System Architecture, Syntax ……………………… 3 2. 화면 설명 ………………………………………………………………………… 10 3. 소스 설명 ………………………………………………………………………… 14 4. Full Source Code ………………………………………………… 48 5. Subroutine ………………………………………………………………… 51
E N D
SAP BC400 테크윈 IS팀 서기준
목 차 1. System Architecture, Syntax ……………………… 3 2. 화면 설명 ………………………………………………………………………… 10 3. 소스 설명 ………………………………………………………………………… 14 4. Full Source Code ………………………………………………… 48 5. Subroutine ………………………………………………………………… 51 6. TABLE JOIN ………………………………………………………………… 57
System Architecture • 3 Tier 구조 • Presentation Layer • Application Layer • DB Layer • MS • Dispatcher 작업 분배 • Dispatcher • 작업을 WP에 분배 • Work Process • 실제 작업
ABAP Program 1.조회화면 2.F8(실행) 6.Write문 3.WP에서 프로그램 실행 5.Itab에 저장 4. DB 관련 명령어
Interaction Between Server Layers Load-of-program. Initialization. START-OF-SELECTION. END-OF-SELECTION. Select, Insert 등 SQL문 Write문 등 출력문
Activate • Saved Program • Saved 후 Activate하지 않으면 마지막으로 Save 된 것이 아니라 마지막으로 Activate 된 것이 Execute된다. • 실행 전 Activate 필수 • Activate • Save • Check • Activate • Activate를 자주하라.
General ABAP Syntax I • Data선언 • SELECT ~ ENDSELECT • DB에서 조건에 맞는 DATA를 WA_SCARR에 가져옴. • NEW-LINE. (줄바꿈) • wa_scarr-carrid 외 2개 화면 출력. • . (마침표)
General ABAP Syntax II Line 처음 ‘*’ line 주석문 ‘ “ ’ 더블 쿼테이션 다음에 주석문 ‘ : ’, ‘ , ’ 콜론 다음에 콤마가 나오면 앞에 나왔던 명령 계속 실행.(계속 WRITE)
3. 소스 설명 • Data 선언, 15 • Local & Global Data Type 16 • Dictionary 17 • Structure, Work area & Internal Table 19 • Assignments 24 • Event 순서 26 > 조회 화면 > LOAD-OF-PROGRAM. 28 > INITIALIZATION. 28 > AT SELECTION-SCREEN. 29 > 처리 로직 > START-OF-SELECTION. 30 > DB ACCESS 31 > SYSTEM 변수 38 > 화면 출력 > END-OF-SELECTION. 39 > 더블 클릭 > AT SELECTION-SCREEN. 41 >제어문, 반복문 42 > DETAIL LIST 44 > HIDE AREA 46 Source 코드 설명
Data 선언 DATA : gv_char(10) TYPE c, “Character length 10 gv_numc(4) TYPE n, “Numerical Char length 4 gv_pack(5) TYPE p DECIMALS2, “ 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_scarr2 : Local Data Type * 프로그램 내에서 선언하면 Local Data Type DATA : BEGINOF wa_scarr2, carrid TYPE scarr-carrid, carrname TYPE scarr-carrname,ENDOF wa_scarr2. * scarr : Global Data Type * ABAP Dictionary에 정의되어 있으면 Global Data type DATA wa_scarr TYPE scarr.DATA it_scarr LIKETABLEOF wa_scarr.
Using Dictionary Elements to Define Data Objects Within the Program • Data type 선언 • Dictionary 이용 • DATA name TYPE dictionary. • field : 하나의 값 • Work area : 여러 개의 값을 Set으로 저장. • Internal Table : Work area의 set DATA it_spfli TYPE spfli_tab Table Type
Access to Structure Components Work Area – Fieldname 하나의 Data처럼 사용 가능
Work Area, Internal Table 선언 * TYPE : ABAP Dictionary에 있는 것 사용. * Like : Program내에서 선언 된 것을 재사용. * Dictionary를 TYPE으로 가능하지만 권장 안함. DATA wa_scarr TYPE scarr. “Work areaDATA it_scarr LIKETABLEOF wa_scarr. “Itab DATA it_scarr TYPE TABLE OF scarr. “Itab DATA wa_scarr LIKE LINE OF it_scarr. “Work area DATA wa_scarr TYPE s_carr_id. “Data Element,W.A. DATA it_scarr TYPETABLEOF scarr. “Itab DATA it_scarr TYPE scarr_tab. “Table Type,Itab DATA wa_scarr LIKELINEOF it_scarr. “Work area
Internal Table with Header line • DATA : BEGINOF it_scarr OCCURS0, carrid TYPE scarr-carrid, carrname TYPE scarr-carrname, currcode TYPE scarr-currcode, url TYPE scarr-url,ENDOF it_scarr.DATA it_scarr2 TYPETABLEOF scarrWITHHEADERLINE.
Internal Table with Header line * 참고 • 일반적으로 1번 사용 • SAP에서 3번 권장. • 1번 = 2번 = 3번 • 1번의 LOOP At itab 다음에 “INTO itab.” 생략 1. LOOPAT itab. itab-carrid = itab-carrname.MODIFY itab.CLEAR itab.ENDLOOP. 2. LOOPAT itab INTO itab. itab-carrid = itab-carrname.MODIFY itab.CLEAR itab.ENDLOOP.3. LOOPAT itab INTO wa. wa-carrid = wa-carrname.MODIFY wa.CLEAR wa.ENDLOOP.
Internal Tables with and Without Header Lines • 헤더라인 없는 Internal Table 사용 권장 Why? Class에서 헤더라인 있는 Internal Table을 사용할 수 없다. 그래서 헤더라인 없는 Internal Table + Work Area를 사용 권장
Internal Table with Header line 1. 1번 라인을 헤더라인에 올려 데이터를 수정 2. MODIFY 하면 바디가 수정된다. 3. 2번 라인부터 마지막 라인까지 순차적으로 헤더라인에 올려 수정 후 MODIFY 하면 바디 수정 2 1
Value Assignments carrid1 = c_qf Counter 1증가 Field를 Initial Value로 Clear
Copying Structure Components with the Same Name Corresponding은 같은 Field name을 찾아 자동으로 Data의 값을 넣어 줌.
Event 순서 • LOAD-OF-PROGRAM. & INITIALIZATION. Selection Screen 전 PARAMETERS & SELECT-OPTIONS의 초기 값을 넣어 준다. • 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에서 선언 한 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 = 'AZ'.APPEND so_scarr. INITIALIZATION. pa_scarr = 'AB'. • 프로그램 Execute 시키면 조회화면 나오기 전 실행.
조회 조건 체크 • AT SELECTION-SCREEN.IF pa_scarr = 'AA'.MESSAGE'Another value input'TYPE'E'.ENDIF. • 위의 값이 ‘AA’이여서 ERROR Message
Dialog Messages (예)MESSAGE i001(zm19) WITH es_row e_column. • ZM19부분을 더블 클릭하면 message_class로 들어갑니다. • 다음과 같이 입력하면 ‘&’ 부분에 es_row, e_column이 순서대로 들어갑니다. 최대 4개까지 가능합니다. • ‘&&’를 입력하면 화면에 ‘&’으로 출력됩니다.
프로그램 처리 부분 START-OF-SELECTION.SELECT *FROM scarrINTO CORRESPONDING FIELDSOFTABLE it_scarrWHERE 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로 변경 • 검색 결과 Table buffer에 저장 • SELECT … • Native SQL • DB에 직접 Access DBMS에 Dependent • EXEC. ~ ENDEXEC.
Reading Single Records • SELECT SINGLE… • WHERE 조건에 KEY값을 잘 설정해서 DATA 건수가 하나만 나올 수 있도록 해야 함. • DATA 건수가 하나 이상일 경우 제일 처음 만나는 것을 가져옴
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 Field List • SELECT SINGLE… INTO CORRESPONDING FIELDS OF … • 필드 name이 같은 것을 자동으로 찾아 Work area에 들어간다.
Reading several rows using a loop • SELECT … ENDSELECT • DB Interface에서 순차적으로 Data를 가져오기 때문에 속도가 느리다. • 그렇기 때문에, 가능하면 사용하지 말자.
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 = 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.LOOPAT 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.으로 값을 넘기기 위해 사용된다.
CLEAR, REFRESH, FREE • CLEAR ITAB. 헤더만 지운다. • CLEAR ITAB[]. REFRESH ITAB. 바디를 지운다. • FREE ITAB. 할당 된 메모리를 지운다. 그런데 디버그 모드에서 ITAB이 사라지지 않는다. • CLEAR : 변수1, 변수2, 변수3. • Sort it_sflight by carrid. carrid로 it_sflight정렬
더블 클릭 Event • ATLINE-SELECTION.IF sy-lsind = '1'.SELECT *FROM sflightINTO CORRESPONDING FIELDSOFTABLE it_sflightWHERE carrid = wa_scarr-carrid.IF sy-subrc = '0'.WRITE:/ 'New Page Start'.ELSE.WRITE:/ 'No Data in Database'.ENDIF.LOOPAT it_sflight INTO wa_sflight.WRITE :/ wa_sflight-carrid, wa_sflight-connid, wa_sflight-fldate, wa_sflight-price.CLEAR wa_sflight.ENDLOOP.ENDIF.
Loops(반복문) • Loop Counter • sy-index • DO. ~ ENDDO. • DO n TIMS. ~ ENDDO. • WHILE. ~ ENDWHILE. • sy-tabix • LOOP AT <ITAB>. ~ ENDLOOP.
Generating a Details List • AT LINE-SELECTION. • Double click Event
Generating Several Details Lists • sy-lsind • 1이면 더블 클릭 1번 한 화면 • 2이면 위처럼 더블 클릭 1번한 화면에서 다시 더블클릭 1: write 7: BACK 2: 더블클릭 4: 더블클릭 3: write 6: BACK 5: write
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.으로 이동하면 Hide 값을 가지고 와서 사용할 수 있다.
Full Source 1/2 • REPORT zabap19_11.* Data typeDATA : gv_char(10) TYPEc, "Character Length 10 gv_numc(4) TYPE n, "Numerical character Length 4 gv_pack(5) TYPE p DECIMALS2, "Packed Number XXX.XX gv_date TYPE d, "Date 2006.08.27 gv_time TYPE t, "Time 12:16:30 gv_int TYPEi. "Integer* Local Data TypeDATA : BEGINOF wa_scarr2, carrid TYPE scarr-carrid, carrname TYPE scarr-carrname,ENDOF wa_scarr2.* scarr, sflight : Global Data TypeDATA wa_scarr TYPE scarr.DATA it_scarr LIKETABLEOF wa_scarr.DATA wa_sflight TYPE sflight.DATA it_sflight LIKETABLEOF 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.