01
前言
S4/HANA 定义CDS视图时,可以选择四种类型
DefineViewEntity
defineRootViewEntity
defineViewEntityWithToParentAssociation
defineView
其中的常用方法1,4 也可以称呼为
View方式 (DDIC-BASED )ABAP 7.57 后将不再支持
ViewEntity方式
本文主要比较这两种方法创建视图的差异
二
差异比较点
所有差异点
01
定义差异
View 方式
View方式有三个名称 其中1,2名称可以相同 1,3名称可以相同 2,3名称必须区分
ABAP语句中可以使用 2,3 名称 . 部分特殊SQL语法只能使用3名称
ViewEntity方式
ViewEntity两个名称,可以相同
02
缓存方式
View方式通过语句设置缓存
@AbapCatalog.buffering.status: #ACTIVE
@AbapCatalog.buffering.type: #SINGLE
其中缓存类型 #SINGLE #GENERIC #FULL
ViewEntity方式
缓存方式较复杂. 先通用语句激活缓存
@AbapCatalog.entityBuffer.definitionAllowed: true
再通过缓存对象设置缓存方式
03
集团支持
View方式
默认集团相关,生成的视图会自动补充集团字段,
ViewEntity方式
默认集团相关
ENTITY 视图没有补充集团字段, 但是默认在不同集团只能读取本集团的数据
04
数据字典对象
View方式 会在数据字典中生成一个对象名. 可以通过SE11查看视图中的字段.
同时视图名会登记在表 DD02L
视图字段登记在表 DD03L
ViewEntity方式
VIEWENTITY方式则没有这种支持,只有数据类型定义
05
语法差异
关键字按F1获取语法帮助时, 可以看到二者的语法帮助入口不一样.
具体已发现的语法差异
View方式
DDIC-BASED VIEW 不支持字符串函数中嵌套其它字符函数
ViewEntity方式
但VIEW ENTITY 支持这种嵌套函数的语法
06
外键表支持
因为ViewEntity方式 没有对应的数据字典对象(仅有数据类型对象), 所以不能用于外键表. 而View方式可以作为外键表使用
07
访问名称
View方式 ( DDIC-BASED VIEW )有两个访问名称
sqlViewName
View name
部分新SQL语法仅支持 view name . 这会给动态SQL访问视图带来一些麻烦
08
字段集合
二者都能通过 LVC_FIELDCATALOG_MERGE 获取字段名
区别在于VIEW ENTITY读取的 有一个额外字段 .NODE1
具体使用时,需要去掉DATATYPE = ‘NODE’的字段, 避免出现其它异常
09
搜索帮助
二者都可以作为搜索帮助的选择方法
三
总结
除非定义的视图要作为外键表, 则使用View方式(DDIC-BASED VIEW) . 否则都使用ViewEntity方式 .
因为它命名一致,更多的语法支持,后续会不断改进. SAP已经停止更新View方式了
THE
END
约定
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
请微信联系管理员:
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论