定义域和数据元素

学习目标

  • 描述定义数据库表时数据元素和域的使用。

  • 创建域。

  • 创建数据元素。

数据库表、数据元素和域

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

步骤

  1. 创建新域 Z##_AMOUNT

  2. 在项目浏览器视图中,右键单击包以打开上下文菜单。

  3. 选择 新建其他 ABAP 资源库对象

  4. 在显示的对话框窗口的搜索字段中输入 doma

  5. 选择,然后选择下一步

  6. 确认包,输入名称 Z##_AMOUNT 和描述**金额**,然后选择下一步

  7. 将新对象分配到传输请求,然后选择完成

  8. 将域的数据类型设置为 CURR,长度为 15 位和 2 位小数。

  9. 将光标放在数据类型字段上,然后按 **Ctrl + 空格**键。

  10. 从建议清单中选择 CURR 并按**回车**。

结果

将显示两个输入字段: 长度 和小 数 。 3. 在长度字段中输入 15,在小数字段中输入 2。 3. 激活域。

  1. Ctrl + F3 激活开发对象。

任务 2: 创建数据元素

创建基于域的数据元素(建议名称:Z##_ANNUAL_SALARY,其中 ## 是您的组编号)。

步骤

  1. 创建新的数据元素 Z##_ANNUAL_SALARY

  2. 在项目浏览器视图中,展开您的包,然后右键单击字典以打开上下文菜单。

  3. 选择 数据元素

  4. 确认包,输入名称 Z##_ANNUAL_SALARY 和描述**年薪**,然后选择下一步

  5. 将新对象分配到传输请求,然后选择完成

  6. 让数据元素使用域 Z##_AMOUNT

  7. 类别下,保留建议值****。

  8. 类型名称下输入 Z## ,其中 ## 是您的组编号,然后按 **Ctrl + 空格**键。

  9. 从建议清单中选择 Z##_AMOUNT

  10. 维护字段标签并激活数据元素。

  11. 字段标签部分中,输入以下数据: | 字段 | 值 | | --- | --- | | 短 | Salary | | 中 | 年薪 | | 长整型 | 年薪 | | 标题 | 年薪 |

  12. Ctrl + F3 激活数据元素。

任务 3: 创建数据元素和域

为员工编号创建数据元素(建议名称:Z##_EMPLOYEE_ID,其中 ## 是您的组编号)。使用向前导航创建域。为域指定与数据元素相同的名称。确保员工编号的长度为 6 个字符且仅包含数字。

步骤

  1. 创建新数据元素 Z##_EMPLOYEE_ID

  2. 在项目浏览器视图中,展开您的包,然后右键单击字典以打开上下文菜单。

  3. 选择 数据元素

  4. 确认包,输入名称 Z##_EMPLOYEE_ID 、描述 员工编号 并选择 下一步

  5. 将新对象分配到传输请求,然后选择完成

  6. 使用向前导航为此数据元素创建新域。使用与数据元素相同的名称。

  7. 类别字段中,保留建议的值****。

  8. 类型名称字段中,输入 Z##_EMPLOYEE_ID

  9. 打开编辑器下的问题视图。

结果

现在,您应该会看到错误消息 没有活动域 Z##_EMPLOYEE_ID 。 4. 选择标签 类型名称 以创建新域。 5. 在对话窗口中,输入您的包,确认域名,然后输入描述(建议值:员工编号)。然后选择下一步。 3. 将域类型设置为 NUMC,将长度设置为 6

  1. 数据类型字段中输入 NUMC,然后在长度字段中输入 6

  2. 激活域并返回到数据元素。

  3. Ctrl + F3 激活新域。

  4. 选择含数据元素的标签。

  5. 维护数据元素 Z##_EMPLOYEE_ID 的字段标签并激活数据元素。

  6. 字段标签部分中,输入以下数据: | 字段 | 值 | | --- | --- | | 短 | 员工 | | 中 | 员工编号 | | 长整型 | 员工编号 | | 标题 | 员工编号 |

  7. Ctrl + F3 激活数据元素。