Domain이 무엇인가?
제가 생각하기에는 데이터엘레먼트를 더 자세하게? 기술적이게? 만들어주는 것이라고 생각한다.
Domain을 통해서
1. Fixed Value 설정
2. Check Table 설정( Value Table )
3. 대문자/소문자 설정
4. 음수 설정
5. Data Type 설정
6. 범위 설정
7. Conversion Routine 설정( IN , OUT )
등등..
정말 다양하게 쓰일 수 있는 Domain이기 때문에 빠지면 안 되는 존재인 것이다.
이번 블로그에서 다룰 것은 Fixed Value을 가져오는 방법을 할 것이다.
Domain Fixed Value 가져오는 방법
사실 가져오는 방법은 많고 다양하다고 생각한다.
사람마다 로직이 다른만큼 다양하다고 생각하기 때문에 그 점은 고려해서 보기를 바란다.
여기서는 FunctionModule과 LOOP문, Read문을 통해서 가져오는 방법을 설명하겠다.
예를 들어 다음과 같은 Table이 있다고 하자.
SCARR에서 필드를 추가하기 위해서
ZSCARR Table 생성
다음은
Domain으로 설정하려고 한다.
1. 흡연실
2. 비 흡연실
으로 나누어 줄 것이다.
ZSMOKE Domain 생성
# 여기서 중요한 것은 물론 Fixed Value 값을 넣는 건 당연하지만
위 사진과 같이 SPACE가 들어간 것을 볼 수가 있다.
SPACE가 들어간 이유는
SE16N이나 SE11에서 빈 값을 넣을 때 에러가 나는 것을 방지할 수 있다.
Domain Fixed Value에 고정된 값만 넣을 수 있는 것이 아닌 빈 값도 넣을 수 있다는 것을 알면 된다.
ZSCARR 테이블의 데이터 확인
# 참고로 저는 ZSMOKE에 값을 하나씩 넣어줬습니다
이제 Table과 Domain설정이 끝났으면 스트럭처를 만들어줘야 한다.
# Domain Value을 담을 공간이 필요하다.
SE11 가서 Structure을 만들어도 되지만 여기서는 Local Structure을 만들려고 한다.
TYPES: BEGIN OF TY_S_LIST.
INCLUDE STRUCTURE ZSCARR.
TYPES: ZSMOKE_T(30), " Domain Value TEXT를 담을 필드 설정 "
END OF TY_S_LIST.
DATA: LT_LIST TYPE STANDARD TABLE OF TY_S_LIST,
LS_LIST TYPE TY_S_LIST.
ZSMOKE_T CHAR 자릿수
Fixed Value TEXT
Fixed Value가 10 자리면 CHAR 자릿수 10자리로 하시면 됩니다.
저는 넉넉하게 30자리 했습니다
이제 불러오는 방법을 알아보자
Domain Value 값 가져오는 로직
1. 'GET_DOMAIN_VALUES' Function Module을 통해서 Domain에 관련된 정보들을 가져온다.
LT_DD07V(변수) 인터널 테이블로 선언해야 한다.
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
DOMNAME = 'ZSMOKE' " Domain 값을 넣으면 된다. "
TEXT = 'X'
TABLES
VALUES_TAB = LT_DD07V " Function Module Table에서 선언된 타입으로 선언 "
EXCEPTIONS
VALUE_NOT_FOUND = 1
OTHERS = 2.
혹시 모르니..
LT_DD07V 값에 디버깅을 걸어보면
다음과 같이 Domain에 대한 정보들을 볼 수 있다.
2. 이제 Domain 값에 따라서 Text가 들어가야 하기 때문에 LOOP문과 READ문을 사용할 것이다.
# LOOP문을 돌기 전 ZSCARR Table SELECT을 했습니다.
LOOP AT LT_LIST INTO LS_LIST. " 테이블의 데이터를 LOOP문으로 돌린다. "
READ TABLE LT_DD07V
WITH KEY DOMVALUE_L = LS_LIST-ZSMOKE " LIST의 Domain Value값 "
INTO LS_DD07V.
" DDTEXT의 값을 ZSMOKE_T(Domain Value TEXT 필드)에 넣어준다 "
LS_LIST-ZSMOKE_T = LS_DD07v-DDTEXT.
MODIFY LT_LIST FROM LS_LIST TRANSPORTING ZSMOKE_T. " 변경된 필드를 설정해 준다. "
ENDLOOP.
3. 결과
다음과 같이 Fixed Value을 가져오는 화면을 볼 수 있다.
만약 Domain Fixed Value을 가져올 필드가 많다고 하면 일일히 다 쓸 필요 없다.
동적으로 가져오면 쉽게 가져올 수가 있다. ( 이건 참고만 )
https://potato98.tistory.com/59
도움이 되셨으면 하단에 있는 광고 한번씩 눌러주세유!!
4. 전체적인 로직.
TYPES: BEGIN OF TY_S_LIST.
INCLUDE STRUCTURE ZSCARR.
TYPES: ZSMOKE_T(30), " Domain Value TEXT를 담을 필드 설정 "
END OF TY_S_LIST.
DATA: LT_LIST TYPE STANDARD TABLE OF TY_S_LIST,
LS_LIST TYPE TY_S_LIST.
SELECT *
FROM ZSCARR
INTO TABLE @LT_LIST.
DATA: LT_DD07V TYPE STANDARD TABLE OF DD07V,
LS_DD07v TYPE DD07V.
CALL FUNCTION 'GET_DOMAIN_VALUES'
EXPORTING
DOMNAME = 'ZSMOKE' " Domain 값을 넣으면 된다. "
TEXT = 'X'
TABLES
VALUES_TAB = LT_DD07V " Function Module Table에서 선언된 타입으로 선언 "
EXCEPTIONS
VALUE_NOT_FOUND = 1
OTHERS = 2.
LOOP AT LT_LIST INTO LS_LIST. " 테이블의 데이터를 LOOP문으로 돌린다. "
READ TABLE LT_DD07V
WITH KEY DOMVALUE_L = LS_LIST-ZSMOKE " LIST의 Domain Value값 "
INTO LS_DD07V.
" DDTEXT의 값을 ZSMOKE_T(Domain Value TEXT 필드)에 넣어준다 "
LS_LIST-ZSMOKE_T = LS_DD07v-DDTEXT.
MODIFY LT_LIST FROM LS_LIST TRANSPORTING ZSMOKE_T. " 변경된 필드를 설정해 준다. "
ENDLOOP.
CL_DEMO_OUTPUT=>DISPLAY( LT_LIST ).
'.ABAP > ..모든 것' 카테고리의 다른 글
SAP 기능이 제대로 동작을 안 할 때(WAIT문) (0) | 2023.04.19 |
---|---|
SAP Workarea vs Structure AND Internal Table(Header Line) vs Trasnparent Table 정리 (0) | 2023.04.09 |
SAP 동적 Domain Fixed Value(도메인 값) 가져오기 (0) | 2023.02.07 |
SAP Function Module [3] 실행 (0) | 2023.01.12 |
SAP 콤마(,) 제거 (0) | 2023.01.12 |