Append 结构与表增强 (★★★★)

Append 结构与表增强 (★★★★)

#abap #abap-dictionary #abap-tables

概览表

Enhancement Type (增强类型) Description (描述) Need Reservation (需预留)
Customizing Include SAP 预留的增强位置
Append Structure 追加到表末尾

Append 结构

Append 结构允许在不修改 SAP 标准表的情况下追加字段。

1
2
3
4
5
6
7
8
9
10
11
12
SAP Standard Table: ZEMPLOY##
┌────────────┬──────────┐
│ CLIENT │ S_CLIENT │
│ CARRIER │ S_CARR │
│ EMP_NUM │ own │
│ FIRST_NAME │ S_FNAME │
│ LAST_NAME │ S_LNAME │
├────────────┴──────────┤ ← Append Structure ZZA_EMPLOY
│ ZZAIRPORT │ S_AIRPORT │
│ ZZOFFNR │ S_BUREAUNO│
│ ZZTELNO │ S_TELNO │
└───────────────────────┘

Append 结构特性

Property (特性) Detail (详情)
一对一关系 一个 Append 结构只能分配给一个表
多个 Append 一个表可以有多个 Append 结构
自动激活 Append 结构创建/修改时,父表自动激活
类型可用 Append 结构本身也是一个可用的类型
升级安全 客户命名空间,升级时不会被覆盖

字段命名规则

1
2
客户开发: 字段名以 YY 或 ZZ 开头
合作伙伴: 使用自己的保留命名空间
⚠️命名冲突
不遵循命名规范的字段可能在 SAP 升级时与新字段冲突。

Append 结构的限制

Restriction (限制) Detail (详情)
池表/簇表 不能使用 Append 结构
LCHR/LRAW 字段 含长字段的表不能使用(长字段必须在最后)
转换需求 不需要(ALTER TABLE 添加字段)

附加功能 (4.6C 起)

  • 可为表中已有字段定义外键
  • 可为已有字段附加搜索帮助

Customizing Include

SAP 在标准表/结构中预留位置供客户增强:

1
2
3
4
5
SAP Standard Structure:
├── SAP fields...
├── CI_ZEMPLOY (Customizing Include) ← 预留位置,客户创建后生效
│ ├── (empty until customer creates it)
├── More SAP fields...
  • 使用 Extras → Enhancement Category 管理
  • 客户需要创建 Include 结构来填充这些位置

增强类别 (Enhancement Category)

为了控制结构增强对程序的影响,设置了增强类别:

Level Category (类别) Meaning (含义)
1 Not classified 无类别
2 Not enhanceable 不可增强
3 Enhanceable and character-like 所有组件必须为字符型
4 Enhanceable and character-like or numerical 不能含深层类型
5 Freely enhanceable 任意类型
📌Unicode 环境影响
结构增强在 Unicode 环境下更严格:
  • 改变碎片视图 (Fragment View)
  • 影响赋值检查和比较
  • 数值型/深层组件插入纯字符结构会改变其特性

类别继承规则

  • Include/子结构的增强类别不能大于父结构
  • 例如:父结构含 Level 4 的 Include → 父结构不能是 Level 2 或 3

复制表的注意事项

💡复制时 Append 字段
如果复制一个有 Append 结构的透明表,Append 字段会变成普通字段

创建步骤

1
2
3
4
5
1. SE11 → 显示目标表
2. Goto → Append Structure
3. 输入名称(遵循命名规范)
4. 添加字段(ZZ 前缀 + 数据元素)
5. 激活 → 父表自动调整

考试/测试模式

Scenario/Keyword (场景/关键词) Answer (答案)
“Append 字段命名规范?” YY 或 ZZ 开头
“Append 需要表转换吗?” 不需要(ALTER TABLE)
“哪些表不能用 Append?” 池表、簇表、含 LCHR/LRAW 的表
“Append 结构能用于多个表吗?” 不能,一对一关系
“复制有 Append 的表会怎样?” Append 字段变为普通字段