ABAP include structure 的一個具體用法

JerryWang_汪子熙發表於2023-01-10

在客戶系統中使用 append structure 增強 SAP 結構或 SAP 表,這種行為並不構成修改(modification)。這一點在 SAP 官網 得到確認。

為客戶系統中的 SAP 物件建立的附加結構,位於客戶名稱空間(或特殊開發專案合作伙伴的名稱空間)中,因此不會被升級覆蓋。

SAP 建議客戶的增強開發,也使用來自客戶名稱空間的名稱建立這種型別的追加結構的元件,以避免命名衝突。升級後,關聯的附加結構將再次附加到 SAP 修改的表中。

結構的元件可以透過在 ABAP 字典中包含其他結構的元件來定義,包括資料庫表或檢視。 這些被包含的結構被稱為include結構(或簡稱includes)。 從技術角度看,include結構被include的結構引用了被include的結構,每當這個結構發生變化時,都會相應地修改。 包含結構本身可以包含包含結構,最大巢狀深度為九個包含。

下圖的 CRMT_ORDERADM_H_EXT 就是一個 include structure:

這個 include structure 裡又包含了兩層巢狀的 include structure,如下圖黃色區域所示:

  • CRMT_ORDER_EDIT_INFO
  • INCL_EEW_ORDERADM_H

當一個 include structure 被包含到一個已有結構時,並沒有建立子結構,這意味著 include structure 裡的元件欄位被插入,就好像它們是在這個位置單獨指定的一樣,並且它們像直接定義的元件一樣被處理。 可以根據需要組合常規元件和包含結構。

當一個結構作為包含結構被包含時,它可以被分配一個組名和一個三字元字尾。

  • 在 ABAP 程式中,組的名稱是引用結構宣告的資料物件的附加定址選項。 所包含結構的所有元件都可以使用此名稱一起定址,或者可以使用名稱後的結構元件選擇器 (-) 定址單個元件。
  • 在元件名稱後附加一個字尾以重新命名每個元件並避免元件之間的命名衝突。 包含在帶有字尾的結構中的包含結構的元件的原始名稱不能超過 27 個字元。

ABAP 系統裡的 demo structure DEMO_WEEK, 演示了組名和三字元字尾的一個例子:

在這個結構裡,它重複包含了五次 include structure DEMO_DAY.

DEMO_DAY 裡,包含兩個欄位 work 和 free,但是這兩個欄位透過 DEMO_DAY 這個 include structure 被包含到 DEMO_WEEK 之後,透過三字元字尾,

就產生了獨一無二的命名:WORK<三字元字尾>,比如 WORK_MO, WORK_TU 等等。

相關文章