SAP Standard API erweitern mit CDS-View


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.

Projektion auf Item


@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.)

Projektion auf die Merkmals-Entity


@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
}


Service Definition & Binding



@EndUserText.label: 'Sales Order + Item Char API'
define service ZAPI_SD_ITEM_CHAR {
  expose ZC_SalesOrderItem as SalesOrderItem;
  expose ZC_SDItemCharVal  as SalesOrderItemChar;
}