主CDS view
bash
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'ZCSC_Carrier'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType:{
serviceQuality: #X,
sizeCategory: #S,
dataClass: #MIXED
}
@UI.headerInfo: {
typeName: 'Connection',
typeNamePlural: 'Connection'
}
@UI.presentationVariant: [{
groupBy: [ 'AirportFromId' ],
sortOrder: [{by: 'AirportFromId'}]
}]
define view entity ZSC3_DV_CONNECTION
as select from /dmo/connection as Connection
association [1..*] to ZSC3_DV_FLIGHT_R as _Flight on $projection.ConnectionId = _Flight.ConnectionId
and $projection.CarrierId = _Flight.CarrierId
association [1] to ZSC3_DV_CARRIER_R as _Carrier on $projection.CarrierId = _Carrier.CarrierId
{
@UI.facet: [{ purpose: #STANDARD, type: #IDENTIFICATION_REFERENCE, position:10, label: 'Connection Detail' },
{ id:'Flight', purpose: #STANDARD, type: #LINEITEM_REFERENCE, position:20, label: 'Flight Detail',targetElement: '_Flight' }]
@UI.lineItem: [{ position: 10, importance: #HIGH, type: #STANDARD }]
@UI.identification: [{ position: 10 , label: 'Carrier ID'}]
@ObjectModel.text.association: '_Carrier'
key carrier_id as CarrierId,
@UI.lineItem: [{ position: 20, importance: #HIGH, type: #STANDARD }]
@UI.identification: [{ position: 20 }]
key connection_id as ConnectionId,
@UI.selectionField: [{ position: 10, element: 'AirportFromId'}]
@UI.lineItem: [{ position: 30, importance: #HIGH, type: #STANDARD }]
@UI.identification: [{ position: 30 }]
airport_from_id as AirportFromId,
@UI.lineItem: [{ position: 40, importance: #HIGH, type: #STANDARD }]
@UI.selectionField: [{ position: 20, element: 'AirportToId'}]
@UI.identification: [{ position: 40 }]
airport_to_id as AirportToId,
@UI.lineItem: [{ position: 50, importance: #HIGH, type: #STANDARD, label: 'Departure Time' }]
@UI.identification: [{ position: 50 }]
departure_time as DepartureTime,
@UI.lineItem: [{ position: 60, importance: #HIGH, type: #STANDARD, label: 'Arrival Time' }]
@UI.identification: [{ position: 60 }]
arrival_time as ArrivalTime,
//@Semantics.quantity.unitOfMeasure: 'DistanceUnit'
@UI.identification: [{ position: 70 }]
distance as Distance,
@UI.identification: [{ position: 80 }]
distance_unit as DistanceUnit,
_Flight,
_Carrier
}
Service
bash
@EndUserText.label: 'SD_CONNECTION'
define service ZSC3_SD_CONNECTION {
expose ZSC3_DV_CONNECTION;
expose ZSC3_DV_FLIGHT_R;
expose ZSC3_DV_CARRIER_R;
}
Binding

注意:需要发布
明细View
bash
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'DV_FLIGHT_R'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType:{
serviceQuality: #X,
sizeCategory: #S,
dataClass: #MIXED
}
define view entity ZSC3_DV_FLIGHT_R as select from /dmo/flight
association [1] to ZSC3_DV_CARRIER_R as _Carrier on $projection.CarrierId = _Carrier.CarrierId
{
@UI.lineItem: [{position: 10}]
@ObjectModel.text.association: '_Carrier'
key carrier_id as CarrierId,
@UI.lineItem: [{position: 20}]
key connection_id as ConnectionId,
@UI.lineItem: [{position: 30}]
key flight_date as FlightDate,
@Semantics.amount.currencyCode: 'CurrencyCode'
@UI.lineItem: [{position: 40}]
price as Price,
@UI.lineItem: [{position: 50}]
currency_code as CurrencyCode,
@UI.lineItem: [{position: 60}]
plane_type_id as PlaneTypeId,
@UI.lineItem: [{position: 70}]
seats_max as SeatsMax,
@UI.lineItem: [{position: 80}]
seats_occupied as SeatsOccupied,
_Carrier
}
文本View --ID 使用文本显示
bash
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: 'DV_CARRIER_R'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType:{
serviceQuality: #X,
sizeCategory: #S,
dataClass: #MIXED
}
define view entity ZSC3_DV_CARRIER_R as select from /dmo/carrier
{
key carrier_id as CarrierId,
@Semantics.text: true
name as Name,
currency_code as CurrencyCode
}
效果

点Go,

点击需要的行进入明细,如下图
