ABAP CDS注解详解

注解

系统常量

$session.client

$session.client				SAP 客户端

$session.system_date

$session.system_date			系统时间,SY-DATUM

$session.system_language

$session.system_language			SAP语言

$session.user

$session.user						登陆SAP的用户

SAP ABAP CDS view里的注解在ABAP后台是如何被解析的?

SAP ABAP CDS view里的注解在ABAP后台是如何被解析的?

CDS 视图中的 ABAP 注解:

有一组 SAP 注解,由 SAP 预先定义。这些包括由 ABAP 运行时环境评估的 ABAP 注解和由其他框架(如 OData、UI 和 Analytics)评估的组件注解。

注解用于向 CDS 实体添加元数据。它们由使用 CDS 实体的框架进行评估。注解指定实体的属性和语义及其在运行时访问时的行为。使用特殊 API 的消费工具也可以访问此元数据。

当 CDS 源代码中定义的对象被激活时,注解定义的元数据保存在 ABAP Dictionary 的内部数据库表中。然后可以访问这些表来评估数据。无论名称和值如何,都使用正确的语法为每个注解完成此操作。

ABAP 目录注解

以下 ABAP 目录注解可用:

@AbapCatalog.sqlViewName: ‘<SQL VIEW NAME>’

描述: ABAP 词典中 CDS 数据库视图的名称。

可能的值:最多 16 个字符的字符串。

用于注解@AbapCatalog.sqlViewName的SQL 视图名称是一个最多16 个字符的字符串,由字母数字和下划线组成,并以命名空间前缀开头。

注意
CDS 视图的每个定义都必须包含 ABAP 注解
@AbapCatalog.sqlViewName,它定义了ABAP 字典中 CDS 数据库视图的名称。

@AbapCatalog.compiler.compareFilter: ‘<VALUE>’

说明:定义CDS 视图路径表达式中过滤条件的评估。

可能的值:true或false

使用注解@AbapCatalog.compiler.compareFilter,可以定义 CDS 视图路径表达式中过滤条件的评估。当设置为 true 时,过滤条件被比较,如果它们匹配,关联的连接表达式只计算一次。设置为 false 时,将为每个过滤条件创建和评估单独的连接表达式。

访问控制注解

以下访问控制注释可用:

@AccessControl.authorizationCheck: ‘<VALUE>’

说明:定义使用 Open SQL 访问 CDS 视图时的隐式访问控制。权限检查

可能的值: #CHECK、#NOT_REQUIRED 和 #NOT_ALLOWED

注解@AccessControl.authorizationCheck允许您定义在使用 Open SQL 访问 CDS 视图时如何处理访问控制,如下所示。

CHECK:如果使用 Open SQL 访问视图,如果将 CDS 角色分配给视图,则隐式执行访问控制。如果视图没有角色,则会出现语法检查警告。

NOT_REQUIRED:与#CHECK 类似,但没有语法检查警告。

NOT_ALLOWED:不执行访问控制。这会在视图角色的 DCL 源代码中生成语法检查警告。

ABAP CDS 支持基于数据控制语言 (DCL) 的访问控制。ABAP CDS 中的访问控制进一步限制了从 ABAP CDS 中的 CDS 实体返回的数据。CDS 访问控制基于以下几点:

使用 DCL 语句 DEFINE ROLE 定义的 CDS 角色。目前,CDS 角色隐式映射到每个用户。这就是为什么它们也被称为映射角色的原因。

在 CDS 角色 CDS 实体中定义的访问条件。访问条件可以如下:

  • 将 CDS 实体的元素与文字值进行比较的文字条件。
  • 将 CDS 实体的元素与 SAP 授权概念中的授权相关联的 PFCG 条件。

如果为 CDS 实体定义了 CDS 角色,则每次使用 Open SQL 或使用服务适配描述语言 (SADL) 查询访问对象时都会隐式评估访问条件(除非使用值 #NOT_ALLOWED 禁用访问控制)注解@AccessControl.authorizationCheck)。如果启用访问控制,则只读取满足访问条件的数据。

注:
SADL(Service Adaptation Description Language)是一种ABAP技术,基于模型驱动的方式,可以在具有共同开发体验的各种场景下,实现类实体关系的ABAP数据模型的消费。因此,SADL 可以使用查询下推实现对基于 SAP HANA 的移动和桌面应用程序场景的数据的快速读取访问。

最终用户文本注解

以下 EndUserText 注释可用:

@EndUserText.label:’<String>’

描述: CDS 视图的可翻译短文本,用户看到的文本

可能的值:最多 40 个字符的字符串

引入了ABAP 注释@EndUserText.label来定义 CDS 对象的可翻译语义文本。像这样的注释的值保存在具有语言键且可翻译的特殊表中。源代码中指定的值应由 CDS 源代码原始语言的文本组成,并被翻译成所需的语言。

CDS 视图中的语义注解

对于数据处理、分析和数据消费,核心引擎需要正确解释投影列表中使用的列。语义注解通知客户端有关数据类型的信息。
在这里插入图片描述
语义注解用于通知客户端哪些元素包含电话号码、姓名或地址的一部分,或与日历事件相关的内容,等等。例如,它们不得绑定到专用消费渠道。它们需要可用于通过 OData、(S)QL 等使用。

语义注解补充了语义数据类型的概念,而语义数据类型总是在提供者/核心基础设施中引入特定行为(通过专用操作或转换函数)。语义标注允许对仅对消费端有影响的语义(如电话号码、邮件地址、城市等)进行标准化。

语义注释 –> 文本和 url

以下文本和 URL 语义注解可用:

@Semantics.text: ‘<值>’

描述:此注释标识一个人类可读的文本,它不一定依赖于语言。

可能的值:true或false

使用@Semantics.text注释,该字段被识别为人类可读的文本字段。该领域不需要依赖于语言。

@Semantics.url: ‘<值>’

说明:此注释字段包含一个 URL,其 MIME 类型包含在引用的第二个字段中。

可能的值: URL

语义注释:currencyCode 和 amount.currencyCode

以下currencyCode 和amount.currencyCode 语义注释可用:

@Semantics.currencyCode: ‘<值>’

描述:此注释标记包含货币代码的字段。

可能的值:true或false
在这里插入图片描述
the currency field is connected to the FlightPrice and CurrentBookingsTotalAmount .

@Semantics.amount.currencyCode: ‘<VALUE>’

说明:此注释包含货币金额,引用字段中包含相应的货币代码。

可能的值: [ELEMENT, PARAMETER]

使用注释 Semantics.currencyCode,该字段被标记为包含货币代码。这可以是 ISO 代码或 SAP 货币代码(数据类型 CUKY)。

注释@Semantics.amount.currencyCode将字段标识为包含货币金额,并且相应的货币代码包含在引用的字段中。
在这里插入图片描述
the currency field is connected to the FlightPrice and CurrentBookingsTotalAmount .

语义注释–> unitOfMeasure 和quantity.unitOfMeasure

以下unitOfMeasure 和quantity.unitOfMeasure 语义注释可用:

@Semantics.unitOfMeasure: ‘<值>’

说明:此注释将字段标记为包含度量单位。

可能的值:true或false

@Semantics.quantity.unitOfMeasure: ‘<Value>’

说明:注释字段的值指定与测量数量相关的测量单位。

可能的值: [ELEMENT, PARAMETER]

使用@Semantics.unitOfMeasure注释,该字段被标记为包含度量单位。

注:
目前似乎没有国际公认的可用计量单位标准清单。

注释@Semantics.quantity.unitOfMeasure将字段标识为包含与测量数量相关的测量单位。

CDS 视图中的对象模型注解

ObjectModel代表Key和ObjectModel.text.element:

以下ObjectModel注释可用:

@ ObjectModel.representativeKey: ‘<名称键字段>’

说明:将最特殊的元件,表示该视图是基于实体的主键(由关键字KEY表示)的(FI场或管理协会)。

可能的值: <名称键连接的场>

加上注解@ObjectModel.representativeKey,代表键对应的外键字段代表实体。因此,它可以称为具有代表性的外键元素。外键关联是在代表性外键元素上定义的。代表键的名称通常等于视图所代表的实体的名称。对于非文本视图,它是视图用作值列表/检查表的关键元素。

@ObjectModel.text.element: ‘<值>’

描述:建立一个领域与其描述性语言无关的文本的联系。

可能的值:元素

使用注释@ObjectModel.text.element,注释数组中列出的第一个文本字段将在 OData 暴露场景中作为注释字段的描述性文本进行处理。
在这里插入图片描述

ObjectModel foreignKey.association:

以下 ObjectModel 注释可用:

@ObjectModel.foreignKey.association: ‘<名称键字段>’

说明:定义与视图的关联,该视图表示带注释的字段的值列表/检查表。

可能的值: <元素>

使用注解@ObjectModel.foreignKey.association,注解字段的值必须等于目标视图的注解代表键字段。关联的最大目标基数必须为 1。
在这里插入图片描述
In the view Z00_I_FlightConnection, three associations are created.
The first association created a relationship between carrier id (LH) and the carrier name (Lufthansa).
The last two associations set up the relationship between the airport id (FRA) and the airport name (Frankfurt). Two associations were made because there are two airport columns: AirportFrom and AirportTo.

在这里插入图片描述
In the body of the CDS view Z00_I_FlightConnection, three foreign key associations are created.

其他ObjectModel

@ObjectModel.readOnly

该CDS只读

@ObjectModel.association.type

@ObjectModel.association.type: [#TO_COMPOSITION_ROOT, #TO_COMPOSITION_PARENT]

能够从该view的页面跳转到 COMPOSITION_ROOT, COMPOSITION_PARENT 页面(浏览器页面)

@ObjectModel.association.type: [#TO_COMPOSITION_CHILD]

能够跳转到 child页面

DefaultAggregation 注释:

以下 DefaultAggregation 注释可用:

@DefaultAggregation: ‘<值>’

说明:当为元素指定了 DefaultAggregation 注释时,相应的元素将用作所谓的度量。

可能的值: SUM、MAX、MIN、AVG、COUNT、COUNT_DISTINCT、FORMULA 和 NONE

通过为元素指定@DefaultAggregationannotation,相应的元素在标准 CDS QL 场景和分析场景中都用作度量(可以聚合的元素)。

值 SUM、MAX、MIN、AVG、COUNT、COUNT_DISTINCT 确定度量的默认聚合。

FORMULA 值表示该元素是一个公式,必须在通过聚合或计算确定操作数后进行计算。它永远不应该被聚合。例如:保证金:=(收入/成本)。

值 NONE 表示该元素不是度量。通常这些元素用于过滤器和 GROUP BY 语句中。
在这里插入图片描述
The Distance field is defined as a unit of measure and the aggregation type is #SUM.
The DistanceUnit field (KM or Miles) is related to the Distance field.

消费注解:

以下消费注释可用:

@Consumption.filter: ‘<值>’

描述:这个注解可以过滤底层视图的元素。在对视图执行查询之前应指定过滤器。

可能的值:—

使用@Consumption.filter 注释,可以启用对底层视图元素的过滤。该注释将由分析经理解释。

通常过滤器值由用户在 UI(过滤器弹出窗口)上手动输入,以便在底层视图的元素上设置过滤器。核心 CDS 层并不明确知道过滤器,而只有像 Data Preview、MDX、Advanced Analysis for Office、BO Explorer 或 OData 这样的客户端才知道。在访问数据时,将用户输入转换为 WHERE 条件是消费(框架)的任务。

VDM 和 OData 注释:

以下 VDM 和 OData 注释可用:

@VDM.viewType: ‘<值>’

说明:定义VDM 视图的类型。

可能的值: BASIC、COMPOSITE 或 CONSUMPTION。

使用@VDM.viewType注释,VDM 视图类型被分类。此分类仅用于 SAP 内部结构化和 CDS 视图的解释。为客户和合作伙伴发布 CDS 视图由视图的附加内部分类控制。

  • BASIC – 构成核心数据基础的视图,没有数据冗余。
  • COMPOSITE – 提供从 BASIC 视图派生和/或组合的数据的视图。
  • CONSUMPTION – 用于特定应用目的的视图,可以根据公共接口(例如,BASIC 和 COMPOSITE)视图进行定义。

在这里插入图片描述

@OData.publish: ‘’

说明:在打算生成 OData 服务时设置此注释。

可能的值:true或false

当注释@ OData.publish被设置和CDS视图被激活时,自动生成OData服务。随后,OData服务还需要在事务被激活/ IWFND / MAINT_SERVICE手动。

CDS 视图中的分析注释

为了能够在 SAP S/4 HANA 系统中的核心数据服务之上构建分析查询,您需要了解分析管理器如何使用分析查询,以及如何使用分析注释。
在这里插入图片描述

为分析消费启用 CDS 数据模型

分析注释使分析管理器能够进行多维数据消费、执行数据聚合以及对数据进行切片和切块。Design Studio 和 Analysis Office 等 BI 前端可以通过分析管理器使用数据。

CDS 中分析模型的创建基于分析 CDS 注释。它们是 CDS 特定领域注释的一部分。对于某些部分,例如层次结构,应用了一些核心 CDS 注释。

分析数据类别和查询注释

以下 Analytics dataCategory 和 Query Annotations 可用:

@Analytics.dataCategory:’’

描述:通过指定数据类别,开发人员可以向分析经理提供有关如何解释单个实体的指令和提示。

可能的值: #DIMENSION、#FACT、#CUBE 或 #AGGREGATIONLEVEL

分析管理器需要一个星型模式(多维)和一个查询来使用数据。大多数用于在不同 CDS 视图中定义星型模式的注释都在 ObjectModel 注释中指定。分析注释还指定了事实(星型模式的中心)、将数据复制到其他系统的提取能力以及分析查询
属性。

使用@Analytics.dataCategory注释,您可以指定以下内容:

#DIMENSION:代表主数据的视图。

#FACT:表示没有冗余的事务数据(星型模式中心)的视图。通常它包含措施。通常,这些视图是复制所必需的,因此不应将它们与主数据视图合并。

#CUBE:#CUBE 值也代表事实数据,但#CUBE 不必没有冗余。这意味着可以连接主数据。查询通常建立在#CUBE 之上,其中数据是从事实中复制的。

#AGGREGATIONLEVEL:这个值表示一个投影。对于这种视图,分析管理器提供回写功能(计划功能)。
在这里插入图片描述

@Analytics.query:’’

说明:指定将向分析管理器公开哪些视图。这些视图不得使用@Analytics.dataCategory = #NONE 进行注释。

可能的值:真或假

分析数据提取和详细信息注释:

以下 Analytics dataExtraction 和 Details 注释可用:

@Analytics.dataExtraction.enabled:’’

描述:通过此注释,您可以标记适合数据复制的视图。

可能的值:真或假

应用程序开发人员可以使用注解@Analytics.dataExtraction.enabled 来标记适合数据复制的视图。这些视图必须使用 Analytics.dataCategory 进行注释(值 AGGREGATIONLEVEL 除外)。设置为
true表示该视图适合数据复制,否则设置为false。

@AnalyticsDetails.query.axis:’’

描述:在特定轴上定位视图的元素。

可能的值: FREE、ROWS 或 COLUMNS。

使用@AnalyticsDetails.query.axis 注释,视图的元素可以定位在多个轴上。元素可以直接用它们的轴进行注释。所有度量(可以聚合的元素)都需要在同一轴上。因此,第一个度量的注释将用于查询的所有度量。如果未找到 AnalyticsDetails.query.axis,系统将在列上定位度量。

非度量元素的默认值是自由轴。请注意,属于查询中同一字段的投影列表中的元素将被分组在一起。

不知道怎么分类的注解

@Environment.systemField

@Environment.systemField: #SYSTEM_LANGUAGE P_Language : syLangu
@Environment.systemField: #USER p_uname : syst_uname

https://www.cnblogs.com/sap-jerry/p/8468983.html
隐式参数
会话变量是访问其中包含的信息的便捷方式 - 全局变量。我们知道全局变量的不要轻易使用。将AS ABAP中的信息传递给CDS视图和CDS表函数的适当参数。为了方便我们使用ABAP 7.50 为CDS视图和函数参数引入了新的ABAP注释@ Environment.systemField 我们来看一下:

1、#CLIENT
2、#SYSTEM_DATE
3、#SYSTEM_TIME
4、#SYSTEM_LANGUAGE
5、#USER

如果我们在Open SQL中使用带注释的参数访问CDS视图或CDS表函数,则可以(对于#CLIENT)放弃显式参数传递。Open SQL隐式传递相应系统字段的内容。

我来举个栗子:

@AbapCatalog.sqlViewName: ‘DEMO_CDS_SYST’ 

@AccessControl.authorizationCheck: #NOT_REQUIRED

define view demo_cds_system_fields

  with parameters

    @Environment.systemField : #CLIENT
    p_mandt : syst_mandt,
    @Environment.systemField : #SYSTEM_DATE
    p_datum : syst_datum,
    @Environment.systemField : #SYSTEM_TIME
    p_uzeit : syst_uzeit,
    @Environment.systemField : #SYSTEM_LANGUAGE
    p_langu : syst_langu  
    @Environment.systemField : #USER
    p_uname : syst_uname  
  as select from demo_expressions          
     { :p_mandt as client,
       :p_datum as datum,
       :p_uzeit as uzeit,
       :p_langu as langu,
       :p_uname as uname  }
      where id =1;

使用OPEN SQL访问,我也举个栗子:

SELECT *
   FROM demo_cds_system_fields(  )
   INTO TABLE @DATA(result).

可见参数是隐式传递的

SELECT *
  FROM demo_cds_system_fields( p_datum  = @sy-datum,
                               p_uzeit  = @sy-uzeit,
                               p_langu  = @sy-langu,
                               p_uname  = @sy-uname )
  INTO TABLE @DATA(result).

p_mandt的值不能再显式传递。

隐式参数传递是为了方便起见,仅在Open SQL中可用。如果在CDS实体中使用带参数的CDS实体,则必须再次显式传递参数。我们可以传递上面提到的会话变量。

后面再慢慢更新吧

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值