一个通过URI对Odata进行增删改查的简单例子

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激活服务。

猜你喜欢

转载自www.cnblogs.com/Intercalaryland/p/11098308.html