300x250
728x90

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에 값을 하나씩 넣어줬습니다 

 

이제 TableDomain설정이 끝났으면 스트럭처를 만들어줘야 한다. 

# 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가 들어가야 하기 때문에 LOOPREAD을 사용할 것이다. 

# 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

 

SAP 동적 Domain Fixed Value(도메인 값) 가져오기

만듦 Domain Fixed Value 값을 가져옴에 있어서는 다양한 방법이 있다. - 펑션을 불러서 만드는 방법이나 - Domain 관련된 테이블을 가져와서 만드는 방법 등등 프로그램을 개발하다 보니 도메인 값을

potato98.tistory.com

 

 

도움이 되셨으면 하단에 있는 광고 한번씩 눌러주세유!!

 

 

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 ).

 

 

728x90