SEGW創建服務ZCRUD_DEMO。SE代表Editor,GW代表Gateway。
我們可以用表ZTEST_CRUD_TABLE作為EntityType,創建一個叫做EtPersonSet的EntitySet,並且設置鍵值、支持的操作類型等。
Association分類下面,可以創建EntitySet間的映射關系,而Service Implementation下面,則有實現增刪改查的方法,我們需要在這些方法中Redefine自己的代碼,重寫的類以EXT為結尾即extension的意思。
本文主要講增刪改查時URI的格式以及注意事項,並未列出重寫方法的代碼,因為這些代碼本質上都是SQL語句,如下面通過Filter作為WHERE條件進行查詢的語句。
創建對象后,記得按紅色圓圈,以創建run time object。
其中鍵值的用法如下,這是GET查詢操作:
/sap/opu/odata/SAP/ZCRUD_DEMO_SRV/EtPersonSet(Zid='1')?$format=json
SAP Gateway Client效果如圖(該工具說明見后方):
Filter用法如下,依然是GET操作:
/sap/opu/odata/SAP/ZCRUD_DEMO_SRV/EtPersonSet?$filter=( Zid eq '1' or Zid eq '10' )
SAP Gateway Client效果如圖(該工具說明見后方):
系統不會自動解析Filter里的字符串,我們需要用動態SQL把iv_filter_string作為WHERE條件,注意,雖然我們可以用TO_UPPER()將字符串變成大寫,但實踐證明不用大寫字符串也能正常運行。
Filter還支持一些特殊用法:
filter=substringof('1',SalesOrder) or startswith(SalesOrder,'2')
這里的意思是找出包含’1’的SalesOrder,或以’2’開頭的SalesOrder。
創建需要用POST方法,URI寫法如下,注意不要用format參數:
/sap/opu/odata/SAP/ZCRUD_DEMO_SRV/EtPersonSet
除了URI,我們還需要在body里增加要創建的值
{
"Zid": "10",
"Zname": "testname",
"Zphone": "",
"Zaddress": ""
}
可以看到表內增加了一行:
UPDATE需要PUT方法,URI寫法如下:
/sap/opu/odata/SAP/ZCRUD_DEMO_SRV/EtPersonSet(Zid='10')
Body部分如下:
{
"Zid": "10",
"Zname": "testname",
"Zphone": "1",
"Zaddress": "1"
}
可以看到對應行更新了
刪除需要DELETE方法,URI寫法如下:
/sap/opu/odata/SAP/ZCRUD_DEMO_SRV/EtPersonSet(Zid='10')
可以看到id為10的行不見了
SAP Gateway Client說明如下:
如果采用嵌入式Gateway Hub,那么服務已經直接發布成功了。如果采用非嵌入式Gateway Hub,則還需要去事務代碼/n/IWFND/MAINT_SERVICE激活服務。