ABAP基本知识 表的代理视图及表数据维护

前言

前文介绍了表的代理对象

详见链接

无峰,公众号:ABAP 技巧与实战SAP小技巧 设置表的代理视图

在项目中涉及到对原有表结构的调整,尝试使用表的代理对象来简化这个调整,

所以梳理了一下和代理对象相关的一些知识点,并逐一验证.

本文主要介绍表及表的代理对象的关系及相关的写入,查询操作

表的代理对象

一般情况下, 表的代理对象都是一个CDS视图. 所以后文中也把代理对象称呼为代理视图

SAP没有给标准工具, 可以通过修改DD02L给表设置一个代理对象.

设置后,通过SE16N 查看表时,可以看到这个信息

标准视图(SE11创建的视图)也能用作为代理视图

ABAP基本知识 表的代理视图及表数据维护_第1张图片

ABAP基本知识 表的代理视图及表数据维护_第2张图片

知识点

尝试在实际应用中使用表的代理对象时,需要了解如下知识点

  • 表的字段集与视图字段集关系

  • 表的记录与代理视图的记录关系

  • 表的写入

  • 表的读取

  • 什么情况使用代理视图

  • CDS怎么访问表

01

表的字段集与视图字段集关系

表的字段集和视图的字段集最好一致,如果不一致,可能以表的字段集为准, 但也可能会报DUMP错误

比如表ZTS_AGENT_CDS定义如下

ABAP基本知识 表的代理视图及表数据维护_第3张图片

表ZTS_AGENT_CDS_1 定义如下

ABAP基本知识 表的代理视图及表数据维护_第4张图片

视图定义如下

ABAP基本知识 表的代理视图及表数据维护_第5张图片

给表 ZTS_AGENT_CDS 设置代理视图 ZDDL_AGENT_CDS

ABAP基本知识 表的代理视图及表数据维护_第6张图片

二者字段集合不一致. 实际读取表内容时,系统DUMP .

ABAP基本知识 表的代理视图及表数据维护_第7张图片

表ZTS_AGENT_CDS 加上缺少的字段后. 就可以显示内容了

ABAP基本知识 表的代理视图及表数据维护_第8张图片

02

表的记录与代理视图的记录关系

因为代理视图完全代替了对表的读取访问, 所以只能读到代理视图的数据,表本身的数据在ABAP中无法读取, 但是通过HANA SQL则可读取,下图时分别从SE16N读取的表内容和从HANA SQL编辑器读取的内容 . 可以看出差异

ABAP基本知识 表的代理视图及表数据维护_第9张图片

ABAP基本知识 表的代理视图及表数据维护_第10张图片

03

表的写入

表的写入操作正常,通过正常的MODIFY  INSET  UPDATE 语句均可,也可以通过SE16N维护数据内容.需要注意的,SE16N维护时,保存后数据就会改变成代理视图的内容, 会出现输入保存后数据改变的奇怪情况(比如代理视图的字段取代了表中的字段,该字段内容的维护就会出现上述奇怪现象)

ABAP基本知识 表的代理视图及表数据维护_第11张图片

04

表的读取

表的读取没有什么区别, 正常访问该表即可, ABAP访问数据库时,会替换去读取代理视图.返回给ABAP的SQL语句的结果集, SE16N查看表内容时,可以看到对应的代理视图.

ABAP基本知识 表的代理视图及表数据维护_第12张图片

05

什么情况使用代理视图

一般情况下,自定义开发无需使用代理视图.

在特定项目中, 碰到了用户把一个大表按特定类别拆分到很多个小表及备份表中.(大表/小表的关键字内容一致). 

因为业务改动,需要添加一段额外逻辑回写数据到大表的几个附加字段中, 这些字段同时需要带入到子表及备份表中. 大表中这几个字段内容可能重算. 此时需要同步更新多个相关表.

为了性能考虑, 可以把这几个字段放到一个与大表主键一致的附加表中. 其它表添加字段及代理视图(表内容内关联附加表).

这样做的好处时,只需要在一个地方计算或重算这个附加表内容. 所有通过代理视图访问的表就直接可以获取最新的数据.

CDS视图怎么访问有代理视图的表

在CDS视图中不能直接访问表,因为CDS视图中使用的SQL 不是ABAP SQL,没有执行ABAP语句转换成代理视图的逻辑,所以访问的是原表内容. 

这种情况必须注意只能在CDS中访问表的代理视图,以避免数据不完整. 

S4中所有存在代理视图的表,比如 MSEG .不能在CDS视图中使用,只能使用原表 MATDOC或代理视图NSDM_V_MSEG

ABAP基本知识 表的代理视图及表数据维护_第13张图片

ABAP基本知识 表的代理视图及表数据维护_第14张图片

ABAP基本知识 表的代理视图及表数据维护_第15张图片

总结

表的代理视图在正常的项目开发中一般用不到, 只有在变更项目中,如果不想对原有逻辑做过多的调整,可以使用代理视图,避免干扰所有原有的取数逻辑.

比如ECC->S4 就是一个很大的变更项目. 为了保护所有原有的程序, SAP用代理视图取代了对原本MSEG MARC MARD 等表内容的访问.

THE

END

约定

如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.       

    (如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程. 越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.)

请微信联系管理员: 

syjf1976 

sharry_xlp  

Yannick_Duan 

申请进入公众号讨论群提问或者参与话题讨论

你可能感兴趣的:(ABAP基本知识 表的代理视图及表数据维护)