定义域和数据元素
学习目标
描述定义数据库表时数据元素和域的使用。
创建域。
创建数据元素。
数据库表、数据元素和域
ABAP 字典中的数据库表
播放视频以了解 ABAP 字典中的数据库表。
视频:本节含 SAP 官方视频(视频 ID
1_1agpaey5),需在 learning.sap.com 在线观看。

这是 ABAP 字典中的数据库表定义。您可以在关键字 define table 之后查看数据库表的名称,并在冒号 (:) 左侧看到表字段的名称。您可以在冒号右侧找到字段类型。
在此示例中,第一个字段(字段客户端)直接使用预定义类型(类型 abap.clnt)键入。这通常可行,但应仅将其用于纯技术字段,如客户端字段。对于所有其他字段,建议您参考数据元素,以便这些字段也链接到语义信息。

数据元素指定表字段的技术和语义属性。显示数据元素时,可以在左侧找到技术类型定义,在右侧找到语义信息(字段标签)。
在此示例中,通过引用域定义技术类型。这是推荐方法。基本数据类型 CHAR 和长度 3 不存储在数据元素本身中,而是来自引用的域。它们在此处显示以供参考,并为您节省导航到域的麻烦。
当基于此数据元素的字段在用户界面 (UI) 上可见时,字段标签将变得相关。这适用于屏幕(也称为 Dynpro)和 Web Dynpro 等经典 ABAP UI 技术,以及 ABAP RESTful 应用程序编程模型等现代编程技术。右侧四个字段标签之间的主要区别是其各自的最大长度。
注意
字段标签需要进行翻译。它们由开发人员以对象的原始语言进行维护。在此,可以将其翻译成其他语言。

域的主要目的是指定表字段的技术属性。此示例中的域使用技术类型 CHAR 并将长度设置为 3。
其他设置允许您限制字段的值范围。我们将在下一部分中对此进行详细讨论。
创建新的字典对象
播放视频以了解如何创建新域、数据元素或任何其他字典对象。
视频:本节含 SAP 官方视频(视频 ID
1_rhmbwik5),需在 learning.sap.com 在线观看。
如何创建域
播放视频,了解如何创建域。
视频:本节含 SAP 官方视频(视频 ID
1_ipq78734),需在 learning.sap.com 在线观看。
ABAP 字典中的预定义类型
创建域时,必须选择各种预定义字典类型之一。其中一些类型用于常规用途,其他类型具有特殊目的和语义。

常规
一些常规使用的字典类型为 CHAR、INT4、FLTP 和 DEC,它们直接对应于 ABAP 内置类型 C、I、F 和 P。
具有特殊语义的字符型
字典类型为 NUMC、CLNT 和 LANG 的字段在数据库中类似于字符,但具有特殊语义。
NUMC 类型的字段只能包含数字,并且某些 ABAP 框架将自动插入前导零。
数据库表中 CLNT 类型的关键字段自动视为客户端字段。缺省情况下,对此表的任何访问仅限于当前用户的登录客户端。
数据库表中 LANG 类型的关键字段被标识为语言代码。语言代码在包含可翻译文本(所谓的文本表)的表中很重要。
货币和数量
ABAP 字典知道金额字段和数量的专用类型。从技术上讲,预定义类型 CURR 和 QUAN 与类型 DEC 相同,与 DEC 一样,它们映射到 ABAP 类型 P。但正如您稍后看到的,您必须将任何类型为 CURR 的表字段链接到货币代码字段。同样,QUAN 类型的字段需要链接到具有计量单位的字段。
预定义类型 CUKY 和 UNIT 用于将字段标识为货币代码字段或计量单位字段。从技术上讲,它们只是固定长度为 5 的字符字段,对于货币代码来说只是字符字段,计量单位字段的长度为 2 或 3。
Date and Time
在 ABAP 中,日期和时间信息按 8 位(日期)和 6 位(时间)的顺序进行处理。长期以来,字典只知道预定义类型 DATS 和 TIMS。对于这些类型,数据库中的字段为字符型,格式与 ABAP 中的格式相同。使用较新的类型 DATN 和 TIMN,框架可以使用优化的数据库特定格式在数据库上创建字段。请注意,这对 ABAP 代码没有影响。旧字典类型和新字典类型映射到相同的预定义 ABAP 类型。

定义类型为 DEC、QUAN 和 CURR 的域时,必须指定长度和小数位数。这与 ABAP 中类型 P 的使用类似。但有一个很大的区别。
在 ABAP 中,TYPE P LENGTH n 中的数字 n 是字节数。在此,使用公式派生位数:2 * n - 1。在 ABAP 字典中,您可以直接指定位数。
在 ABAP 中,类型为 P 的数据对象始终占用整数字节。这始终会导致奇数位数。如果字典类型 使用长度为偶数的 DEC、QUAN 或 CURR,则 ABAP 数据对象将"升级"到下一个整数。
让我们看一个示例。数据元素 /DMO/FLIGHT_PRICE 的类型为 CURR,长度 = 16。要存储 16 位数字和一个符号,需要 8 ½ 个字节。ABAP 可变价格通过数据元素 /DMO/FLIGHT_PRICE 键入。正如您在调试器显示中看到的,由于无法占据 8 ½ 字节,因此其 ABAP 长度为 9。这会导致技术上可以分配 17 位的 PRICE 值。
提示
定义类型为 DEC、QUAN 或 CURR 的域时,旨在为长度提供奇数值,以避免不一致和内存浪费。
数据元素创建
数据元素 - 定义技术类型
播放视频,了解如何定义数据元素的技术类型。
视频:本节含 SAP 官方视频(视频 ID
1_rjcvzbrh),需在 learning.sap.com 在线观看。

在数据元素中维护文本有两个位置:三个标签和字段标签部分的标题,以及属性视图中的描述,通常显示在编辑器下方的标签条中。
标签和标题具有最大长度。创建新数据元素时,编辑器会将这些长度预设置为建议值。建议保留建议的长度。各种框架(主要是 UI 技术)使用标签和标题为字段提供语义元数据。
与所有其他 ABAP 开发对象一样,数据元素也具有描述。请注意,此描述不适用于第一位的最终用户。在此,为分析现有代码或考虑重用数据元素的开发人员提供附加语义信息。
维护数据元素的文本时,登录语言必须与对象的原始语言相同。您将在 属性 视图上找到原始语言。创建新数据元素时,原始语言将自动设置为登录语言。
注意
数据元素中的文本需要进行翻译。有关翻译机制的详细信息,请参阅 ABAP 文档或中间 ABAP 编程课程。
如何使用新域创建新的数据元素。
播放视频,了解如何使用新域创建新数据元素。
视频:本节含 SAP 官方视频(视频 ID
1_kiw2dzhe),需在 learning.sap.com 在线观看。
创建域和数据元素
您想要创建自己的数据模型。在本练习中,首先定义员工编号和年薪数据的域和数据元素。
模板:
不适用
解决方案:
/LRN/AMOUNT(域)
/LRN/EMPLOYEE_ID(域)
/LRN/ANNUAL_SALARY(数据元素)
/LRN/EMPLOYEE_ID(数据元素)
任务 1: 创建域
创建域(建议名称:Z##_AMOUNT,其中 ## 是您的组编号)。为金额值使用适当的字典类型。将长度设置为 15,将小数位数设置为 2。
步骤
创建新域
Z##_AMOUNT。在项目浏览器视图中,右键单击包以打开上下文菜单。
选择 新建→其他 ABAP 资源库对象 。
在显示的对话框窗口的搜索字段中输入
doma。选择域,然后选择下一步。
确认包,输入名称
Z##_AMOUNT和描述**金额**,然后选择下一步。将新对象分配到传输请求,然后选择完成。
将域的数据类型设置为
CURR,长度为15位和2位小数。将光标放在数据类型字段上,然后按 **
Ctrl + 空格**键。从建议清单中选择 CURR 并按**
回车**。
结果
将显示两个输入字段:
长度
和小
数
。
3. 在长度字段中输入 15,在小数字段中输入 2。
3. 激活域。
按
Ctrl + F3激活开发对象。
任务 2: 创建数据元素
创建基于域的数据元素(建议名称:Z##_ANNUAL_SALARY,其中 ## 是您的组编号)。
步骤
创建新的数据元素
Z##_ANNUAL_SALARY。在项目浏览器视图中,展开您的包,然后右键单击字典以打开上下文菜单。
选择 新→数据元素 。
确认包,输入名称
Z##_ANNUAL_SALARY和描述**年薪**,然后选择下一步。将新对象分配到传输请求,然后选择完成。
让数据元素使用域
Z##_AMOUNT。在类别下,保留建议值**
域**。在类型名称下输入
Z##,其中##是您的组编号,然后按 **Ctrl + 空格**键。从建议清单中选择 Z##_AMOUNT。
维护字段标签并激活数据元素。
在字段标签部分中,输入以下数据: | 字段 | 值 | | --- | --- | | 短 | Salary | | 中 | 年薪 | | 长整型 | 年薪 | | 标题 | 年薪 |
按
Ctrl + F3激活数据元素。
任务 3: 创建数据元素和域
为员工编号创建数据元素(建议名称:Z##_EMPLOYEE_ID,其中 ## 是您的组编号)。使用向前导航创建域。为域指定与数据元素相同的名称。确保员工编号的长度为 6 个字符且仅包含数字。
步骤
创建新数据元素
Z##_EMPLOYEE_ID。在项目浏览器视图中,展开您的包,然后右键单击字典以打开上下文菜单。
选择 新→数据元素 。
确认包,输入名称
Z##_EMPLOYEE_ID、描述员工编号并选择 下一步 。将新对象分配到传输请求,然后选择完成。
使用向前导航为此数据元素创建新域。使用与数据元素相同的名称。
在类别字段中,保留建议的值**
域**。在类型名称字段中,输入
Z##_EMPLOYEE_ID。打开编辑器下的问题视图。
结果
现在,您应该会看到错误消息
没有活动域 Z##_EMPLOYEE_ID
。
4. 选择标签 类型名称 以创建新域。
5. 在对话窗口中,输入您的包,确认域名,然后输入描述(建议值:员工编号)。然后选择下一步。
3. 将域类型设置为 NUMC,将长度设置为 6。
在数据类型字段中输入
NUMC,然后在长度字段中输入6。激活域并返回到数据元素。
按
Ctrl + F3激活新域。选择含数据元素的标签。
维护数据元素
Z##_EMPLOYEE_ID的字段标签并激活数据元素。在字段标签部分中,输入以下数据: | 字段 | 值 | | --- | --- | | 短 | 员工 | | 中 | 员工编号 | | 长整型 | 员工编号 | | 标题 | 员工编号 |
按
Ctrl + F3激活数据元素。