在我的Ui5应用程序中,我使用oData添加了CREATE操作。但是当我尝试创建条目时,它会在后端添加,但在表格中显示没有数据(参见图1)。但是当我刷新同一页面时(参见图2)。单次输入后,它会自动刷新 问题是多个条目。
请参阅截图和代码以获得清晰的视图。
单击“创建”按钮后:
刷新WebPage后:
onCreate: function() {
var oModel = this.getView().getModel();
var contactEntry1 = {
ProductID: 'KT-1960',
TypeCode: 'AD',
SupplierID: '0100000001',
TaxTarifCode: 1,
Category: 'Notebooks',
MeasureUnit: 'EA',
CurrencyCode: 'EUR',
Name: 'Urvish',
Description: 'First batch entry',
},
contactEntry2 = {
ProductID: 'KT-1982',
TypeCode: 'AD',
SupplierID: '0100000001',
TaxTarifCode: 1,
Category: 'Notebooks',
MeasureUnit: 'EA',
CurrencyCode: 'EUR',
Name: 'Urvish',
Description: 'Second batch entry',
};
oModel.setUseBatch(true);
oModel.create('/ProductSet', contactEntry1);
oModel.create('/ProductSet', contactEntry2);
oModel.refresh(true);
},
答案 0 :(得分:0)
看起来您使用创建的异步操作,但认为它们是同步的。
为了解决这个问题,你可以在一个批处理请求中发送这两个创建,但是使用ODataModel的 createEntry 方法,以便使用 submitChanges 方法,一旦在后端成功创建了两个项目,将调用其回调(以下代码示例应与ODataModelV2相关):
// get the table 'items' aggregation binding, to be able to refresh it later on
var oTableItemsBinding = oTable.getBinding("items");
// define the group id, which will be used later on
oModel.setDeferredGroups(["createProductGroup"]);
// create two entries one by one, specifying the 'groupId' parameter
oModel.createEntry("/ProductSet", {
properties: contactEntry1,
groupId: "createProductGroup"
});
oModel.createEntry("/ProductSet", {
properties: contactEntry2,
groupId: "createProductGroup"
});
// send 2 requests in one $batch, passing the name of the 'groupId' and the 'success' callback
oModel.submitChanges({
groupId: "createProductGroup",
success: function() {
oTableItemsBinding.refresh();
}
});
如果您的服务不支持批量请求,那么您仍然可以使用创建方法,但可以利用它的成功回调来确保该条目一直存在于后端,然后更新表的绑定。