我的问题是,我需要获取已创建条目的生成ID。 我想在我的ODataModel中创建一个条目,然后再创建另一个条目。第二个应该将第一个的ID保存为属性。
但是当我插入第一个带有{" Id" :" 0"},因此ID会自动生成,我发现无法获得响应Header将生成的ID保存在变量中。
我试图将响应保存在成功回调中,但由于异步性,变量保持未定义。
答案 0 :(得分:2)
同时我自己解决了这个问题。 我将第二个条目的创建移动到第一个条目的成功回调中。 因此,我能够从“响应”参数中获取ID,并将其作为属性添加到我的第二个条目中。 这可能不是最好的解决方案,但它对我有用。 也许其他人有另一个提议来做得更好。
这只是一个示例代码,但它可能会帮助一些遇到类似问题的人。
// oView = this.getView();
// First Entry for EntitySampleSet1
var oEntry = {};
oEntry.Id = "0";
oEntry.Label = oView.byId("label").getValue();
oEntry.Status = oView.byId("status").getValue();
// Success Callback for the first Entry Creation
// response contains the Response Header for the POST Request
var fnSuccessCallback = function(oData, response)
{
console.log("Success 1");
// Success Callback for the second create methode
var fnSuccess2Callback = function()
{
console.log("Success 2");
};
// Error Callback for the second create methode
var fnError2Callback = function()
{
console.log("Error 2");
};
// Second Entry for EntitySampleSet2
var o2Entry = {};
// ID = "0" so the ID gets automatically generated by JPA
o2Entry.Id = "0";
o2Entry.SampleRelatedObject = response.data.Id;
// The second Entry gets created in the OData Model
oModel.create("/SampleEntitySet2", o2Entry,
{
urlParameters : null,
success : fnSuccess2Callback,
error : fnError2Callback
});
};
var fnErrorCallback = function(oError)
{
console.log("Error1");
};
// The first Entry gets created in the OData Model
// after the create worked fine the fnSuccessCallback will get
// called and the second entry will be created in that method
oModel.create("/SampleEntitySet1", oEntry,
{
urlParameters : null,
success : fnSuccessCallback,
error : fnErrorCallback
});