본문 바로가기
카테고리 없음

RAP 04 - SIMPLE REPORT : Multiple entity

by SAPortal 2026. 6. 1.
반응형

목차

    1. MULTIPLE ENTITY 연결

    ASSOCIATION

    이번시간에는 ASSOCIATION을 사용하여 다른 테이블을 연결하여 APP에 반영하는 실습을 해보겠습니다.

    Note
    ASSOCIATION은 JOIN과 비슷하지만 차이점은 두 테이블(CDS View) 간의 연관 관계를 미리 정의해 두고 실제 데이터가 필요해서 호출하는 그 순간에만 백엔드에서 자동으로 JOIN이 일어나게 만드는 스마트한 연결고리 입니다.

     

     

    기존에 생성한 FLIGHT View와 연결할 BOOKING View를 만들어 보겠습니다. Data Definitions에 마우스 오른쪽 클릭 후 

    New Data Definition을 클릭합니다.

     

     

    CDS Viewl의 Name과 Description을 입력하고 Next 버튼을 클릭합니다.

     

     

    defineViewEntity를 선택하고 Finish 버튼을 클릭합니다.

     

     

    FLIGHT View를 생성했던 것처럼 BOOKING View도 아래와 같이 생성해 줍니다.

     

     

    이제 MAIN View인 ZEVER_FLIGHT_I에 BOOKING View를 아래와 같이 연결합니다.

    ASSOCIATION은 카디널리티(Cardinality)라고 두 테이블(CDS View)간의 관계의 형태 ([1..1],[1..*])를 명시해야 합니다.

    그럼으로 해서 시스템은 데이터 구조를 미리 파악하고 쿼리를 최적화할 수 있도록  돕습니다.

    ASSOCIATION의 alias명은 앞에 보통 언더바로 시작하게 네이밍을 합니다. 그리고 필드에도 추가해 줍니다.

     

     

    FLIGHT View에 ASSOCIATION을 적용했다면 BOOKING View에도 아래와 같이 적용해 줍니다.

     

     

    ON조건의 $projection 명령어를 잠깐 설명드리면 Main View의 projection된 필드 즉 노출된 필드를 사용하겠다는 의미입니다.

    항공사ID필드를 예를 들자면 실제 필드명은 carrier_id이지만 alias를 주어 실제로 Front에 노출되는 필드명은 CarrierId가 됩니다. 그렇기 때문에 ON조건에 $projection키워드를 사용할때는 CarrierId를 사용해야 합니다. 

    아래는 $projection을 사용하지 않을때의 예시입니다. 이때는 실제 필드명을 사용해야 합니다.

     

    CARDINALITY

    Note
    카디널리티(Cardinality)는 데이터 모델링에서 한쪽 테이블의 데이터 1건이 다른쪽 테이블의 데이터 몇 건과 연결될 수 있는가를 나타내는 관계를 표현한 것입니다.
    [1..1] : 1대1 을 나타내며 한건의 데이터는 반드시 상대방 데이터 딱 한건과만 매핑됩니다.
    [0..1] : 0또는1 을 나타내며 상대방 데이터가 없을 수도 있고, 있다면 최대 1건만 존재합니다.
    [1..*] : 1대N 을 나타내며 상대방 데이터가 최소 1건 이상, 여러 건 존재할 수 있습니다.
    [0..*] : 0대N 을 나타내며 상대방 데이터가 아예 없을 수도 있고, 여러 건 존재할 수 있습니다.

     

     

     

    2. #LINEITEM_REFERENCE

     

    이제 OBJECT PAGE 하단에 BOOKING정보를 표현해 보겠습니다.

     

     

    MAIN View인 ZEVER_FLIGHT_I에 facet을 하나 더 추가합니다. 첫 화면에서 선택한 FLIGHT정보에 해당하는 BOOKING정보가 N건일수 있기때문에 이번 facet은 #LINEITEM_REFERENCE 타입으로 하겠습니다. #LINEITEM_REFERENCE 타입인 경우 targetElement 파라미터에 리스트에 보여줄 ASSOCIATION을 입력해 줘야 합니다.

     

     

    ZEVER_BOOKING_I View에서 외부에 노출시킬 필드를 UI.lineItem 어노테이션을 사용하여 지정합니다.

     

     

    마지막으로 SERVICE DEFINITION에 ZEVER_BOOKING_I View를 추가해 줍니다.

     

     

    그리고나서 APP을 다시 실행해보면 아래와 같이 BOOKING정보가 OBJECT PAGE에 조회됩니다.

     

     

     

    3. @ObjectModel.text.element

    Airline필드 옆에 Airline Description필드를 추가해 보겠습니다. Airline Description정보의 CDS View를 만들고 ZEVER_FLIGHT_I View에 Association으로 연결한 후 Description필드를 추가하면 됩니다.

     

     

    먼저 Airline 마스터 테이블인 /DMO/CARRIER를 참조하여 CDS View를 생성합니다. Data Definitions에 마우스 오른쪽 클릭 후 New Data Definition을 클릭합니다.

     

     

    CDS Viewl의 Name과 Description을 입력하고 Next 버튼을 클릭합니다.

     

     

    defineViewEntity를 선택하고 Finish 버튼을 클릭합니다.

     

     

    테이블 /dmo/carrier를 지정해주고 필요한 필드만 남기고 나머지는 삭제합니다.

     

     

    이제 MAIN View에 Association으로 연결해 줍니다.

     

     

    Airline Description필드를 추가하고 필드위치를 지정해 줍니다. _CARRIER 정보도 하단에 추가해 줍니다.

     

     

    여기 까지하고 APP을 다시 실행시켜 보면 아래처럼 필드가 추가된 걸 확인할 수 있습니다.

     

     

    OBJECT PAGE에도 필드가 추가 되었습니다.

     

     

     

    이제 ObjectModel.text.element 어노테이션을 사용하여 한 필드에 코드와 Description을 동시에 보여주도록 수정해 보겠습니다.

    Flight Price필드에 금액과 통화키가 동시에 보여지는 것과 비슷하다고 생각하시면 됩니다.

    먼저 CarrierId필드에 ObjectModel.text.element 어노테이션을 추가해 주고 Description필드인 CarrName을 지정해 줍니다.

    그리고 CarrName에 추가했었던 어노테이션들은 모두 삭제해 줍니다.

     

     

    다시 APP을 실행해 보면 Airline필드에 코드와 Description이 같이 표시됩니다.

     

     

    OBJECT PAGE도 마찬가지로 잘 반영되었습니다.

     

     

     

    이번 시간에는 ASSOCIATION을 이용한 MULTI ENTITY에 대한 APP을 구현해보고 Description을 한필드로 표현하는 어노테이션을 학습해 보았습니다.

    다음시간에는 APP상단에 있는 Filter 필드에 Value Help기능을 추가해 보겠습니다.

    반응형