技术开发 频道

ABAP实例:Data Reference的使用

【IT168 技术文章】

    Data References(只能指向ABAP定义的基本数据或者基本数据组合体)
    1、定义数据参考变量(Data References) DATA dref TYPE REF TO DATA.(指向任意类型,但在创建时必须指定对象类型) DATA dref TYPE REF TO DATA_TYPE. 或者 TYPES t_dref TYPE REF TO DATA. DATA dref TYPE t_dref. 在完成地址变量定义时,变量没有指向任何对象,此时你不可引用。只有在变量赋值后在引用。地址变量的赋值有两种方法: CREATE DATA GET REFERENCE OF dobj INTO dref.
    2、动态创建数据参考的内存空间(CREATE DATA) CREATE DATA dref {TYPE type}|{LIKE dobj}这种语句创建的对象没有名称,只有地址变量指向该内存变量;在申明参考变量时,未指定类型则必须加{TYPE type}|{LIKE dobj}说明。有时需要动态创建动态类型数据对象,语法如下 CREATE DATA dref TYPE (name).
    3、将数据地址赋值给数据参考变量(GET REFERENCE) GET REFERENCE OF dobj INTO dref.
    4、访问数据参考变量指定的数据
    访问数据参考变量指定的数据有两种情况:
     1) 对于使用DATA dref TYPE REF TO DATA_TYPE来声明的数据参考变量,程序可以直接通过->*运算符直接访问数据;
    代码样例

types: begin of STRUC_1,
                 A type I,
                 B type ref to SFLIGHT,
                 C type P,
               end of STRUC_1.
        data: S1 type STRUC_1.
        types: begin of STRUC_2,
                 X(
10) type C,
                 Y     type ref to STRUC_1,
                 Z     type I,
               end of STRUC_2.
        data:  S2 type STRUC_2,
               R2 type ref to STRUC_2.
        
if S1-A > 10.
          create data S1
-B.
          S1
-B->CARRID = 'LH'.
          S1
-B->PAYMENTSUM = 1000.
        endif. S2
-Y->A   = 100.
        S2
-Y->*-A = 200. "Same as S2-Y->A  
        S2-Y->B->FLDATE = SY-DATUM.  

 
    2) 对于使用DATA dref TYPE REF TO DATA来声明的数据参考变量,程序如果要访问数据参考变量指定的数据,你首先要将数据参考变量赋值给一个字段符号(Field sysbol)(是不能直接通过数据参考变量来访问的).如果数据参考变量为初始化状态, sy-subrc就返回4。 ASSIGN dref->* TO <fs> [CASTING ...].
    代码样例 

DATA: numref     TYPE REF TO DATA,
              number     TYPE I VALUE
123.
        FIELD
-SYMBOLS: <fs> TYPE ANY.
        GET REFERENCE OF number INTO numref.
        ASSIGN numref
->* TO <fs>.
0
相关文章