代码之家  ›  专栏  ›  技术社区  ›  THI

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

  •  1
  • THI  · 技术社区  · 6 年前

    我有一张桌子,上面有产品的详细信息,比如 身份证件 , 描述 , 价格 等。。我正试图将这些数据导出到Excel。

    问题

    如果我只是这样做 getModel("A") ,然后绑定“a”的几个属性,即 嵌套,Excel下载良好。但是如果有其他的结构,比如我试图访问的, getModel("A").getProperty("/Person/PersonFullName") ,它会留下那个 柱坯 .

    控制器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 回复  |  直到 6 年前
        1
  •  1
  •   Boghyon Hoffmann    6 年前

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

    但在你的代码中, aProduct ,分配给 数据源 ,是对 "A" 而模型是 无效 .

    这个 数据源 应该是:

    ODATAMODEL

    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 参数包含在 dataUrl . 否则,将不会导出嵌套属性。

    样品

    JSON模型

    dataSource: myJSONModel.getProperty("/SomeCollection") // <-- should return an array
    

    样品