ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CDS Table Function — implementedBy 메서드명 추출
    SAP 2026. 5. 19. 20:05
    CDS Table Function — implementedBy 메서드명 추출

    CDS Table Function — implementedBy 메서드명 추출

    2026 · SAP ABAP / CDS · DDL 소스 파싱 패턴

    1. 배경

    CDS Table Function은 @ObjectModel.query.implementedBy 어노테이션으로 구현 클래스와 메서드를 지정한다.
    어노테이션 전용 API나 단일 테이블로 바로 조회하는 방법은 명확하지 않으므로, DDL 소스를 읽고 정규식으로 추출하는 방법이 가장 단순하고 확실하다.

    💡 CDS Table Function은 @ObjectModel.query.implementedBy 없이는 활성화 자체가 불가하므로, DDL 소스 파싱은 항상 유효한 접근이다.

    2. 처리 흐름

    1
    DDL 소스 읽기
    cl_dd_ddl_handler=>get_ddl_source() 로 CDS 소스 문자열 취득
    2
    Regex로 implementedBy 값 추출
    패턴: 'ABAP:([^']+)' → SUBMATCHES 로 클래스=>메서드 문자열 획득
    3
    클래스 / 메서드 분리
    => 구분자로 SPLIT → 클래스명 / 메서드명 각각 활용

    3. 전체 소스

    "---------------------------------------------------------
    " CDS Table Function 구현 메서드명 추출
    " @ObjectModel.query.implementedBy: 'ABAP:ZCL_CLASS=>METHOD'
    "---------------------------------------------------------
    DATA lv_cds    TYPE string VALUE 'Z_MY_TABLE_FUNCTION'.
    DATA lv_src    TYPE string.
    DATA lv_impl   TYPE string.
    DATA lv_class  TYPE string.
    DATA lv_method TYPE string.
    
    " ① DDL 소스 읽기
    cl_dd_ddl_handler=>get_ddl_source(
      EXPORTING
        iv_name    = lv_cds
        iv_version = 'A'
      IMPORTING
        ev_source  = lv_src ).
    
    " ② implementedBy 값 추출 (정규식)
    "    매칭 대상 예: 'ABAP:ZCL_MY_CLASS=>MY_METHOD'
    FIND REGEX `'ABAP:([^']+)'`
      IN lv_src
      SUBMATCHES lv_impl.
    
    IF sy-subrc <> 0.
      WRITE: / '구현 어노테이션을 찾을 수 없습니다.'.
      RETURN.
    ENDIF.
    
    " ③ 클래스 / 메서드 분리
    SPLIT lv_impl AT '=>' INTO lv_class lv_method.
    
    " ④ 결과 출력
    WRITE: / 'CDS Name :', lv_cds.
    WRITE: / 'Class    :', lv_class.
    WRITE: / 'Method   :', lv_method.
    CDS Name :Z_MY_TABLE_FUNCTION
    Class :ZCL_MY_CLASS
    Method :MY_METHOD

    4. 핵심 포인트

    항목설명
    iv_version = 'A' 활성 버전 소스 읽기 (비활성이면 'M')
    정규식 'ABAP:([^']+)' 작은따옴표 사이의 ABAP: 이후 문자열 전체 캡처
    SUBMATCHES lv_impl 캡처 그룹 1번을 직접 변수로 받음 → ZCL_CLASS=>METHOD
    SPLIT AT '=>' 클래스명과 메서드명 분리
    sy-subrc <> 0 체크 어노테이션 미존재 시 예외 처리 필수

    5. 정규식 패턴 변형

    상황패턴
    기본 (권장) 'ABAP:([^']+)'
    대소문자 무시 (?i)'abap:([^']+)'
    클래스만 추출 'ABAP:([^=>']+)
    메서드만 추출 =>([^']+)'
    ⚠️ [] 안의 '(작은따옴표)는 ABAP 소스 내에서 문자 리터럴 경계이므로, 패턴 작성 시 ABAP 문자열 리터럴과 혼동하지 않도록 주의한다. 필요 시 |...| 문자열 템플릿을 활용하면 이스케이프를 줄일 수 있다.
    #SAP_ABAP #CDS #TableFunction #implementedBy #AMDP #정규식 #DDL소스파싱
Designed by Tistory.