使用字典对象作为数据类型

学习目标

  • 将字典对象的使用描述为数据类型。

字典对象作为数据类型

在本课程的上一单元中,介绍了如何使用数据库表类型的字典对象来定义数据库中的表。还显示了如何使用数据元素指定表字段的技术和语义属性。最后,创建结构类型的字典对象并将其包含在数据库表的字段列表中。

所有三种字典对象类型(数据元素数据库表和**结构)也可以用作变量、方法参数等的数据类型。

注意

无法将域用作数据类型。域仅用作数据元素的基础。

表类型 类型的字典对象与数据库表的定义无关。其唯一用途是在 ABAP 编码中用作数据类型。

数据类型的性质相当明显。数据元素是标量类型,结构是结构类型,表类型是内部表的类型。唯一的意外可能是数据库表的性质。

当用作数据类型时,数据库表是结构类型。避免直接使用数据库表作为数据类型。

过去,ABAP 开发人员通常使用字典对象作为数据类型。这主要是因为全局数据类型没有真正的备选项,即系统中的任何 ABAP 代码中均可用的数据类型。当可以在全局类和接口中定义类型时,这会发生更改。全局类的公共类型和 接口中的类型与字典类型的可见性相同。它们也有优势:类和接口中的类型附带类或接口的上下文。字典类型仅具有其所属的包。

注意

避免定义仅用作数据类型的新字典对象,除非您依赖字典功能,如可扩展性或其他语义。请改用类和接口中的类型。

试用:字典对象作为数据类型

  1. 创建实施接口 IF_OO_ADT_CLASSRUN 的新全局类。

  2. 将以下代码片段复制到方法 if_oo_adt_classrun~main() 的实施部分:

* Declarations
*    DATA travel TYPE /dmo/travel_id.
*    DATA travel TYPE /dmo/s_travel_key.
*    DATA travel TYPE /dmo/travel.
*    DATA travel TYPE /dmo/t_travel.
* Assignments
travel = '123'.                              "elementary
travel = VALUE #(     travel_id = '123'   ). "structure
travel = VALUE #(  (  travel_id = '123' ) ). "table

在此编码中,数据对象差旅的注释声明使用不同的字典对象作为数据类型。 3. 从 其中一个 DATA 声明中移除注释。三个值分配中的哪一个会导致语法错误?这说明了数据对象的性质是什么? 4. 在 DATA 声明中,将光标置于数据类型上,然后使用 工具提示描述 (功能键 F2 )查找字典对象的类型。 5. 依次对其他 DATA 声明重复上述步骤。

作为数据类型的数据元素

数据库表定义中使用的所有数据元素也可以用作数据类型。反之亦然。存在以下异常:

含参考类型的数据元素

从技术上讲,无法使用参考类型键入数据库表的字段。数据库表定义中不允许使用参考类型的数据元素。

具有预定义类型的数据元素

定义数据库表时,强烈建议使用引用域的数据元素。直接使用预定义类型的数据元素不应在数据库表定义中使用,即使技术上可行。