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 Dictionary

引用變數

宣告引用變數的語法如下:

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 結構的各個欄位可以透過使用“SYST-”或“SY-”來訪問。

示例

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
廣告