OData V2:oModel.update()-方法始终使用HTTP方法" POST"而不是" PUT"

2020-09-06 09:09发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好社区,

我正在开发一个简单的网络掩码,该掩码允许用户对游戏库(其中包含一些计算机游戏名称)进行CRUD操作。

技术背景:

  • IDE:HANA 2 SPS 03补丁0(内部版本4.3.23)的SAP Web IDE
  • SAPUI5前端
  • HANA数据库
  • OData Web服务(表:{#ID [Int,Primarykey Identity],GAME [String]})-使用XSJS

问题描述:

虽然按预期方式可以进行读取,插入和删除,但是我无法为基于在manifest.json中配置的xsodata服务的oModel使用update-Method。

情况:每当我触发oModel.update调用时,更新都不使用HTTP方法" PUT",而是使用" POST"。 当然,Web服务然后会返回以下错误消息:

该URI对POST操作无效。  URI必须指向用于POST操作的实体集。

我的请求:

 POST/xsodata/getGames.xsodata/games(17)HTTP/1.1
 内容长度:35
 主机:xsa.realcore.local:51059
 内容类型:application/json
 {
   " ID":17
   " GAME":" Quake 2"
 }
 

这当然是错误的,但是对于到目前为止已配置为更新方法的http方法,我没有任何影响:

 this._gameService = this._ownerComponent.getModel(" games");
 this._gameService.setDefaultBindingMode(sap.ui.model.BindingMode.TwoWay);
 this._gameService.setRefreshAfterChange(true);

 var that = this;
 this._gameService.setHeaders({
 " content-type":" application/json; charset = utf-8"
 });
 this._gameService.update("/img/games(" + gameObjectToSave.ID +")",
 gameObjectToSave,{
 成功:function(){
 that._readGames();
 that._oGameLibrary.refresh();
 },
 错误:function(e){
 console.log(e);
 }
 });
 

Manifest.json:

"数据源":{
 "游戏":{
 " uri":"/xsodata/getGames.xsodata",
 " type":" oData",
 "设置":{
 " odataVersion":" 2.0"
 }
 }
 }
 ....
 "游戏":{
 " dataSource":"游戏",
 " type":" sap.ui.model.odata.v2.ODataModel",
 " preload":是的,
 "设置":{
 " odataVersion":" 2.0",
 " useBatch":否
 }
 }
 .... 


可能的解决方法,但是很糟糕:

解决此问题的一种方法是使用不推荐使用的ODataModel版本:

" type":" sap.ui.model.odata.ODataModel",

(有关弃用的信息可以在openui5的api文档中找到。)

但是我想使用ODataModel版本2。在V1中,它以某种方式起作用,并且更新按预期使用了" PUT"方法。

有什么想法吗?

亲切的问候

马克

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好社区,

我正在开发一个简单的网络掩码,该掩码允许用户对游戏库(其中包含一些计算机游戏名称)进行CRUD操作。

技术背景:

  • IDE:HANA 2 SPS 03补丁0(内部版本4.3.23)的SAP Web IDE
  • SAPUI5前端
  • HANA数据库
  • OData Web服务(表:{#ID [Int,Primarykey Identity],GAME [String]})-使用XSJS

问题描述:

虽然按预期方式可以进行读取,插入和删除,但是我无法为基于在manifest.json中配置的xsodata服务的oModel使用update-Method。

情况:每当我触发oModel.update调用时,更新都不使用HTTP方法" PUT",而是使用" POST"。 当然,Web服务然后会返回以下错误消息:

该URI对POST操作无效。  URI必须指向用于POST操作的实体集。

我的请求:

 POST/xsodata/getGames.xsodata/games(17)HTTP/1.1
 内容长度:35
 主机:xsa.realcore.local:51059
 内容类型:application/json
 {
   " ID":17
   " GAME":" Quake 2"
 }
 

这当然是错误的,但是对于到目前为止已配置为更新方法的http方法,我没有任何影响:

 this._gameService = this._ownerComponent.getModel(" games");
 this._gameService.setDefaultBindingMode(sap.ui.model.BindingMode.TwoWay);
 this._gameService.setRefreshAfterChange(true);

 var that = this;
 this._gameService.setHeaders({
 " content-type":" application/json; charset = utf-8"
 });
 this._gameService.update("/img/games(" + gameObjectToSave.ID +")",
 gameObjectToSave,{
 成功:function(){
 that._readGames();
 that._oGameLibrary.refresh();
 },
 错误:function(e){
 console.log(e);
 }
 });
 

Manifest.json:

"数据源":{
 "游戏":{
 " uri":"/xsodata/getGames.xsodata",
 " type":" oData",
 "设置":{
 " odataVersion":" 2.0"
 }
 }
 }
 ....
 "游戏":{
 " dataSource":"游戏",
 " type":" sap.ui.model.odata.v2.ODataModel",
 " preload":是的,
 "设置":{
 " odataVersion":" 2.0",
 " useBatch":否
 }
 }
 .... 


可能的解决方法,但是很糟糕:

解决此问题的一种方法是使用不推荐使用的ODataModel版本:

" type":" sap.ui.model.odata.ODataModel",

(有关弃用的信息可以在openui5的api文档中找到。)

但是我想使用ODataModel版本2。在V1中,它以某种方式起作用,并且更新按预期使用了" PUT"方法。

有什么想法吗?

亲切的问候

马克

付费偷看设置
发送
3条回答
我是小鹏鹏啊
1楼-- · 2020-09-06 09:40

https://ui5.sap.com/ #/api/sap.ui.model.odata.v2.ODataModel

defaultUpdateMethod? sap.ui.model.odata.UpdateMethod 合并

用于所有更新请求的默认更新方法

更改该参数以查看是否有帮助

CPLASF-自律
2楼-- · 2020-09-06 09:41

您能否选择正确的答案并在问题解决后将其关闭?

粗暴的香蕉
3楼-- · 2020-09-06 09:27

您好,

我的应用程序中存在完全相同的问题。 我尝试在MERGE和PUT上都添加defaultUpdateMethod设置,但仍然在.update方法上发送的请求是POST,这在单个实体上是不允许的。

一周热门 更多>