iT邦幫忙

2024 iThome 鐵人賽

DAY 25
0
自我挑戰組

ABAP 基礎30天學習筆記系列 第 25

Day25_EML語法 & BO資料匯入、回傳與更新

  • 分享至 

  • xImage
  •  

原文連結:Using the Entity Manipulation Language

Entity Manipulation Language (EML)

"讀取資料"
READ ENTITIES
"增刪改資料"
MODIFY ENTITIES... UPDATE...
MODIFY ENTITIES... CREATE...
MODIFY ENTITIES... DELETE...

EML由可操作BO內資料的語句組成,用READ ENTITIES讀取資料,或者用READ ENTITIES來進行增刪改等操作。

僅能於行為定義有包含相應的use create``use update``use delete才可使用相關EML,否則將會產生語法錯誤。

匯入資料給BO / BO回傳資料

"匯入表格型別(到BO)"
DATA input_keys TYPE TABLE FOR READ IMOPRT /DMO/I_AgencyTP.

"(從BO)回傳表格型別"
DATA result_tab TYPE TABLE FOR READ RESULT /DMO/I_AgencyTP.

https://ithelp.ithome.com.tw/upload/images/20240919/20113802qVHa2v4lp4.png

想從BO讀取資料,需要使用READ ENTITIES語句,可以讀的包含了兩個internal table參數:一個參數包含了你想讀取的key及資料,另一個則包含了查詢結果。

這類的internal table有特殊的資料型別稱為"指派行為定義"的型別,系統會在使用者建立行為定義時,自動生成這些型別,並且包含BO的部分或全部欄位,以控制系統處理關於BO的特定需求。

如上例,可以在DATA宣告上述這兩個表格,並用TYPE TABLE FOR <operation>為表格指定是匯入型別還是回傳型別。

https://ithelp.ithome.com.tw/upload/images/20240919/20113802YqkfoPJx0B.png

如上圖黃框中顯示的欄位,型別TABLE FOR READ IMPORT中會包含BO的鍵欄位或一般欄位,%control structure 是自動生成的structure,表示當前操作中實際用到了哪些欄位。

型別TABLE FOR READ RESULT則包含了BO中的所有欄位,這個表格將於讀入並執行完程式後,存入執行後的結果。

TABLE FOR READ IMPORT 匯入資料

input_keys = VALUE #( (agencyID = '070050') ).

匯入表格的內容如下:
https://ithelp.ithome.com.tw/upload/images/20240919/20113802MnHsD7zpsQ.png

匯入表格包含了所有BO中的鍵欄位,以上例而言是agencyID,為了讀取特定機構的資料,在表格中賦予agencyID一行070050的資料值。

除了鍵欄位之外,還有%is_draft%control 欄位。%is_draft決定是否要讀取草稿或active data,%controlstructure則是指定要讀入的欄位。

TABLE FOR READ RESULT 回傳資料

READ ENTITIES OF  /DMO/I_AgencyTP "行為定義的名稱"
          ENTITY  /DMO/Agency"實體的名稱(或別名)"
          ALL FIELDS  "選擇欄位"
             WITH input_keys  "查詢參數的表格"
           RESULT result_tab. "存入結果的表格"

處理BO時,使用READ ENTITIES OFMODIFY ENTITIES關鍵字時接上行為定義的名稱,ENTITY後則是接想運作的實體名稱,如果該實體有別名,請寫上別名。

回傳表格的內容如下:
https://ithelp.ithome.com.tw/upload/images/20240919/20113802u0HUAZasVi.png
READ ENTITIES語句會根據設置在WITH裡的鍵欄位讀取BO的資料,回傳結果將放置在RESULT後面的表格裡,亦可以在FIELDS指定需要的BO欄位。在上例中,使用ALL FIELDS存取所有欄位。

回傳表格包含了BO中的所有表格及控制欄位%is_draft,如果讀取時使用了ALL FIELDS會填入result的所有欄位,但若讀取的只有特定欄位,僅會在回傳表格填入對應欄位的值。

更新BO資料

TABLE FOR READ UPDATE 更新資料

https://ithelp.ithome.com.tw/upload/images/20240919/20113802bx33ppsZpo.png

如果想要更新資料,可以宣告型別為TYPE TABLE FOR UPDATE的internal table,其包含了所有BO的欄位以及%controlstructure。在MODIFY ENTITIES之中,系統一樣會自動填值到%control structure中。

MODIFY ENTITIES OF /DMO/I_AgencyTP
            ENTITY /DOM/Agency
            UPDATE
            FIELDS ( name )
              WITH update_tab.
    
COMMIT ENTITIES.

MODIFY ENTITIES會更新在buffer中的資料,在FIELDS需要指定想更新的欄位,並於WITH後接上前述用於更新的internal table。

更新表格的內容如下:
https://ithelp.ithome.com.tw/upload/images/20240919/20113802YABBUCddFE.png

注意,如果要在BO外使用EML,需要用COMMIT ENTITIES來觸發保存,以將資料存入資料庫中。

明天進入Restful API的章節~


上一篇
Day24_Business Object 介紹
下一篇
Day26_ABAP RESTful API架構(上)_建立資料表
系列文
ABAP 基礎30天學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言