单元 2:数据对象练习(10 道题)
单元 2:数据对象练习(10 道题)
#practice #abap #abap-dictionary #abap-data-types
相关概念
📌关键模式(点击展开)
| Keyword (关键词) | Answer (答案) |
|---|---|
| 域能否直接引用 | 不能,必须通过数据元素 |
| CHAR 在表中的上限 | 255 |
| 数据元素字段标签类型 | Short, Medium, Long, Heading |
| 深层结构定义条件 | 包含至少一个内表组件 |
| SET/GET 参数何时失效 | 用户注销后 |
问题 1 - 域与技术属性 [recall]
域(Domain)包含哪些技术属性?列举四项。
📌显示答案
- Format — 数据类型 + 字符数 + 小数位
- Output Properties — 输出长度、+/- 符号、小写允许
- Value Range — 固定值或区间(用于输入检查)
- Conversion Routine — 显示格式与 SAP 内部格式之间的转换
问题 2 - 转换例程 [recall]
什么是转换例程(Conversion Routine)?它的工作方式是什么?
📌显示答案
转换例程用于在显示格式和 SAP 内部格式之间自动转换。
CONVERSION_EXIT_XXXXX_OUTPUT:SAP 内部格式 → 显示格式CONVERSION_EXIT_XXXXX_INPUT:显示格式 → SAP 内部格式- 典型应用:前导零补齐(
123→0000000123) - 也影响
WRITE语句的输出
问题 3 - 数据元素语义属性 [recall]
数据元素包含哪些语义属性?
📌显示答案
数据元素包含的语义属性:
- 字段标签 (Field Labels):Short、Medium、Long、Heading 四种长度
- F1 帮助文档
- 搜索帮助(可附加 F4 搜索帮助)
- SET/GET Parameter(跨屏幕自动传递值)
- Default Component Name(BAPI 结构中使用)
问题 4 - SET/GET 参数 [recall]
SET/GET Parameter 的作用是什么?它的生命周期是怎样的?
📌显示答案
SET/GET Parameter 用于跨屏幕自动传递值。用户在 SAP GUI 会话中输入的值通过 SET/GET 参数自动填充到使用同一参数 ID 的其他屏幕字段中。生命周期为当前登录会话——用户注销后清除。
问题 5 - 结构类型对比 [recall]
比较扁平结构(Flat)、嵌套结构(Nested)和深层结构(Deep)的定义和区别。
📌显示答案
| 类型 | 定义 | 访问方式 |
|---|---|---|
| 扁平结构 | 组件全部是数据元素 | wa-field |
| 嵌套结构 | 包含子结构作为组件 | wa-sub-field(层级访问) |
| 深层结构 | 包含至少一个内表组件 | LOOP AT wa-table... |
数据库表只能包含扁平结构,不能有深层结构中的内表组件。
问题 6 - Include 与嵌套的区别 [recall]
在结构中,Include 结构和嵌套结构有什么区别?
📌显示答案
- Include 结构(
.INCLUDE):子结构的字段直接展开到父结构中,扁平访问(wa-street),无嵌套层级 - 嵌套结构:子结构作为独立组件,层级访问(
wa-name-firstname) - Include 实际上把子结构的字段拷贝到父结构中,不增加嵌套层级
- Include 中的外键定义会传递到父表
问题 7 - 表类型定义要素 [recall]
在 ABAP 字典中定义表类型(Table Type)时需要指定哪些要素?
📌显示答案
定义表类型需要指定四项要素:
- Line Type(行类型):数据元素、结构、DB 表、视图、其他表类型
- Access Type(访问方式):Standard / Sorted / Hashed
- Key Type(键类型):Unique / Non-unique
- Key Definition(键定义):Standard Key / Key Components
问题 8 - 数据类型长度限制 [application]
你需要在表中定义一个长度为 500 的文本字段。应该使用哪个内置数据类型?CHAR 类型合适吗?
📌显示答案
CHAR 不合适,因为 CHAR 在表中最大长度为 255。应该使用 LCHR(长字符串类型),但需要注意:LCHR 字段必须是表的最后一个字段,且含 LCHR/LRAW 字段的表不能使用 Append 结构。
问题 9 - 类型组 [recall]
什么是类型组(Type Group)?现代开发中应该使用什么替代?
📌显示答案
类型组是 Release 4.5a 之前的旧技术,用于定义全局常量。名称最多 5 个字符,所有名称必须以
现代替代:新开发应使用 Dictionary 结构代替类型组。全局常量可用类的常量属性。
typegroup_ 为前缀,使用 TYPE-POOLS 语句引入。现代替代:新开发应使用 Dictionary 结构代替类型组。全局常量可用类的常量属性。
问题 10 - 结构选择分析 [analysis]
你需要定义一个包含员工基本信息(姓名、地址)和多个电话号码的类型。你会选择哪种结构类型?为什么?数据库表中能直接使用这种结构吗?
📌显示答案
应选择深层结构 (Deep Structure):
- 姓名和地址用数据元素或子结构定义
- 多个电话号码使用表类型组件(内表)来存储
- 访问方式:
LOOP AT wa_employee-phone INTO wa_phone.
数据库表不能直接使用深层结构(因为不能包含内表组件)。需要在数据库表中存储扁平的员工数据,电话号码存储在单独的子表中,通过外键关联。
📌模式总结(点击展开)
| Keyword (关键词) | Answer (答案) |
|---|---|
| 域包含的属性 | Format、Output Properties、Value Range、Conversion Routine |
| 转换例程 | CONVERSION_EXIT_XXXXX_INPUT/OUTPUT |
| 数据元素标签 | Short, Medium, Long, Heading |
| SET/GET 参数 | 跨屏幕传值,注销后清除 |
| 深层结构 | 至少一个内表组件 |
| Include vs 嵌套 | Include 扁平展开,嵌套层级访问 |
| CHAR 上限 | 表中 255 |
| LCHR 限制 | 必须是最后字段,不能用 Append |
| 类型组 | 旧技术,用 Dictionary 结构替代 |
| 表类型四要素 | 行类型、访问方式、键类型、键定义 |