
@AbapCatalog.sqlViewName: 'ZVSQL5A1215'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '[S5A-12] Converted Prices'
define view ZVDDL5A1215 as select from sbook
association [1] to spfli as _spfli on sbook.carrid = _spfli.carrid and sbook.connid = _spfli.connid
{
key sbook.carrid,
key sbook.connid,
key sbook.order_date,
sbook.loccuram,
sbook.loccurkey,
currency_conversion(
amount => loccuram,
source_currency => loccurkey,
target_currency => cast('EUR' as abap.cuky),
exchange_rate_date => order_date,
exchange_rate_type => 'M',
error_handling => 'SET_TO_NULL'
) as price_eur
@<Semantics.amount.currencyCode: 'waers',
@Semantics.currencyCode: true cast('EUR' as abap.cuky) as waers,
case _spfli.countryfr
when _spfli.countryto then 'D' -- 국내선
else 'I' -- 국제선
end as flight_type -- 항공편 유형 (D: 국내선, I: 국제선)
}

@AbapCatalog.sqlViewName: 'ZVSQL5A1216'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '[S5A-12] Aggregated Prices'
define view ZVDDL5A1216 as select from ZVDDL5A1215
{
key carrid,
key flight_type,
waers,
sum(price_eur) as total_price_eur
}
group by carrid, flight_type, waers

*&---------------------------------------------------------------------*
*& Report ZR5A1215
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zr5a1215.
" ALV 관련 클래스 선언
DATA: lo_alv TYPE REF TO cl_salv_table,
lt_result TYPE TABLE OF zvddl5a1216, " ZVDDL5A1217의 구조를 사용
wa_result TYPE zvddl5a1216. " 개별 레코드
" 데이터 가져오기
SELECT *
INTO CORRESPONDING FIELDS OF TABLE @lt_result
FROM zvddl5a1216. " 집계된 데이터가 들어있는 CDS View
" 데이터가 있는지 확인
IF lt_result IS NOT INITIAL.
" ALV 출력
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = lo_alv
CHANGING
t_table = lt_result ).
lo_alv->display( ). " ALV를 화면에 출력
CATCH cx_salv_msg INTO DATA(lx_salv_msg).
MESSAGE lx_salv_msg TYPE 'E'.
ENDTRY.
ELSE.
WRITE: 'No data found for the selection criteria.'.
ENDIF.




@AbapCatalog.sqlViewName: 'ZVSQL5A1217'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '[S5A-12] CDS11'
define view ZVDDL5A1217
with parameters p_carrid : s_carr_id ,
p_rate : abap.dec( 5,2 )
as select from sflight
{
key carrid, key connid, key fldate,
price,
cast (price * :p_rate as abap.curr(15,2)) as new_price
@<Semantics.amount.currencyCode: 'CURRENCY',
currency @<Semantics.currencyCode: true
} where carrid = $parameters.p_carrid

*&---------------------------------------------------------------------*
*& Report ZR5A1215
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zr5a1216.
" ALV 관련 클래스 선언
DATA: lo_alv TYPE REF TO cl_salv_table,
lt_result TYPE TABLE OF zvddl5a1217, " ZVDDL5A1217의 구조를 사용
wa_result TYPE zvddl5a1217. " 개별 레코드
PARAMETERS pa_car TYPE sflight-carrid.
PARAMETERS pa_rate TYPE p LENGTH 5 DECIMALS 2.
START-OF-SELECTION.
* TRY.
SELECT *
FROM zvddl5a1217( p_carrid = @pa_car, p_rate = @pa_rate )
INTO CORRESPONDING FIELDS OF TABLE @lt_result.
" 데이터가 있는지 확인
IF lt_result IS NOT INITIAL.
" ALV 출력
TRY.
cl_salv_table=>factory(
IMPORTING
r_salv_table = lo_alv
CHANGING
t_table = lt_result ).
lo_alv->display( ). " ALV를 화면에 출력
CATCH cx_salv_msg INTO DATA(lx_salv_msg).
MESSAGE lx_salv_msg TYPE 'E'.
ENDTRY.
ELSE.
WRITE: 'No data found for the selection criteria.'.
ENDIF.
CDS VIEW 언젠간 리뷰해줄게요