SEGW创建服务ZCRUD_DEMO。SE代表Editor,GW代表Gateway。
我们可以用表ZTEST_CRUD_TABLE作为EntityType,创建一个叫做EtPersonSet的EntitySet,并且设置键值、支持的操作类型等。
Association分类下面,可以创建EntitySet间的映射关系,而Service Implementation下面,则有实现增删改查的方法,我们需要在这些方法中Redefine自己的代码,重写的类以EXT为结尾即extension的意思。
本文主要讲增删改查时URI的格式以及注意事项,并未列出重写方法的代码,因为这些代码本质上都是SQL语句,如下面通过Filter作为WHERE条件进行查询的语句。
其中键值的用法如下,这是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激活服务。
原文:https://www.cnblogs.com/Intercalaryland/p/11098308.html