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

时间:2018-07-11 11:37:55

标签: odata sapui5 hana hana-xs

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

SAPUI5中的创建操作:

this.getOwnerComponent().getModel("Mitarbeiter").create("/ARB", oEntry, {
                success: function(oData, response){
                    console.log(response);
                    }
                });

OData服务:

service {

"MITARBEITERABTEILUNG"."ABTEILUNG" as "ABT" navigates ("Mitarbeiter" as "ARB");

"MITARBEITERABTEILUNG"."Mitarbeiter" as "ARB" create using "public.MitarbeiterAbteilung:mitarbeiterMethods.xsjslib::mitarbeiterCreate";

    association "Mitarbeiter"
    principal "ABT"("ID")
    multiplicity "1"
    dependent "ARB"("Abteilung")
    multiplicity "*";
}

Create.xsjs:

function mitarbeiterCreate(param) {
    let aAfterTableName = param.afterTableName;
    var oEntry = {};

    try {
        var statement = 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();
        while (rs2.next()) {
            oEntry.ID = rs2.getInteger(1);
        }

        statement2.close();

        while (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();

    } catch (e) {
        statement.close();
    }
}

1 个答案:

答案 0 :(得分:2)

在以下位置的SAP社区中有答案:https://answers.sap.com/questions/566957/how-to-get-the-id-of-an-inserted-record-in-hana-ba.html


  

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

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

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