RAP Validation 안 쓰면 큰일 #shorts #SAP #ABAP
Moderator
· 조회 3
RAP Validation이 없으면 생기는 일
RAP(RESTful ABAP Programming) 기반 앱에서 Validation을 구현하지 않으면, 잘못된 데이터가 데이터베이스에 그대로 저장된다. 예를 들어 수량이 음수이거나, 날짜 범위가 역전된 주문이 버젓이 생성될 수 있다. Validation은 이를 방지하는 첫 번째 방어선이다.
Behavior Definition에 Validation 선언
Behavior Definition(BDEF)에서 validate로 선언하고, 트리거 조건을 지정한다.
managed implementation in class zbp_travel unique;
define behavior for ZI_Travel alias Travel {
...
validation validateDates
on save { field BeginDate, EndDate; }
validation validateStatus
on save { field Status; }
}Behavior Implementation 클래스 구현
Validation 메서드는 FOR VALIDATE ON SAVE로 구현한다. FAILED와 REPORTED 구조체를 활용해 오류를 반환한다.
METHOD validateDates.
READ ENTITIES OF ZI_Travel IN LOCAL MODE
ENTITY Travel
FIELDS ( BeginDate EndDate )
WITH CORRESPONDING #( keys )
RESULT DATA(travels).
LOOP AT travels INTO DATA(travel).
IF travel-BeginDate > travel-EndDate.
APPEND VALUE #( %tky = travel-%tky )
TO failed-travel.
APPEND VALUE #(
%tky = travel-%tky
%state_area = 'VALIDATE_DATES'
%msg = NEW zcm_travel_msg(
textid = zcm_travel_msg=>date_interval
severity = if_abap_behv_message=>severity-error )
%element-BeginDate = if_abap_behv=>mk-on
%element-EndDate = if_abap_behv=>mk-on
) TO reported-travel.
ENDIF.
ENDLOOP.
ENDMETHOD.언제 Validation이 실행되나
Validation은 기본적으로 save 시점에 트리거된다. 특정 필드가 변경될 때만 실행하도록 field 조건을 지정할 수 있어 성능도 최적화할 수 있다. Draft 시나리오에서는 on save 대신 on draft validate를 사용한다.
핵심 한 줄
RAP Validation은 BDEF에 선언 + BIL에서 FAILED/REPORTED 채우기 — 이 두 단계가 전부다.