原文連結: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,%control
structure則是指定要讀入的欄位。
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的欄位以及%control
structure。在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的章節~