CAP Draft 어디에 쓰나? — Fiori 임시 저장 패턴 #shorts #SAP #CAP
Moderator
· 조회 13
이 글이 답하는 질문
- CAP Draft Handling은 언제 써야 하나?
- @IsDraft 어노테이션은 어떻게 설정하나?
- Draft 검증과 활성화는 어느 핸들러에서 처리하나?
Draft란?
Fiori Elements에서 사용자가 작성 중인 데이터를 임시 저장하는 메커니즘입니다. 사용자가 "저장" 버튼을 누르기 전까지 DB에는 Draft 상태로 저장되며, "확정"을 누르면 Active 엔티티로 전환됩니다.
직접 해보기
1. CDS 어노테이션 설정
// service.cds
annotate OrdersService.Orders with @(
Common.DraftRoot: {
ActivationAction: 'OrdersService.draftActivate',
EditAction: 'OrdersService.draftEdit',
DiscardAction: 'OrdersService.draftDiscard',
PreparationAction:'OrdersService.draftPrepare'
}
);
2. SAVE 전 검증 핸들러
this.before("SAVE", "Orders", async (req) => {
const draft = req.data;
if (!draft.customerId) {
req.error(400, "customerId는 필수입니다");
}
// IsActiveEntity가 false면 Draft 단계
});
3. Draft 활성화 (Activate)
this.on("draftActivate", "Orders", async (req) => {
const db = await cds.connect.to("db");
// IsActiveEntity: false → true 전환
// Fiori가 자동 처리, 필요 시 후처리만
return req.subject;
});
삽질 노트
- Draft 엔티티는 DB에
IsActiveEntity = false로 저장 — 조회 시 필터 주의 before SAVE는 Draft 저장 시마다 실행됨, Activate 시점만 체크하려면req.data.IsActiveEntity확인- Fiori Elements가 DraftRoot 어노테이션을 보고 임시저장/확정 UI를 자동 생성함
핵심 한 줄
Draft = 임시 저장, Activate = 확정. CDS 어노테이션 추가 하나로 Fiori가 나머지를 자동 처리합니다.
더 파볼 주제
- CAP Draft Composition (하위 엔티티 Draft 연동)
- Fiori Elements ListReport + Draft 패턴
- Draft 잠금 처리 (Exclusive Lock)