1. 복습 프로젝트
- SPFLI 테이블에서 carrid와 connid에 해당하는 데이터를 조회해 오는 프로그램을 작성해볼것.
- Parameter 로 carrid 와 connid 를 입력받는 변수 생성
- Data 로 DB로 부터 해당 id에 맞는 데이터를 담을 스트럭쳐 생성
- Select 쿼리로 조건에 맞는 데이터를 스트럭쳐로 가져오기
- Write 문으로 조회된 데이터를 출력.
- IF sy-subrc = 0.
sy-subrc 값을 확인하는 조건문 구문 내에서 데이터를 출력한다. 데이터가 성공적으로 조회된 경우 sy-subrc는 0값을 가지고 데이터가 없는 경우에는 4 값을 가진다.
2. Modularization
- 가독성 향상, 코딩 효율 향상, 코드 재사용성 향상
- Perform, Function, Class 의 method 를 사용하여 구현
- Perform (Subroutines) 은 해당 소스 내에서만 재사용 가능하므로 대부분 Class, Function 을 사용하여 작업한다.
- Global 클래스 생성 : se24
2-1. PERFORM (Subroutine)
- FORM, ENDFORM 구문으로 작성하며 호출할때 PERFORM 을 사용한다.
- 작성 예
FORM write_list.
WRITE 'aa'.
WRITE / 'bb'.
ENDFORM.
- 호출
PERFORM write_list.
- 서브루틴 작성시 파라메터 선언은 USING 문을 사용하여 선언하고 호출 시에도 USING 문을 사용하여 값을 넘긴다.
- 작성 예
FORM write_list USING pa_id
WRITE 'aa'.
WRITE / 'bb'.
NEW-LINE.
WRITE pa_id.
ENDFORM.
- 호출
PERFORM write_list USING ca_id
- 파라메터는 call by value, call by value and result, call by reference 가 있으며 call by value and result 의 경우 서브루틴이 모두 성공한 경우에만 결과값을 리턴해준다.
- 작성 예
FORM write_list
USING
value(f1) "<- call by value
CHANGING
value(f2) "<- call by value and result
f3. "<- call by reference
WRITE f1.
WRITE / f2.
NEW-LINE.
WRITE f3.
ENDFORM.
- 호출
PERFORM write_list
USING
a
CHANGING
b
c.
- 파라메터 선언 시 TYPE을 명시해 주는데 TYPE ANY 의 경우 모든 타입을 다 받겠다는 뜻으로 어떤 형태의 값이든 다 받을 수 있긴 하지만, 시스템 성능 저하의 원인이 된다.
- 작성 예
FORM write_list
USING
value(f1) TYPE ANY
CHANGING
value(f2) TYPE i
f3 TYPE scarr.
2-2. Function Group
- 연관되어있는 Function을 묶어 Function Group으로 관리한다.
- Function Interface
- Exporting Param : 값을 내보내는 파라메터
- Importing Param : 값을 입력하는 파라메터
- Changing Param : 입력한 변수에 결과값을 받아오기 위한 파라메터
- Tables
- Exceptions : sy-subrc. 0 이 아닌경우 실패다.
- Function Group 내에서는 Screen, Data Obj, Sub-Program 등을 모두 공유하여 사용 할 수 있다.
- Function 검색 : Function Builder에서 와일드카드*를 이용해서 검색을 해 볼 수 있다.
- Function 호출문 삽입
- 작업창 상단에 pattern을 눌러서 작성된 함수 선택
- 동일 프로젝트 내 인 경우 Object 브라우저에서 function을 드래그 드롭으로 삽입
- 직접 Call Function 문을 타이핑 (오타 및 필수 파라메터 누락 가능성이 크므로 권장하지 않음)
- Function 생성
- 우측버튼 > create > Function Group
- se37 코드 입력 > Function 생성
- Function Group 을 생성하면 Includes 라는 폴더에 TOP으로 끝나는 목록이 생성된걸 확인 할 수 있다.
3. Internal Table
- Standard, Sorted, Hashed 형이 있으며 일반적으로 Standard를 쓴다. Hashed가 가장 빠르지만 인덱스형 접근이 안되는 등의 제약사항이 있어서 일반적으로 잘 사용하지 않는다.
- Append : 데이터를 테이블의 가장 아래쪽에 데이터를 추가해준다.
APPEND gs TO gt_itab.
APPEND LINES OF gt_it1 Where ... INTO gt_it2
- Insert : 뒤에 조건절이 있어서 조건에 맞는 위치에 데이터를 삽입한다.
INSERT gs INTO TABLE gt_itab where ...
INSERT LINES OF gt_it1 Where ... INTO gt_it2 Where ...
- Read : 데이터를 한줄만 읽는다.
READ TABLE gt_itab INTO gs where ...
- Modify : 데이터를 수정한다.
MODIFY TABLE gt_itab FROM gs where ...
- Delete : 데이터를 삭제한다.
DELETE gt_itab where ...
- SORT : Standard 테이블을 Sort를 하면 Sorted 테이블이 된다. Sorted 테이블로 선언한 테이블에는 사용할 수 없다.
SORT gt_flightinfo BY carrid
SORT gt_flightinfo BY percentage DESCENDING
- REFRESH : internal table 의 데이터를 모두 지우고 빈 테이블을 만들어준다.
- FREE : internal table의 메모리를 해제한다. (REFRESH 구문 사용 후에 사용한다.)
REFRESH gt_flightinfo
FREE gt_flightinfo
- CLEAR : 데이터도 지우고 메모리도 모두 해제한다. 헤더라인 테이블을 사용하는 경우에는 아래와 같이 클리어 처리를 해준다. (헤더라인 테이블은 사용 지양)
CLEAR lt_scarr, lt_scarr[].
- SELECT ... ENDSELECT : 루프를 돌면서 DB를 계속 접근해서 데이터를 가져와 loop 형태로 처리된다. DB 커넥션이 계속 발생하므로 권장하지 않는다.
- CLIENT SPECIFIED : 특정 클라이언트에 해당하는 데이터를 가져와야 하는 경우 사용한다.
- JOIN 구문 (테이블명과 필드 사이를 물결로 연결한다.)
SELECT ... FROM spfli INNER JOIN scarr ON spfli~carrid = scarr~carrid WHERE ...
* 테이블 생성 시 MANDT 라는 필드는 필수로 항상 생성하여야 한다.
* Package 에 $TMP는 로컬을 의미함.
[ABAP] Offline-Study 4 - 2013.12.21 (0) | 2013.12.21 |
---|---|
[ABAP] Offline-Study 3 - 2013.12.14 (0) | 2013.12.14 |
[ABAP] Offline-Study 1 - 2013.11.30 (0) | 2013.11.30 |
정규표현식 정리 (0) | 2013.09.12 |
vhd(VirtualPC) 파일 vdi (VirtualBox)로 변환하기! (0) | 2013.05.23 |