本文全面介绍SAP ABAP CDS View(Core Data Services)的开发与应用。详细讲解CDS View定义语法、关联与连接操作、参数化视图实现以及重要注解使用,帮助开发者掌握CDS View在Fiori/OData服务中的应用技巧。

SAP ABAP CDS View 开发指南:核心数据服务详解

在现代SAP开发环境中,ABAP CDS View(Core Data Services)已成为数据建模和消费的核心技术。本文将详细介绍CDS View的关键概念、语法结构及实际应用,帮助开发人员充分利用这一强大工具。

CDS View 基础

ABAP CDS View是一种在数据库层定义数据模型的技术,它允许开发者以声明方式创建语义丰富的数据视图。与传统的ABAP视图相比,CDS View提供了更强大的功能、更好的性能和更丰富的语义信息。

基本的CDS View定义语法如下:

@EndUserText.label: '客户基本信息视图'
define view entity ZC_CustomerView
  as select from kna1
{
  key kunnr        as CustomerID,
      name1        as CustomerName,
      land1        as Country,
      ort01        as City,
      pstlz        as PostalCode
}

在这个示例中,我们创建了一个基于KNA1表的简单视图,并使用@EndUserText.label注解为视图添加描述。

CDS View 中的关联与连接

CDS View提供了强大而灵活的数据关联能力。可以使用association建立关联关系,并在查询中使用to-oneto-many导航。

以下是一个包含关联的CDS View示例:

@EndUserText.label: '客户销售订单视图'
define view entity ZC_CustomerSalesOrder
  as select from kna1
  association [0..*] to vbak as _SalesOrders on $projection.customerid = _SalesOrders.kunnr
{
  key kunnr                as CustomerID,
      name1                as CustomerName,
      land1                as Country,
      /* 关联字段 */
      _SalesOrders
}

在需要获取关联数据时,可以在消费视图时使用路径表达式:

define view entity ZC_CustomerOrderDetails
  as select from ZC_CustomerSalesOrder
{
  key CustomerID,
      CustomerName,
      Country,
      /* 通过路径表达式访问关联数据 */
      _SalesOrders.vbeln    as OrderID,
      _SalesOrders.netwr    as OrderAmount
}

参数化 CDS View

CDS View支持参数化,允许在运行时传递参数来动态过滤数据。参数化视图使用with parameters子句定义参数:

@EndUserText.label: '按国家查询客户'
define view entity ZC_CustomersByCountry
  with parameters
    p_country : land1
  as select from kna1
{
  key kunnr        as CustomerID,
      name1        as CustomerName,
      land1        as Country
}
where land1 = :p_country

消费此视图时,需要提供参数值:

@EndUserText.label: '德国客户销售数据'
define view entity ZC_GermanyCustomerSales
  as select from ZC_CustomersByCountry( p_country = 'DE' )
{
  key CustomerID,
      CustomerName
}

CDS View 中的注解

注解是CDS View的重要特性,用于添加语义信息、控制UI显示行为以及定义OData服务特性。常用的注解包括:

语义注解

@EndUserText.label: '销售订单金额视图'
define view entity ZC_SalesOrderAmount
  as select from vbak
  association to vbap as _Items on $projection.vbeln = _Items.vbeln
{
  key vbeln                as OrderID,
      @Semantics.amount.currencyCode: 'WAERS'
      netwr                as NetAmount,
      waers                as Currency,
      /* 聚合计算 */
      @Semantics.amount.currencyCode: 'Currency'
      sum(_Items.netwr)    as TotalAmount
}

在这个示例中,@Semantics.amount.currencyCode注解标识字段为金额类型,并指定货币代码字段。

UI 和分析注解

@EndUserText.label: '客户销售分析'
@UI.headerInfo: { title: { value: 'CustomerName' } }
define view entity ZC_CustomerSalesAnalysis
  as select from kna1
  association to vbak as _SalesOrders on $projection.customerid = _SalesOrders.kunnr
{
  key kunnr                                        as CustomerID,
      @UI.identification: [ { position: 10 } ]
      @UI.lineItem: [ { position: 10 } ]
      name1                                        as CustomerName,
      @UI.hidden: true
      land1                                        as Country,
      /* 分析度量 */
      @DefaultAggregation: #SUM
      @Semantics.amount.currencyCode: 'Currency'
      sum(_SalesOrders.netwr)                      as TotalSalesAmount,
      _SalesOrders.waers                           as Currency
}

这些UI注解控制着在Fiori应用中的显示行为,如标识字段、列表字段和隐藏字段。

在 Fiori 和 OData 中暴露 CDS View

CDS View可以通过OData服务发布,供Fiori应用程序消费。以下是使用注解定义OData服务的示例:

@EndUserText.label: '客户管理服务'
@OData.publish: true
define view entity ZC_CustomerService
  as select from kna1
{
  key kunnr        as CustomerID,
      name1        as CustomerName,
      land1        as Country,
      ort01        as City
}

更复杂的OData服务可以使用@ObjectModel注解进一步配置:

@EndUserText.label: '销售订单管理'
@OData.publish: true
@ObjectModel: {
  type: #TRANSACTIONAL,
  createEnabled: true,
  updateEnabled: true,
  deleteEnabled: true
}
define view entity ZC_SalesOrderManage
  as select from vbak
  association to vbap as _Items on $projection.vbeln = _Items.vbeln
{
  key vbeln                   as OrderID,
      @ObjectModel.fieldGroup: [ #mandatory ]
      auart                   as OrderType,
      @ObjectModel.fieldGroup: [ #mandatory ]
      vkorg                   as SalesOrg,
      _Items
}

这些注解使CDS View可以直接用于创建、读取、更新和删除(CRUD)操作的OData服务。

总结

ABAP CDS View为SAP开发提供了强大、高效的数据建模方式。通过其丰富的语法、灵活的关联能力、参数化支持和丰富的注解系统,开发者可以创建语义丰富、高性能的数据模型,无缝集成到Fiori应用和OData服务中。掌握CDS View技术对于现代SAP开发人员来说是必不可少的技能,它不仅提高了开发效率,还为构建现代化的SAP应用奠定了坚实基础。

本文由 SAP中文社区 整理发布,转载请注明出处:https://www.sapzx.com

滚动至顶部