原文連結:Introducing the Programming Model
在這個章節中,將介紹ABAP中如使用RESTful API,提供程式增刪改查及驗證等功能的介面。
這張將透過建立一個OData UI 應用程式來學習,該程式提供了更改航班價格的服務。
在ADT中,File > New > Other
尋找要新增的物件,在欄位中搜尋database table
並按下一步。
填入表格名稱並賦值給一個package,在命名時,自定義表格須以Z開頭;A開頭則是active table,為儲存資料時存放的表格;D開頭則為草稿資料,存放不完整的資料等待以後再處理。命名完成,點擊Next
選擇合適的request並按下Finish
在表格定義中,為每一列指定名稱與資料型別,在大括號中用<欄位名稱>:<資料型別>
的方式來定義欄位。型別上可以使用基礎的內建型別,如果資料型別的定義不完整,需要在型別後的括號中提供欄位長度,例如abap.char(10)
或abap.dec(15,2)
。
如下例,欄位的型別也使用data element,稍後會提及。
@EndUserText.label: 'Flight Connections'
@AbapCatalog.enhancement.category #NOT_EXTENSIBLE
@AbapCatalog.tableCategory: #TRANSPARENT
@AbapCatalog.deliveryClass: #A
@AbapCatalog.dataMaintenance #RESTRICTED
define table zs4d400aconn {
key client : abap.clnt not null;
key uuid : sysuuid_x16 not null;
carrid : /dmo/carrier_id;
connid : /dmo/connection_id;
airport_from : /dmo/airport_from_id;
city_from : /dmo/city;
country_from : land1;
airport_to : /dmo/airport_to_id;
city_to : /dmo/city;
country_to : land1;
"系統管理欄位"
local_created_by : abp_creation_user;
local_created_at : abp_creation_tstmpl;
local_last_changed_by : abp_locinst_lastchange_user;
local_last_changed_at : abp_locinst_lastchange_tstmpl;
last_changed_at : abp_lastchange_tstmpl;
}
data element
如果欄位不使用內建型別,亦可以使用data element
,data element
是ABAP Dictionary物件中定義欄位的型別,例如id或者航班代碼等。Data element除了型別的技術定義,也包含了欄位標籤這類的語意資訊。如果用Data element來定義欄位型別,系統會在UI上自動使用欄位標籤。
如下圖,在設定Data element的視窗中,在airline
的定義為長度為3的character。
1.建立data element
一樣從File > New > Other
建立data element,選擇合適的request。
2.定義data element型別
接著指定data element的型別,在此復用既有的domain/DMO/CITY
,domain視為記錄了長度與基礎型別(integer,char之類的)的技術型定義。注意,這種復用方式代表兩個data element都使用了同一個domain,變更該domain將會連帶變更所有使用它的data element。
輸入短、中、長的欄位標籤以及用於資料列標題的標籤,當建立Fiori app時,系統將自動套用標籤文字。
"欄位定義開頭"
key client : abap.clnt not null;
key uuid : sysuuid_x16 not null;
每張自訂一的表格都需要帶有一個主鍵(primary key),並至於欄位定義的開頭,用來對每一筆資料進行唯一識別。
而表格中的第一個欄位,必須是client
欄位,且資料型別必須為abap.clnt.
。另外,本例用了UUID密鑰作為了唯一識別的欄位,當欄位型別為sysuuid_x16
,建立新紀錄時會自動指派UUID。
local_created_by : abp_creation_user;
local_created_at : abp_creation_tstmpl;
local_last_changed_by : abp_locinst_lastchange_user;
local_last_changed_at : abp_locinst_lastchange_tstmpl;
last_changed_at : abp_lastchange_tstmpl;
如上例,為了讓表格的的操作紀錄可追溯,建議可以把相關管理紀錄跟資料一起存在表格,例如創建或更改資料的使用者,以及創建和最後更改的時間戳記等。
特別像是local_last_changed_at
以及 last_changed_at
這兩個欄位中在RESTful API中,可以用於並行處理的控制。
RESTful應用程式不存在狀態,僅透過排他性鎖定無法保正資料的一致性,在設置RESTful應用時應混合使用獨占性鎖定與ETag,避免資料不一致。
ETag欄位會隨著每次資料更新而變更值,可以透過比較ETag欄位來確保資料是否被變更,如最後變更的時間戳記就很適合拿來做為ETag。
如上圖,在ADT中按F3啟用資料表,系統也會創建實體表格。完成此步驟就可以開始為應用程式產生需要的額外物件。
註:這裡為了完成範例,有一個複製資料表/LRN/S4D400_APT
的流程,發現搜不到該表。
後來發現需要購買官方訓練環境才有這張表......所以跳過此流程,後續操作截圖有部分將會直接用SAP learning裡的,詳見相關討論參考
明天接著介紹物件生成器!