原文連結:Using the Entity Manipulation Language
"讀取資料"
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)"
DATA input_keys TYPE TABLE FOR READ IMOPRT /DMO/I_AgencyTP.
"(從BO)回傳表格型別"
DATA result_tab TYPE TABLE FOR READ RESULT /DMO/I_AgencyTP.

想從BO讀取資料,需要使用READ ENTITIES語句,可以讀的包含了兩個internal table參數:一個參數包含了你想讀取的key及資料,另一個則包含了查詢結果。
這類的internal table有特殊的資料型別稱為"指派行為定義"的型別,系統會在使用者建立行為定義時,自動生成這些型別,並且包含BO的部分或全部欄位,以控制系統處理關於BO的特定需求。
如上例,可以在DATA宣告上述這兩個表格,並用TYPE TABLE FOR <operation>為表格指定是匯入型別還是回傳型別。

如上圖黃框中顯示的欄位,型別TABLE FOR READ IMPORT中會包含BO的鍵欄位或一般欄位,%control structure 是自動生成的structure,表示當前操作中實際用到了哪些欄位。
型別TABLE FOR READ RESULT則包含了BO中的所有欄位,這個表格將於讀入並執行完程式後,存入執行後的結果。
input_keys = VALUE #( (agencyID = '070050') ).
匯入表格的內容如下:
匯入表格包含了所有BO中的鍵欄位,以上例而言是agencyID,為了讀取特定機構的資料,在表格中賦予agencyID一行070050的資料值。
除了鍵欄位之外,還有%is_draft 和 %control 欄位。%is_draft決定是否要讀取草稿或active data,%controlstructure則是指定要讀入的欄位。
READ ENTITIES OF /DMO/I_AgencyTP "行為定義的名稱"
ENTITY /DMO/Agency"實體的名稱(或別名)"
ALL FIELDS "選擇欄位"
WITH input_keys "查詢參數的表格"
RESULT result_tab. "存入結果的表格"
處理BO時,使用READ ENTITIES OF 或MODIFY ENTITIES關鍵字時接上行為定義的名稱,ENTITY後則是接想運作的實體名稱,如果該實體有別名,請寫上別名。
回傳表格的內容如下:
READ ENTITIES語句會根據設置在WITH裡的鍵欄位讀取BO的資料,回傳結果將放置在RESULT後面的表格裡,亦可以在FIELDS指定需要的BO欄位。在上例中,使用ALL FIELDS存取所有欄位。
回傳表格包含了BO中的所有表格及控制欄位%is_draft,如果讀取時使用了ALL FIELDS會填入result的所有欄位,但若讀取的只有特定欄位,僅會在回傳表格填入對應欄位的值。

如果想要更新資料,可以宣告型別為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。
更新表格的內容如下:
注意,如果要在BO外使用EML,需要用COMMIT ENTITIES來觸發保存,以將資料存入資料庫中。
明天進入Restful API的章節~