如何将HANA中插入记录的ID返回到SAPUI5应用程序?

2020-09-08 16:20发布

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

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


嗨,

我有一个SAPUI5-应用程序,可在其中创建条目并通过OData-service保存它们。 可行,可以在下面找到创建操作的代码。 我现在要做的是,在我的应用程序中,需要HANA中插入记录的ID。 所以我做了一个成功的处理程序,并认为我会从OData服务的响应中获取此ID。 但是事实并非如此,我会返回提供的相同值,在这种情况下为0,因为这只是OData服务的一个伪值。 我对如何解决此问题进行了一些研究,但没有一种方法有效。 因此,我希望你们中的某人可以帮助我或获得有关如何执行此操作的提示。 在create-operation,odata-service和create.xsjs的代码下面:

亲切的问候

马克西米利安

在UI5-应用程序中创建操作:

 this.getOwnerComponent()。getModel(" Mitarbeiter")。create("/img/ARB",oEntry,{
     成功:功能(oData,响应){
         console.log(response);
         }
     }); 

OData服务的定义:(xsodata)

服务{
 " ABT"导航为" MITARBEITERABTEILUNG"。(" Mitarbeiter"导航为" ARB");
 ;使用" public.MitarbeiterAbteilung:mitarbeiterMethods.xsjslib :: mitarbeiterCreate"创建的" Mitarbeiter"作为" ARB";
 协会" Mitarbeiter"
 主体" ABT"(" ID")
 多重性" 1"
 依赖的" ARB"(" Abteilung")
 多重性" *";
 } 

OData服务(xsjslib)中的创建方法

 function mitarbeiterCreate(param){
 让aAfterTableName = param.afterTableName;
 var oEntry = {};
 尝试{
 var语句= param.connection.prepareStatement(" SELECT * FROM \"" + aAfterTableName +" \"");
 var rs = statement.executeQuery();

 var statement2 = param.connection.prepareStatement('SELECT" MITARBEITERABTEILUNG .." MASEQUENCE" .NEXTVAL from dummy');
 var rs2 = statement2.executeQuery();
 而(rs2.next()){
 oEntry.ID = rs2.getInteger(1);
 }

 statement2.close();
 而(rs.next()){
 oEntry.Name = rs.getString(2);
 oEntry.Adresse = rs.getString(3);
 oEntry.bz = rs.getString(4);
 oEntry.Abteilung = rs.getInteger(5);
 }
 statement = param.connection.prepareStatement('INSERT INTO" MITARBEITERABTEILUNG"。" Mitarbeiter" VALUES(?,?,?,?,?,?)');;
 statement.setInteger(1,oEntry.ID);
 statement.setString(2,oEntry.Name);
 statement.setString(3,oEntry.Adresse);
 statement.setString(4,oEntry.bz);
 statement.setInteger(5,oEntry.Abteilung);
 statement.execute();

 statement.close();
 }抓住(e){
 statement.close();
 }
 

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

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


嗨,

我有一个SAPUI5-应用程序,可在其中创建条目并通过OData-service保存它们。 可行,可以在下面找到创建操作的代码。 我现在要做的是,在我的应用程序中,需要HANA中插入记录的ID。 所以我做了一个成功的处理程序,并认为我会从OData服务的响应中获取此ID。 但是事实并非如此,我会返回提供的相同值,在这种情况下为0,因为这只是OData服务的一个伪值。 我对如何解决此问题进行了一些研究,但没有一种方法有效。 因此,我希望你们中的某人可以帮助我或获得有关如何执行此操作的提示。 在create-operation,odata-service和create.xsjs的代码下面:

亲切的问候

马克西米利安

在UI5-应用程序中创建操作:

 this.getOwnerComponent()。getModel(" Mitarbeiter")。create("/img/ARB",oEntry,{
     成功:功能(oData,响应){
         console.log(response);
         }
     }); 

OData服务的定义:(xsodata)

服务{
 " ABT"导航为" MITARBEITERABTEILUNG"。(" Mitarbeiter"导航为" ARB");
 ;使用" public.MitarbeiterAbteilung:mitarbeiterMethods.xsjslib :: mitarbeiterCreate"创建的" Mitarbeiter"作为" ARB";
 协会" Mitarbeiter"
 主体" ABT"(" ID")
 多重性" 1"
 依赖的" ARB"(" Abteilung")
 多重性" *";
 } 

OData服务(xsjslib)中的创建方法

 function mitarbeiterCreate(param){
 让aAfterTableName = param.afterTableName;
 var oEntry = {};
 尝试{
 var语句= param.connection.prepareStatement(" SELECT * FROM \"" + aAfterTableName +" \"");
 var rs = statement.executeQuery();

 var statement2 = param.connection.prepareStatement('SELECT" MITARBEITERABTEILUNG .." MASEQUENCE" .NEXTVAL from dummy');
 var rs2 = statement2.executeQuery();
 而(rs2.next()){
 oEntry.ID = rs2.getInteger(1);
 }

 statement2.close();
 而(rs.next()){
 oEntry.Name = rs.getString(2);
 oEntry.Adresse = rs.getString(3);
 oEntry.bz = rs.getString(4);
 oEntry.Abteilung = rs.getInteger(5);
 }
 statement = param.connection.prepareStatement('INSERT INTO" MITARBEITERABTEILUNG"。" Mitarbeiter" VALUES(?,?,?,?,?,?)');;
 statement.setInteger(1,oEntry.ID);
 statement.setString(2,oEntry.Name);
 statement.setString(3,oEntry.Adresse);
 statement.setString(4,oEntry.bz);
 statement.setInteger(5,oEntry.Abteilung);
 statement.execute();

 statement.close();
 }抓住(e){
 statement.close();
 }
 

付费偷看设置
发送
4条回答
亦是此间程序员
1楼 · 2020-09-08 16:46.采纳回答

您唯一需要做的就是更新function参数提供的" afterTableName"表中的ID值。 像这样的东西:

 let语句= param.connection.prepareStatement('update"'+ param.afterTableName +'" set ID ='+ oEntry.ID);
 statement.executeUpdate();
 

确定新ID后当然需要完成。 如果您的列名不是" ID",请用实际的列名替换。

致谢,
Florian

三十六小时_GS
2楼-- · 2020-09-08 16:50

嗨,大家好,

在XSA SP04上,上述方法对我不起作用。 在后表的直接更新上,我收到错误" 功能不受支持:易失表的更新语句"。 所以我使用了描述为此处。 那个有用。

谢谢,
Anton

d56caomao
3楼-- · 2020-09-08 16:48

您是否尝试过将返回值放入xsjs? 像...

 @function mitarbeiterCreate(param){
 ..
 ..
 返回{id:oEntry.ID,msg:"该ID已成功创建"};
 } 
spaceman01
4楼-- · 2020-09-08 17:07

嗨,

感谢您的回答。 我尝试了您的建议,chrome的devtools记录了以下内容:

" log-dbg.js:412 2018-07-11 16:08:12.408500发生以下问题:HTTP请求失败400,错误请求, {"错误":{"代码":"","消息":{" lang":" zh-CN","值":"发生了自定义错误。 请参阅错误详细信息。"}," innererror":{" errordetail":{" msg":"该ID已成功创建""}}}}"

一周热门 更多>