๐ ๊ฐ์ โ ์ด ๊ธ์์ ๋ค๋ฃจ๋ ๊ฒ
RAP(ABAP RESTful Application Programming Model)์ Behavior Definition์ ์ฒ์ ๋ค๋ฃจ๋ค ๋ณด๋ฉด ๊ฐ์ฅ ์์ฃผ ๋ง์ฃผ์น๋ ๊ฐ๋ฆผ๊ธธ์ด ์์ต๋๋ค. "์ด ๋ก์ง์ Determination์ผ๋ก ๊ตฌํํด์ผ ํ๋, Validation์ผ๋ก ๊ตฌํํด์ผ ํ๋?" ๋ ๋ค ์ ์ฅ ํ๋ฆ ์ด๋๊ฐ์์ ์๋์ผ๋ก ํธ์ถ๋๋ ๋ก์ง์ด๋ผ๋ ์ ๋๋ฌธ์ ํท๊ฐ๋ฆฌ๊ธฐ ์ฝ์ง๋ง, ๋ชฉ์ ๊ณผ ๋์ ์๋ฆฌ๊ฐ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฆ ๋๋ค. ์ด ๊ธ์ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋์ดํ๋ ๋์ , ๋ ๊ฐ๋ ์ ์ฐจ์ด๋ฅผ ํ๋จ ๊ธฐ์ค ์ค์ฌ์ผ๋ก ์ ๋ฆฌํฉ๋๋ค.
- Determination๊ณผ Validation์ ๋ชฉ์ ์ฐจ์ด๋ฅผ ํ ๋ฌธ์ฅ์ผ๋ก ์ค๋ช ํ ์ ์๋ค
- ๋ฐ๋ ์์ (on modify / on save)๊ณผ ์ ์ฅ ์ํ์ค ๋ด ์คํ ์์๋ฅผ ์ดํดํ๋ค
- ๋ฐ์ดํฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ ์ฌ๋ถ์ ์ ์ฅ ๊ฑฐ๋ถ ๊ฐ๋ฅ ์ฌ๋ถ์ ๋น๋์นญ์ ์ดํดํ๋ค
- ์ค๋ฌด์์ ์์ฃผ ๋์ค๋ ํผ์ฉ ์ค์ ํจํด์ ํผํ ์ ์๋ค
๐ ์์ ์ ์ ์๊ณ ์์ผ๋ฉด ์ข์ ๊ฒ
์ด ๊ธ์ intermediate ๋์ด๋๋ก, ๋ค์ ๋ด์ฉ์ ์ด๋ฏธ ์ ํด ๋ณธ ๋ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ๋๋ค. CDS View Entity ๊ธฐ๋ณธ ๋ฌธ๋ฒ, Managed RAP ๋น์ฆ๋์ค ์ค๋ธ์ ํธ์ ๊ตฌ์กฐ(Behavior Definition + Behavior Implementation ํด๋์ค), ๊ทธ๋ฆฌ๊ณ EML(Entity Manipulation Language)์ READ/MODIFY ๊ตฌ๋ฌธ ๊ธฐ์ด์ ๋๋ค. Determination์ด๋ Validation์ ์ง์ ๊ตฌํํด ๋ณธ ๊ฒฝํ์ ์์ด๋ ๊ด์ฐฎ์ต๋๋ค. ์คํ๋ ค ๊ตฌํ ์ ์ ์ด ๊ธ๋ก ๊ฐ๋ ์ง๋๋ฅผ ๋จผ์ ๊ทธ๋ ค ๋๋ ํธ์ด ์ํ์ฐฉ์ค๋ฅผ ์ค์ฌ ์ค๋๋ค.
๐ง ํ๊ฒฝ๊ณผ ์ค๋น๋ฌผ
์ด ๊ธ์ ์์ ์ฝ๋๋ ๋ค์ ํ๊ฒฝ์ ๊ธฐ์ค์ผ๋ก ์์ฑํ์ต๋๋ค.
- SAP BTP ABAP Environment ๋๋ SAP S/4HANA 2022 ์ด์(์จํ๋ ๋ฏธ์ค/Private Cloud, ABAP Platform 2022 ์ด์) โ ๋ ํ๊ฒฝ ๋ชจ๋
strict(2)๋ชจ๋์ Managed RAP์ ์ง์ํฉ๋๋ค - ABAP Development Tools(ADT) โ Eclipse ๊ธฐ๋ฐ. Behavior Definition์ SE80/GUI์์ ํธ์งํ ์ ์์ผ๋ฏ๋ก ADT๊ฐ ํ์์ ๋๋ค
- Managed ๊ตฌํ ํ์
์ RAP ๋น์ฆ๋์ค ์ค๋ธ์ ํธ 1๊ฐ โ ์ด ๊ธ์์๋ ์ฌ๋ด ์ค๋น ์๋ฆฌ ์์ฒญ ๊ด๋ฆฌ ์๋๋ฆฌ์ค๋ฅผ ์๋ก ๋ง๋ค์ด ์ฌ์ฉํฉ๋๋ค. ๋ฃจํธ ์ํฐํฐ
ZR_FCM_RepReq(๋ณ์นญ RepairRequest), ์ ์ฅ ํ ์ด๋ธzfcm_repreq, ์ฃผ์ ํ๋๋ ์์ ๋ฑ๊ธ(DamageGrade), ์์ ์๋ฆฌ๋น(EstimatedCost), ์ฐ์ ์์(PriorityCode), ์ํ(Status)์ ๋๋ค
ํด๋ผ์ฐ๋ ํ๊ฒฝ์์๋ released API๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๋ค๋ ์ ์ฝ์ด ์์ง๋ง, Determination/Validation ๋ฌธ๋ฒ ์์ฒด๋ ์จํ๋ ๋ฏธ์ค์ ๋์ผํ๊ฒ ๋์ํฉ๋๋ค.
๐ก ํต์ฌ ๊ฐ๋ โ "์ฑ์ ๋ฃ๋ ๋ก์ง"๊ณผ "๋ง์์๋ ๋ก์ง"
๋น์ ๋ก ์์ํ๊ฒ ์ต๋๋ค. ์๋ฆฌ ์์ฒญ์๋ฅผ ์ ์ํ๋ ์ฐฝ๊ตฌ๋ฅผ ์์ํด ๋ณด์ธ์. ์ฐฝ๊ตฌ์๋ ๋ ๋ช ์ ์ง์์ด ์์ต๋๋ค.
Determination์ ์๋ฅ๋ฅผ ๋์ ์ฑ์ ์ฃผ๋ ์ง์์ ๋๋ค. ์ ์ฒญ์๊ฐ ์์ ๋ฑ๊ธ์ ์ ์ผ๋ฉด ๊ทธ์ ๋ง๋ ์ฐ์ ์์ ์นธ์ ์๋์ผ๋ก ์ฑ์ ๋ฃ์ต๋๋ค. ์๋ฅ๋ฅผ ๋ฐ๋ คํ๋ ๊ถํ์ ์์ต๋๋ค.
Validation์ ์ ์ ๋์ฅ์ ์ฐ๊ธฐ ์ง์ ์ ์๋ฅ๋ฅผ ๊ฒ์ฌํ๋ ์ง์์ ๋๋ค. ์์ ์๋ฆฌ๋น๊ฐ ์์ฐ ํ๋๋ฅผ ๋์ผ๋ฉด ์ ์๋ฅผ ๊ฑฐ๋ถํฉ๋๋ค. ๋์ ์๋ฅ ๋ด์ฉ์ ๊ณ ์น ๊ถํ์ ์์ต๋๋ค.
์ด ๋น์ ๊ฐ ๋ ๊ฐ๋ ์ ํต์ฌ ๋น๋์นญ์ ๊ทธ๋๋ก ๋ด๊ณ ์์ต๋๋ค. Determination์ ๋ฐ์ดํฐ๋ฅผ ํ์ยท๋ณด์ ํ๋ ๋ก์ง์ด๊ณ , Validation์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฆํ๊ณ ์ ์ฅ์ ๊ฑฐ๋ถํ๋ ๋ก์ง์ ๋๋ค. ์ด์ ๋น๊ต ์ถ์ ํ๋ก ์ ๋ฆฌํฉ๋๋ค.
| ๋น๊ต ์ถ | Determination | Validation |
|---|---|---|
| ๋ชฉ์ | ํ๋ ๊ฐ ์๋ ๊ณ์ฐยทํ์ยท์ด๊ธฐํ | ์ผ๊ด์ฑ ๊ฒ์ฆ, ์๋ชป๋ ๋ฐ์ดํฐ์ ์ ์ฅ ์ฐจ๋จ |
| ๋ฐ๋ ์์ | on modify ๋๋ on save ์ ํ ๊ฐ๋ฅ | on save๋ง ๊ฐ๋ฅ |
| ๋ฐ์ดํฐ ๋ณ๊ฒฝ | ๊ฐ๋ฅ (EML MODIFY ... IN LOCAL MODE) | ๋ถ๊ฐ โ ์ฝ๊ธฐ ์ ์ฉ, ๋ณ๊ฒฝ ์๋ ์ ๋ฐํ์ ์ค๋ฅ |
| ์ ์ฅ ๊ฑฐ๋ถ | ๋ถ๊ฐ โ ์๊ทธ๋์ฒ์ failed ํ๋ผ๋ฏธํฐ ์์ฒด๊ฐ ์์ | ๊ฐ๋ฅ โ failed์ ํค๋ฅผ ๋ฃ์ผ๋ฉด ์ ์ฅ ๋กค๋ฐฑ |
| ๋ฉ์์ง ์ ๋ฌ | reported๋ก ์๋ด์ฑ ๋ฉ์์ง๋ง ๊ฐ๋ฅ | reported + failed๋ก ์ค๋ฅ ๋ฉ์์ง์ ๊ฑฐ๋ถ๋ฅผ ํจ๊ป |
| DB ์ฝ๊ธฐ | ๊ฐ๋ฅ (EML READ, SELECT ๋ชจ๋) | ๊ฐ๋ฅ โ ์ฝ๊ธฐ๋ ์์ , ์ฐ๊ธฐ๋ง ๊ธ์ง |
| ์คํ ์์ | on modify๋ ๋ณ๊ฒฝ ์งํ, on save๋ ์ ์ฅ ์ํ์ค์ finalize ๋จ๊ณ | ์ ์ฅ ์ํ์ค์ check_before_save ๋จ๊ณ โ Determination on save ์ดํ |
| ํธ๋ฆฌ๊ฑฐ | create, update, delete, field | create, update, delete, field |
๊ฐ์ฅ ์ค์ํ ๋ ์ค๋ง ๋ค์ ๊ฐ์กฐํฉ๋๋ค. ์ฒซ์งธ, ์คํ ์์์ ๋๋ค. ์ ์ฅ ๋ฒํผ์ด ๋๋ฆฌ๋ฉด RAP ์ ์ฅ ์ํ์ค๋ ์ผ๋ฐ์ ์ผ๋ก finalize(Determination on save ์คํ) โ check_before_save(Validation ์คํ) โ ๋ฒํธ ์กฐ์ โ ์ค์ DB ์ ์ฅ ์์ผ๋ก ์งํ๋ฉ๋๋ค. ์ฆ Validation์ ํญ์ Determination on save๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ง์ง๋ง์ผ๋ก ์๋ณธ ๋ค์ ๊ฒ์ฌํฉ๋๋ค. ๊ทธ๋์ "Determination์ด ์ฑ์ด ๊ฐ์ Validation์ด ๊ฒ์ฆํ๋ค"๋ ์ค๊ณ๊ฐ ์์ฐ์ค๋ฝ๊ฒ ์ฑ๋ฆฝํฉ๋๋ค. ๋์งธ, ๊ถํ์ ๋น๋์นญ์ ๋๋ค. Determination์ ๊ณ ์น ์ ์์ง๋ง ๋ง์ ์ ์๊ณ , Validation์ ๋ง์ ์ ์์ง๋ง ๊ณ ์น ์ ์์ต๋๋ค. ์ด ๋น๋์นญ์ ๊ธฐ์ตํ๋ฉด "์ธ์ ๋ฌด์์ ์ฐ๋๊ฐ"์ ๋ํ ๋ต์ 8ํ ์ด ๋์ต๋๋ค.
ํ๋จ ๊ธฐ์ค์ ํ ๋ฌธ์ฅ์ผ๋ก ์์ฝํ๋ฉด ์ด๋ ์ต๋๋ค. "๊ฒฐ๊ณผ์ ์ผ๋ก ํ๋์ ๊ฐ์ด ๋ค์ด๊ฐ์ผ ํ๋ฉด Determination, ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฌ์ฉ์์๊ฒ ์ค๋ฅ๊ฐ ๋ณด์ฌ์ผ ํ๋ฉด Validation."
๐ป ์ค์ ์์ 3๋จ๊ณ โ ์ฐจ์ด๊ฐ ๋๋ฌ๋๋ ์ต์ ์ฝ๋
1๋จ๊ณ: Behavior Definition์์ ๋ ๊ฐ๋ ์ ์ธํ๊ธฐ
์ค๋น ์๋ฆฌ ์์ฒญ ์๋๋ฆฌ์ค์ Behavior Definition์ ๋๋ค. ์์ ๋ฑ๊ธ์ด ๋ฐ๋๋ฉด ์ฐ์ ์์๋ฅผ ์๋ ์ฐ์ถํ๊ณ (Determination), ์ ์ฅ ์์ ์ ์์ ์๋ฆฌ๋น์ ์์ฐ ํ๋๋ฅผ ๊ฒ์ฌํฉ๋๋ค(Validation).
managed implementation in class zbp_fcm_repreq unique;
strict ( 2 );
define behavior for ZR_FCM_RepReq alias RepairRequest
persistent table zfcm_repreq
lock master
authorization master ( instance )
etag master LastChangedAt
{
create;
update;
delete;
// ์์ ๋ฑ๊ธ์ด ๋ฐ๋ ๋๋ง๋ค ์ฐ์ ์์๋ฅผ ๋ค์ ๊ณ์ฐ
determination setPriority on modify { field DamageGrade; }
// ์ ์ฅ ์ง์ , ์์ฑ ์์ ์๋ฆฌ๋น ๋ณ๊ฒฝ ์ ์์ฐ ํ๋ ๊ฒ์ฌ
validation checkCostLimit on save { create; field EstimatedCost; }
}
์ ์ธ๋ง ๋ด๋ ์ฐจ์ด๊ฐ ๋ณด์
๋๋ค. Determination์ on modify๋ฅผ ์ ํํด ์ฌ์ฉ์๊ฐ ๊ฐ์ ๋ฐ๊พธ๋ ์ฆ์ ๋ฐ์ํ๊ฒ ํ๊ณ , Validation์ ๋ฌธ๋ฒ์ on save๋ง ํ์ฉ๋๋ฏ๋ก ์ ์ฅ ์ง์ ์๋ง ๊ฐ์
ํฉ๋๋ค. ์ค๊ดํธ ์์ ํธ๋ฆฌ๊ฑฐ(create, field ...)๋ "์ธ์ ์ด ๋ก์ง์ ๊นจ์ธ ๊ฒ์ธ๊ฐ"๋ฅผ ์ ์ํ๋ ๋ถ๋ถ์ผ๋ก, ๋ ๊ฐ๋
์ด ๋์ผํ ๋ฌธ๋ฒ์ ๊ณต์ ํฉ๋๋ค.
2๋จ๊ณ: ๊ตฌํ์์ ๋๋ฌ๋๋ ์๊ทธ๋์ฒ์ ๋น๋์นญ โ ๋ฉ์์ง์ ๋ก๊น
Behavior Implementation ํด๋์ค์ ๋ก์ปฌ ํธ๋ค๋ฌ์ ๋๋ค. ์๊ทธ๋์ฒ๋ฅผ ๋๋ํ ๋๊ณ ๋ณด๋ฉด ํ๋ ์์ํฌ๊ฐ ๋ ๊ฐ๋ ์ ๋ถ์ฌํ ๊ถํ ์ฐจ์ด๊ฐ ๋ช ํํด์ง๋๋ค.
CLASS lhc_repairrequest DEFINITION INHERITING FROM cl_abap_behavior_handler.
PRIVATE SECTION.
" Determination: failed ํ๋ผ๋ฏธํฐ๊ฐ ์์ ์๋ค โ ์ ์ฅ ๊ฑฐ๋ถ ๋ถ๊ฐ
METHODS setpriority FOR DETERMINE ON MODIFY
IMPORTING keys FOR repairrequest~setpriority.
" Validation: failed/reported๊ฐ ์๋ ํฌํจ๋๋ค โ ๊ฑฐ๋ถ + ๋ฉ์์ง ๊ฐ๋ฅ
METHODS checkcostlimit FOR VALIDATE ON SAVE
IMPORTING keys FOR repairrequest~checkcostlimit.
ENDCLASS.
CLASS lhc_repairrequest IMPLEMENTATION.
METHOD setpriority.
" ํธ๋ฆฌ๊ฑฐ๋ ์ธ์คํด์ค๋ฅผ ์ฝ๊ณ
READ ENTITIES OF zr_fcm_repreq IN LOCAL MODE
ENTITY repairrequest
FIELDS ( damagegrade ) WITH CORRESPONDING #( keys )
RESULT DATA(lt_req).
" ํ์ ๊ฐ์ ๊ณ์ฐํด ๋ค์ ์จ ๋ฃ๋๋ค (Determination๋ง ๊ฐ๋ฅํ ๋์)
MODIFY ENTITIES OF zr_fcm_repreq IN LOCAL MODE
ENTITY repairrequest
UPDATE FIELDS ( prioritycode )
WITH VALUE #( FOR ls_req IN lt_req
( %tky = ls_req-%tky
prioritycode = COND #( WHEN ls_req-damagegrade >= 4
THEN 'URGENT'
ELSE 'NORMAL' ) ) ).
ENDMETHOD.
METHOD checkcostlimit.
CONSTANTS lc_limit TYPE p LENGTH 10 DECIMALS 2 VALUE '5000000.00'.
READ ENTITIES OF zr_fcm_repreq IN LOCAL MODE
ENTITY repairrequest
FIELDS ( estimatedcost ) WITH CORRESPONDING #( keys )
RESULT DATA(lt_req).
LOOP AT lt_req INTO DATA(ls_req) WHERE estimatedcost > lc_limit.
" ์ ์ฅ ๊ฑฐ๋ถ: failed์ ํค ์ถ๊ฐ (Validation๋ง ๊ฐ๋ฅํ ๋์)
APPEND VALUE #( %tky = ls_req-%tky ) TO failed-repairrequest.
" ์ฌ์ฉ์์๊ฒ ๋ณด์ฌ์ค ์ค๋ฅ ๋ฉ์์ง: ํ๋ ๋จ์๋ก ์ง์ ํ๋ฉด UI์์ ํ์ด๋ผ์ดํธ๋จ
APPEND VALUE #( %tky = ls_req-%tky
%msg = new_message_with_text(
severity = if_abap_behv_message=>severity-error
text = '์์ ์๋ฆฌ๋น๊ฐ ๊ฒฐ์ฌ ํ๋๋ฅผ ์ด๊ณผํ์ต๋๋ค' )
%element-estimatedcost = if_abap_behv=>mk-on
) TO reported-repairrequest.
ENDLOOP.
ENDMETHOD.
ENDCLASS.
์ฃผ๋ชฉํ ํฌ์ธํธ๊ฐ ์ธ ๊ฐ์ง์
๋๋ค. ์ฒซ์งธ, setpriority์ ์๊ทธ๋์ฒ์๋ failed๊ฐ ์์ต๋๋ค. Determination ์์์ ์๋ฌด๋ฆฌ ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํด๋ ์ ์ฅ์ ๋ง์ ๋ฐฉ๋ฒ์ด ๋ฌธ๋ฒ ์ฐจ์์์ ๋ด์ธ๋์ด ์์ต๋๋ค. ๋์งธ, checkcostlimit๋ ๋ฐ์ดํฐ๋ฅผ READ๋ง ํ๊ณ MODIFYํ์ง ์์ต๋๋ค. ์ ์ฅ ์ํ์ค ์ค์๋ ์ธ์คํด์ค ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ํ์ฉ๋์ง ์์, Validation์์ MODIFY๋ฅผ ์๋ํ๋ฉด ๋ฐํ์ ์ค๋ฅ๋ก ์ด์ด์ง๋๋ค. ์
์งธ, ๋ ๋ฉ์๋ ๋ชจ๋ IN LOCAL MODE๋ก ์๊ธฐ BO์ ์ ๊ทผํฉ๋๋ค. ๋ด๋ถ ๋ก์ง์ด ๊ถํยท๊ธฐ๋ฅ ์ ์ด๋ฅผ ๋ค์ ํต๊ณผํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ฉฐ, ์ค๋ฌด์์๋ ์ด ์ง์ ์ ๋ก๊น
ํฌ์ธํธ๋ก ํ์ฉํด Application Log(BALI ๊ณ์ด API)์ ๊ณ์ฐ ๊ทผ๊ฑฐ๋ ๊ฑฐ๋ถ ์ฌ์ ๋ฅผ ๋จ๊ธฐ๋ ํจํด์ด ์ผ๋ฐ์ ์
๋๋ค.
3๋จ๊ณ: ํ๋ก๋์ ๊ด์ โ ๋๋ ์ฒ๋ฆฌ, ์์ ์์กด, ํ ์คํธ
๋ ๊ฐ๋ ์ ์ฐจ์ด๋ ํ๋ก๋์ ์ค๊ณ์์ ๋ ํฌ๊ฒ ๋ฒ์ด์ง๋๋ค.
๋๋ ์ฒ๋ฆฌ(mass-enabled) ์์ฑ. Determination๊ณผ Validation ๋ชจ๋ keys๊ฐ ํ
์ด๋ธ๋ก ๋ค์ด์ต๋๋ค. API๋ ๋ง์ด๊ทธ๋ ์ด์
์ผ๋ก ์๋ฐฑ ๊ฑด์ด ํ ๋ฒ์ ๋ค์ด์๋ ๋ฉ์๋๋ ํ ๋ฒ๋ง ํธ์ถ๋๋ฏ๋ก, ์ ์์ ์ฒ๋ผ READ ํ ๋ฒ โ ๋ด๋ถ LOOP ๊ตฌ์กฐ๋ฅผ ์ง์ผ์ผ ํฉ๋๋ค. LOOP ์์์ ๊ฑด๋ณ SELECT๋ฅผ ํ๋ ์๊ฐ ์ฑ๋ฅ์ด ๋ฌด๋์ง๋๋ค. ํนํ Determination on modify๋ ์ฌ์ฉ์์ ํ๋ ๋ณ๊ฒฝ๋ง๋ค ๋ผ์ด๋ํธ๋ฆฝ์ด ๋ฐ์ํ๋ฏ๋ก ๋ฌด๊ฑฐ์ด ์กฐํ๋ on save๋ก ๋ฏธ๋ฃจ๋ ํ๋จ์ด ํ์ํฉ๋๋ค.
์์๋ฅผ ์ด์ฉํ ์ค๊ณ. Determination on save๊ฐ Validation๋ณด๋ค ๋จผ์ ์คํ๋๋ค๋ ์์๋ฅผ ํ์ฉํ๋ฉด, "Determination์ด ApproverGroup์ ์ฐ์ถ โ Validation์ด ์ฐ์ถ๋ ๊ฒฐ์ฌ ๊ทธ๋ฃน์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ๊ฒ์ฆ"์ฒ๋ผ ํ์๊ณผ ๊ฒ์ฆ์ ์์ ํ๊ฒ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ๋ฐ๋๋ก Validation์ด ๋จผ์ ์คํ๋๋ค๊ณ ์ฐฉ๊ฐํ๊ณ ์ค๊ณํ๋ฉด ๊ฒ์ฆ์ด ํญ์ ์ ๊ฐ์ ๋ณด๋ ๋ฒ๊ทธ๊ฐ ์๊น๋๋ค.
ํ
์คํธ. ๋ ๋ก์ง ๋ชจ๋ cl_abap_behavior_test_environment ๊ธฐ๋ฐ์ ABAP Unit์ผ๋ก ๊ฒ์ฆํ ์ ์์ต๋๋ค. Determination์ "MODIFY ํ READํ์ ๋ ํ์ ํ๋ ๊ฐ์ด ๊ธฐ๋์ ๊ฐ์๊ฐ", Validation์ "COMMIT ENTITIES๊ฐ ์คํจํ๊ณ reported์ ๋ฉ์์ง๊ฐ ์์๋๊ฐ"๋ก ๋จ์ธ ํฌ์ธํธ ์์ฒด๊ฐ ๋ค๋ฆ
๋๋ค. ๋ณด์ ๊ด์ ์์ ํ ๊ฐ์ง ๋ง๋ถ์ด๋ฉด, ์ธ์คํด์ค ๊ถํ ํต์ ๋ Validation์ด ์๋๋ผ authorization master (instance)์ ๊ถํ ํธ๋ค๋ฌ์ ๋ชซ์
๋๋ค. Validation์ผ๋ก ๊ถํ ๊ฒ์ฌ๋ฅผ ํ๋ด ๋ด๋ ๊ฒ์ ๊ถ์ฅ๋์ง ์๋ ํจํด์
๋๋ค.
โ ๏ธ ํํ ์ค์์ ํธ๋ฌ๋ธ์ํ FAQ
Q1. Validation ์์์ ์๋ชป๋ ๊ฐ์ ๋ฐ๊ฒฌํ์ผ๋ ๊ทธ ์๋ฆฌ์์ ๊ณ ์ณ ์ฃผ๊ณ ์ถ์๋ฐ์?
์ ๋ฉ๋๋ค. ์ ์ฅ ์ํ์ค์ ๊ฒ์ฆ ๋จ๊ณ์์๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๊ธ์ง๋์ด ์์ด EML MODIFY๊ฐ ๋ฐํ์ ์ค๋ฅ๋ฅผ ์ผ์ผํต๋๋ค. "๊ณ ์ณ ์ฃผ๋ ๊ฒ ๋ง๋ ๋ก์ง"์ด๋ผ๋ฉด ๊ทธ ์์ฒด๊ฐ Validation์ด ์๋๋ผ Determination์ด์ด์ผ ํ๋ค๋ ์ ํธ์
๋๋ค. ๊ฐ ๋ณด์ ์ Determination์ผ๋ก ์ฎ๊ธฐ๊ณ , Validation์ ๋ณด์ ํ์๋ ๋จ๋ ์๋ฐ๋ง ๊ฑฐ๋ถํ๋๋ก ์ญํ ์ ๋๋์ธ์.
Q2. Determination์์ ์กฐ๊ฑด์ด ์ ๋ง์ผ๋ฉด ์ ์ฅ์ ๋ง๊ณ ์ถ์ต๋๋ค.
๋ถ๊ฐ๋ฅํฉ๋๋ค. Determination ์๊ทธ๋์ฒ์๋ failed๊ฐ ์์ด์ ๋ฌด์์ ํด๋ ์ ์ฅ์ ์งํ๋ฉ๋๋ค. reported์ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ๋ฃ์ด๋ ์ ์ฅ ์์ฒด๋ ์ฑ๊ณตํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉ์์๊ฒ ํผ๋๋ง ์ค๋๋ค. ์ ์ฅ ์ฐจ๋จ์ด ๋ชฉ์ ์ด๋ฉด ๊ฐ์ ์กฐ๊ฑด์ Validation์ผ๋ก ๊ตฌํํด์ผ ํฉ๋๋ค.
Q3. Determination on modify๊ฐ ์์๋ณด๋ค ์ฌ๋ฌ ๋ฒ ์คํ๋๋ ๊ฒ ๊ฐ์ต๋๋ค.
ํธ๋ฆฌ๊ฑฐ ํ๋๊ฐ ๋ฐ๋ ๋๋ง๋ค ์คํ๋๋ ๊ฒ์ด ์ ์ ๋์์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๊ธฐ ์์ ์ด ๋ง๋ ๋ณ๊ฒฝ์ผ๋ก ๋ฌดํ ์ฌํธ๋ฆฌ๊ฑฐ๋์ง๋ ์์ง๋ง, Determination A๊ฐ ๋ฐ๊พผ ํ๋๊ฐ Determination B์ ํธ๋ฆฌ๊ฑฐ์ด๊ณ B๊ฐ ๋ค์ A์ ํธ๋ฆฌ๊ฑฐ ํ๋๋ฅผ ๋ฐ๊พธ๋ ์ํธ ์ฐธ์กฐ ๊ตฌ์กฐ๋ ์์ธกํ๊ธฐ ์ด๋ ค์ด ์คํ ํ๋ฆ์ ๋ง๋ญ๋๋ค. ๊ฐ Determination์ ๋ช ๋ฒ ์คํ๋ผ๋ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ ๋ฉฑ๋ฑ(idempotent) ๋ก์ง์ผ๋ก ์์ฑํ๊ณ , ํธ๋ฆฌ๊ฑฐ ํ๋๋ฅผ ์ต์ํ์ผ๋ก ์ ์ธํ๋ ๊ฒ์ด ์์ ํฉ๋๋ค.
Q4. Determination์ on save๋ก ์ ์ธํ๋๋ ํ๋ฉด์ ๊ณ์ฐ ๊ฐ์ด ๋ฐ๋ก ์ ๋ณด์
๋๋ค.
์๋๋ ๋์์
๋๋ค. on save๋ ์ ์ฅ ์ํ์ค์์ ์คํ๋๋ฏ๋ก ์ ์ฅ ์ ํ๋ฉด์๋ ๋ฐ์๋์ง ์์ต๋๋ค. ์ฌ์ฉ์๊ฐ ์
๋ ฅ ์ค์ ํ์ ๊ฐ์ ๋ด์ผ ํ๋ค๋ฉด on modify๋ก ๋ฐ๊พธ๊ณ , Fiori Elements UI๋ผ๋ฉด side effect ์ ๋
ธํ
์ด์
์ผ๋ก ํ๋ฉด ๊ฐฑ์ ์ ํจ๊ป ์ ์ํด์ผ ํฉ๋๋ค. ๋ฐ๋๋ก ํ๋ฉด ๋ฐ์์ด ํ์ ์๋ ๋ฒํธ ์ฑ๋ฒยท์ง๊ณ์ฑ ๋ก์ง์ด๋ผ๋ฉด on save๊ฐ ๋ผ์ด๋ํธ๋ฆฝ ๋ถ๋ด์ด ์ ์ต๋๋ค.
๐ ์ฌ๊ธฐ์ ๋ ๋์๊ฐ๊ธฐ
๋ ๊ฐ๋
์ ๊ฒฝ๊ณ๊ฐ ์กํ๋ค๋ฉด ์์ฐ์ค๋ฌ์ด ๋ค์ ์ฃผ์ ๋ ์ธ ๊ฐ์ง์
๋๋ค. ์ฒซ์งธ, Validation์ ์ด๋ฒคํธ ์์ ๋ถ๋ฆฌ โ ๊ฐ์ on save๋ผ๋ ํธ๋ฆฌ๊ฑฐ ๊ตฌ์ฑ์ ๋ฐ๋ผ ๋์์ด ๋ฌ๋ผ์ง๋ ์ธ๋ถ๋ฅผ ํ๊ณ ๋ค ์ ์์ต๋๋ค(์ด ๋ธ๋ก๊ทธ์ Validation ์ฌํ ๊ธ ์ฐธ๊ณ ). ๋์งธ, Action๊ณผ Feature Control โ ์ฌ์ฉ์๊ฐ ๋ช
์์ ์ผ๋ก ์คํํ๋ ๋ก์ง๊ณผ ๋ฒํผ ํ์ฑํ ์ ์ด๋ Determination/Validation๊ณผ ๋ ๋ค๋ฅธ ์ถ์
๋๋ค. ์
์งธ, Draft ํ์ฑํ ์์ ๋์ ๋ณํ โ Draft BO์์๋ Determination/Validation์ด draft ์ธ์คํด์ค์๋ ์ ์ฉ๋๋ฏ๋ก prepare ๋จ๊ณ์์ ๊ด๊ณ๋ฅผ ์ดํดํ ํ์๊ฐ ์์ต๋๋ค. ๋ง์ง๋ง์ผ๋ก unmanaged/managed with additional save ์๋๋ฆฌ์ค์์ ์ ์ฅ ์ํ์ค๊ฐ ์ด๋ป๊ฒ ํ์ฅ๋๋์ง๋ ์ข์ ํ์ ์ฃผ์ ์
๋๋ค.
๐ ๋ ์ฝ์ด๋ณผ ์๋ฃ
- SAP Help Portal โ ABAP RAP: Determinations
- SAP Help Portal โ ABAP RAP: Validations
- SAP Help Portal โ ABAP RAP: Save Sequence (finalize / check_before_save ๋จ๊ณ)
- SAP Help Portal โ Behavior Definition Language(BDL) ๋ ํผ๋ฐ์ค
- SAP Community โ ABAP ํ ํฝ (RAP ๊ด๋ จ ๋ธ๋ก๊ทธยทQ&A)
- SAP Developers โ RAP ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ ๋ฏธ์
๋๊ธ 0
์์ง ๋๊ธ์ด ์์ต๋๋ค.