【转载】CDS相关资料整理(十三)CDS中表关联及筛选的使用

0da2271a4d62cfae7342b26327c461da.jpeg

拍摄于南戴河

原文地址

https://www.ut163.com/fiori_learning_arrangement/sap-cds/the_use_of_table_association_and_filtering_in_cds/

CDS中表关联及筛选的使用

  • Associations中可使用的运算符

  • 过滤关联Associations中的基数

  • 注释比较过滤器Annotation Compare Filter

在CDS中,可以使用Associations来连接多多,同时也能在其中进行筛选(Filtered)。

过滤的关联的语法

a1f54660a5416150f2c1236cb7ab252c.png

语法过滤的关联

  • 可以使用过滤条件来扩展CDS DDL中的路径表达式。

  • 当系统将路径表达式转换为数据库级别的联接时,过滤条件将成为ON条件的一部分,也就是说,可以在ON中写查询条件,相当于以前写在WHERE中的条件,可以使用在ON后面。

  • d9d13efaa48c399283a308341045b66b.png

示例:路径表达式中的过滤条件
  • 在此示例中,表tcurt与表scarr(航空公司的主数据)相关联。表tcurt是所谓的文本表。它包含许多不同语言的货币名称和描述。关联的“打开”条件定义了两个表之间的基本外键关系,即表scarr中的货币代码(字段currcode)链接到表tcurt中的关键字段was。

  • 这种关联将一个承运人与其本国货币的所有描述相关联,而与语言无关。

  • 该示例未在关联的ON条件中将选择限制为一种语言,而是在路径表达式中使用了过滤条件。从技术上讲,即在数据库上,结果是相同的。但是通过使用路径表达式中的过滤条件,可以更清楚地了解哪些条件是外键关系的一部分,以及哪些条件反映了附加选择。

  • 1.Associations中可使用的运算符

  • =,<,>,<=,> =,<>

  • 左侧:

  • 必须是关联对象字段

  • 右侧:

  • 关联对象领域字段

  • 文字

  • 参数

  • 会话变量

  • 实施过滤条件时,以下规则适用

  • 允许所有关系运算符(=,<,>,<=,> =,<>)。

  • 条件的左侧需要关联目标的字段(在我们的示例中为_currency的字段)。

  • 右侧可以是该目标数据源的另一个字段,文字,参数或会话变量。

  • 2.过滤关联Associations中的基数

  • f4b51ae4ad3361686b60f9380f2f2432.png

  • 上面的示例包含表TCURT与表SCARR的关联。此关联的正确基数为0 .. *:一个承运人的本地货币代码可以在表tcurt中包含任意数量的文本-每种维护的语言都可以有一个。

  • 我们已经了解到,通常,一旦在路径表达式中使用了关联,基数*就会导致语法警告甚至错误。

  • 在我们的示例中,过滤条件将关联的基数减小为“ 0..1”:对于给定的语言,每个货币代码TCURT最多包含一个条目。

  • 要对此进行记录-并使语法警告和错误消失,可以在路径表达式的过滤条件中指定基数“ 1”。

  • 注意:在没有过滤条件的情况下,不允许在路径表达式中指定基数。

  • 3.注释比较过滤器Annotation Compare Filter


  • 25262af9721f9f7a20f2485a3e0a715b.png

  • 注释比较过滤器
  • 默认情况下,每个具有过滤条件的新路径表达式都将在生成的SQL视图中导致单独的联接。即使过滤条件相同,也会发生这种情况(请参见上面的示例和左侧的SQL CREATE语句)。

  • ABAP批注“ AbapCatalog.compiler.compareFilter”可用于指定是否对视图的路径表达式比较过滤条件。如果过滤条件

  • 匹配时,关联的联接表达式仅创建一次,通常可以提高性能。

  • 注意:两种配置的结果集可能不同。

cd76b4e3b3ff97b4bc82ddcf4b28aa4e.png

比较过滤器为假的示例
  • 在上面的示例中,两个路径表达式中的过滤条件相同。

  • 注释ABAPCatalog.compiler.compareFilter的值为false。这使得系统生成scarr和tcurt的两个单独的联接以检索字段ktext和Itext。值为true时,系统将比较过滤器,意识到它们是相同的,并且仅使用一个联接来检索两个字段。

注意:所有数据定义模板都包含注释ABAPCatalog.compiler.compareFilter,其值为true。

推荐阅读:

ABAP新语法1

《ABAP新语法2》

《SM30添加按钮:批导,筛选,排序等完整demo 》

《关于 SM30/VIEW_MAINTENANCE_CALL锁整张表问题》

《Demo:弹出文本输入框》

《关于update task几个有意思的测试》

动态批量修改任意表任意字段的值

动态获取查询条件的一个小Demo

使用cl_gui_docking_container 实现多ALV》

VOFM 修改 组单开票时 会计凭拆分规则

DEMO SUBMIT 某程序并获取该程序ALV数据

DEMO:S/4 1809 FAGLL03H 增加字段增强

几个ABAP实用模板,体力活就别一行行敲了,复制粘贴得了

DEMO:BTE增强实现凭证创建检查

SAP Parallel Accounting(平行分类账业务)配置+操作手册+BAPI demo程序

CC02修改确认日期BAPI:Processing of change number  was canceled》《我是怎样调试BAPI的,以F-02为例

我是不是被代码给耽误了……不幸沦为一名程序员……

三亚自由行攻略(自己穷游总结)

苏州游记

记码农十周年(20110214--20210214)

不一样的SAP干货铺群:帅哥靓妹、红包、烤羊腿!

十年老码农搬砖习惯和技巧

我这个老码农是怎么debug标准程序的

我是怎样调试BAPI的,以F-02为例

杂谈:几种接口

Odata 增删改查详例

ODATA CREATE_DEEP_ENTITY 详例

RESTful DEMO 一:SAP 如何提供 RESTful Web 服务

RESTful DEMO 四 :增删改查及调用

DEMO  search help 增强 ( vl03n KO03 等)

录BDC时  弹出的公司代码框问题

《搜索帮助系列》

《增强相关》

Debug 系列

DEBUG  系列一:Dump debug
DEBUG  系列二:Configure Debugger Layer
DEBUG系列三:使用  F9 和 watch point
DEBUG系列四:第三方接口debug
DEBUG系列五:Update  模式下的function debug
DEBUG系列六:后台JOB  debug
DEBUG系列七:保存测试参数
DEBUG系列八:Debug弹出框
debug系列九:SM13查看update更新报错
DEBUG系列十:Smartforms  debug
DEBUG系列十一:GGB1  debug
Debug系列十二:QRFC  队列 debug
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值