最近幾天,SAP S4 2020對應的ABAP 7.55的新版文件已經出現。本文翻譯了ABAP SQL之外的更新部分。ABAP SQL的更新比較長,會再之後單獨成篇。
譯者水平有限,如有錯誤,請評論指出,謝謝。
本文連結:https://www.cnblogs.com/hhelibeb/p/13830356.html
轉載請註明
Data Types
1. Indicator structures
TYPES
語句有了新的附加選項[INDICATORS]
,可以為給定的結構型別定義一個indicator structure子結構。indicator structure可以在ABAP SQL讀寫語句中用作ABAP SQL indicator。
-
示例程式碼,注意<wa>-ind-price指定了需要更新的欄位。這類似於BAPI中的DATAX欄位。
TYPES wa TYPE sflight WITH INDICATORS ind. DATA itab TYPE TABLE OF wa WITH EMPTY KEY. SELECT carrid, connid, fldate, price FROM sflight WHERE carrid = char`LH` AND connid = numc`0400` AND fldate = @sy-datum INTO CORRESPONDING FIELDS OF TABLE @itab. IF sy-subrc = 0. LOOP AT itab ASSIGNING FIELD-SYMBOL(<wa>). <wa>-price *= '0.8'. <wa>-ind-price = '01'. ENDLOOP. UPDATE sflight FROM TABLE @itab INDICATORS SET STRUCTURE ind. ENDIF.
資料字典
1. Name Table的內部處理
name table (nametab)用於儲存有著資料字典型別的執行期物件。name table會持久化儲存在native資料庫表DDNTT和DDNTF中。
在新版本中,它的內部處理髮生了變化。
- 結果是:
- 不能再使用ABAP內部語句
EXPORT NAMETAB
,使用它會導致執行期錯誤。 - 考慮到向下相容性,
IMPORT NAMETAB
依然得到了部分支援。訪問DDIC Table型別會導致執行期錯誤。其它訪問會導致ATC錯誤。 - 先前用於儲存欄位描述的的native資料庫表DDNTF會被刪除,不再得到支援。
- 不能再使用ABAP內部語句
原始連結:https://help.sap.com/doc/abapdocu_755_index_htm/7.55/en-US/index.htm?file=abennews-755-ddic.htm
ABAP CDS
1. 在projection檢視中定義association
現在可以在projection檢視中定義到外部資料來源的association了。
2. CDS view entities
新的CDS檢視型別:CDS view entities。
CDS view entities是CDS DDIC-based views (DEFINE VIEW)的增強,它們服務於相同的目的,有同樣的結構,但是提供不同的優點。
計劃在未來使用CDS view entities代替CDS DDIC-based views。使用DEFINE VIEW ENTITY
定義CDS view entities。
原始連結:https://help.sap.com/doc/abapdocu_755_index_htm/7.55/en-US/index.htm?file=abennews-755-abap_cds.htm
Sessions
1. ABAP sessions的數量
配置檔案引數rdisp/max_alt_modes
決定了每個使用者的最大ABAP sessions數量。它的預設值已經從6增大為16,16也是系統允許設定的最大值。
表示式和函式
1. 構造運算子REDUCE中的計算賦值
在建構函式運算子REDUCE
的加法NEXT
後面的賦值中,現在可以使用計算賦值運算子=、=、*=、/或&&=,並且適用各自的規則。
字元處理
1. 支援Perl相容正則
除了現有的對POSIX正則的支援,現在ABAP支援PCRE正則,通過PCRE2庫進行處理,這是在ABAP Kernel實現的。可以通過和使用POSIX正則一樣的方式使用PCRE正則。
- 區分方式是:
相比POSIX正則,PCRE正則更加強大,也有著更好的效能。更多資訊,參考Regular Expressions.
2. 逐字替換
REPLACE語句的新附加項VERBATIM
可以使替換字串的所有字元按字面使用。通過此附加項,正規表示式字串將不會有特殊意義。
- 例子,其中2與3有同樣的效果,但
VERBATIM
的效能更好。
DATA(text1) = `123XXX456`. DATA(text2) = text1. DATA(text3) = text1. DATA(regex) = `(\d*)(\D*)(\d*)`. REPLACE PCRE regex IN text1 WITH `$1___$3`. REPLACE PCRE regex IN text2 WITH `$1___$3` VERBATIM. REPLACE PCRE regex IN text3 WITH `\$1___\$3`. cl_demo_output=>display( |{ text1 }\n{ text2 }\n{ text3 }| ).
3. 新的可捕捉異常CX_SY_STRING_SIZE_TOO_LARGE
過去,導致string超過最大長度的操作總是會導致執行期錯誤STRING_SIZE_TOO_LARGE
。現在,會觸發可以處理的異常CX_SY_STRING_SIZE_TOO_LARGE
。
在條件滿足的情況下,對於語句CALL TRANSFORMATION
,也可以處理該異常。
4. 用於decimal floating point number的金額格式化選項
現在,
也可以用於decimal floating point number。
原始連結:https://help.sap.com/doc/abapdocu_755_index_htm/7.55/en-US/index.htm?file=abennews-755-strings.htm
ABAP CDS訪問控制
待施工
異常處理
1. 宣告CX_NO_CHECK異常
CX_NO_CHECK
類別的異常現在總是在介面中被隱式地宣告,並且總是被傳播。
現在也可以在程式介面中通過RASING
宣告CX_NO_CHECK
異常。比如對於methods。這樣就可以記錄可能出現的這種異常,以及將現有異常的類別更改為CX_NO_CHECK
,而不導致介面的語法錯誤。