ABAP on HANA之CDS Association和Path Expression
本文阐述了ABAP CDS association的概念,并且展示了在CDS视图中和SQL语句中写路径表达式(Path Expression)代码的方法。我也会解释如何在CDS asociation中指定inner join——默认情况下是left outer join,以及如何为association添加过滤。
对于CDS的相关开发,SAP希望我们使用association而不是join,因为association更加接近“概念思维”。基本上,association本身不是join,它只是有关join连接可能性的元数据,它会按需成为join。真实的join会在路径表达式使用association的时候被创建。
一个简单的CDS association例子,它看起来和left outer join没区别:
@AbapCatalog.sqlViewName: 'ZCDS_ASSOC11'
define view zcds_assoc1 as select from scarr as sca
association [0..1] to spfli as _spfli
on sca.carrid = _spfli.carrid
{ * }
暴露CDS association的例子:
@AbapCatalog.sqlViewName: 'ZCDS_ASSOC41'
@AccessControl.authorizationCheck: #NOT_REQUIRED
define view zcds_assoc4 as select from sairport as sair
association [1..*] to spfli as _spfli on
$projection.airportfrom = _spfli.airpfrom
{
sair.id as airportfrom,
sair.name,
sair.time_zone,
-- exposing association
_spfli
}
在下面的例子里,你可以看到SPFLI表对SFLIGHT表和SAIRPORT表的association。通过别名alias _sfli和SFLIGHT和_sair,SAIRPORT的全部字段暴露在projection列表中。当路径表达式用于调用association时,会根据选择字段创建join条件:spfli.carrid = sflight.carrid and spfli.connid = sflight.connid and on spfli.airport = sairport.id。
@AbapCatalog.sqlViewName: 'ZCDS_ASSOC21'
@AccessControl.authorizationCheck: #NOT_REQUIRED
define view zcds_assoc2 as select from spfli
association to sflight as _sfli on
spfli.carrid = _sfli.carrid and
spfli.connid = _sfli.connid
association [1..1] to sairport as _sair on
$projection.airportfrom = _sair.id
{
spfli.carrid,
spfli.connid,
spfli.airpfrom as airportfrom,
-- exposing association
_sfli,
_sair
}
在下面的例子里,定义association时使用了上面的CDS entity,ZCDS_ASSOC2 :
@AbapCatalog.sqlViewName: 'ZCDS_ASSOC31'
@AccessControl.authorizationCheck: #NOT_REQUIRED
define view zcds_assoc3 as select from scarr
association [1..1] to zcds_assoc2 as _cdsassoc on
$projection.carrierid = _cdsassoc.carrid
{
scarr.carrid as carrierid,
-- Exposing Association
_cdsassoc
}
Open SQL语句中的路径表达式:在SQL语句中调用CDS association,需要使用如下的路径表达式。在上面的CDS association中,通过_cdsassoc暴露了完整的projection列表。
DATA(w_dbfeature) = cl_abap_dbfeatures=>use_features(
requested_features = VALUE #( ( cl_abap_dbfeatures=>views_with_parameters ) ) ).
IF w_dbfeature IS NOT INITIAL.
SELECT carrierid ,
\_cdsassoc\_sfli-fldate AS flightdate,
\_cdsassoc\_sair-name AS flightname
FROM zcds_assoc3
WHERE carrierid = @carrid
INTO TABLE @DATA(t_data1).
ENDIF.
CDS视图中的路径表达式:
@AbapCatalog.sqlViewName: 'ZCDS_ON_ASSOC1'
define view zcds_on_assoc with parameters airport: S_FROMAIRP as select from zcds_assoc2 as cds2
{
cds2.carrid,
cds2.connid,
cds2.airportfrom,
cds2._sair.name, -- use inner join...by default association uses left outer join
cds2._sfli.planetype
}
where cds2.airportfrom = :airport
如我所提到的那样,在被路径表达式调用时,CDS association会默认创建left outer join。
在SPFLI表数据中,没有RTM机场的航班。


当我们输入参数airport = RTM的时候 ,下面的CDS视图的查询结果会是一条RTM机场的数据,但是这条记录里没有carrid。
@AbapCatalog.sqlViewName: 'ZCDS_ON_ASSOC41'
define view zcds_on_assoc4 with parameters airport: S_FROMAIRP as select from zcds_assoc4 as cds_assoc
{
cds_assoc.airportfrom,
cds_assoc.name,
cds_assoc.time_zone,
cds_assoc._spfli.carrid -- use inner join...by default association uses left outer join
}
where cds_assoc.airportfrom = :airport
运行上面的CDS视图:

data preview中的结果:

为了把默认的left outer join变成inner join,我们需要使用[inner],如下:
@AbapCatalog.sqlViewName: 'ZCDS_ON_ASSOC41'
define view zcds_on_assoc4 with parameters airport: S_FROMAIRP as select from zcds_assoc4 as cds_assoc
{
cds_assoc.airportfrom,
cds_assoc.name,
cds_assoc.time_zone,
cds_assoc._spfli[inner].carrid -- use inner join...by default association uses left outer join
}
where cds_assoc.airportfrom = :airport
如果运行它,输入参数RTM,得到的结果为空:

目前,还不可以在CDS association中使用right outer join。
CDS association中的过滤例子如下:
@AbapCatalog.sqlViewName: 'ZCDS_ASSOC_FILT'
define view ZCDS_ASSOC_FILTER as select from zcds_assoc2 as cds2
{
cds2._sair[ id = 'TYO' ].name,
cds2._sfli.planetype
}
CDS视图的输出结果:

希望本文对你有帮助!
本文链接:https://www.cnblogs.com/hhelibeb/p/9202781.html
英文原文:CDS Associations and 路径表达式s – ABAP on HANA
Material Quantity Unit Conversion using CDS Views
ABAP on HANA之CDS Association和Path Expression的更多相关文章
- ABAP CDS - SELECT, association
ABAP CDS - SELECT, association Syntax ... ASSOCIATION [ [min..max] ] TO target [AS _assoc] ON cond_e ...
- ABAP CDS - Syntax
The syntax of the DDL and of the DCL of the ABAP CDS comprises elements of the general DDL and DCL o ...
- ABAP CDS - Language Elements
The following sections summarize the language elements of the DDL and DCL of the ABAP CDS, arranged ...
- 【ABAP CDS系列】ABAP CDS中的系统信息
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP CDS系列]ABAP CDS中的系统 ...
- 【HANA系列】【第七篇】SAP HANA XS使用Data Services查询CDS实体【一】
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列][第七篇]SAP HANA XS ...
- ABAP CDS-介绍(ABAP CDS视图)
前言 文章翻译自Tushar Sharma的文章,转载请注明原作者和译者! 在SAP发展到SAP HANA版本之后,SAP内部的技术正在快速地变化,SAP开发业务应用程序的方式已经发生了范式转变(根本 ...
- ABAP CDS-Part 1(ABAP CDS实体)
文章翻译自Tushar Sharma的文章,转载请注明原作者和译者! 目录 预备条件 一.概述 二.ABAP CDS实体(CDS Entity) a.定义ABAP CDS Views b.ABAP C ...
- ABAP CDS - DEFINE VIEW, view_annot
Syntax ... @annotation ... Effect Specifies Annotation annotation in the definition of a CDS view of ...
- ABAP CDS ON HANA-(7)CDSビューでの集約
Aggregate expression in CDS View An aggregate expression calculates a single value from an operand o ...
随机推荐
- TCP三次握手与Tcpdump抓包分析过程
一.TCP连接建立(三次握手) 过程 客户端A,服务器B,初始序号seq,确认号ack 初始状态:B处于监听状态,A处于打开状态 A -> B : seq = x (A向B发送连接请求报文段,A ...
- tomcat域名绑定设置
域名绑定分为单域名绑定.多域名绑定,配置主要涉及到tomcat目录下conf/server.xml文件 一.单域名绑定 1.修改server.xml 大约105行的内容(不是必须修改,如果只是绑定一个 ...
- JQuery官方学习资料(译):JQuery对象
每当创建一个新的元素(或者选择一个已经存在的元素)时,JQuery将返回一个元素的集合.大部分的开发人员新接触JQuery的时候,都把这个集合当做数组.这个集合中的DOM元素有从零开始的索引, ...
- webpack-dev-server不是内部或外部命令
参考:https://segmentfault.com/q/1010000006939078 错误报告:webpack-dev-server不是内部或外部命令 错误原因: 当执行命令: npm run ...
- C# winform程序怎么打包成安装项目(VS2010图解)
作为研发人员,在本机上开发的winform.wpf或者控制台程序需要发给其他人测试时候,一般需要对其进行打包生成setup安装文件,根据网上查找的资料并结合自己打包成功,记录如下: 注:本程序是一个利 ...
- awk、nawk、mawk、gawk的简答介绍
awk 是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出(即管道).它支持用户自定义函数和 动态正则表达式等先进功能,是linu ...
- css3制作商品展示
今天看到一个用css3制作的简单的展示页面所以,我自己又是初学者所以决定模仿着写一个,下面右边是一开始的,右边是鼠标放上去暂时的.这个是由下到上逐渐显示的首先直接上代码. <!DOCTYPE h ...
- 2019-01-13 [日常]mov文件转换为gif
因为需要将之前mac下用QuickTime录屏生成的文件(mov格式)转换成gif文件, 便于传到某些博客平台, 于是找到了这个转换工具, 已将原代码的命名中文化并简化. Ruby和视频转换都是新手, ...
- 如何将web项目部署到weblogic
在Eclipse中配置weblogic11g服务器: 下载并安装Eclipse:www.eclipse.org 下载并安装Weblogic Server Plugin for Eclipse:http ...
- JMeter 监听器之保存响应到文件
监听器之保存响应到文件 by:授客 QQ:1033553122 测试环境 apache-jmeter-2.13 1. 保存结果到响应文件 说明: 文件名称前缀:设置响应文件所在路径(路径必须已存在 ...