RAP에서 Action이란 무엇인가
SAP RAP(RESTful Application Programming Model)에서 Action은 OData 서비스로 노출되는 비즈니스 로직 오퍼레이션입니다. 단순한 CRUD(Create, Read, Update, Delete)로 표현할 수 없는 비즈니스 동작을 Action으로 정의합니다. Action에는 두 종류가 있습니다. Bound Action은 특정 엔티티 인스턴스에 종속되고, Unbound Action은 엔티티와 독립적으로 실행됩니다.
Bound Action: 특정 인스턴스에 종속
-- Behavior Definition (BDef)
managed implementation in class zbp_sales_order unique;
define behavior for ZC_SalesOrder alias SalesOrder {
use etag;
-- Bound Action: 특정 주문 인스턴스에 대한 확정
action confirmOrder result [1] $self;
-- Bound Action: 주문 취소 (이유 필요)
action cancelOrder parameter ZD_CancelOrderParam
result [1] $self;
}
-- OData 호출 형태 (Bound Action)
-- POST /SalesOrders('SO-001')/ZC_SalesOrder.confirmOrder
-- 특정 주문 'SO-001'에 대해 confirmOrder 실행
-- POST /SalesOrders('SO-001')/ZC_SalesOrder.cancelOrder
-- Body: { "CancelReason": "고객 요청" }
Bound Action은 인스턴스 키를 URL에 포함합니다. 특정 엔티티 하나의 상태를 변경하는 동작에 적합합니다.
Bound Action 구현
" ABAP 구현 클래스
CLASS zbp_sales_order DEFINITION.
PUBLIC SECTION.
METHODS confirmorder FOR MODIFY
IMPORTING keys FOR ACTION SalesOrder~confirmOrder.
METHODS cancelorder FOR MODIFY
IMPORTING keys FOR ACTION SalesOrder~cancelOrder.
ENDCLASS.
CLASS zbp_sales_order IMPLEMENTATION.
METHOD confirmorder.
" keys: 대상 주문 키 목록 (배치 처리 가능)
LOOP AT keys ASSIGNING FIELD-SYMBOL().
" 주문 상태 변경
MODIFY ENTITIES OF ZC_SalesOrder IN LOCAL MODE
ENTITY SalesOrder
UPDATE FIELDS ( status confirmed_at )
WITH VALUE #( ( %tky = -%tky
status = 'CONFIRMED'
confirmed_at = cl_abap_context_info=>get_system_date( ) ) ).
ENDLOOP.
ENDMETHOD.
ENDCLASS.
Unbound Action: 엔티티 독립적 실행
-- Behavior Definition (Unbound Action)
define behavior for ZC_SalesOrder alias SalesOrder {
-- Unbound Action: 특정 기간 주문 일괄 마감
static action closePeriodOrders parameter ZD_ClosePeriodParam
result [0..*] $self;
}
-- OData 호출 형태 (Unbound Action)
-- POST /SalesOrders/ZC_SalesOrder.closePeriodOrders
-- Body: { "PeriodYear": "2026", "PeriodMonth": "04" }
-- 특정 인스턴스가 아닌 서비스 레벨에서 호출
Unbound Action 구현
" Unbound Action 구현
METHOD closeperiodorders.
" 파라미터 읽기
DATA(lv_year) = keys[ 1 ]-%param-period_year.
DATA(lv_month) = keys[ 1 ]-%param-period_month.
" 해당 기간 모든 주문 조회
SELECT order_id FROM zbtp_sales_order
WHERE YEAR( created_at ) = @lv_year
AND MONTH( created_at ) = @lv_month
AND status = 'OPEN'
INTO TABLE @DATA(lt_orders).
" 일괄 마감 처리
LOOP AT lt_orders ASSIGNING FIELD-SYMBOL().
MODIFY ENTITIES OF ZC_SalesOrder IN LOCAL MODE
ENTITY SalesOrder
UPDATE FIELDS ( status closed_at )
WITH VALUE #( ( order_id = -order_id
status = 'CLOSED'
closed_at = cl_abap_context_info=>get_system_date( ) ) ).
ENDLOOP.
ENDMETHOD.
차이 3가지 요약
- 차이 1 (URL 패턴): Bound는 인스턴스 키 포함
/Entity('key')/Action, Unbound는 컬렉션 레벨/Entities/Action - 차이 2 (대상): Bound는 단일 또는 다수의 특정 인스턴스, Unbound는 인스턴스와 무관한 비즈니스 로직
- 차이 3 (선언): Bound는 BDef의 entity 블록 안에, Unbound는
static action으로 선언
공식 문서
RAP Action 전체 가이드는 SAP RAP Actions 공식 문서에서 확인하세요.
댓글 0
아직 댓글이 없습니다.