cds view join和association
1:创建两张表:ztt_teacher01 和ztt_teacher02 用于 cds view中的join和association
2:创建两个cds view:ztt_teacher01_id_name和 ztt_teacher02_id_salary
3: 在ztt_teacher01_id_name 中使用连接对数据表进行查询
@AbapCatalog.sqlViewName: 'TEACHER01' @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'teacher table have id,name field' define view ztt_teacher01_id_name as select from ztt_teacher01 as t01 left outer join ztt_teacher02 as t02 on t01.id = t01.id { t01.id, name, salary }
结果如下:
4: ztt_teacher02_id_salary
@AbapCatalog.sqlViewName: 'TEACHER02' //名字,改名字用于外部交互。 @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'teacher table has id_salary' define view ztt_teacher02_id_salary as select from ztt_teacher02 { id, salary }
5: ztt_teacher01_id_name 使用association
@AbapCatalog.sqlViewName: 'TEACHER01' @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'teacher table have id,name field' define view ztt_teacher01_id_name as select from ztt_teacher01 as t01 association [..] to teacher02 as asso02 on $projection.id = asso02.id { t01.id, name, asso02.salary }
结果如下:
因为association 涉及到两个cds view,因此不能使用测试环境对ztt_teacher01_id_name 进行mock 数据。但是可以对cds view 进行数据库查询。步骤如下:
1:将cds view ztt_teacher01_id_name 中的view 定义改为:
@AbapCatalog.sqlViewName: 'TEACHER01' @AbapCatalog.compiler.compareFilter: true @AbapCatalog.preserveKey: true @AccessControl.authorizationCheck: #CHECK @EndUserText.label: 'teacher table have id,name field' define view ztt_teacher01_id_name as select from ztt_teacher01 as t01 association [..] to teacher02 as asso02 on $projection.id = asso02.id { t01.id, name, asso02.salary, asso02 //将另一个cds view 作为 ztt_teacher01_id_name 的一个属性。 }
2:定义查询语句,对teacher02 中的字段salary进行查询:
method GET_TEACHER_SALARY_BY_ID. SELECT SINGLE \asso02-salary FROM ztt_teacher01_id_name WHERE ztt_teacher01_id_name~id = @iv_id INTO @ev_salary. endmethod.
3: unit test 调用查询语句。
METHOD Test_teacher_salary_assocation. TYPES: BEGIN OF teacher_association, id TYPE ztt_teacher01-id, name TYPE ztt_teacher01-name, salary TYPE ztt_teacher02-salary, end of teacher_association. data lt_TEST_DATA TYPE STANDARD TABLE OF teacher_association. . DATA lv_salary TYPE i. * lt_TEST_DATA = VALUE #( " 对association不能插入假数据了,因为底层有两个 view。而创建的 test_environment只是对一个view进行虚拟。 * ( id = '1' name = 'lisi' salary = 10 ) " the first data adds to cds view * ( id = '2' name = 'zhaoliu' salary = 20 ) " other data with same name will be abandoned. * ). * lv_cds_test_environment->insert_test_data( i_data = lt_TEST_DATA ). CALL METHOD f_cut->GET_TEACHER_SALARY_BY_ID( "调用方法,直接对cds view进行查询,该cds view 直接查询数据库中的数据。 EXPORTING iv_id = lv_id IMPORTING ev_salary = lv_salary ). cl_abap_unit_assert=>assert_equals( act = lv_salary exp = msg = 'the name is not expected!' ). ENDMETHOD.
成功执行。
cds view join和association的更多相关文章
- 如何用ABAP代码读取CDS view association的数据
我有如下一个CDS view, 这个view的数据来自CRMD_ORDERADM_H, 定义了一个名称为_statushelp的association, 指向了另一个CDS view Z_C_Stat ...
- Inner Join, Left Outer Join和Association的区别
测试用的CDS视图的源代码,第8行用Inner Join连接TJ02T, 后者存放了所有系统状态的ID和描述. Inner Join测试结果:对于那些在TJ02T里没有维护描述信息的状态,它们不会出现 ...
- CDS view注解解析 - @Environment.systemField
下面的CDS view使用到了@Environment.systemField这个注解,定义了两个参数#SYSTEM_LANGUAGE和#USER. 这个view从CRM物料主数据的产品抬头表COMM ...
- Create Fiori List App Report with ABAP CDS view – PART 1
From Create Fiori List App Report with ABAP CDS view – PART 1 In this blog, I am going to show How C ...
- 使用CDS view开发SAP Marketing contact的facet追溯工具
这篇SAP社区博客里,我的一位同事介绍了SAP Marketing里contact facet数据模型的存储表: https://blogs.sap.com/2016/07/01/how-does-s ...
- 一个使用CDS VIEW 的 DEMO
一个使用CDS VIEW 的demo REPORT demo_cds_currency_conversion. CLASS demo DEFINITION. PUBLIC SECTION. CLASS ...
- Jerry的CDS view自学系列
My CDS view self study tutorial - part 1 how to test odata service generated by CDS view https://blo ...
- Jerry的通过CDS view + Smart Template 开发Fiori应用的blog合集
S4/HANA里有一个新的UI框架叫做Smart template, 配合ABAP后台的CDS view技术,能够让developer以Metadata driven的方式来开发Fiori应用, 这种 ...
- cds view 创建和调用
cds view 是一个core data service, 能够将数据库表虚拟化为一个虚拟表(double).因为各个使用sap的公司,使用的数据库数据是不同的,所以提供一个数据库的虚拟. 通过向 ...
随机推荐
- .NET Core +NuGet 创建打包发布自己的类库包
1. 创建类库项目 你可以使用现有的 .NET 类库项目用于要打包的代码,或者创建一个简单的项目,.NET CORE 2.1 项目的 类库如下所示: NugetDemo.class using Sys ...
- 大数据:Hive - ORC 文件存储格式
一.ORC File文件结构 ORC的全称是(Optimized Row Columnar),ORC文件格式是一种Hadoop生态圈中的列式存储格式,它的产生早在2013年初,最初产生自Apache ...
- Vue:在vue-cli中使用Bootstrap
一.安装jQuery Bootstrap需要依赖jQuery,所以引用Bootstrap之前要先引用jQuery,使用下面的命令引用jQuery: npm install jquery --save ...
- Direct3D 11 Tutorial 3: Shaders and Effect System_Direct3D 11 教程3:着色器和效果系统
概述 在上一个教程中,我们设置了一个顶点缓冲区并将一个三角形传递给GPU. 现在,我们将逐步完成图形管道并查看每个阶段的工作原理. 将解释着色器和效果系统的概念. 请注意,本教程与前一个源代码共享相同 ...
- MySql快速插入以及批量更新
MySql快速插入以及批量更新 插入: MySql提供了可以一次插入多条数据的用法: [sql] INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6), ...
- yii2 緩存
1.Yii框架的缓存 主要就是“memcache” 和 “cache”两种 Yii的自带缓存都继承CCache 类, 在使用上基本没有区别 2.使用方法 (1)在config配置文件main.php文 ...
- 解决webdiyer:AspNetPager分页控件在IE模式下点击页号不能翻页的问题。
在网站根目录下新建ie.browser文件, 然后用记事本打开. 将以下代码粘贴进去,保存即可,目的是让其与IE11的 UserAgent 匹配,使 .net framework 认识这是一个已知的浏 ...
- ajax跨域,这应该是最全的解决方案了
前言 从刚接触前端开发起,跨域这个词就一直以很高的频率在身边重复出现,一直到现在,已经调试过N个跨域相关的问题了,16年时也整理过一篇相关文章,但是感觉还是差了点什么,于是现在重新梳理了一下. 个人见 ...
- 为什么要用kafka、rabbit等消息队列
1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多消息队列所采用的&q ...
- Java开发中的23种设计模式
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...