首页 > 其他分享 >SAP CDS view 源代码中的 $projection

SAP CDS view 源代码中的 $projection

时间:2023-08-16 11:22:12浏览次数:38  
标签:源代码 flight projection TotalDistanceTravelled 视图 AbapCatalog CDS SAP

我们看到下图 CDS view 源代码里 association 条件中的 $projection.

在SAP CDS(Core Data Services)中,$projection 是一个特殊的关键字,用于在查询中选择特定的字段并创建一个临时视图。它可以在CDS视图的源代码中使用,以对结果集进行处理和转换。通过使用 $projection,可以根据需要过滤和转换数据,将源数据集投影到一个新的、更具体的数据视图中。

假设有一个简单的业务场景,涉及到一个名为 SalesOrder 的数据表,其中包含销售订单的信息,包括订单号、客户名称、产品、数量和金额。我们可以创建一个基本的CDS视图,然后使用 $projection 来创建一个新的视图,仅选择所需的字段。

以下是一个示例,假设我们有一个名为 SalesOrder 的CDS数据表:

@AbapCatalog.sqlViewName: 'ZSALESORDER'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Sales Order'
define entity SalesOrder {
    key OrderID   : UUID;
    CustomerName  : String(50);
    Product      : String(50);
    Quantity     : Integer;
    Amount       : Decimal(15, 2);
}

现在,我们可以基于上述 SalesOrder 实体创建一个CDS视图,并使用 $projection 选择所需的字段,如下所示:

@AbapCatalog.sqlViewName: 'ZSalesOrderView'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Sales Order View'
define view SalesOrderView as select from SalesOrder {
    key OrderID,
    $projection.CustomerName,
    $projection.Product,
    Quantity,
    $projection.Amount
} 

在上面的示例中,$projection 关键字用于选择 CustomerNameProduct 字段,并保留了原始的 Quantity 字段。Amount 字段也被选择到新的视图中,但没有进行特殊处理,因此它保持不变。

通过使用 $projection,我们可以创建一个新的CDS视图,仅包含我们感兴趣的字段,而不必重新定义所有的字段和逻辑。这有助于简化查询和数据处理,同时还可以提高查询的性能,因为只选择了所需的字段。

再看另一个例子。

在 SAP 的 ABAP 编程环境中,CDS(Core Data Services)视图是一个强大的工具,可以让开发者以更高效、更简洁的方式操作数据库。在 CDS 视图的源代码中,$projection 是一个特殊的关键字,它被用来引用当前的投影列表。也就是说,$projection 引用的是当前 CDS 视图定义中所包含的所有字段。

举例来说,如果你在 CDS 视图中定义了一些字段,例如 idnamestatus,然后你在视图的某个部分(如一个条件表达式或者一个计算表达式)需要引用这些字段,那么你就可以使用 $projection 关键字。

以下是一个使用 $projection 的简单示例:

@AbapCatalog.sqlViewName: 'Z_MY_VIEW'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'My View'
define view ZMyView as select from sflight as flight {
  key flight.carrid as CarrierId,
      flight.connid as ConnectionId,
      flight.fldate as FlightDate,
      flight.price as Price,
      flight.currency as Currency,
      flight.passengers as Passengers,
      flight.distance as Distance,
      flight.distance * $projection.Passengers as TotalDistanceTravelled
} where $projection.TotalDistanceTravelled > 10000

在上面的例子中,CDS 视图 ZMyView 包含了几个字段,如 CarrierIdConnectionIdFlightDatePriceCurrencyPassengersDistance。然后我们定义了一个计算字段 TotalDistanceTravelled,这个字段的值是 Distance 字段的值乘以 $projection.Passengers 的值。在这里,$projection.Passengers 就是用来引用 Passengers 字段的。

然后,在 where 子句中,我们又使用了 $projection.TotalDistanceTravelled 来引用 TotalDistanceTravelled 字段。这里的 $projection.TotalDistanceTravelled > 10000 就表示只选择那些 TotalDistanceTravelled 字段的值大于 10000 的记录。

需要注意的是,$projection 只能在 CDS 视图的计算表达式和条件表达式中使用,不能在 select 子句的列表中使用。也就是说,你不能写出像 $projection.someField as SomeField 这样的代码。

标签:源代码,flight,projection,TotalDistanceTravelled,视图,AbapCatalog,CDS,SAP
From: https://www.cnblogs.com/sap-jerry/p/17633555.html

相关文章

  • 什么是 SAP CDS view 的 exposed Association
    SAPCDS是SAPHANA数据库中的一种新的数据定义语言。它允许开发者定义语义富裕的数据模型,这些数据模型可以以数据库独立的方式在ABAP服务器上使用。因此,通过CDS,开发者可以创建复杂的视图来构建ABAP程序或应用。关联(Association)在CDS视图中是一个非常重要的概念。它在C......
  • SAP CRM 的 pricing 数据库表 PRCD_HEAD
    在SAPCRM系统中,PRCD_HEAD是一个重要的数据库表,用于存储定价计划(PricingPlan)的主要信息。定价计划是一个关键的概念,它定义了在销售和定价过程中使用的价格策略和规则。PRCD_HEAD表记录了每个定价计划的基本属性和配置信息,以支持在销售交易中正确地应用定价。以下是一个详细说明S......
  • SAP ABAP 系统中的 Lock Object
    作为一个SAP资深技术专家,很高兴为您解释SAPABAP系统中的LockObject概念。LockObject是在SAP中用于管理并发性(Concurrency)和数据一致性(Consistency)的机制,确保在多用户同时访问数据时不会发生冲突。LockObject概念:在SAPABAP中,LockObject是一种机制,用于控制和协......
  • 什么是 SAP ABAP 系统的 LUW (Logical Unit of Work)概念
    在SAPABAP系统中,数据库LUW是一个关键概念,用于管理数据库操作的一致性和隔离性。数据库LUW(LogicalUnitofWork)的概念:在SAPABAP系统中,数据库LUW是一组数据库操作的逻辑集合,这些操作要么全部成功地提交到数据库,要么全部回滚。它确保了数据库操作的一致性和隔离性。在SAPABAP中......
  • 兼职APP源代码软件需求
      兼职APP源代码软件需求  在网络上通过APP软件实现拉新赚钱,做任务,这个也算是一份工作,作为一种新型的做任务模式,已经成为了众多的副业用户的平台。开发一款这样的APP任务软件,都有哪些功能需求呢。  第一、用户体验:用户使用软件时要操作简单,没有太多的功能选项,所有的......
  • SAP CRM One Order 锁定模式用的是 Exclusive Lock
    在SAPCRMWebClientUI上点击Edit按钮后,界面进入可编辑状态:后台SM12事务码观察到锁类型为E,即Exclusivelock,也就是排他锁。其中PRCD_HEAD是Pricing模块抬头级别的数据:CRMOneOrder对应的lockobject名称为:E_CRM_ORDER关于这个叫做prospect的必填字......
  • 关于 SAP Lock Owner 问题的讨论
    在SAP事务开始时,始终会创建两个所有者(Owner)并可以请求锁定。一把锁可以有一个或两个所有者,分别是对话所有者和更新所有者。可以在_SCOPE参数中指定所有者的个数。默认为2即2个所有者:要找出当前持有锁的用户,请使用FunctionModuleENQUEUE_....这会将当前持有锁的......
  • SAP ABAP Lock 的 Collision Check 机制介绍
    SAPABAP系统使用CollisionCheck机制来检查锁请求是否与现有锁冲突。如果发生冲突,对话事务的用户会收到一条消息,指示所请求的对象当前已被不同的用户锁定。注意:对于非对话工作进程(在批量输入中),稍后会再次发出锁定请求。SAP官方文档中对collisioncheck机制的描述:There......
  • 什么是 SAP Lock 机制中的 Lock Table
    SAPABAP系统里,当我们调用SAPLockObject生成的EnqueueFunctionModule对一条数据库表记录上锁时,就会在SAPLockTable中生成一条记录。SAPLock体系中的LockTable位于中央实例的主存(共享内存)中。中央实例中的所有WorkProcess都可以访问锁表。外部应用程序服务......
  • PnP and Perspective Projection and Pose Computation
    PnPandPerspectiveProjectionandPoseComputationReviewPnPproblemfromacomputergraphicsrenderingview首先从一个StackExchange问题出发,下面是本人的回答摘录。IntrinsicMatrixvs.ProjectionMatrixWhatisthedifferencebetweenIntrinsicMatrix(K)......