Okay, wir möchten jetzt als Beispiel die Standardschnittstelle API_SALES_ORDER_SRV (I_SalesOrderItem) erweitern und die Klassifizierung aus der Zeile laden.
Der CDS View zum Laden der Merkmale:
@EndUserText.label: 'Sales Order Item Characteristics'
@AccessControl.authorizationCheck: #CHECK
define view entity ZI_SDItemCharVal
as select from vbap
inner join ausp
on ausp.objek = cast( vbap.cuobj as char(18) )
inner join cabn
on cabn.atinn = ausp.atinn
left outer join cawn
on cawn.atinn = ausp.atinn and cawn.atwrt = ausp.atwrt
left outer join cabnt
on cabnt.atinn = cabn.atinn
and cabnt.spras = $session.system_language
left outer join cawnt
on cawnt.atinn = cawn.atinn
and cawnt.atzhl = cawn.atzhl
and cawnt.spras = $session.system_language
{
key vbap.vbeln as SalesOrder,
key vbap.posnr as SalesOrderItem,
key ausp.atzhl as ValueIndex, // Teil des Schlüssels
key ausp.atinn as Atinn, // stabiler technischer Schlüssel
cabn.atnam as Characteristic,
coalesce( cabnt.atbez, cabn.atnam ) as CharacteristicText,
ausp.atwrt as ValueCode,
coalesce( cawnt.atwtb, cawn.atwrt ) as ValueText,
ausp.atflv as ValueNum,
cabn.msehi as ValueUoM,
cabn.atfor as CharFormat,
ausp.mafid as Source
}
where vbap.vbeln <> '';
Du kannst die Standard-Interface-View I_SalesOrderItem nicht direkt ändern, aber du kannst sie projizieren und dort die Association ergänzen.
@EndUserText.label: 'Sales Order Item (Proj) with Char Nav'
define view entity ZC_SalesOrderItem
as projection on I_SalesOrderItem
{
key SalesOrder,
key SalesOrderItem,
/* … weitere Felder, die du brauchst … */
// Association auf die Charakteristik-Entity
association [0..n] to ZI_SDItemCharVal as _CharVals
on _CharVals.SalesOrder = SalesOrder
and _CharVals.SalesOrderItem = SalesOrderItem
}
[I_SalesOrderItem] (StdApi) >> [ZC_SalesOrderItem] (Proj.)
[ZI_SDItemCharVal] (View) >> [ZC_SDItemCharVal] (Proj.)
@EndUserText.label: 'Sales Order Item Characteristics (Proj)'
define view entity ZC_SDItemCharVal
as projection on ZI_SDItemCharVal
{
key SalesOrder,
key SalesOrderItem,
key ValueIndex,
key Atinn,
Characteristic,
CharacteristicText,
ValueCode,
ValueText,
ValueNum,
ValueUoM,
CharFormat,
Source
}
@EndUserText.label: 'Sales Order + Item Char API'
define service ZAPI_SD_ITEM_CHAR {
expose ZC_SalesOrderItem as SalesOrderItem;
expose ZC_SDItemCharVal as SalesOrderItemChar;
}
ABAP Core Data Services (CDS) sind eine moderne Möglichkeit in SAP ABAP, Datenbankabfragen und Datenmodelle zu definieren.
Sie sind ein semantisches Schichtmodell auf der Datenbank, mit dem man Daten deklarativ beschreibt, statt rein prozedural in ABAP zu programmieren.