SAPUI5 Hana Odata v2

2020-09-09 23:43发布

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

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


你好

我将Hana服务器与SAPUI5一​​起使用,运行create方法时始终会遇到此问题,但是Delete,Read和upadate效果很好。

如果可以的话,你能帮我吗?

谢谢你

ser.jpg (20.3 kB)

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

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


你好

我将Hana服务器与SAPUI5一​​起使用,运行create方法时始终会遇到此问题,但是Delete,Read和upadate效果很好。

如果可以的话,你能帮我吗?

谢谢你

ser.jpg (20.3 kB)
付费偷看设置
发送
6条回答
大简至美
1楼-- · 2020-09-10 00:30

确保在创建新对象时填充所有对象属性。

如果get/delete/update工作... create除了插入新记录外应该没有什么不同。.您确定密钥了吗? 自动递增?

微wx笑
2楼-- · 2020-09-10 00:20

您好,Sergio,

我们在hdbcds中定义了这样的表:

 @Comment:'Firma'
     实体公司{
             @Comment:" Firma ID"
         密钥FirmaID:始终以身份生成整数(以1递增1);
             FirmaName:Fname;


             @Comment:"供应商"
             Bezeichnung:bezeichnung;
     }
     技术配置{
         列存储;
     }; 

如您所见,我们的ID已定义为一个身份字段(每个新条目后,ID都应增加1)。

当然,我们也确实认为rud和c(reate)之间的行为不应有所区别。 仍然我们面临以下错误消息:

 {"错误":{"代码":500,"消息":{" lang":" en-US"," value":"执行数据库查询时出错"}}} 

我们的服务定义如下:

服务{
     " Orga.firma"为" firma";
 } 

读取,更新和删除不会引起任何问题。

JS调用:

 var实体="/img/firma";
 var data = {
 FirmaName:"你好",
 Bezeichnung:" halalo2e12"
 };
 FirmaModel.create(实体,
 数据,
 {
 成功:function(oData){
 console.dir(oData);
 },
 错误:函数(jqXHR){
 console.log(" Fehler:Firma_Create" + jqXHR);
 }
 }
 ); 

服务器日志:

 19/4/10下午2:04:44.000 [RTR]输出--到<服务器>" POST/xsodata/Firma.xsodata/firma HTTP/1.1" 500由在178中发送了121  

您有什么想法吗?

非常感谢您的支持。

亲切的问候

拉坎


更新:

我们发现问题与ID列的定义有关。 如果创建不带ID的表,则可以插入数据集。 如果然后读取标识字段,则会引发" 403"错误。 有趣的是,通过SAP HANA/WebIDE的SQL控制台插入数据时没有这种问题。

为什么?

我是小鹏鹏啊
3楼-- · 2020-09-10 00:19

当您具有自动递增的ID(键)..并且尝试插入新记录时。.您是否在请求正文中传递ID列? 尝试将其传递给w一个空值,以便自动递增执行所需的操作。 然后还尝试在请求的正文中不包含ID属性,以查看其行为是否有所不同。 祝你好运

Sergio,

感谢您的快速回复。

我和我的同事还尝试过构建这样的有效负载。 不幸的是,如果我们使用ID = null进行发布,我们仍然会收到错误消息:

 {
   " FirmaID":null,
   " Bezeichnung":"测试",
   " FirmaName":" test2"
 }
 

响应:

 {
  "错误":{
  "代码":500,
  "信息": {
    " lang":" en-US",
    " value":"执行数据库查询时出错"
   }
  }
 }
 

如您所见,这不起作用。 同时发送" 0"也不起作用。 这是因为ID字段(" FirmaID")已被配置为身份字段。

就像之前所说的-如果我从该字段中删除身份定义,它会起作用。 我不知道为什么在这里这么大。

您还有其他想法吗? 不能在Hana-DB中使用像这样的自动递增/标识吗? 那真的很奇怪。 这是标准操作。

亲切的问候

Rakan

95年老男孩
5楼-- · 2020-09-10 00:31

大家好,

只是让您知道:至少在2015年之前,这是一个(常见问题): https://blogs.sap.com/2015/03/06/odata-service-definition-xsodata-for-tables-with -an-identity-column/在这篇文章中,开发人员与经验丰富的HANA专家进行了交谈,他们告诉他必须创建一个xsjs脚本来进行插入,因为ODATA-Services(以某种方式)不支持 工作。

现在还是这样吗? 对我来说听起来像个虫子?

对此行为的解释将非常好。

亲切的问候

马克

----

更新,2019-04-12:

正如您可能建议的那样,我是Rakan的同事。 现在,我们已经接受到,在上述配置中,可能无法将自动增量ID字段与odata-service结合使用。 现在,我们正在研究一种解决方法:我们想使用一个过程来生成id值。 当然,首选方法是使用序列。 问题在于这可能无法实现:

„在SQLScript中不支持IN/OUT表参数的情况下,无法使用序列在OData服务公开的表中创建条目。 但是,您可以使用XS JavaScript出口来使用生成的值更新表。"
 (来源:https://help.sap.com/viewer/4505d0bdaf4948449b7f7379d24d0f0d/2.0.00/en-US/b8900dfa26ea48bd9a6596612ac122ad.html)

根据该文档,不可能在Odata-Service-Definiton/存储过程中使用序列。 请注意,Thomas Jung(SAP同事)在2013年发布了以下youtube视频,似乎可以很好地使用存储过程:https://www.youtube.com/watch?v=c41anxrDleg

要检查程序是否正常运行,我们为每个hdbprocedure创建了一个程序:

路径:RH_Orga_1/Orga_DB/procedure/setDBEntry.dhbprocedure

步骤" RH_Orga_1.Orga_DB.procedure :: setDBEntry"()
  语言SQLSCRIPT SQL
  安全调用者
  -读取SQL DATA AS
 开始
  插入"表"(
  "表"
  )值(
  '你好,世界'
  );
 结束;
 

服务将调用该过程,如下所示:

服务{
     " Orga.firma2"为" firma2"
     使用" RH_Orga_1.Orga_DB.procedure :: setDBEntry"创建;
 }
 

如果执行创建操作,现在会出现以下错误:

请求

POST https://xsa.realcore.local :51056/xsodata/Firma2。 xsodata/firma2

正文:{" FirmaID":" 12345"," FirmaName":" Test1"," Bezeichnung":" Test2"}

响应:

执行数据库查询时出错(错误代码:" 500")

如果该过程被注释掉,则插入工作正常。

我们正在使用以下HANA版本:SPS 03补丁0(内部版本4.3.23)


程序有什么问题?

亲切的问候


马克

软件心理学工程师
6楼-- · 2020-09-10 00:11

嗨,

此问题的解决方案已在此处进行了讨论和记录: https://blogs.sap.com/2017/03/13/how-to-consume-an-odata-service-with -openui5-sapui5/comment-page-1/#comment-457473

亲切的问候

马克

一周热门 更多>