SAP-ABAP:SAP视图开发入门:四类标准视图的适用场景与创建步骤详解

ABAP核心进阶篇(120篇):数据库表与视图开发(12篇)

第五篇:SAP视图开发入门:四类标准视图的适用场景与创建步骤详解

博客标题:《SAP视图开发入门:四类标准视图的适用场景与创建步骤详解》
博客简介:系统梳理数据库视图、投影视图、维护视图、帮助视图的差异与适用业务场景,手把手演示四类视图的创建流程,对比不同视图在数据查询、权限控制、数据维护上的特性。


写在前面

在SAP数据字典中,视图(View)是一种虚拟表,它本身不存储数据,而是基于一张或多张基础表(透明表)定义的查询逻辑。使用视图可以简化复杂查询、屏蔽表结构细节、控制数据访问权限,甚至提供数据维护界面。

SAP数据字典提供了四种标准视图类型:

视图类型 核心用途 是否可维护数据
数据库视图(Database View) 多表关联查询(INNER JOIN 否(只读)
投影视图(Projection View) 选择一张表的字段子集,屏蔽敏感字段 否(只读)
维护视图(Maintenance View) 为多表关联提供维护界面(通过SM30)
帮助视图(Help View) 为搜索帮助(F4)提供数据源 否(只读)

很多新手容易混淆这四类视图的用途,尤其是不清楚何时用数据库视图、何时用维护视图。本文将逐一讲解它们的差异、适用场景和创建步骤,并结合实例帮助你做出正确选择。


一、数据库视图(Database View)

1.1 定义与特点

数据库视图是最接近关系数据库标准视图 的类型,它通过INNER JOIN将多张表连接成一个逻辑整体,用于复杂查询。

  • 存储位置 :在数据库中会创建对应的VIEW对象。
  • 连接类型 :仅支持INNER JOIN(不支持LEFT OUTER JOINRIGHT JOIN)。
  • 字段映射:可以选择多张表中的任意字段。
  • 访问方式 :在ABAP程序中可以像透明表一样使用SELECT查询(只读)。
  • 性能 :数据库视图的查询会被数据库优化器转换为对基础表的查询,性能通常与直接写多表JOIN相当。

注意 :数据库视图不支持数据更新(INSERT/UPDATE/DELETE),仅用于查询。

1.2 适用场景

  • 需要频繁地跨多张表查询固定字段组合(如采购订单抬头+行项目)。
  • 希望封装复杂的表连接逻辑,简化ABAP代码。
  • 作为CDS视图的替代方案(在旧版本中,新项目推荐使用CDS视图)。

1.3 创建步骤(事务码SE11

  1. 输入/nSE11,选择"视图",输入视图名称(以ZY开头,如ZMM_PO_VIEW),点击"创建"。
  2. 选择"数据库视图",点击"对号"。
  3. 短文本:输入视图描述,如"采购订单抬头+行项目视图"。
  4. 基础表 (Tables):添加要关联的表,例如EKKO(抬头)、EKPO(行项目)。注意:数据库视图要求表之间通过外键关系关联,或手动指定连接条件。
  5. 连接条件 (Join Conditions):系统会根据外键自动生成连接条件。如果没有外键,需要手动在"条件"标签页中编写连接条件(如EKKO~EBELN = EKPO~EBELN)。
  6. 视图字段(View Fields):选择需要输出的字段,可以来自任意基础表。
  7. 激活:保存并激活视图。

示例 :创建ZMM_PO_VIEW,包含EKKO的订单号、供应商,以及EKPO的行项目号、物料、数量。

1.4 使用示例

abap 复制代码
SELECT * FROM zmm_po_view INTO TABLE lt_data
  WHERE ebeln IN s_ebeln.

此时,SELECT语句会透明地转换为对EKKOEKPOINNER JOIN

1.5 注意事项

  • 数据库视图中的所有表必须位于同一个数据库系统中(不能跨数据库)。
  • 视图的字段名必须唯一(不能有重名字段)。如果两个表有同名字段(如MANDT),需在视图字段中手动重命名。
  • 不支持ORDER BY在视图定义中,排序应在ABAP程序中完成。
  • 视图激活时,系统会尝试在数据库中创建对应的物理视图。如果没有权限,激活会报错。

二、投影视图(Projection View)

2.1 定义与特点

投影视图是基于单张表的字段子集选择,用于隐藏表中的敏感字段或简化字段列表。

  • 存储位置 :仅在ABAP数据字典中定义,不创建数据库对象
  • 连接类型:不涉及多表。
  • 字段选择:可以选择原表的部分字段,并可以重命名字段名(别名)。
  • 访问方式:只读查询,不支持修改。
  • 性能:与直接查询基础表几乎没有差异。

2.2 适用场景

  • 需要限制用户只能看到表的某些字段(例如隐藏工资表中的薪资字段)。
  • 为某张表创建一个更易理解的外在视图(例如将字段名改为更友好的名称)。
  • 作为帮助视图或维护视图的数据源

2.3 创建步骤

  1. SE11 → 视图 → 输入名称 → 创建 → 选择"投影视图"。
  2. 基础表 :输入一张透明表名(如ZHR_EMPLOYEE)。
  3. 视图字段:选择需要包含的字段。可以修改字段的"视图字段"名称(别名)。
  4. 激活

示例 :为员工表ZHR_EMPLOYEE创建投影视图ZHR_EMP_PUBLIC,只包含PERNRENAMEDEPARTMENT,隐藏SALARYBANK_ACCOUNT等敏感字段。

2.4 使用示例

abap 复制代码
SELECT * FROM zhr_emp_public WHERE pernr = '10000001'.

2.5 注意事项

  • 投影视图不会在数据库中生成对应对象,因此不能用于Native SQL。
  • 如果基础表结构发生变化(如新增字段),投影视图不会自动包含新字段,需要手动维护。

三、维护视图(Maintenance View)

3.1 定义与特点

维护视图是SAP特有的一种视图类型,主要用于通过SM30事务码同时维护多张表的数据。它类似于数据库视图,但额外包含了维护逻辑。

  • 存储位置:ABAP数据字典中定义,不创建数据库对象。
  • 表连接 :支持INNER JOIN(通过外键关系),允许多表。
  • 数据维护 :支持在SM30中对视图进行增删改查,系统会自动更新对应的基础表。
  • 用途:为复杂的主数据维护提供便捷界面(例如同时维护抬头和行项目)。

3.2 适用场景

  • 需要同时维护多张关联表的数据(如订单抬头+行项目,或主数据+描述文本)。
  • 为自定义表开发一个简单的配置界面,让业务人员可以维护数据。
  • 数据量不大,且表之间通过外键关联。

3.3 创建步骤

  1. SE11 → 视图 → 输入名称 → 创建 → 选择"维护视图"。
  2. 短文本:描述视图用途。
  3. 基础表 :添加关联表。必须定义表之间的外键关系(在表定义中已配置)。
  4. 视图字段:选择需要显示的字段。
  5. 维护类型 (通常在生成维护视图后设置):在菜单中选择"实用程序 → 表维护生成器",生成SM30维护对话框。可以设置一步维护、两步维护等。
  6. 激活:先激活视图,再激活生成的维护函数组。

3.4 使用示例

  • 执行事务码SM30,输入维护视图名称ZMM_PO_MAINT,点击"维护"。
  • 用户可以新增、修改、删除数据,系统会自动更新EKKOEKPO表。

3.5 注意事项

  • 性能 :维护视图在SM30中加载所有数据,不适合数据量大的表(>5000行)。
  • 表维护生成器:必须生成后才能使用维护功能。生成的函数组和屏幕需要激活。
  • 事件增强 :可以在维护视图中添加事件(如01初始化、05保存前校验),实现自定义逻辑。
  • 权限控制 :可以使用S_TABU_DIS权限对象限制用户对维护视图的访问。

四、帮助视图(Help View)

4.1 定义与特点

帮助视图是一种专门为搜索帮助(Search Help,F4帮助) 提供数据源的视图。它通常基于单张表或投影视图,用于在用户按F4时弹出可选值列表。

  • 存储位置:仅ABAP字典中定义,不创建数据库对象。
  • 数据源:可以是透明表、投影视图或数据库视图。
  • 使用方式:在搜索帮助中引用帮助视图作为数据源。
  • 特点:可添加排序、去重、附加字段等。

4.2 适用场景

  • 为某个输入字段提供自定义的F4帮助,例如根据物料组过滤物料列表。
  • 需要从多张表关联提供帮助值(但通常也可用数据库视图+搜索帮助实现)。
  • 需要屏蔽某些字段或限制结果集。

4.3 创建步骤

  1. SE11 → 视图 → 输入名称 → 创建 → 选择"帮助视图"。
  2. 基础表 :选择一张表或投影视图(如MARA)。
  3. 视图字段:选择需要出现在帮助列表中的字段(通常包括键字段和描述字段)。
  4. 选择条件 (Selection Conditions):可以在"条件"标签页添加固定过滤条件(如MTART = 'ROH'仅显示原材料)。
  5. 激活
  6. 然后在事务码SE11中创建搜索帮助(Search Help),将帮助视图作为数据源。

4.4 使用示例

创建帮助视图ZHELP_MAT_ROH,仅显示物料类型为ROH(原材料)的物料号及描述。然后在搜索帮助ZSH_MAT_ROH中引用该视图。当用户在输入字段上按F4时,只看到原材料物料。

4.5 注意事项

  • 帮助视图本身不直接创建F4帮助,需要配合搜索帮助对象使用。
  • 帮助视图可以包含WHERE条件(固定值),但不能包含用户输入参数的动态条件(那需要在搜索帮助中定义)。
  • 性能方面,帮助视图应避免大表全表扫描,建议只选择必要的字段。

五、四类视图对比总结

特性 数据库视图 投影视图 维护视图 帮助视图
表数量 多表(INNER JOIN) 单表 多表(通过外键) 单表或视图
是否可维护数据 是(通过SM30)
创建数据库对象
典型用途 复杂查询封装 字段隐藏、重命名 多表维护界面 F4帮助数据源
性能 与直接JOIN相当 与直接查表相当 小数据量适用 需配合搜索帮助使用
新项目推荐度 低(推荐CDS视图) 中(简单场景可用) 高(配置表维护) 中(简单搜索帮助可用)

六、如何选择正确的视图类型?

根据需求倒推:

  1. 我需要一个只读的查询视图,且涉及多张表 → 数据库视图(或CDS视图)。
  2. 我只想隐藏某张表中的几个敏感字段 → 投影视图。
  3. 我需要一个可维护的配置界面(CRUD),且涉及多张关联表 → 维护视图 + SM30
  4. 我需要为某个字段提供自定义的F4帮助 → 帮助视图 + 搜索帮助。

进阶提示 :在SAP S/4HANA及新版本中,CDS视图 是数据库视图的现代替代品,功能更强大(支持LEFT OUTER JOINUNION、参数等)。对于新开发,建议优先学习CDS视图(后续文章会详细讲解)。


七、常见问题

  • Q1:为什么维护视图在SM30中无法编辑?

    A:检查是否生成了表维护生成器(SE11 → 菜单"实用程序 → 表维护生成器")。同时确认当前用户有S_TABU_DIS权限。

  • Q2:数据库视图激活失败,提示"表没有外键关系"?

    A:数据库视图要求表之间必须通过外键关联。可以在SE11中为表创建外键关系。

  • Q3:投影视图中的字段别名有什么限制?

    A:别名不能与基础表中的其他字段名重复,长度不超过16字符。

  • Q4:帮助视图和搜索帮助有什么区别?

    A:帮助视图是数据源(提供哪些字段和行),搜索帮助是F4对话框的逻辑(包含输入字段、输出字段、选择方法等)。帮助视图常作为搜索帮助的"选择方法"。


八、总结

SAP的四类视图各有所长:数据库视图用于多表只读查询,投影视图用于字段裁剪,维护视图用于配置数据维护,帮助视图用于F4帮助。掌握它们的使用场景和创建方法,可以让你在开发中更高效地处理数据访问和界面需求。

视图类型 一句话总结
数据库视图 多表查询加速器
投影视图 字段遮挡帘
维护视图 配置维护利器
帮助视图 F4数据粮仓

下一篇我们将深入连接视图(Join View),讲解多表关联时的复杂场景和性能优化。

下一篇预告:《SAP多表连接视图实战:内连接/外连接配置逻辑与性能优化技巧》

作者 :爱喝水的鱼丶

版本记录:2026年6月

💬 你曾用维护视图为业务部门搭建过配置界面吗?欢迎分享你的实践体验。

相关推荐
大白要努力!2 小时前
MySQL 8.0 + Navicat 完整操作指南
数据库·mysql
云絮.3 小时前
数据库操作
数据库·mysql·算法·oracle
小小工匠3 小时前
Redis 缓存替换策略:8 种淘汰策略与 LRU 实现剖析
数据库·redis·缓存
回忆2012初秋4 小时前
【Nginx】优雅地走进高性能 Web 服务器世界(1)
服务器·前端·nginx
信创工程师-小杨4 小时前
Linux内网环境如何解决依赖的问题
linux·运维·服务器
不吃土豆的马铃薯5 小时前
C++ 高性能网络缓冲区 Buffer 源码解析
linux·服务器·开发语言·网络·c++
小小龙学IT5 小时前
Go 泛型深度解析:从设计哲学到工程实践
服务器·数据库·golang
天行健,君子而铎5 小时前
2026年通用行业数据分类分级产品排名——聚焦成本低、全链路覆盖与高性能计算的优质选型
大数据·数据库·人工智能