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 JOIN、RIGHT JOIN)。
  • 字段映射:可以选择多张表中的任意字段。
  • 访问方式 :在ABAP程序中可以像透明表一样使用SELECT查询(只读)。
  • 性能 :数据库视图的查询会被数据库优化器转换为对基础表的查询,性能通常与直接写多表JOIN相当。

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

1.2 适用场景

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

1.3 创建步骤(事务码SE11)

  1. 输入/nSE11,选择"视图",输入视图名称(以Z或Y开头,如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语句会透明地转换为对EKKO和EKPO的INNER 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,只包含PERNR、ENAME、DEPARTMENT,隐藏SALARY、BANK_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,点击"维护"。
  • 用户可以新增、修改、删除数据,系统会自动更新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 创建步骤

  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 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月

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

相关推荐
weixin_511255213 小时前
MySQL升级记录
数据库·mysql
程序猿乐锅4 小时前
【黑马点评 | 第八篇】Redisson分布式锁
java·数据库·spring boot·redis·分布式·spring·缓存
福兮说4 小时前
前端下载大文件,点了按钮半天没反应:fetch + blob 的三个问题和三种替代写法
前端·javascript·性能优化·文件下载
Leo.yuan5 小时前
2026年本地化Data Agent优质厂商盘点:哪些产品更适合企业生产环境
大数据·数据库·人工智能
做运维的阿瑞5 小时前
数据库增删改的安全写法
数据库·sql·mysql
程序边界5 小时前
迁移评估不再拍脑袋,这个数据迁移工具的量化报告把我救了(上)
数据库
阿狗童鞋6 小时前
Redis实战指南
数据库·redis·缓存
筝筝ba6 小时前
openBMC功耗封顶GUI测试
服务器
lupai7 小时前
维修保养记录精准版 API 对接实战指南
数据库·python
niuTaylor7 小时前
飞腾 FT-2000/4 Ubuntu 内存卡 / NVMe SSD 系统制作完整指南
linux·服务器·人工智能·驱动开发·单片机