Data source is not a transactional CDS view [OData Exposure]

发布时间 2023-04-22 17:06:17作者: JerryWang_汪子熙

一个朋友遇到问题:给 ABAP CDS view 添加 OData.publish: true 注解激活之后,期望自动生成 OData 服务,但是遇到错误消息:

Data source is not a transactional CDS view [OData Exposure]


SAP 社区上有人问类似的问题:https://answers.sap.com/questions/78804/cds-view-annotation-.html

可以尝试去后台使用事务码 /IWFND/MAINT_SERVICE, 对 OData 服务 ZFLIGHT_COM_CDS 手动激活。

如果后台激活 OData 服务后,回到 ABAP Development Tool 里激活 CDS view,还是遇到 Data source is not a transactional CDS view [OData Exposure] 的错误消息,那么参照这个帖子:

https://www.michaelmanagement.com/sap-error-messages/en/sadl_gw_dt_cds/sadl_gw_dt_cds004

Either add the annotation '@ObjectModel.transactionalProcessingEnabled:
true' to the underlying CDS view or remove the annotation
'@ObjectModel.transactionalProcessingDelegated' from the consumption
view.

意思是要么给 zspfli_root 这个 underlying CDS view 里添加 @ObjectModel.transactionalProcessingEnabled 注解,要么从 consumption view zflight_com 里移除 @ObjectModel.transactionalProcessingDelegated.

背景知识

什么是 SAP core data service consumption view?

参考这篇博客,consumption view 是在 composite view 之上创建的,这意味着消费视图不与 DDIC 表/视图或基本视图交互。 消费视图写在提供事实数据和多维数据集数据的复合视图之上。 此视图用于将数据公开给不同的分析工具(例如 HTML、SAP BusinessObjects、Analysis for Excel、SAP Lumira 等),这有助于创建报告和不同的可视化来呈现业务数据。

什么是 SAP core data service composite view?

复合视图是在基本视图之上创建的,这意味着复合视图不直接与数据库进行数据交互,而是通过基本视图的维度结果集进行交互。 多个基本视图可以与连接/关联一起使用,以获取数据并对检索到的数据进行计算(例如:使用内置表达式和函数),以使用消费视图在不同的分析工具中消费。

如果想进行某种事务处理,需要使用 @ObjectModel.transactionalProcessingEnabled 来修饰 CDS view.

如果只有分析场景或用例,或者只想读取数据,则不需要 ObjectModel 注释,因为在这些情况下不需要 Business Object 或 BOPF 框架。