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 JOIN、RIGHT JOIN)。 - 字段映射:可以选择多张表中的任意字段。
- 访问方式:在ABAP程序中可以像透明表一样使用
SELECT查询(只读)。 - 性能:数据库视图的查询会被数据库优化器转换为对基础表的查询,性能通常与直接写多表
JOIN相当。
注意:数据库视图不支持数据更新(
INSERT/UPDATE/DELETE),仅用于查询。
1.2 适用场景
- 需要频繁地跨多张表查询固定字段组合(如采购订单抬头+行项目)。
- 希望封装复杂的表连接逻辑,简化ABAP代码。
- 作为CDS视图的替代方案(在旧版本中,新项目推荐使用CDS视图)。
1.3 创建步骤(事务码SE11)
- 输入
/nSE11,选择“视图”,输入视图名称(以Z或Y开头,如ZMM_PO_VIEW),点击“创建”。 - 选择“数据库视图”,点击“对号”。
- 短文本:输入视图描述,如“采购订单抬头+行项目视图”。
- 基础表(Tables):添加要关联的表,例如
EKKO(抬头)、EKPO(行项目)。注意:数据库视图要求表之间通过外键关系关联,或手动指定连接条件。 - 连接条件(Join Conditions):系统会根据外键自动生成连接条件。如果没有外键,需要手动在“条件”标签页中编写连接条件(如
EKKO~EBELN = EKPO~EBELN)。 - 视图字段(View Fields):选择需要输出的字段,可以来自任意基础表。
- 激活:保存并激活视图。
示例:创建ZMM_PO_VIEW,包含EKKO的订单号、供应商,以及EKPO的行项目号、物料、数量。
1.4 使用示例
SELECT * FROM zmm_po_view INTO TABLE lt_data WHERE ebeln IN s_ebeln.此时,SELECT语句会透明地转换为对EKKO和EKPO的INNER JOIN。
1.5 注意事项
- 数据库视图中的所有表必须位于同一个数据库系统中(不能跨数据库)。
- 视图的字段名必须唯一(不能有重名字段)。如果两个表有同名字段(如
MANDT),需在视图字段中手动重命名。 - 不支持
ORDER BY在视图定义中,排序应在ABAP程序中完成。 - 视图激活时,系统会尝试在数据库中创建对应的物理视图。如果没有权限,激活会报错。
二、投影视图(Projection View)
2.1 定义与特点
投影视图是基于单张表的字段子集选择,用于隐藏表中的敏感字段或简化字段列表。
- 存储位置:仅在ABAP数据字典中定义,不创建数据库对象。
- 连接类型:不涉及多表。
- 字段选择:可以选择原表的部分字段,并可以重命名字段名(别名)。
- 访问方式:只读查询,不支持修改。
- 性能:与直接查询基础表几乎没有差异。
2.2 适用场景
- 需要限制用户只能看到表的某些字段(例如隐藏工资表中的薪资字段)。
- 为某张表创建一个更易理解的外在视图(例如将字段名改为更友好的名称)。
- 作为帮助视图或维护视图的数据源。
2.3 创建步骤
SE11→ 视图 → 输入名称 → 创建 → 选择“投影视图”。- 基础表:输入一张透明表名(如
ZHR_EMPLOYEE)。 - 视图字段:选择需要包含的字段。可以修改字段的“视图字段”名称(别名)。
- 激活。
示例:为员工表ZHR_EMPLOYEE创建投影视图ZHR_EMP_PUBLIC,只包含PERNR、ENAME、DEPARTMENT,隐藏SALARY、BANK_ACCOUNT等敏感字段。
2.4 使用示例
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 创建步骤
SE11→ 视图 → 输入名称 → 创建 → 选择“维护视图”。- 短文本:描述视图用途。
- 基础表:添加关联表。必须定义表之间的外键关系(在表定义中已配置)。
- 视图字段:选择需要显示的字段。
- 维护类型(通常在生成维护视图后设置):在菜单中选择“实用程序 → 表维护生成器”,生成
SM30维护对话框。可以设置一步维护、两步维护等。 - 激活:先激活视图,再激活生成的维护函数组。
3.4 使用示例
- 执行事务码
SM30,输入维护视图名称ZMM_PO_MAINT,点击“维护”。 - 用户可以新增、修改、删除数据,系统会自动更新
EKKO和EKPO表。
3.5 注意事项
- 性能:维护视图在
SM30中加载所有数据,不适合数据量大的表(>5000行)。 - 表维护生成器:必须生成后才能使用维护功能。生成的函数组和屏幕需要激活。
- 事件增强:可以在维护视图中添加事件(如
01初始化、05保存前校验),实现自定义逻辑。 - 权限控制:可以使用
S_TABU_DIS权限对象限制用户对维护视图的访问。
四、帮助视图(Help View)
4.1 定义与特点
帮助视图是一种专门为搜索帮助(Search Help,F4帮助)提供数据源的视图。它通常基于单张表或投影视图,用于在用户按F4时弹出可选值列表。
- 存储位置:仅ABAP字典中定义,不创建数据库对象。
- 数据源:可以是透明表、投影视图或数据库视图。
- 使用方式:在搜索帮助中引用帮助视图作为数据源。
- 特点:可添加排序、去重、附加字段等。
4.2 适用场景
- 为某个输入字段提供自定义的F4帮助,例如根据物料组过滤物料列表。
- 需要从多张表关联提供帮助值(但通常也可用数据库视图+搜索帮助实现)。
- 需要屏蔽某些字段或限制结果集。
4.3 创建步骤
SE11→ 视图 → 输入名称 → 创建 → 选择“帮助视图”。- 基础表:选择一张表或投影视图(如
MARA)。 - 视图字段:选择需要出现在帮助列表中的字段(通常包括键字段和描述字段)。
- 选择条件(Selection Conditions):可以在“条件”标签页添加固定过滤条件(如
MTART = 'ROH'仅显示原材料)。 - 激活。
- 然后在事务码
SE11中创建搜索帮助(Search Help),将帮助视图作为数据源。
4.4 使用示例
创建帮助视图ZHELP_MAT_ROH,仅显示物料类型为ROH(原材料)的物料号及描述。然后在搜索帮助ZSH_MAT_ROH中引用该视图。当用户在输入字段上按F4时,只看到原材料物料。
4.5 注意事项
- 帮助视图本身不直接创建F4帮助,需要配合搜索帮助对象使用。
- 帮助视图可以包含
WHERE条件(固定值),但不能包含用户输入参数的动态条件(那需要在搜索帮助中定义)。 - 性能方面,帮助视图应避免大表全表扫描,建议只选择必要的字段。
五、四类视图对比总结
| 特性 | 数据库视图 | 投影视图 | 维护视图 | 帮助视图 |
|---|---|---|---|---|
| 表数量 | 多表(INNER JOIN) | 单表 | 多表(通过外键) | 单表或视图 |
| 是否可维护数据 | 否 | 否 | 是(通过SM30) | 否 |
| 创建数据库对象 | 是 | 否 | 否 | 否 |
| 典型用途 | 复杂查询封装 | 字段隐藏、重命名 | 多表维护界面 | F4帮助数据源 |
| 性能 | 与直接JOIN相当 | 与直接查表相当 | 小数据量适用 | 需配合搜索帮助使用 |
| 新项目推荐度 | 低(推荐CDS视图) | 中(简单场景可用) | 高(配置表维护) | 中(简单搜索帮助可用) |
六、如何选择正确的视图类型?
根据需求倒推:
- 我需要一个只读的查询视图,且涉及多张表→ 数据库视图(或CDS视图)。
- 我只想隐藏某张表中的几个敏感字段→ 投影视图。
- 我需要一个可维护的配置界面(CRUD),且涉及多张关联表→ 维护视图 +
SM30。 - 我需要为某个字段提供自定义的F4帮助→ 帮助视图 + 搜索帮助。
进阶提示:在SAP S/4HANA及新版本中,CDS视图是数据库视图的现代替代品,功能更强大(支持
LEFT OUTER JOIN、UNION、参数等)。对于新开发,建议优先学习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月
💬 你曾用维护视图为业务部门搭建过配置界面吗?欢迎分享你的实践体验。