oData –插入多个请求的问题

2020-08-27 19:20发布

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

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


嗨,

在此示例中,有2个功能,并且可以访问ES5系统

  • 1)在InsertSingleRecord()上将单个记录插入到产品表中
  • 2)将多个记录插入到产品表中。 onInsertUsingLoop()

两个函数调用相同的insertProduct()插入数据库。

在onInsertUsingLoop()中,如果Loop索引大于1,则调用到达oData.create()的错误函数,并显示错误消息。 但令人惊讶的是,数据也被插入表中。


无法理解,通话已到达,error(),但仍将数据插入到DB表中?

知道为什么会这样。

代码逻辑是,首先使用read()在数据库中搜索相应的ProductID,如果有记录,则更新行;如果没有使用create()插入记录,则进行更新。

为简便起见,我在函数内部使用了警报

View1控制器代码在下面

 sap.ui.define(
 [" sap/ui/core/mvc/Controller",
 " sap/m/MessageBox",
 " sap/ui/model/odata/v2/ODataModel",
 " sap/ui/model/json/JSONModel"
 ],
 函数(控制器,MessageBox,ODataModel,JSONModel){
 return Controller.extend(" ibm.fin.ar.controller.View1",{
 onInit:函数(){
 },
 onAfterRendering:function(){
//调用函数设置记录数
 this.onGetCount();
 },
 onGetCount:function(){
//从ProductSet表中获取记录数
 var oDataModel = this.getView()。getModel();
 var oIntResult,sMsg,olblStatus;
 olblStatus = this.getView()。byId(" idCountInfo");
 调试器;
 oDataModel.sequentializeRequests = true;
//oDataModel.attachRequestCompleted(function(){
 oDataModel.read("/img/ProductSet/$ count",{

 成功:函数(oEvent,oResult){
 调试器;
//检查结果是否为数字
 如果(isNaN(oResult)){
 oIntResult = parseInt(oResult.body);
 sMsg =" ProductSet表中的记录数为" + oIntResult;
 olblStatus.setText(sMsg);
 }
 },//成功
 错误:函数(oError){
 调试器;
 console.log(oError);
 }
 });
//});
 },
 onInsertSingleRecord:function(){
//将单个记录数据插入ES5表
 调试器;
//生成随机产品ID;
 var sProductID;
 sProductID =" VS-" +(Math.floor((Math.random()* 100000))+ 123456);
 this.insertProduct(sProductID);
 this.onGetCount();
 },
 onInsertUsingLoop:function(){
//通过读取JSON进行插入
 var iLoopLength = 1,
 iLoopIndex,sProductID;
 调试器;
 for(iLoopIndex = 0; iLoopIndex 
 

View1 xml代码在下面

 
 
 <页面标题=" oData测试">
 <内容>
 
 
 
     
 
 

 
 <页脚>
     
         <内容>
             

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

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


嗨,

在此示例中,有2个功能,并且可以访问ES5系统

  • 1)在InsertSingleRecord()上将单个记录插入到产品表中
  • 2)将多个记录插入到产品表中。 onInsertUsingLoop()

两个函数调用相同的insertProduct()插入数据库。

在onInsertUsingLoop()中,如果Loop索引大于1,则调用到达oData.create()的错误函数,并显示错误消息。 但令人惊讶的是,数据也被插入表中。


无法理解,通话已到达,error(),但仍将数据插入到DB表中?

知道为什么会这样。

代码逻辑是,首先使用read()在数据库中搜索相应的ProductID,如果有记录,则更新行;如果没有使用create()插入记录,则进行更新。

为简便起见,我在函数内部使用了警报

View1控制器代码在下面

 sap.ui.define(
 [" sap/ui/core/mvc/Controller",
 " sap/m/MessageBox",
 " sap/ui/model/odata/v2/ODataModel",
 " sap/ui/model/json/JSONModel"
 ],
 函数(控制器,MessageBox,ODataModel,JSONModel){
 return Controller.extend(" ibm.fin.ar.controller.View1",{
 onInit:函数(){
 },
 onAfterRendering:function(){
//调用函数设置记录数
 this.onGetCount();
 },
 onGetCount:function(){
//从ProductSet表中获取记录数
 var oDataModel = this.getView()。getModel();
 var oIntResult,sMsg,olblStatus;
 olblStatus = this.getView()。byId(" idCountInfo");
 调试器;
 oDataModel.sequentializeRequests = true;
//oDataModel.attachRequestCompleted(function(){
 oDataModel.read("/img/ProductSet/$ count",{

 成功:函数(oEvent,oResult){
 调试器;
//检查结果是否为数字
 如果(isNaN(oResult)){
 oIntResult = parseInt(oResult.body);
 sMsg =" ProductSet表中的记录数为" + oIntResult;
 olblStatus.setText(sMsg);
 }
 },//成功
 错误:函数(oError){
 调试器;
 console.log(oError);
 }
 });
//});
 },
 onInsertSingleRecord:function(){
//将单个记录数据插入ES5表
 调试器;
//生成随机产品ID;
 var sProductID;
 sProductID =" VS-" +(Math.floor((Math.random()* 100000))+ 123456);
 this.insertProduct(sProductID);
 this.onGetCount();
 },
 onInsertUsingLoop:function(){
//通过读取JSON进行插入
 var iLoopLength = 1,
 iLoopIndex,sProductID;
 调试器;
 for(iLoopIndex = 0; iLoopIndex 
 

View1 xml代码在下面

 
 
 <页面标题=" oData测试">
 <内容>
 
 
 
     
 
 

 
 <页脚>
     
         <内容>
             
付费偷看设置
发送
2条回答
微wx笑
1楼-- · 2020-08-27 20:01

您好 Vikas Sreedharan

我看到您使用的是serializeRequests = 真正; 我不确定是它发送多个请求吗? 而不是一批?

如果是,这可能是问题所在,很明显,如果循环中的一个请求在发送所有请求之前完成,它将根据odata的响应调用成功或错误 呼叫。 因此最好在批处理请求中发送它们,如果后端是基于abap的,则要求它们实施变更集过程以同时处理多个数据保存。

所以这就是为什么可能插入了某些数据,而对于其他一些数据却可能出错的原因。 顺便说一句,您得到的错误是什么?

谢谢,
Mahesh

compass1988
2楼-- · 2020-08-27 19:46

感谢Mahesh。

显示的错误消息是

" {"消息":" HTTP请求失败",

"状态代码":500,

" statusText":""

"标题":[],

" responseText":" <?xml version = \" 1.0 \" encoding = \" utf-8 \"?>

http://schemas.microsoft.com/ado/2007/08/dataservices/metadata \">

0050569259751EE4BA9710043F8A5115

在数据服务的上下文中,发生了未知的内部服务器错误

"}"

一周热门 更多>