SAP ABAP - 变量

  • 简述

    变量是命名的数据对象,用于在程序分配的内存区域中存储值。顾名思义,用户可以借助ABAP语句来更改变量的内容。ABAP中的每个变量都有一个特定的类型,它决定了变量内存的大小和布局;该内存中可以存储的值的范围;以及可以应用于变量的操作集。
    您必须先声明所有变量,然后才能使用它们。变量声明的基本形式是 -
    
    DATA <f> TYPE <type> VALUE <val>. 
    
    这里<f>指定变量的名称。变量名称的长度最多为 30 个字符。<type> 指定变量的类型。任何具有完全指定的技术属性的数据类型都称为<type>。<val> 指定<f> 变量的初始值。如果定义基本固定长度变量,DATA 语句会自动使用特定于类型的初始值填充变量的值。<val> 的其他可能值可以是文字、常量或显式子句,例如 Is INITIAL。
    以下是变量声明的有效示例。
    
    DATA d1(2) TYPE C.  
    DATA d2 LIKE d1.  
    DATA minimum_value TYPE I VALUE 10. 
    
    在上面的代码片段中,d1是C类型的变量,d2是d1类型的变量,minimum_value是ABAP整数类型I的变量。
    本章将解释 ABAP 中可用的各种变量类型。ABAP 中有三种变量 -
    • 静态变量
    • 参考变量
    • 系统变量
  • 静态变量

    • 静态变量在子例程、功能模块和静态方法中声明。
    • 生命周期与声明的上下文相关联。
    • 使用“CLASS-DATA”语句,您可以在类中声明变量。
    • “PARAMETERS”语句可用于声明链接到选择屏幕上的输入字段的基本数据对象。
    • 您还可以使用“SELECT-OPTIONS”语句声明链接到选择屏幕上的输入字段的内部表。
    以下是命名变量时使用的约定 -
    • 不能使用“t”和“,”等特殊字符来命名变量。
    • 预定义数据对象的名称无法更改。
    • 变量的名称不能与任何 ABAP 关键字或子句相同。
    • 变量的名称必须传达变量的含义,无需进一步注释。
    • 连字符被保留来表示结构的组成部分。因此,您应该避免变量名称中使用连字符。
    • 下划线字符可用于分隔复合词。
    该程序展示了如何使用 PARAMETERS 语句声明变量 -
    
    REPORT ZTest123_01. 
    PARAMETERS: NAME(10) TYPE C, 
    CLASS TYPE I, 
    SCORE TYPE P DECIMALS 2, 
    CONNECT TYPE MARA-MATNR. 
    
    这里,NAME代表10个字符的参数,CLASS指定整数类型参数,默认大小以字节为单位,SCORE代表压缩类型参数,值最多两位小数,CONNECT指ABAP字典的MARA-MATNF类型。
    上面的代码产生以下输出 -
    ABAP词典
  • 参考变量

    声明引用变量的语法是 -
    
    DATA <ref> TYPE REF TO <type> VALUE IS INITIAL. 
    
    • REF TO 加法声明了一个引用变量 ref。
    • REF TO 之后的规范指定了引用变量的静态类型。
    • 静态类型限制 <ref> 可以引用的对象集。
    • 引用变量的动态类型是它当前引用的数据类型或类。
    • 静态类型总是更通用或与动态类型相同。
    • TYPE 添加用于创建绑定引用类型并作为起始值,VALUE 添加后只能指定 IS INITIAL。

    例子

    
    CLASS C1 DEFINITION. 
    PUBLIC SECTION. 
    DATA Bl TYPE I VALUE 1. 
    ENDCLASS. DATA: Oref TYPE REF TO C1 , 
    Dref1 LIKE REF TO Oref, 
    Dref2 TYPE REF TO I . 
    CREATE OBJECT Oref. 
    GET REFERENCE OF Oref INTO Dref1. 
    CREATE DATA Dref2. 
    Dref2→* = Dref1→*→Bl.
    
    • 在上面的代码片段中,声明了一个对象引用Oref和两个数据引用变量Dref1和Dref2。
    • 两个数据引用变量都是完全类型化的,并且可以在操作数位置使用解引用运算符 →* 来解引用。
  • 系统变量

    • ABAP 系统变量可从所有 ABAP 程序访问。
    • 这些字段实际上是由运行时环境填充的。
    • 这些字段中的值指示系统在任何给定时间点的状态。
    • 您可以在 SAP 的 SYST 表中找到系统变量的完整列表。
    • 可以使用“SYST-”或“SY-”访问 SYST 结构的各个字段。

    例子

    
    REPORT Z_Test123_01. 
    WRITE:/'SY-ABCDE', SY-ABCDE,       
          /'SY-DATUM', SY-DATUM, 
          /'SY-DBSYS', SY-DBSYS, 
          /'SY-HOST ', SY-HOST, 
          /'SY-LANGU', SY-LANGU,
          /'SY-MANDT', SY-MANDT,
          /'SY-OPSYS', SY-OPSYS,
          /'SY-SAPRL', SY-SAPRL,
          /'SY-SYSID', SY-SYSID,
          /'SY-TCODE', SY-TCODE,
          /'SY-UNAME', SY-UNAME,
          /'SY-UZEIT', SY-UZEIT.
    
    上面的代码产生以下输出 -
    
    SY-ABCDE ABCDEFGHIJKLMNOPQRSTUVWXYZ  
    SY-DATUM 12.09.2015 
    SY-DBSYS ORACLE                   
    SY-HOST sapserver 
    SY-LANGU EN 
    SY-MANDT 800 
    SY-OPSYS Windows NT 
    SY-SAPRL 700 
    SY-SYSID DMO 
    SY-TCODE SE38 
    SY-UNAME SAPUSER 
    SY-UZEIT 14:25:48