您好,
在我的上一个博客中,服务器租用,我解释了字段符号,下面是相同的链接:
https://blogs.sap.com/2017/09/05/dynamic-programming-in-abap-part-1-introduction-to-field-symbols/
在本博客中,好评返现卡,我将解释数据引用及其在动态规划中的意义。
根据SAP文档,数据引用可以指向任何数据对象或其部分(组件、内部表的行或由偏移量和长度指定的节)。
因此数据引用只不过是指针。它存储任何数据对象的内存地址。但要访问数据引用所指向的实际数据对象,我们首先需要使用解引用运算符->*。
字段符号和数据引用之间的区别:
字段符号是数据对象的占位符,它被分配给数据对象,并指向数据对象的内容,因此它可以在任何操作数位置使用(无需解引用),并与数据对象的内容一起工作引用的内存区域(值语义)。
数据引用是指向数据对象的指针,它包含数据对象的内存地址(引用语义)。数据引用不能直接用于操作数位置,应先解除引用。
使用数据引用:
数据引用可以有两种类型:
类型化数据引用泛型数据引用
类型化数据引用:
类型化数据引用变量可以声明为:
这里的第一个语句声明了一个引用变量lr\u num,它可以指向"i"类型的任何数据对象。第二条语句创建了一个类型为"i"的匿名数据对象,并将该数据对象的引用赋给lr\u num。现在,如果我们要更改数据对象的值,可以使用dereference操作符->*取消lr\u num的引用,如下所示:
输出为2。
注意:
使用ABAP7.40,新的运算符还可用于创建匿名数据对象并将其引用指定给数据引用变量。
将现有数据对象指定给数据引用:
如果要将现有数据对象的引用指定给数据引用,免费自助建站软件,您可以使用GET REFERENCE语句。
这里的lv\u num是一个现有的数据对象(不是匿名数据对象)。输出为4.
注:
使用ABAP 7.40,而不是GET REFERENCE,REF运算符也可用于将现有数据对象的引用指定给数据引用。
使用结构:
这里可以使用数据引用变量上的->运算符访问结构的各个组件。
使用内部表:
处理内部表行时,我们可以使用REFERENCE INTO语句来设置对表行的引用,如下所示:
泛型数据引用:
泛型数据引用可以声明为:
这里第一个语句声明一个泛型数据引用lr\u num,它可以指向任何数据对象。第二个语句创建一个类型为"i"的匿名数据对象,并将其引用赋给lr\u num。
ABAP中的'data'是泛型数据类型。
现在由于lr\u num是泛型的,所以lr\u num->*不能直接用于操作数位置。因此,不允许使用下面的语句。
因此,在通用数据引用的情况下,只能使用字段符号取消引用,此字段符号可在任何操作数位置用于操作数据对象的值,如下所示:
注意:
在ASSIGN语句后,您应检查sy subrc如果字段符号赋值成功,返利手游,sy subrc将为0,否则将为4。
使用结构:
此处CREATE data语句创建匿名数据对象(MARA结构)并将其引用指定给通用数据引用lr泷u str,然后可以将其解引用为通用字段符号。现在,要访问MARA结构的单个组件,物联网协议,可以使用ASSIGN COMPONENT语句。
动态创建数据对象:
要求:选择屏幕参数"Table Name"将以表格名称作为输入,并显示相应的表格条目作为输出。
解决方案:
说明:
此处lr\ U tab是通用数据引用,是内部表格的通用字段符号。在CREATE DATA语句中,括号中提到了数据对象的类型,这意味着该类型将在运行时根据参数p\u tname的值确定。之后,我们将数据引用lr\u选项卡取消引用为通用字段符号。现在这个字段符号可以用来对内部表进行任何有效的操作。
数据引用和对象引用的区别:
有两种类型的引用变量:
数据引用和对象引用对象引用
数据引用变量可以存储对任何数据对象(变量、结构、内部表等)的引用,而对象引用变量可以存储对任何类对象的引用。
对于数据引用变量,可以指定泛型数据类型或完全指定的数据类型。对于对象引用变量,可以指定类或接口。
谢谢阅读。
在下一篇博客中,我举了一个动态规划方法的例子:
https://blogs.sap.com/2017/09/29/dynamic-programming-in-abap-part-3-an-example-abap-rtts/
学分:
https://help.sap.com/http.svc/rc/abapdocu\u 751\u index\u htm/7.51/en-US/abendata\u reference\u type.htm