ABAP/기초

[ABAP] 도메인 텍스트 매핑

셜록누나 2026. 5. 23. 18:39

 

배경

ALV에 코드값(SA, 01)만 표시하면 사용자가 의미를 알 수 없음.
ZDE3_FI_BLART = SA → 일반전표 처럼 텍스트로 변환해서 보여줘야 함.

SAP는 도메인 고정값(Fixed Values)의 텍스트를 DD07T 테이블에 저장함.


DD07T 구조

컬럼 설명

DOMNAME 도메인명 (예: ZDE3_FI_BLART)
DOMVALUE_L 코드값 (예: SA)
DDTEXT 텍스트 (예: 일반전표)
DDLANGUAGE 언어키 (WHERE 빠지면 전체 언어 조회됨 주의)

코드 분석

① 도메인 텍스트 Bulk SELECT

SELECT domvalue_l AS key, ddtext
  INTO TABLE @DATA(lt_stgrd)
  FROM dd07t
  WHERE domname EQ 'ZDE3_FI_STGRD'.

SORT lt_stgrd BY key.
  • 도메인 전체 고정값을 한 번에 메모리로 가져옴
  • SORT 는 이후 BINARY SEARCH 를 위한 전처리
  • LOOP 안에서 SELECT 하지 않는 것이 핵심 ← N+1 쿼리 방지

② LOOP + FIELD-SYMBOL + BINARY SEARCH

LOOP AT gt_header ASSIGNING FIELD-SYMBOL(<fs_h>).
  READ TABLE lt_stgrd INTO DATA(ls_stgrd)
    WITH KEY key = <fs_h>-stgrd
    BINARY SEARCH.
  IF sy-subrc EQ 0.
    <fs_h>-stgrd_txt = ls_stgrd-ddtext.
  ENDIF.
ENDLOOP.

포인트 3가지:

FIELD-SYMBOL (<fs_h>) — 복사본이 아닌 원본 참조

" INTO ls_h → 복사본 수정 → gt_header 안 바뀜 (❌)
" ASSIGNING <fs_h> → 원본 직접 수정 (✅)

BINARY SEARCH — 정렬된 테이블에서 O(log n) 탐색

" SORT 없이 BINARY SEARCH → 결과 보장 안 됨 (❌)
" SORT → BINARY SEARCH 세트로 사용 (✅)

sy-subrc 체크 — 코드값이 도메인에 없는 경우 방어

IF sy-subrc EQ 0.  " 찾았을 때만 텍스트 세팅

전체 흐름 요약

DD07T (도메인 고정값 테이블)
    │
    │ SELECT (Bulk, 1회)
    ▼
lt_stgrd / lt_blart (메모리)
    │
    │ SORT → BINARY SEARCH
    ▼
gt_header (ALV 출력 테이블)
    stgrd_txt / blart_txt 컬럼에 텍스트 세팅

주의사항

언어 필터를 빠뜨리면 다국어 레코드가 중복 조회됨.
운영 시스템에서는 WHERE 절에 추가 권장:

WHERE domname    EQ 'ZDE3_FI_BLART'
  AND ddlanguage EQ sy-langu.   " 현재 로그인 언어