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

作者:ABAP技巧与实战 约 7 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, Data Engineering, MM, SD, 开发, 数据工程, 物料管理, 销售分销

原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)

前言

前文介绍了表的代理对象

> 详见链接 无峰,公众号:ABAP 技巧与实战 [ SAP小技巧 设置表的代理视图

> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247488220&idx=1&sn=74a79eec15c7dc1cadcefc1a8bcc8779&chksm=cf5dcfeaf82a46fc2d2362f95e0feb43b25227fe5fafc84caf974b4168e7daed3d1febcfa0e5&token=930549339&lang=zh_CN#rd)

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

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

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

表的代理对象

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

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

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

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

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

知识点

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

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

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

• 表的写入

• 表的读取

• 什么情况使用代理视图

• CDS怎么访问表

_**01** _

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

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

比如表ZTS_AGENT_CDS定义如下

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

表ZTS_AGENT_CDS_1 定义如下

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

视图定义如下

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

给表 ZTS_AGENT_CDS 设置代理视图 ZDDL_AGENT_CDS

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

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

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

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

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

_**02** _

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

因为代理视图完全代替了对表的读取访问, 所以只能读到代理视图的数据,表本身的数据在ABAP中无法读取, 但是通过HANA

SQL则可读取,下图时分别从SE16N读取的表内容和从HANA SQL编辑器读取的内容 . 可以看出差异

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

_**03** _

**表的写入**

表的写入操作正常,通过正常的MODIFY INSET UPDATE

语句均可,也可以通过SE16N维护数据内容.需要注意的,SE16N维护时,保存后数据就会改变成代理视图的内容,

会出现输入保存后数据改变的奇怪情况(比如代理视图的字段取代了表中的字段,该字段内容的维护就会出现上述奇怪现象)

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

_**04** _

**表的读取**

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

SE16N查看表内容时,可以看到对应的代理视图.

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

_**05** _

**什么情况使用代理视图**

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

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

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

此时需要同步更新多个相关表.

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

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

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

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

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

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

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

总结

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

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

** THE **

** END **

**约定**

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

( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.

越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )

请微信联系管理员

syjf1976

sharry_xlp

Yannick_Duan

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

ABAP技巧与实战

关于作者:ABAP技巧与实战

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「ABAP基本知识表的代理视图及表数据维护.md」整理生成,仅用于内部技术分享与学习交流。