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的公司,使用的数据库数据是不同的,所以提供一个数据库的虚拟. 通过向 ...
随机推荐
- vim常用技巧
# vim常用技巧 ## 行操作------------------------------ 行首 0- 行尾 $- 第一个非空字符 ^ ## 列编辑模式----------------------- ...
- 解决space-between最后一排问题
display:flex + justify-content: space-between 能够实现2端对齐的布局,这种布局在网页中很常见.不过这种布局方式有一个问题.举个例子,我们假设现在一排放4个 ...
- SpringBoot 全配置(推荐收藏)
# =================================================================== # COMMON SPRING BOOT PROPERTIE ...
- Tcp Udp发送包的大小限制问题
以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的. 这个1500字节被称为链路层的MTU(最大传输单元). 但这并不是指链路层的长度被限制在 ...
- 蜕变成蝶~Linux设备驱动之按键设备驱动
在上述的驱动系列博客中,我们已经了解了关于阻塞和非阻塞.异步通知.轮询.内存和I/O口访问.并发控制等知识,按键设备驱动相对来说是比较简单的,本章内容可以加深我们对字符设备驱动架构.阻塞与非阻塞.中断 ...
- MySql 查询银行卡号打码
),")) end as card_number from das.staff_base; case 函数 CASE WHEN 条件1 THEN 结果1 WHEN 条件2 THE ...
- ArcGIS删除数据异常崩溃
环境 ArcGIS Desktop10.1,ArcSDE10.1,Oracle 11.2.0.4客户端和服务器端(服务器端搭建RAC集群) 问题描述 在使用ArcCatalog连接数据库进行数据删除时 ...
- ubuntu16.04 在/etc/network/interfaces设置static ip无效
双网卡使用无线网卡上互联网,使用以太网卡连局域网,在/etc/network/interfaces里对以太网卡设置static ip无效,使用ifconfig临时设置也仅能工作一会,设置的ip马上就消 ...
- SublimeText插件Pandoc导出PDF中文报错或者中文不显示解决方法
按照如下自定义配置(主要是指定latex的字体[仅限本机字体]) { "user": { // "pandoc-path":"C:\\Program ...
- [Golang] 编译程序时打上git提交信息标记
1.加入代码 //version.go package version import ( "flag" "fmt" "os" ) var ( ...