2013-12-17 47 views

回答

6

有在ABAP枚舉沒有原生支持,但你可以模擬與幾個簡單的步驟相同的行爲:

  1. 創建「枚舉」類;
  2. 將實例構造函數設置爲private;
  3. 爲每個「枚舉對象」添加TYPE REF TO <your_class>的靜態屬性;
  4. 創建一個CLASS_CONSTRUCTOR並用所需的屬性實例化每個「枚舉對象」。

舉例來說,如果你有一個狀態枚舉,你可能有一個CL_STATUSCL_STATUS=>APPROVEDCL_STATUS=>REJECTED枚舉對象。

+0

你會做同樣的本地枚舉嗎? (例如在報告中),那麼創建局部常量就不那麼複雜了。還是我錯了? – inetphantom

+1

如果您需要的只是不同的值,例如狀態'A'的標誌爲已批准,'R'標誌爲已拒絕,則通過將其設爲枚舉而不是常數,沒有實際收益。但是如果你想添加行爲到這些標誌,這樣一個方法來決定文檔是否應該被處理,那麼enum對象是最好的,因爲代碼可以簡單地執行'lo_status-> is_valid_for_processing()'而不用擔心哪個狀態是有效與否,將此邏輯封裝在狀態類中。如果你使用常量,那麼許多IF可能會被複制到這個相同邏輯的代碼中。 – MichelHenrich

0

不,沒有辦法在ABAP中創建一個枚舉。雖然枚舉在編譯時被檢查,但域顯然不可以 - 域和使用它的程序可以被修改並完全獨立運輸。

最接近你會得到的是使用域對域值驗證任何數據,在許多情況下手動驗證(正如你指出的,經典的dynpro屏幕會自動檢查並檢查固定值 - for無論如何CHAR和NUMC)。

0

一個稍微接近的方法是使用以下;

常數:開始的狀態, 型式認可我的價值01, 拒絕I型值02,狀態 結束。

所以現在,你在整個程序中使用這個常量。如果你想讓它們成爲全局的,那麼在全局類中創建它們作爲類屬性。

2

從ABAP release 7.51中也可以使用ABAP中的枚舉。 看到這blog欲瞭解更多信息

相關問題