首页 > 其他分享 >ABAP CDS注解详解

ABAP CDS注解详解

时间:2022-11-22 16:46:20浏览次数:67  
标签:ObjectModel 视图 注释 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实体,则必须再次显式传递参数。我们可以传递上面提到的会话变量。

————————————————
版权声明:本文为CSDN博主「尤其是十月的风」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34060435/article/details/119633873

 

标签:ObjectModel,视图,注释,ABAP,详解,CDS,注解
From: https://www.cnblogs.com/zt11402/p/16915591.html

相关文章

  • ECharts – 柱形图代码实例及其注释详解
    mytextStyle={color:"#333",//文字颜色fontStyle:"normal",//italic斜体oblique倾斜fontWeight:"normal",//文字粗细boldbolderl......
  • Docker Compose详解
    使用 DockerComposeDockerCompose是一种用于帮助定义和共享多容器应用程序的工具。使用Compose,我们可以创建一个YAML文件来定义服务,并且使用一个命令,可以启动所有内容......
  • Linux程序编译过程详解
    大家肯定都知道计算机程序设计语言通常分为机器语言、汇编语言和高级语言三类。高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因......
  • C语言abs和labs函数详解和示例
    文章目录​​1、包含头文件​​​​2、函数声明​​​​3、功能说明​​​​4、示例​​​​5、其它说明​​​​6、获取视频教程​​​​7、版权声明​​C语言提供了一系......
  • C语言rand函数生成随机数详解和示例
    文章目录​​1、生成随机数​​​​2、生成一定范围随机数​​​​3、获取视频教程​​​​4、版权声明​​在C/C++程序开发中,会经常用到随机数这个功能,例如编写游戏类(纸牌......
  • Java中的Iterator迭代器详解
    ......
  • format用法详解
    format是字符串内嵌的一个方法,用于格式化字符串。以大括号{}来标明被替换的字符串。1、基本用法1.按照{}的顺序依次匹配括号中的值s="{}isa{}".format('Tom','B......
  • WordPress主题开发全面详解-黄棒清-专题视频课程
    WordPress主题开发全面详解—87人已学习课程介绍        WordPress主题开发全面详解视频教程会运用HTML,CSS,PHP和JavaScript来构建动态WordPress网站。在本课程中,我......
  • CNETOS LINUX 计划任务详解
    r.sh复制代码tamcdir=HOME/ora/userprojects/domains/tamccd{tamcdir}echorm-f​​​lsheapdump*.phd​​​rm-fheapdump*.phdechorm-f​​​lsjavacore*......
  • 深度优先生成树和广度优先生成树的详解版
    其实在对无向图进行遍历的时候,遍历过程中所经历过的图中的顶点和边的组合,就是图的生成树或者生成森林。图1无向图 例如,图1中的无向图是由V1~V7的顶点和编号分......