单元 5:对象依赖练习(6 道题)

单元 5:对象依赖练习(6 道题)

#practice #abap #abap-dictionary #abap-dependency

相关概念

📌关键模式(点击展开)
Keyword (关键词) Answer (答案)
运行时对象存储 系统表(如 DD02L, DD03L)
不一致后果 ABAP 程序可能出错
Where-Used List 用途 评估修改影响范围
保存后状态 非活跃版本 (inactive)

问题 1 - 运行时对象 [recall]

什么是运行时对象 (Runtime Object)?它存储在哪里?

📌显示答案
运行时对象是 Dictionary 中定义被编译后的内部格式,ABAP 程序和 Screen Painter 访问的是运行时对象(而非 Dictionary 定义本身)。
  • 存储在系统表中(如 DD02L for tables, DD03L for fields)
  • 修改 Dictionary 对象后必须激活才能更新运行时对象
  • 如果运行时对象与 Dictionary 定义不一致,ABAP 程序可能出错

问题 2 - Where-Used List [recall]

Where-Used List(使用处清单)的功能是什么?给出两个使用场景。

📌显示答案
Where-Used List 用于查找对象的引用关系,确定哪些程序/表/结构会受变更影响。
使用场景:
  1. 评估修改影响范围:修改一个域前,查看哪些数据元素和表使用了该域
  2. 计划重构或迁移:确定需要同步更新的依赖对象
  • 访问方式:SE11 → 选择对象类型 → Where-Used

问题 3 - 激活过程 [recall]

描述 Dictionary 对象从修改到生效的激活过程。

📌显示答案
1
2
3
4
修改对象 → 保存(非活跃版本 / inactive version)
→ 激活 → 检查依赖 → 更新运行时对象 → 更新数据库(如需要)
↓ 失败
→ 激活日志 (Activation Log)
  • 保存时创建的是非活跃版本,不影响现有程序
  • 激活时系统自动检查依赖并更新运行时对象
  • 失败的激活可通过 Utilities → Activation Log 查看错误信息
  • 依赖的对象可能需要一起重新激活

问题 4 - 依赖关系 [recall]

列出 Dictionary 对象之间的主要依赖关系层次。

📌显示答案
1
2
3
4
5
6
7
8
9
10
11
12
Domain
└── Data Element
├── Structure
│ └── Table
│ ├── View
│ ├── Index
│ ├── Lock Object
│ └── Search Help
└── Table Type

外键 → Check Table
搜索帮助 → Selection Method (Table/View)

修改底层对象(如 Domain)可能级联影响所有上层对象。


问题 5 - 不一致问题 [application]

一个开发者修改了某个结构体(添加了新字段)但忘记激活。另一个开发者在该结构体基础上编写了使用新字段的程序。程序运行时会出现什么问题?如何解决?

📌显示答案
问题:程序运行时会出错,因为运行时对象仍然是旧版本(不包含新字段)。未激活的修改只存在于 Dictionary 的非活跃版本中,ABAP 程序访问的是运行时对象。

解决:激活修改后的结构体定义。激活后系统会:

  1. 检查所有依赖对象
  2. 更新运行时对象(DD02L, DD03L 等系统表)
  3. 新字段才会对程序可见

问题 6 - 依赖修改影响分析 [analysis]

你需要将一个域的数据类型从 CHAR(3) 改为 CHAR(5)。分析这个修改会影响哪些对象?修改前应该做什么准备?

📌显示答案
影响范围(需要用 Where-Used List 确认):
  1. 所有引用该域的数据元素
  2. 使用这些数据元素的所有结构表字段
  3. 使用这些表的所有视图(可能需要调整投影)
  4. 使用这些表的所有索引(键长度变化影响索引)
  5. 使用这些表/结构的所有ABAP 程序(变量长度可能不匹配)
  6. 所有锁对象搜索帮助

修改前准备

  • 使用 Where-Used List 完整列出所有依赖
  • 评估哪些对象需要同步修改
  • 检查是否需要表转换(更改字段长度可能触发转换)
  • 在非生产环境中测试激活
  • 计划在低负载时段执行

📌模式总结(点击展开)
Keyword (关键词) Answer (答案)
运行时对象 Dictionary 定义的编译格式,存储在系统表中
系统表示例 DD02L (tables), DD03L (fields)
保存后状态 非活跃版本 (inactive)
激活作用 更新运行时对象 + 数据库
Where-Used List 查找引用关系,评估修改影响
不一致后果 ABAP 程序可能出错