Cds Views Examples
Cds Views Examples
@AbapCatalog.sqlViewName: 'ZAGGRVIEW'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Z_CDS_AGGREGATE_EXPRESSIONS'
key sflight.carrid,
key sflight.connid,
sum( price ) as Total_Amount,
sflight.currency,
count( *) as Lines
}
2) Arithmetic Expressions:
@AbapCatalog.sqlViewName: 'Z_SQL_ARTHI'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Z_CDS_ARITHMATIC_EXPRESSIONS'
define view Z_Cds_Arithmatic_Expressions as select from sflight as s
{
key s.carrid,
key s.connid,
key s.fldate,
s.price,
s.currency,
(s.seatsmax)-(s.seatsocc) as Avai_Seats_in_Economy_Class,
(s.seatsmax_b)-(s.seatsocc_b) as Avai_Seats_in_Business_Class,
s.seatsmax_f - s.seatsocc_f as Avai_Seats_in_First_Class
}
3) Associations:
First View:
@AbapCatalog.sqlViewName: 'ZVBAP'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Z_ASSOCIATION_VBAP'
define view Z_Association_Vbap as select from vbap
left outer join makt on vbap.matnr = makt.matnr
{
vbeln,
posnr,
vbap.matnr,
makt.maktx,
zwert,
zmeng
}
SecondView:
@AbapCatalog.sqlViewName: 'ZVBAK'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Z_ASSOCIATION_VBAK'
{
key vbeln,
erdat,
vbtyp,
auart,
vkorg,
vtweg,
spart,
netwr,
waerk,
_OrderItems[inner].matnr,
_OrderItems[inner].maktx
}
Basic View:
@AbapCatalog.sqlViewName: 'Z_SQL_Basic'
@ClientDependent : true
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@VDM.viewType : #BASIC
@EndUserText.label: 'CDS View demo'
@Analytics.dataCategory: #CUBE
define view Z_Cds_Basic as select from sflight {
key sflight.carrid ,
key sflight.connid,
key sflight.fldate,
@DefaultAggregation: #SUM
sflight.paymentsum
}
Consumption View:
@AbapCatalog.sqlViewName: 'Z_sql_Consum'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #NOT_ALLOWED
@Analytics.dataExtraction.enabled: true
@VDM.viewType: #CONSUMPTION
@Analytics.query: true
@EndUserText.label: 'CDS View demo'
@OData.publish: true
define view Z_Cds_Consumption as select from Z_Cds_Basic
{
Z_Cds_Basic.carrid,
Z_Cds_Basic.connid,
Z_Cds_Basic.fldate,
Z_Cds_Basic.paymentsum
}
5) Currency Conversions:
@AbapCatalog.sqlViewName: 'Z_SQL_Currency'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Z_CDS_CURRENCY_CONVERSION'
define view Z_Cds_Currency_Conversion with parameters p_curr: abap.cuky(5),
p_dat:abap.dats
as select from sflight as s
{
key s.carrid,
key s.connid,
key s.fldate,
currency_conversion( amount => s.price,
source_currency => s.currency,
target_currency => :p_curr,
exchange_rate_date => :p_dat ) as local_amount,
:p_curr as local_currency
6) String Functions:
@AbapCatalog.sqlViewName: 'ZSTRINGCDS'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Z_CDS_STRING_FUNCTIONS'
define view Z_Cds_String_Functions as select from kna1 {
//LEFT(arg, len) – It returns the left-side part of the string which is passed
as argument arg of length len.
//RIGHT(arg, len) – It returns the right-side part of the string which is passed
as argument arg of length len.
//RTRIM(arg, char) – It removes the trailing blanks and trailing character which
matches the parameter char.
7) Date Functions:
@AbapCatalog.sqlViewName: 'ZDATSVIEW'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Z_CDS_DATE_FUNCTIONS'
define view Z_Cds_Date_Functions
{
vbak.vbeln,
vbak.audat,
vbak.vdatu,
vbak.vkorg,
// returns 1 - Valid Date
// returns 0 - Invalid Date
DATS_IS_VALID(:p_from_date) as from_date,
DATS_DAYS_BETWEEN(vdatu,audat) as no_of_days,
8) Joins :
Inner Join:
@AbapCatalog.sqlViewName: 'zinnerdemo'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Inner Join Demo'
define view Z_Innerjoin_Demo as
select from sflight
inner join scarr on sflight.carrid = scarr.carrid
{
sflight.carrid,
sflight.fldate,
scarr.carrname
}
*&---------------------------------------------------------------------*
*& Report z_extension_report
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_extension_report.
cl_demo_output=>display_data(
EXPORTING
value = it_data
name = 'Demo: CDS View Enhancement'
).
@AbapCatalog.sqlViewName: 'zleftouterdemo'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Left Outer Join Demo'
define view Z_Leftouterjoin_Demo as
select from sflight
left outer join scarr on sflight.carrid = scarr.carrid
{
sflight.carrid,
sflight.fldate,
scarr.carrname
}
@AbapCatalog.sqlViewAppendName: 'zextendview'
@EndUserText.label: 'Z_CDS_EXTEND_VIEW'
sflight.price as Price,
case
when
sflight.carrid = 'AA'
end as NewExtendedColumn
@AbapCatalog.sqlViewName: 'ZPARAMSDEMO'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Z_CDS_PARAMETERS_DEMO'
vbap.vbeln as SalesDocNumbr,
vbap.matkl as MaterialType,
mara.matnr as MaterialNo,
mara.meins as UOM,
//parameters as output param
:p_mat_group as MaterialGroup,
case :p_mat_group
when 'ZYOUTH' then 'Y'
else
'N'
end as MatGroup
*&---------------------------------------------------------------------*
*& Report z_report_parameters
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_report_parameters.
START-OF-SELECTION.
cl_demo_output=>display_data(
EXPORTING
value = lt_VBAP
name = 'Sales order CDS View with Input Parameters' ).
CDS view:
@EndUserText.label: 'Z_CDS_TABLE_FUNCTIONS'
protected section.
private section.
endclass.
endclass.
@AbapCatalog.sqlViewName: 'Z_SEMANTIC_DEMO'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Z_SEMANTICS_DEMO_CDS'
define view Z_Semantics_Demo_Cds as select from scustom
{ id,
@Semantics.name.fullName
name,
@Semantics.name.prefix
form,
@Semantics.address.street
street,
@Semantics.address.postBox
postbox,
@Semantics.address.zipCode
postcode,
@Semantics.address.city
city,
@Semantics.address.country
country,
@Semantics.address.subRegion
region,
@Semantics.contact.type
custtype,
@Semantics.language
langu,
@Semantics.eMail.address
email }
@AbapCatalog.sqlViewName: 'Z_Dim_Measure'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Dimesions and Measures demo'
@OData.publish: true
define view Z_Dim_Measures as select from sflight {
//KEY FIELDS
//Dimensions
sflight.planetype as AircraftType,
sflight.mandt as Client,
sflight.price as Airfare,
//Measure
@DefaultAggregation: #SUM
sflight.paymentsum as TotalBookings
Consumption View:
Run RSRT T-code and enter Sql view name appended with 2Czprdquery and execute .
Output:
15) Access control:
CDS VIEW:
@AbapCatalog.sqlViewName: 'Z_SQL_Acl'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck:#CHECK
@EndUserText.label: 'Z_CDS_ACL'
define view Z_Cds_Acl as select from scarr {
key scarr.carrid,
scarr.carrname,
scarr.currcode,
scarr.url
Access Control:
Basic view:
@AbapCatalog.sqlViewName: 'Z_SQL_Basic'
@ClientDependent : true
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@VDM.viewType : #BASIC
@EndUserText.label: 'CDS View demo'
@Analytics.dataCategory: #CUBE
define view Z_Cds_Basic as select from sflight {
key sflight.carrid ,
key sflight.connid,
key sflight.fldate,
@DefaultAggregation: #SUM
sflight.paymentsum
Consumption View:
@AbapCatalog.sqlViewName: 'Z_sql_Consum'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #NOT_ALLOWED
@Analytics.dataExtraction.enabled: true
@VDM.viewType: #CONSUMPTION
@Analytics.query: true
@EndUserText.label: 'CDS View demo'
@OData.publish: true
define view Z_Cds_Consumption as select from Z_Cds_Basic
{
Z_Cds_Basic.carrid,
Z_Cds_Basic.connid,
Z_Cds_Basic.fldate,
Z_Cds_Basic.paymentsum
}
CDS view:
@AbapCatalog.sqlViewName: 'ZSQLSCARR'
@ClientDependent: true
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Z_CDS_FPM_APP'
@VDM.viewType: #BASIC
@Analytics.dataCategory: #DIMENSION
@Analytics.dataExtraction.enabled: true
@ObjectModel.representativeKey: 'Airline'
define view Z_Cds_Fpm_App as select from scarr {
If any associations are defined select associations and click on join check box to
view the fields which are mentioned in the associated table.
CDS VIEW:
@AbapCatalog.sqlViewName: 'Z_SQL_FPM'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Z_CDS_FPM_ASSOCIATION_APP'
@VDM.viewType: #BASIC
@Analytics.dataCategory: #DIMENSION
@Analytics.dataExtraction.enabled: true
@ObjectModel.representativeKey: 'AirConnection'
define view Z_Cds_Fpm_Association_App as select from spfli
association[0..1] to Z_Cds_Fpm_App as _Scarr
on $projection.Airline = _Scarr.Airline
@ObjectModel.foreignKey.association: '_Scarr'
key spfli.carrid as Airline,
key spfli.connid as AirConnection,
spfli.countryfr as DepatureCountry,
spfli.countryto as ArrivalCountry,
@Semantics.quantity.unitOfMeasure: 'AirDistanceUnit'
@DefaultAggregation: #SUM
spfli.distance as AirDistance,
@Semantics.unitOfMeasure: true
spfli.distid as AirDistanceUnit,
_Scarr
19) Basic view, Composite view and Consumption view example with Association
and other annotations example:
@AbapCatalog.sqlViewName: 'ZVWSCARR'
@ClientDependent: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Airlline'
@VDM.viewType: #BASIC
@Analytics.dataCategory: #DIMENSION
@Analytics.dataExtraction.enabled: true
@ObjectModel.representativeKey: 'Airline'
define view ZDemo_Scarr as select from scarr
{
key scarr.carrid as Airline,
@Semantics.text: true
scarr.carrname as AirName,
@Semantics.currencyCode: true
scarr.currcode as AirCurrency,
scarr.url as AirlineUrl
}
@AbapCatalog.sqlViewName: 'ZVWSFLIGHT'
@ClientDependent: true
@AccessControl.authorizationCheck:#NOT_REQUIRED
@EndUserText.label: 'Airline Schedule'
@Analytics.dataCategory: #CUBE
@Analytics.dataExtraction.enabled: true
@VDM.viewType: #BASIC
define view ZDemo_Sflight as select from sflight
association [0..1] to ZDemo_Scarr as _Scarr
on $projection.Airline = _Scarr.Airline
COMPOSITE VIEW:
@AbapCatalog.sqlViewName: 'ZVWCSFLIGHT'
@ClientDependent: true
@AccessControl.authorizationCheck:#NOT_REQUIRED
@EndUserText.label: 'Airline Schedule by Country'
@Analytics.dataCategory: #CUBE
@VDM.viewType: #COMPOSITE
define view ZDemo_Csflight as select from ZDemo_Sflight
{
@ObjectModel.foreignKey.association: '_Scarr'
key ZDemo_Sflight.Airline,
@ObjectModel.foreignKey.association: '_Spfli'
key ZDemo_Sflight.AirConnection,
key ZDemo_Sflight.FlightDate,
@Semantics.amount.currencyCode: 'FlightCurrency'
@DefaultAggregation:#MIN
ZDemo_Sflight.FlightPrice,
@Semantics.currencyCode: true
ZDemo_Sflight.FlightCurrency,
@DefaultAggregation: #SUM
ZDemo_Sflight.MaximumAvaSeats,
@DefaultAggregation: #SUM
ZDemo_Sflight.NumberOfAvaSeats,
/* Associations */
ZDemo_Sflight._Scarr,
ZDemo_Sflight._Spfli,
ZDemo_Sflight._Scarr.AirName,
ZDemo_Sflight._Scarr.AirlineUrl,
ZDemo_Sflight._Spfli.DepartureCountry,
ZDemo_Sflight._Spfli.ArrivalCountry
Consumption View:
@AbapCatalog.sqlViewName: 'ZVWSFLIGHTQUERY'
@ClientDependent: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'Flight Analytic Query'
@Analytics.query: true
@VDM.viewType: #CONSUMPTION
@OData.publish: true
define view ZDemo_Sflight_Query as select from ZDemo_Csflight
{
@AnalyticsDetails.query.axis: #ROWS
ZDemo_Csflight.Airline,
@AnalyticsDetails.query.axis: #ROWS
ZDemo_Csflight.AirConnection,
@AnalyticsDetails.query.axis: #ROWS
ZDemo_Csflight.FlightDate,
@Consumption.filter: {selectionType: #SINGLE, multipleSelections: false,
mandatory: true }
@AnalyticsDetails.query.axis: #ROWS
@EndUserText.label: 'Departure Country'
ZDemo_Csflight.DepartureCountry,
@AnalyticsDetails.query.axis: #ROWS
@EndUserText.label: 'Arrival Country'
ZDemo_Csflight.ArrivalCountry ,
@AnalyticsDetails.query.axis: #COLUMNS
ZDemo_Csflight.FlightPrice,
ZDemo_Csflight.FlightCurrency,
ZDemo_Csflight.MaximumAvaSeats,
ZDemo_Csflight.NumberOfAvaSeats
Run RSRT t-code and enter sql view name appending with 2C.
2CZVWSFLIGHTQUERY
OUTPUT:
20) AMDP CLASS and invoking AMDP from report:
Example 1:
public section.
END OF ty_order.
* Table type
TYPES:
tt_order TYPE STANDARD TABLE OF ty_order WITH EMPTY KEY.
* Method Definition
CLASS-METHODS get_salesorder_details
IMPORTING
VALUE(iv_vbeln) TYPE vbeln
EXPORTING
VALUE(et_order) TYPE tt_order.
protected section.
private section.
ENDCLASS.
*&---------------------------------------------------------------------*
*& Report z_amdp_report_salesorder
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT z_amdp_report_salesorder.
Example 2:
Create class :
protected section.
private section.
endclass.
endclass.
REPORT z_amdp_report.
TRY.
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = r_salv
CHANGING
t_table = et_mara
.
CATCH cx_salv_msg .
ENDTRY.
r_salv->display( ).
@AbapCatalog.sqlViewName: 'ZDEMO_CDS_SCASE'
@AccessControl.authorizationCheck: #NOT_REQUIRED
define view Zdemo_cds_searched_case
as select from
spfli
{
key carrid,
key connid,
distance,
distid,
case
when distance >= 2000 then 'long-haul flight'
when distance >= 1000 and
distance < 2000 then 'medium-haul flight'
when distance < 1000 then 'short-haul flight'
else 'error'
end as flight_type
}
where
distid = 'MI'
@AbapCatalog.sqlViewName: 'CSADL_VOC_SOCH'
@EndUserText.label: 'Vocan View: Sales Order Chart UI Anno'
@VDM.viewType: #CONSUMPTION
@UI.chart: [
{
title: 'Sales Order Volume Column',
description: 'Sales Order Volume Column Chart',
chartType: #COLUMN,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Columnstack',
title: 'Sales Order Volume Column Stack',
description: 'Sales Order Volume Column Stack Chart',
chartType: #COLUMN_STACKED,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Columnstack100',
title: 'Sales Order Volume Column Stack 100',
description: 'Sales Order Volume Column Stack 100 Chart',
chartType: #COLUMN_STACKED_100,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Area',
title: 'Area',
description: 'Area Chart',
chartType: #AREA,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Areastacked',
title: 'Area Stacked',
description: 'Area Stacked Chart',
chartType: #AREA_STACKED,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Areastacked100',
title: 'Area Stacked 100',
description: 'Area Stacked 100 Chart',
chartType: #AREA_STACKED_100,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Horizontal',
title: 'Horizontal',
description: 'Horizontal',
chartType: #HORIZONTAL_AREA,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Horizontalstacked',
title: 'Horizontal Stacked',
description: 'Horizontal Stacked Chart',
chartType: #HORIZONTAL_AREA_STACKED,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Horizontalstacked100',
title: 'Horizontal Stacked 100',
description: 'Horizontal Stacked 100 Chart',
chartType: #HORIZONTAL_AREA_STACKED_100,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Line',
title: 'Line',
description: 'Line',
chartType: #LINE,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Bar',
title: 'Bar',
description: 'Bar Chart',
chartType: #BAR,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Barstacked',
title: 'Bar Stacked',
description: 'Bar Stacked Chart',
chartType: #BAR_STACKED,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Barstacked100',
title: 'Bar Stacked 100',
description: 'Bar Stacked 100 Chart',
chartType: #BAR_STACKED_100,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Pie',
title: 'Pie',
description: 'Pie',
chartType: #PIE,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Donut',
title: 'Donut',
description: 'Donut',
chartType: #DONUT,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Scatter',
title: 'Scatter',
description: 'Scatter',
chartType: #SCATTER,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Bubble',
title: 'Bubble',
description: 'Bubble',
chartType: #BUBBLE,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Radar',
title: 'Radar',
description: 'Radar',
chartType: #RADAR,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Heatmap',
title: 'Heatmap',
description: 'Heatmap',
chartType: #HEAT_MAP,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Treemap',
title: 'Treemap',
description: 'Treemap',
chartType: #TREE_MAP,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Waterfall',
title: 'Waterfall',
description: 'Waterfall',
chartType: #WATERFALL,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'Bullet',
title: 'Bullet',
description: 'Bullet',
chartType: #BULLET,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolume', 'SalesOrderTaxAmount' ]
},
{
qualifier: 'InvalidChart',
title: 'Should not be displayed',
description: 'Should not be displayed',
chartType: #AREA,
dimensions: [ 'CompanyName', 'Country', 'Status' ] ,
measures: [ 'SalesOrderVolumeNetAmount']
}
]
{
key Document.BusinessPartnerId,
Document.CompanyName,
Document.CurrencyCode,
Document.BusinessPartnerRole,
Document.Country,
Document.CreatedBy,
@UI.lineItem: [ {
position: 50,
importance: #MEDIUM,
label: 'Sales Order Volume'
},
{ qualifier: 'ForChart',
position: 51,
importance: #HIGH,
label: 'Sales Order Volume',
type: #AS_CHART,
valueQualifier: 'Columnstack'
}]
@UI.identification: [{
position: 2,
importance: #HIGH,
label: 'Sales Order Volume'
}, {
position: 2,
importance: #HIGH,
label: 'Sales Order Volume',
type: #AS_CHART,
valueQualifier: 'Columnstack'
}]
sum(_SalesOrderVolume.NetAmount) as SalesOrderVolume,
sum(_SalesOrderVolume.TaxAmount) as SalesOrderTaxAmount,
min(_SalesOrderVolume.LifecycleStatus) as Status,
_SalesOrders
}
group by
Document.BusinessPartnerId,
Document.CompanyName,
Document.CurrencyCode,
Document.BusinessPartnerRole,
Document.Country,
Document.CreatedBy
24) S_NWDEMO IS SUPER PACKAGE where all demo apps can be viewed:
APPL ODATA_MM
Odata service with parameters in CDS view :
//http://madap8036.accenture.tsap:8001/sap/opu/odata/sap/Z_CDS_PARAMS_ODATA_CDS/
//Z_CDS_PARAMS_ODATA(p_carrid='AA')/Set
//http://www.saplearners.com/create-odata-service-abap-cds-views/
@AbapCatalog.sqlViewName: 'ZV_ODATA_DEMO_P'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'OData service on ABAP CDS View'
@OData.publish: true
define view Z_CDS_PARAMS_ODATA
with parameters p_carrid :s_carr_id
as select from scarr
{
key carrid as AirlineCode,
carrname as AirlineName,
currcode as Currency,
url as AirlineURL
}
where carrid = $parameters.p_carrid