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로 구현한다. FAILEDREPORTED 구조체를 활용해 오류를 반환한다.

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 채우기 — 이 두 단계가 전부다.