如何从SAPUI5应用程序处理HANA中的自动增量ID?

时间:2018-04-17 15:11:44

标签: odata sapui5 hana

在我的SAPUI5-Application中我得到了以下函数来获取数据并在我的HANA DB中创建一个条目:

onCreateNewCustomer: function(){
        var oEntry = {};
        oEntry.NAME = this.byId("name").getValue();
        oEntry.CITY = this.byId("city").getValue();
        oEntry.PHONE = this.byId("phone").getValue();                
        oEntry.ID = this.byId("id").getValue();

        // Post data to the server
        this.getOwnerComponent().getModel("CustomerModel").create("/Customer", oEntry, null);
        this.byId("createCustomer").close();
        //location.reload();
}

创建过程有效,我的条目也会保存。在下一步中,我希望以这种方式在HANA中实现我的表,条目的ID将自动增加,因此用户不必输入它。我使用以下命令创建我的表:

create column table TABLE
     (ID bigint not null primary key generated by default as IDENTITY,
      FIRSTNAME nvarchar(30))

有效,表已创建。现在的问题是,如果我使用上面的代码而不提供ID,控制台会记录以下错误:

  

发生以下问题:HTTP请求失败400,错误请求,序列化资源缺少成员ID'。

该条目未保存在我的数据库中。如果我在HANA Workbench中执行以下SQL语句而未提供ID,则可以:

insert into TABLE (FIRSTNAME) values (‘David’);
insert into TABLE (FIRSTNAME) values (‘Mike’);      
insert into TABLE (FIRSTNAME) values (‘Bobby’); 

所以我在google上做了一些搜索,但没有找到一个如何做到这一点的正确解决方案。我的目标是保存条目,ID由我的HANA DB提供,而不是从我的SAPUI5应用程序提供。

2 个答案:

答案 0 :(得分:0)

您是否尝试通过注释下面的代码来创建新记录,例如?

oEntry.ID = this.byId("id").getValue();

使用标识字段,如果您提供值,则必须明确标识您要提供的列值。否则,只需省略INSERT命令中的列名和值。

答案 1 :(得分:0)

可能您正在使用不支持自动增量的ODataV2 XSODATA实现。此处可能的解决方案是使用数据库序列,然后通过单独的请求从数据库序列中获取值,并在OData create语句中使用它。