单元 2:数据对象练习(10 道题)

单元 2:数据对象练习(10 道题)

#practice #abap #abap-dictionary #abap-data-types

相关概念

📌关键模式(点击展开)
Keyword (关键词) Answer (答案)
域能否直接引用 不能,必须通过数据元素
CHAR 在表中的上限 255
数据元素字段标签类型 Short, Medium, Long, Heading
深层结构定义条件 包含至少一个内表组件
SET/GET 参数何时失效 用户注销后

问题 1 - 域与技术属性 [recall]

域(Domain)包含哪些技术属性?列举四项。

📌显示答案
  1. Format — 数据类型 + 字符数 + 小数位
  2. Output Properties — 输出长度、+/- 符号、小写允许
  3. Value Range — 固定值或区间(用于输入检查)
  4. Conversion Routine — 显示格式与 SAP 内部格式之间的转换

问题 2 - 转换例程 [recall]

什么是转换例程(Conversion Routine)?它的工作方式是什么?

📌显示答案
转换例程用于在显示格式SAP 内部格式之间自动转换。
  • CONVERSION_EXIT_XXXXX_OUTPUT:SAP 内部格式 → 显示格式
  • CONVERSION_EXIT_XXXXX_INPUT:显示格式 → SAP 内部格式
  • 典型应用:前导零补齐(1230000000123
  • 也影响 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)时需要指定哪些要素?

📌显示答案
定义表类型需要指定四项要素:
  1. Line Type(行类型):数据元素、结构、DB 表、视图、其他表类型
  2. Access Type(访问方式):Standard / Sorted / Hashed
  3. Key Type(键类型):Unique / Non-unique
  4. 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 个字符,所有名称必须以 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 结构替代
表类型四要素 行类型、访问方式、键类型、键定义