-
[SYNC] 실습코드 개선 _ RANGE TABLEABAP 2024. 1. 31. 11:13
QUIZ12 하면서 코드 개선해야 할 점을 정리해보았다.
선생님 코드를 보면 단순하고 쉬운데
항상 너무 어렵게 생각하려고 하는 것 같다.
1. RANGE TABLE
사용자의 라디오 버튼 입력에 따라 가져와야할 데이터가 달랐다.
사용자가 ALL을 선택하면 모든 테이터를
P를 선택하면 CUSTTOM TYPE이 P인 데이터를
B를 선택하면 TYPE이 B인데이터를 가져와야해서 나는 쿼리를 총 3번 적었다.
딱 봐도
비효율적이다.
이런 경우에 사용하면 좋은 방식이있는데 바로 RANGE TABLE이다!
SELECT OPTION 이랑 비슷하다고 생각하면 된다.
SIGN / OPTOIN / LOW / HIGH 4개의 필드를 가진 테이블 형태이다.
이런식으로 테이블을 만들어서
원하는 조건의 데이터를 가져올 수 있다.
1-1. RANGE TABLE 선언하기
기본 선언 방식은 아래와 같다.
DATA: <RANGE TAB NAME> TYPE RANGE OF SCUSTOM-CUSTTYPE, <WA NAME> LIKE LINE OF <RANGE TAB NAME>.
CUSTTPYE을 기준으로 구분할 RANGE TAB을 선언해주었다.
다음 원하는 기준을 APPENED 해주면 된다.
1-2. RANGE TABLE에 값 할당하기
이렇게 해주면 내가
ALL 을 선택하면 LT_CUSTTYPE은 아무 값도 들어가지 않으므로, 특별한 조건 없이 모든 데이터를 가져오고
P 를 선택하면 I / EQ / 'P' 가 들어가기니까 P에 해당되는 사람만 찾게된다.
1-3. RANGE TABLE을 활용해서 원하는 데이터 가져오기
RANGE TABLE은 WHERE절에 올때 OPERATOR가 IN이 온다.
전체 코드의 흐름은 아래와 같다.
초반에 쿼리 3개 작성하는것보다 훨씬 가독성도 좋고 간결해보인다.
2. COUNT
이거 보고..정말 바보라고 생각했다.
나는 고객별 예약건수를 SBOOK테이블에서 가져와야 했는데 그래서
GROUPBY 를 사용해서 가져와야 한다고 생각했다.
당연히 GROUPBY를 고객 아이디로 하니,
SELECT 문에도 CUSTOM ID가 와야했고
CUSTOM ID와 BOOK_CNT 만 담을 변수가 필요해서
이렇게 바보같이.. 그 데이터를 가져올 변수를 따로 선언했다 ^^
근데 정말 멍청이인게 어짜피 WHERE절에서 해당 고객의 데이터만 가져오기때문에
딱히 그룹을 지정해주지 않아도 된다는 점이다!
그냥 해당고객의 데이터를 가져와서
전체 갯수만 세서!
바로 출력 STRUCT에 넣으면..아주아주 간단하다..
이렇게 코드를 개선할 수 있다.
야호.
3. 국가 이름 가져오기
난 그냥 바로 T005T에서 해당 유저가 접속한 언어에 해당되는 나라의 이름을 가져오는
서브루틴을 작성했다.
다른방식도 있어서 한번 정리해보았다.
일단 INITIALIZATION에
새로운 서브루틴을 작성해보자
여기에서 해당 유저가 접속한 언어의 데이터만 일단 가져오는 거다.
이케
그다음에 가져온 테이블에서 READ 구문을 가져와 나라이름을 가져오는 방식이다.
다음에는 좀 더 쉽고 간결한 코드를 짜보자ㅠ
'ABAP' 카테고리의 다른 글
[ABAP] Enhancement (0) 2024.02.19 [ABAP] Statement is not accessible 오류 해결 (0) 2024.02.06 [ABAP] ALV_특정 셀 색칠하기 (1) 2024.01.31 [ABAP] MAINTENANCE VIEW (0) 2024.01.29 [ABAP] TAB STRIP SUBSCREEN 호출 오류 (1) 2024.01.29