创建记录后刷新表中的数据

时间:2017-06-14 07:09:32

标签: javascript sapui5 crud page-refresh

在我的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);


},

1 个答案:

答案 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();
    }
});

如果您的服务不支持批量请求,那么您仍然可以使用创建方法,但可以利用它的成功回调来确保该条目一直存在于后端,然后更新表的绑定。