본문 바로가기

안녕하세요!

SAP/CAP

[ CAP ] CDS 생성하기

자 이제 CAP가 정확히 무엇인지, CDS를 어떻게 생성해 도대체 어떻게 활용할 수 있는지 꼼곰히 체크해볼 거다. 학습을 진행하는 중간 중간에 있을 궁금한 점들을 하나씩 분석하며 포스팅을 진행할 예정이다. 따라서 시간 소요가 많이 될 것이 예상되지만, 처음 접하는 분야에 대해 흥미를 가지기 위해서는 대충 넘어갔다가는 큰코 다칠 수 있으니, 적당한 속도를 유지하면서 스터디를 해보자! 

 

CDS 생성하기


 

BAS 실행


 

 

[ SAPUI5 ] BAS 생성 및 SpringBoot 연동

○ 비즈니스 기술 플랫폼(SAP Business Technology Platform (SAP BTP)) - CAP 애플리케이션 생성에 사용하는 IDE ○ BAS 찾기 - SAP BTP 로그인 - SAP BTP Cockpit 접속 - Service Marketplace 클릭 - SAP Business Applicatoin Studio의

pythonchoboman.tistory.com

 

CAP를 사용하기 위해 BAS에서 Full Stack Cloud Application을 실행하는 방법
전에 포스팅해보았던 위의 링크를 참고하자.

 

프로젝트 생성


 

 

위와 같이 SAP-samples 중 bookshop 프로젝트를 만들어 연습을 진행한다.

프로젝트 생성이 완료되면 cd bookshop을 터미널에 입력해 만들어진 프로젝트 경로로 진입한다.

 

 

생성된 프로젝트가 잘 실행되는지 확인해보자.

cds watch를 입력해 링크에 접속한다.

 

 

그렇다.

만들어 놓은 cds가 없기에 위와 같이 아무 것도 확인할 수 없는 것이다.

자 그럼 이제 cds를 만들어 보자!

 

@sap/cds/common


 

 

[ CAP ] What is the '@sap/cds/common'?

@sap/cds/common Why use it? @sap/cds/common을 쓰는 이유는 간결하고 이해하기 쉬운 모델로서 작용하기 때문이다. 뿐만 아니라, 모든 Application 간의 상호 운용성을 촉진하며, 실제 Application에서 입증되기도

pythonchoboman.tistory.com


 

entity 생성


 

using { Currency, managed, sap } from '@sap/cds/common';
namespace sap.capire.bookshop;

entity Books : managed {
    key ID : Integer;
    title : localized String(111);
    descr : localized String(1111);
    author : Association to Authors;
    genre : Association to Genres;
    stock : Integer;
    price : Decimal(9,2);
    currency : Currency;
}

 

Books에 관한 entity를 만들어 보자.

key IDInteger로 설정해주고,
titledescrlocalized String으로 지정한다.
여기서 localized는 해당 문자를 자동으로 지역화하는 역할을 하는 것 같다!

authorgenre에서는 Association to로 무언가 이어주는데,
Java에서 자주 사용하는 오버라이딩과 유사한 것 같다.

즉, 부모 클래스에서 어느 객체에 대한 값을 설정해두고,
이를 자식 클래스에서 이를 활용하는 것처럼 말이다.

다만 좀 반대로 흘러가는 듯 하다.
왜냐하면 Books라는 entity를 부모 클래스라고 한다면,
이 entity에 내재돼 있는 값 중 하나를 다른 entity 설정에 활요해야 하지만,
Author, Genres entity 설정값을 Books에서 활용하고 있으니 말이다.

내가 오버라이딩에 대해 잘못 이해하고 있을 수도 있으니, 그냥 흐름에 대해서만 파악해보자. 

용어를 정리하다 보니 위의 개념과는 다르다는 것을 알 수 있었다...!

 

Associations


 

 

[ CAP ] Associations

Associations Unmanaged Associations entity Employees { address : Association to Addresses on address.ID = address_ID; address_ID : Integer; //> foreign key } entity Addresses { key ID : Integer; } entity Addresses에 있는 key ID를 Integer로 설정한

pythonchoboman.tistory.com


 

JOIN 하기


 

entity Authors : managed {
    key ID : Integer;
    name : String(111);
    books : Association to many Books on books.author = $self;
}

entity Genres : sap.common.CodeList {
    key ID : Integer;
    parent : Association to Genres;
    children : Composition of many Genres on children.parent = $self;
}

 

entity Authors에서 books는 entity Books와 일대다(?)로 연결시켜 준다.

entity Genres에서는 부모/자식 요소를 구분하여(?) 구성해준다.

 

 

이제 cds watch를 해보면 위와 같이 결과가 출력됨을 확인할 수 있다.

 

 

srv 폴더에 admin-service.cdscat-service.cds를 각각 생성한다.

 

using { sap.capire.bookshop as my } from '../db/schema';
service AdminService @(requires:'authenticated-user') {
  entity Books as projection on my.Books;
  entity Authors as projection on my.Authors;
}

 

using으로 sap.capire.bookshop 샘플을 사용하되, 나의 db 경로에 있는 schema를 가져온다.

권한이 있는 user만 접근할 수 있는 service로 설정하고,
entity Books가 나의 schma의 Books를,
entity Authors가 나의 schema의 Authors를 참조하도록 한다(?)

 

using { sap.capire.bookshop as my } from '../db/schema';
service CatalogService @(path:'/browse') {

  @readonly entity Books as SELECT from my.Books {*,
    author.name as author
  } excluding { createdBy, modifiedBy };

  @requires: 'authenticated-user'
  action submitOrder (book: Books:ID, quantity: Integer);
}

 

이번에는 누구나 접속할 수 있지만 제한된 정보에만 접근할 수 있는 service를 만든다.

@readonly를 사용해 author의 name을 열함할 수 있도록 하되,
createdBy와 modifiedBy는 제외시킨다.

반면, 'authenticated-user'의 권한을 가진 user만 볼 수 있는 것도 만든다.

 

 

pathadminbrowse로 구분돼 cds가 잘 반영됨을 확인하였다!

 

 

권한에 따른 접속이 가능해졌으니 Fiori로 view를 한 번 구경해보자!

 

 

우쒸... 이거 계정 뭐였더라... 아무튼 잘 작동되는 듯 하다...!

Next Stage : [ CAP ] Databases 생성하기
 

[ CAP ] Databases 생성하기

어제는 AWS 100만 원 과금 이슈가 있었기에 그거를 해결한다고 CAP 학습을 진행하지 못 하였다. 다시 CAP 스터디로 돌아와서, 오늘은 Getting Started의 Using Databases 파트부터 시작한다. 이전 학습에서는

pythonchoboman.tistory.com

 

728x90
반응형

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

[ CAP ] Databases 정보 추가  (2) 2023.04.04
[ CAP ] Databases 생성하기  (2) 2023.04.04
[ CAP ] Getting Started  (0) 2023.03.30
[ CAP ] MTA와 CAP  (0) 2023.03.30

loading