SAP S/4HANA系统CDS view扩展原理分析

简介: After extension field is created, I would like to retrieve its data from interface view, like I_PRODUCT. That is, the extension field is already in MARA, I want to consume it via I_PRODUCT instead of MARA.

After extension field is created, I would like to retrieve its data from interface view, like I_PRODUCT. That is, the extension field is already in MARA, I want to consume it via I_PRODUCT instead of MARA.


image.png


When using the following ABAP code, it does not work:

image.png

The reason is corresponding extension field does not appear in SQL view of I_PRODUCT at all. Why?


image.png


Simply because the extension field is not enabled for I_PRODUCT.

The enablement should also be done in custom field logic tile:

(1). select your extension field.



image.png


(2). tab UIs and Reports:


image.png


(3). Click “Enable Usage” button:


image.png


Never forget to publish your change.

Once done, it works now:



image.png


我来解答这两天我们讨论的问题。Key user 点了enable usage之后,如下图这个例子,


image.png


为什么之后我们 SELECT * FROM I_PRPODUCTWD 就能把extension field一起select出来,这些extension field不是做在E_PRODUCT上吗? E_PRODUCT 是通过association和I_PRODUCTWD连接起来的,为什么select * 能够把association view里的field一起读出来?

首先,上述红色的说法就是错误的,extension field并不是通过association从E_PRODUCT里读的. 我们要明确我们点enable usage的出发点是某个具体的extension field, 而不是从CDS view出发。选择了具体的extension field之后,再选择要extend的CDS view,点击publish,此时将会自动创建一个带有当前extension field的extension view,对选中的CDS extensible view进行扩展。这样造成的结果是,从SE11里观察SQL view能发现extension field会通过append的方式直接成为extensible view的一部分,这之后和E_PRODUCT再无任何关系。

比如这个extension view 在点publish时是什么时候生成的?


image.png


你可以自己debug,在这个方法里设个断点,然后点publish,你会发现publish时,有10个object会自动生成,其中第三个就是上面图里的extension view.



image.png


image.png


那框架咋知道我这个extension field在publish时要生成这10个东西?

答案还是在registry里:


image.png


如果想研究具体框架的generation实现,看这个class,里面每个sub class负责一种特定的repository generation实现,


image.png


其中CL_CFD_ENH_CDS_ENH_ABSTRACT又包含了所有CDS view相关的generation逻辑,里面又分了三种不同的类型。


image.png


所有这些协同工作,最后确保从application developer的眼里,看到extension field在design time时即出现在extensible view本身。额外补充一点哈。

E_PRODUCT一个最主要的目的就是为了register使用,同时在创建custom field时点publish时,能够自动生成一个E_Product的extension view。

如下图。当然在此之前需要先去自动扩展Product table的这个字段,这也是在点publish时自动完成的。


image.png


然后当你需要把这个custom field暴露在上层的view时,比如I_ProductWD,这时去Jerry提到的点击Enable时就会生成I_ProductWD的extension view。

其实你如果点击对应的字段,你会发现其实就是从上面的E_Product的extension view里去读取的。


image.png


总结一下,I_ProductWD里定义的E_PRODUCT的association更多是用于design time(register),之后在enable时知道如何创建extension view。然后有了extension view时,就跟E_Product没有直接关系了,因为extension view:ZZ1_PRE47GXHDI6P2ZLO3ADGY4HHFE里的内容是自动暴露为hosting view:I_PRODUCTWD的interface的。这也是为什么select *能自动出来,并不需要通过association。


相关文章
|
1月前
|
开发者 数据处理 数据管理
SAP HANA 的不同类型
SAP HANA 的不同类型
39 9
SAP HANA 的不同类型
|
1月前
|
SQL Android开发
创建 SAP ABAP CDS View 保存失败 - Dependencies DDL source - View Entity not written
创建 SAP ABAP CDS View 保存失败 - Dependencies DDL source - View Entity not written
9 0
创建 SAP ABAP CDS View 保存失败 - Dependencies DDL source - View Entity not written
|
1月前
|
SQL 数据库 索引
关于 SAP ABAP REPOSRC 数据库表在 HANA 中的 DDL Definition
关于 SAP ABAP REPOSRC 数据库表在 HANA 中的 DDL Definition
20 1
关于 SAP ABAP REPOSRC 数据库表在 HANA 中的 DDL Definition
|
1月前
|
数据库 存储 监控
什么是 SAP HANA 内存数据库 的 Delta Storage
什么是 SAP HANA 内存数据库 的 Delta Storage
18 0
什么是 SAP HANA 内存数据库 的 Delta Storage
|
1月前
|
Java BI API
SAP Cloud for Customer 里如何通过 ABSL 二次开发方式消费 SAP S/4HANA 系统的 API
SAP Cloud for Customer 里如何通过 ABSL 二次开发方式消费 SAP S/4HANA 系统的 API
21 0
|
1月前
|
数据库 存储 安全
使用 SAP HANA Cloud 的一些优势
使用 SAP HANA Cloud 的一些优势
25 6
使用 SAP HANA Cloud 的一些优势
|
1月前
|
Web App开发 开发者 存储
介绍一个 webp 格式转 png 格式的软件:XNConvert
介绍一个 webp 格式转 png 格式的软件:XNConvert
30 6
介绍一个 webp 格式转 png 格式的软件:XNConvert
|
1月前
|
Linux 数据库连接 数据库
如何在 Linux 系统下使用 PHP 和 ODBC 连接 SAP HANA
如何在 Linux 系统下使用 PHP 和 ODBC 连接 SAP HANA
17 0
|
1月前
|
数据库 存储 BI
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
12 0
SAP ABAP CDS View 源代码存储的数据库表揭秘和其他相关数据库表介绍试读版
|
2月前
|
前端开发 搜索推荐 开发者
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
SAP UI5 sap.m.Column 控件的 minScreenWidth 属性介绍
32 0