본문 바로가기

안녕하세요!

SAP/ABAP

[ ABAP ] CDS Views(2)

 ○ SAP BTP(SAP Business Technology Platform)

 

    - 데이터베이스 및 데이터 관리, 통합, 확장 기능을 갖춘 지능형 기업 애플리케이션사전 구축된

    - 수백 개의 SAP 및 애플리케이션 통합을 비롯해 클라우드와 하이브리드 환경 모두를 위한 단일 플랫폼으로 통합

    - 모바일 및 브라우저 애플리케이션 구축과 개발 제품을 확장하고 통합하기 위한 SAP 플랫폼 서비스

    - 개방형 소프트웨어 플랫폼

    - SAP Extension Suit와 SAP Integration의 조합을 통해 온프로미스 또는 클라우드에 관계없이

    - SAP 및 비 SAP 시스템 확정 가능케 함


○ ABAP 

 

    - key client : mandt not null : 고유값이 될 키 설정, mandt 도메인으로 not null 값 설정

    - key travel_uuid : sysuuid_x16 not null

      1) sysuuid는 고유 일련번호 타입으로 지정

      2) unique한 값을 가지도록 설정 및 빈 값 허용 X

    - travel_id : /dmo/travel_id

      1) 컬럼명 지정 후 ABAP dictionary Domain 설정

      2) Sample 값이 있기 때문에 프로젝트 진행 시 정의된 도메인 사용

    - @Semantics.amount.currencyCode : 'zsfc_atrav.currency_code'

      1) Semantics는 SAP에서 등록 및 관리되는 Annotations

      2) 통화코드(currency Code)로 지정된 칼럼은 통화타입을 가짐

 

 

    - 저장한 후, [Activate]를 눌러 테이블 생성

 

 

    - [File] - [New] - [ABAP Class]

 

 

    - [Add]를 누르고, 'IF_OO_ADT_CLASSRUN' 검색 및 선택

 

 

    - 생성한 Class에 아래 소스를 입력해준다.

 

CLASS zcl_generate_demo_data_scf DEFINITION
  PUBLIC
  FINAL
  CREATE PUBLIC .

  PUBLIC SECTION.

    INTERFACES if_oo_adt_classrun .
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.

CLASS zcl_generate_demo_data_scf IMPLEMENTATION.

  METHOD if_oo_adt_classrun~main.
  " delete existing entries in the database table

 DELETE FROM zsfc_atrav_0000.
 DELETE FROM zsfc_abook_0000.

" insert travel demo data

 INSERT zsfc_atrav_0000 FROM (

     SELECT

       FROM /dmo/travel

       FIELDS

         uuid(  )      AS travel_uuid           ,

         travel_id     AS travel_id             ,

         agency_id     AS agency_id             ,

         customer_id   AS customer_id           ,

         begin_date    AS begin_date            ,

         end_date      AS end_date              ,

         booking_fee   AS booking_fee           ,

         total_price   AS total_price           ,

         currency_code AS currency_code         ,

         description   AS description           ,

         CASE status

           WHEN 'B' THEN 'A' " accepted

           WHEN 'X' THEN 'X' " cancelled

           ELSE 'O'          " open

         END           AS overall_status        ,

         createdby     AS created_by            ,

         createdat     AS created_at            ,

         lastchangedby AS last_changed_by       ,

         lastchangedat AS last_changed_at       ,

         lastchangedat AS local_last_changed_at

         ORDER BY travel_id UP TO 200 ROWS

   ).

 COMMIT WORK.

" insert booking demo data

 INSERT zsfc_abook_0000 FROM (

     SELECT

       FROM   /dmo/booking    AS booking

         JOIN zsfc_atrav_0000 AS z

         ON   booking~travel_id = z~travel_id

       FIELDS

         uuid( )                 AS booking_uuid          ,

         z~travel_uuid           AS travel_uuid           ,

         booking~booking_id      AS booking_id            ,

         booking~booking_date    AS booking_date          ,

         booking~customer_id     AS customer_id           ,

         booking~carrier_id      AS carrier_id            ,

         booking~connection_id   AS connection_id         ,

         booking~flight_date     AS flight_date           ,

         booking~flight_price    AS flight_price          ,

         booking~currency_code   AS currency_code         ,

         z~created_by            AS created_by            ,

         z~last_changed_by       AS last_changed_by       ,

         z~last_changed_at       AS local_last_changed_by

   ).

 COMMIT WORK.

out->write( 'Travel and booking demo data inserted.').
  ENDMETHOD.
ENDCLASS.

 

    - 임시데이터를 insert하기 위해서 [Run As] - [ABAP Application] 선택

 

 

    - 아래와 같은 문구가 나오면서 임시데이터가 생성된다!

    - 참고로 ABAP의 경우 공란이 있을 때 정상적으로 작동되지 않을 수 있으니 유념하자

 

 

    - 패키지 우클릭 및 [New] - [Other ABAP Repository Object]

 

 

    - 'data' 검색 후, [Data Definition] 선택

 

 

    - [Name] [Description] 입력

 

 

    - 생성된 Definition 확인

      1) @AbapCatalog.sqlViewName: 'CDSVIEW NAME'

        * TSCODE: SE11

      2) @AbapCatalog.compiler.compareFilter: true

        * CDS compiler가 필터가 있는 CDS-Path 표현식(expressions)을 JOIN으로 변환하는 방법 정의

        * annotation이 사용되지 않으면 CDS compiler는 filter가 있는 각 CDS-Path 표현식에 대해 전용 JSON문 생성

        * annotation이 사용되고 'true'로 설정되면 CDS compiler는 CDS-Path 표현식 내의 단계 중

          하나에 다른 필터가 포함된 경우에만 별도의 JOIN문 생성(필터 조건이 재귀적으로 비교됨을 의미)

        * 해당 CDS-Path 표현식 내의 두 단계가 동일한 것으로 식별되는 경우

          해당 CDS-Path 표현식에 대해 하나의 JOIN만 생성

        * Inner Join, Left Outer Join 사용, compare Filter를 true로 설정, association으로 연결된 Join문이 있을 경우

          두 개가 동일하면 한 번만 compile하여 연결

        * False 설정은 필터 조건에 있는 연결만 조인식으로 사용

      3) @AbapCatalog.preserveKey: true

        * CDS VIEW에서 연과된 데이터베이스 보기에서 Key필드 정의 지정

        * True : CDS Database View의 Key 필드는 추가 Key에 따라 정의됨(중복 없이 key 필드 생성)

        * False : CDS Database View의 Key 필드는 추가 Key에 관계엾이 ABAP Dictionary의 classic views와 같이 결정됨

      4) @AccessControl.authorizationCheck: #CHECK

        * 권한 체크

        * 사용자마다 SAP System에서 본인이 접근할 수 있는 권한 부여

      5) @EndUserText.label: 'Sap Fiori Cafe CDS VIEW Simple CDS VIEW'

        * ADT 도구에서 보이는 Label

 

 

    - {} 빈 공간에 [ctrl] + [space] 누르면 나오는 팝업창에서 [Insert all elements (template)] 선택

 

 

    - sqlViewName 입력 및 elements 생성 확인

 

 

    - 생성된 Definition 우클릭 및 [Open With] - [Data Preview] 선택

 

 

    - 임시 데이터 생성 결과 확인

 

728x90
반응형

'SAP > ABAP' 카테고리의 다른 글

[ ABAP ] CDS 기초 개념  (0) 2023.02.16
[ ABAP ] CDS Views(1)  (0) 2023.02.14
[ ABAP ] CDS BTP + Eclips + ABAP  (0) 2023.02.14
[ ABAP ] CDS Views  (0) 2023.02.13

loading