将具有嵌套属性的OData值导出到Excel

时间:2019-01-08 00:53:34

标签: sapui5

我有一个表,其中包含产品详细信息,例如 ID 说明 price 等。我正在尝试将这些数据导出到Excel中

问题

如果我只是做getModel("A"),然后绑定“ ”嵌套的“ A”的几个属性,则可以很好地下载excel。但是,如果我尝试访问其他任何结构,例如getModel("A").getProperty("/Person/PersonFullName"),它将使该列空白

Controller.js

onExport: function() {
  var aCols, aProducts, oSettings;
  aCols = this.createColumnConfig();
  aProducts = this.getView().getModel("A"); // A has nested/deep entities
  oSettings = {
    workbook: { columns: aCols },
    dataSource: aProducts
  };
  var oSpreadsheet = new Spreadsheet(oSettings); // required "sap/ui/export/Spreadsheet"
  oSpreadsheet.build();
},          

createColumnConfig: function() {
  return [
    {
      label: 'Product ID',
      property: 'name'
    },
    {
      label: 'Category',
      property: 'BillTo/BillToName', //Not able to get this property
    }
  ];
},  

1 个答案:

答案 0 :(得分:1)

根据API参考,dataSource设置将等待以下参数之一:

  
      
  • 数据源属性的映射(如果是OData,请参见available properties
  •   
  • OData服务的URL
  •   
  • JSON数组
  •   

但是在您的代码中,分配给aProduct的{​​{1}}是对dataSource模型的引用,而该模型无效。< / p>

"A"应该是:

ODataModel

dataSource
const listBinding = this.byId("myResponsiveTable").getBinding("items"); // ODataListBinding

注意:请确保dataSource: { type: "OData", useBatch: true, serviceUrl: listBinding.getModel().sServiceUrl, // same URL as defined in manifest.json>/sap.app/dataSources/<dataSource name>/uri headers: listBinding.getModel().getHeaders(), dataUrl: listBinding.getDownloadUrl(), // serviceUrl + "/Orders" + added queries ($expand, $select, ...) count: listBinding.getLength(), sizeLimit: /*e.g.*/1000, }, worker: true // false if working with mock server or if CSP is enabled. 中包含相应的$expand参数。否则,将不会导出嵌套属性。

样本

JSONModel

dataUrl

样本