1

我有一个 SAPUI5 应用程序,我在其中创建条目并通过 OData 服务保存它们。那行得通,创建操作的代码可以在下面找到。我现在要做的是,我需要在我的应用程序中返回 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 "*";
}

创建.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();
    }
}
4

1 回答 1

2

在此处的 SAP 社区中回答:https ://answers.sap.com/questions/566957/how-to-get-the-id-of-an-inserted-record-in-hana-ba.html


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

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

当然,这需要在您确定新 ID 后完成。如果您的列名不是“ID”,请将其替换为真实的列名。

于 2018-08-10T09:19:31.070 回答