CDS 뷰 사용

Objectives

After completing this lesson, you will be able to:
  • CDS 뷰 정의를 분석합니다.
  • CDS 뷰를 사용하여 데이터를 읽습니다.

CDS 뷰

ABAP Core Data Services(ABAP CDS)의 뷰 정의

ABAP Core Data Services 또는 ABAP CDS는 ABAP에서 풍부한 의미 구조를 가진 데이터 모델을 정의하고 사용하기 위한 인프라입니다. CDS DDL을 사용하여 시맨틱 데이터 모델을 구현하는 CDS 엔티티를 정의합니다. 가장 중요한 CDS 모델링 엔티티는 CDS 뷰 엔티티입니다.

CDS 뷰 정의에는 재사용 가능한 SQL 로직이 포함되어 있습니다. 테이블 필드 프로젝션처럼 단순하거나 계산, 집계, 조인, 유니온 등을 통해 좀 더 정교할 수도 있습니다.

CDS 뷰 정의에는 데이터 모델의 관계를 반영하는 연관 관계가 포함될 수 있습니다. 뷰의 사용자는 연관 관계를 사용하여 관련 데이터를 검색할 수 있습니다.

마지막으로 주석은 뷰 정의를 의미적으로 확장하는 데 사용됩니다. 이 메타데이터는 CDS 뷰 정의를 기반으로 빌드하는 프레임워크에 의해 평가됩니다. 이러한 프레임워크 중 하나는 ABAP RESTful 어플리케이션 프로그래밍 모델이며 이 과정의 뒷부분에서 예시를 살펴보겠습니다.

CDS 뷰 정의의 예를 살펴보겠습니다.

CDS 뷰 정의는 데이터 정의 유형의 저장소 오브젝트에 포함되어 있습니다. 이제 데이터 정의 /DMO/I_CONNECTION의 소스 코드를 살펴보겠습니다.

주요 부분은 DEFINE VIEW ENTITY 문입니다. 여기에는 CDS 뷰 엔티티의 이름과 키워드 FROM 뒤에 데이터 소스가 포함됩니다. 이 예에서 뷰 엔티티의 이름은 /DMO/I_Connection 이고 데이터 소스는 데이터베이스 테이블 /dmo/connection 입니다. 선택사항인 추가 요소 AS는 뷰 정의 내에서 데이터 소스를 처리하기 위해 연결 이라는 별칭 이름을 정의합니다.

노트

CDS 뷰 엔티티의 소스도 다른 CDS 뷰가 될 수 있습니다.

중괄호 쌍에는 뷰 요소 리스트가 포함됩니다. 이 예에서 뷰 요소는 데이터베이스 테이블 /dmo/connection의 필드입니다. 처음 두 요소 앞의 키워드 키는 CDS 뷰 엔티티의 키 필드로 정의됩니다. 선택적 추가 요소 AS는 각 뷰 요소의 별칭 이름을 정의합니다.

association 추가하여 다른 CDS 뷰 엔티티에 대한 관계를 정의합니다. 이 예에서 관련 뷰는 CDS 뷰 엔티티 /DMO/I_Carrier 이고 연관 관계의 이름은 _Airline 입니다.

이 연관 관계는 뷰 소비자가 요소 리스트에 추가하여 사용할 수 있게 됩니다. 이를 연관 관계 노출이라고 합니다.

주석은 at sign(@)으로 시작하며 소비자를 위한 뷰 정의를 의미적으로 확장하는 데 사용됩니다. 뷰 정의 앞의 주석을 엔티티 주석이라고 합니다. 엔티티 주석은 뷰 엔티티의 메타데이터를 전체적으로 정의하는 데 사용됩니다. 중괄호 사이의 주석을 요소 주석이라고 합니다. 요소 주석은 뷰의 여러 요소에 대한 메타데이터를 정의하는 데 사용됩니다.

데이터 미리보기 툴을 사용하여 데이터베이스 테이블의 내용을 조회하고 분석하는 방법을 이미 배웠습니다. 이 툴은 CDS 뷰 엔티티에도 사용할 수 있습니다.

지정된 CDS 엔티티의 데이터 미리보기를 열려면 데이터 정의의 아무 곳이나 마우스 오른쪽 버튼으로 클릭하고 Open WithData Preview 를 선택합니다. 또는 데이터 정의의 아무 곳에나 커서를 놓고 F8 을 누릅니다.

이 툴에는 CDS 엔티티에서 반환된 데이터가 표시됩니다. 동일한 기능을 사용하여 데이터를 정렬하거나 필터링하고 표시를 조정할 수 있습니다.

뷰 정의에 하나 이상의 연관 관계가 포함된 경우 이 연관 관계를 사용하여 관련 데이터를 표시할 수 있습니다. 이렇게 하려면 다음과 같이 진행합니다.

  1. 화면에서 행을 마우스 오른쪽 버튼으로 클릭합니다.
  2. 단축 메뉴에서 Follow Association 을 선택합니다.
  3. 사용 가능한 연관 관계 리스트에서 관심 있는 항목을 선택합니다.

특정 데이터베이스 테이블을 소스로 사용하는 모든 CDS 뷰를 찾으려면 ADT의 사용처 리스트 툴을 사용할 수 있습니다. 이 툴을 사용하려면 다음과 같이 하십시오.

  1. 데이터베이스 테이블의 정의를 엽니다.
  2. 소스 코드를 마우스 오른쪽 버튼으로 클릭하고 단축 메뉴에서 사용처 리스트 가져오기 를 선택합니다. 또는 Ctrl + Shift + G 를 누르거나 툴바에서 같은 기호가 있는 버튼을 선택할 수 있습니다.
  3. 검색 뷰에는 데이터베이스 테이블을 직접 사용하는 모든 개발 오브젝트의 리스트가 표시됩니다.

사용처 리스트 에 필터를 적용할 수 있습니다. 예를 들어 특정 오브젝트 유형의 특정 패키지나 오브젝트에 관심이 있는 경우에만 필터를 적용할 수 있습니다. 이 예에서는 테이블을 사용하는 CDS 뷰를 필터링하는 방법을 보여줍니다.

CDS 뷰 분석 방법

ABAP SQL의 CDS 뷰

ABAP에서 SELECT 문을 구현할 때 데이터베이스 테이블에서 직접 읽는 대신 CDS 뷰 엔티티를 데이터 소스로 사용할 수 있습니다. 여기에는 여러 가지 이점이 있습니다.

  • CDS 뷰에 포함된 SQL 로직 재사용
  • 연관 관계를 사용하여 간결하고 읽기 쉬운 관련 데이터 읽기
  • 때때로 뷰 및 뷰 요소의 이름을 데이터베이스 테이블 및 테이블 필드의 기술적 이름보다 더 잘 읽을 수 있습니다.

예시의 SELECT 문은 CDS 뷰 엔티티 /DMO/I_Connection 을 데이터 소스로 사용합니다.

노트

FIELDS 절과 WHERE 조건에 사용되는 이름은 뷰 요소의 별칭 이름입니다.

FIELDS 절의 세 번째 요소는 노출된 연관 관계 _Airlines를 사용합니다. 관련 CDS 뷰 엔티티 /DMO/I_Carrier 에서 Name 요소를 읽습니다. 이러한 종류의 요소를 경로식(path expression)이라고 한다. 백슬래시(\)는 연관 관계 이름에 반드시 필요한 접두부입니다.

CDS 뷰 엔티티 분석 및 사용

이번 연습문제에서는 데이터베이스 테이블이 아닌 CDS 뷰 엔티티를 읽습니다. 항공사의 이름에도 편안하게 액세스할 수 있습니다.

템플릿:

  • /LRN/CL_S4D400_DBS_SELECT(전역 클래스)

솔루션:

  • /LRN/CL_S4D400_DBS_CDS(전역 클래스)

태스크 1: 템플릿 복사(선택사항)

템플릿 클래스를 복사합니다. 이전 연습문제를 완료한 경우 이 태스크를 건너뛰고 클래스 ZCL_##_SELECT를 계속 편집할 수 있습니다.

단계

  1. 클래스 /LRN/CL_S4D400_DBS_SELECT 를 사용자의 패키지에 포함된 클래스에 복사합니다(제안 이름: ZCL_##_CDS, ##은 그룹 번호).

    1. 전역 클래스 /LRN/CL_S4D400_DBS_SELECT의 소스 코드를 엽니다.

    2. 프로젝트 탐색기 뷰를 편집기와 연결합니다.

    3. 프로젝트 탐색기 뷰에서 클래스 /LRN/CL_S4D400_DBS_SELECT 를 마우스 오른쪽 버튼으로 클릭하여 단축 메뉴를 엽니다.

    4. 단축 메뉴에서 Duplicate .... 를 선택합니다.

    5. 패키지 필드에 패키지 이름을 입력합니다. 이름 필드에 이름 ZCL_##_CDS 를 입력합니다. 여기서 ##은 그룹 번호입니다.

    6. 내역을 조정하고 다음 을 선택합니다.

    7. 전송 요청을 확인하고 Finish를 선택합니다.

태스크 2: CDS 뷰 엔티티 분석

CDS 뷰 엔티티 /DMO/I_Connection 의 정의를 분석합니다.

단계

  1. CDS 뷰 엔티티 /DMO/I_Connection 의 정의가 포함된 개발 오브젝트를 엽니다.

    1. Eclipse 툴바에서 Open ABAP Development Object 를 선택하거나 Ctrl + Shift + A 를 누릅니다.

    2. 입력 필드에 /DMO/I_Con 을 검색 문자열로 입력합니다.

    3. 일치하는 항목 리스트에서 /DMO/I_CONNECTION (데이터 정의)을 클릭하고 확인 을 선택합니다.

  2. CDS 뷰 엔티티의 요소 리스트를 분석합니다.

    1. 중괄호 쌍( { } ) 사이에 쉼표로 구분된 리스트로 이동합니다.

    2. 키워드 AS 뒤에 별칭 이름이 표시됩니다.

  3. 연관 관계 _Airline 의 대상에 대한 요소 정보(F2) 를 엽니다.

    1. as _Airline 전에 /DMO/I_Carrier 클릭하고 F2를 눌러 요소 정보를 표시합니다.

태스크 3: 추가 특성 선언

로컬 클래스 lcl_connection 을 private 인스턴스 특성 carrier_name 으로 확장합니다. 신규 특성의 출력을 get_output( ) 메소드의 구현에 추가합니다.

노트

신규 특성이 아직 입력되지 않았습니다. 데이터를 입력하기 위해 이 연습문제의 다음 태스크에서 SELECT 문을 조정합니다.

단계

  1. 전역 클래스의 lcl_connection 로컬 클래스로 돌아갑니다.

    1. 전역 클래스에서 로컬 유형 을 선택합니다.

  2. 클래스 정의에 다음 private 특성을 추가합니다.

    특성

    특성 이름범위데이터 유형
    carrier_name인스턴스/DMO/CARRIER_NAME
    1. 코드를 다음과 같이 조정합니다.

      Code Snippet
      1234567891011
      PRIVATE SECTION. DATA carrier_id TYPE /dmo/carrier_id. DATA connection_id TYPE /dmo/connection_id. DATA airport_from_id TYPE /dmo/airport_from_id. DATA airport_to_id TYPE /dmo/airport_to_id. DATA carrier_name TYPE /dmo/carrier_name. ENDCLASS.
  3. get_output 메소드의 구현을 확장합니다. 운송업체 ID를 사용하여 문자열 템플릿에 운송업체 이름을 추가합니다.

    1. get_output 메소드의 구현으로 이동합니다.

    2. 명령문 APPEND |Carrier:     { carrier_id      }| TO r_output. 을 다음 명령문으로 바꿉니다.

      Code Snippet
      123
        APPEND |Carrier:     { carrier_id } { carrier_name }| TO r_output.
  4. 클래스를 활성화합니다. 이를 실행하고 콘솔 출력을 분석합니다.

    1. Ctrl + F3 을 눌러 클래스를 활성화합니다.

    2. F9 를 눌러 클래스를 실행합니다.

태스크 4: CDS 뷰 엔티티 사용

메소드 생성자 구현에서 데이터베이스 테이블 /dmo/connection을 읽는 SELECT 문을 CDS 뷰 엔티티 /DMO/I_Connection에서 읽는 SELECT 문으로 대체합니다.

단계

  1. 메소드 생성자 구현에서 SELECT 문의 주석을 작성합니다.

    1. SELECT SINGLE ... .에 속하는 라인을 모두 선택합니다.

    2. Ctrl + < 를 눌러 선택한 각 라인 앞에 별표 기호(*)를 추가합니다.

  2. 주석 처리된 코드 다음에 CDS 뷰 /DMO/I_Connection 에서 단일 레코드를 읽는 SELECT 문을 추가합니다.

    1. 코드를 다음과 같이 조정합니다.

      Code Snippet
      123456789101112
      * SELECT SINGLE * FROM /dmo/connection * FIELDS airport_from_id, airport_to_id * WHERE carrier_id = @i_carrier_id * AND connection_id = @i_connection_id * INTO ( @airport_from_id, @airport_to_id ). SELECT SINGLE FROM /DMO/I_Connection
  3. FIELDS 절을 구현합니다. 뷰 요소 DepartureAirportDestinationAirport 를 읽습니다. 또한 연관 관계 _Airlines의 대상에서 뷰 요소 Name 을 읽습니다.

    힌트

    자동 완성(Ctrl + Space)을 사용하여 이름을 입력합니다.
    1. FROM /DMO/I_Connection 다음에 FIELDS 입력합니다.

    2. 비워 둔 후 Ctrl + Space 를 누르고 DepartureAirport 를 선택합니다.

    3. 쉼표와 공백 다음에 Ctrl + Space를 다시 누르고 DestinationAirport 를 선택합니다.

    4. 쉼표와 공백 뒤에 백슬래시(\)를 입력하고 Ctrl + Space를 누른 후 _Airline을 선택합니다.

    5. _Airline 바로 뒤에 대시 부호(-)를 입력하고 Ctrl + 스페이스바를 누른 후 이름 을 선택합니다.

    6. 전체 FIELDS 절은 다음과 같아야 합니다.

      Code Snippet
      123
      FIELDS DepartureAirport, DestinationAirport, \_Airline-Name
  4. WHERE 조건을 구현합니다. 임포트 매개변수 i_carrier_id 및i_connection_id 의 값으로 CDS 뷰 엔티티의 키 요소를 제한합니다. 접두부가 @ 인 매개변수는 이스케이프해야 합니다.

    힌트

    자동 완성(Ctrl + Space)을 사용하여 요소 이름과 매개변수 이름을 입력합니다.
    1. 다음 코드를 FIELDS 절 뒤에 추가합니다.

      Code Snippet
      1234
      WHERE AirlineID = @i_carrier_id AND ConnectionID = @i_connection_id
  5. INTO 절을 구현합니다. 특성 airport_from_id,airport_to_idcarrier_name 에 SELECT 결과를 저장합니다. 접두부가 @ 인 특성은 이스케이프해야 합니다.

    힌트

    자동 완성(Ctrl + Space)을 사용하여 특성 이름을 입력합니다.
    1. 코드를 다음과 같이 조정합니다.

      Code Snippet
      12345
      WHERE AirlineID = @i_carrier_id AND ConnectionID = @i_connection_id INTO ( @airport_from_id, @airport_to_id, @carrier_name ).
    2. 전체 SELECT 문은 다음과 같아야 합니다.

      Code Snippet
      12345678
      SELECT SINGLE FROM /DMO/I_Connection FIELDS DepartureAirport, DestinationAirport, \_Airline-Name WHERE AirlineID = @i_carrier_id AND ConnectionID = @i_connection_id INTO ( @airport_from_id, @airport_to_id, @carrier_name ).
  6. 클래스를 활성화합니다. 이를 실행하고 콘솔 출력을 분석합니다. 신규 특성의 출력에 데이터가 표시되는지 확인합니다.

    1. Ctrl + F3 을 눌러 클래스를 활성화합니다.

    2. F9 를 눌러 클래스를 실행합니다.