1

在使用清单文件之前,我曾经将自定义标头添加到我的 oData 模型的配置中。现在从 SAPUI5 1.30 开始,Component.js 正在使用清单文件,一旦运行时进入 Component.js init() 函数,模型就已经加载,并且已经向我的服务发出了第一个请求。我需要一种在运行时和对我的服务发出第一个请求之前设置自定义标头的方法。

前:

    // The service URL for the oData model
    var oServiceConfig = this.getMetadata().getConfig().serviceConfig;
    var sServiceUrl = oServiceConfig.serviceUrl;

    // the metadata is read to get the location of the i18n language files later
    var mConfig = this.getMetadata().getConfig();
    this._routeMatchedHandler = new sap.m.routing.RouteMatchedHandler(this.getRouter(), this._bRouterCloseDialogs);

    // create oData model
    this._initODataModel(sServiceUrl);

// _initODataModel function

    headers = {custom: 'hello world'};
    var oConfig = {
        metadataUrlParams: {},
        json: true,
        // loadMetadataAsync : true,
        defaultBindingMode: "OneWay",
        defaultCountMode: "Inline",
        useBatch: true,
        headers: headers
    };

    var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, oConfig);       
    this.setModel(oModel);
4

2 回答 2

1

manifest.json 文件又名应用程序描述符并不像您需要的那样动态。换句话说:您无法使用应用程序描述符来实现您想要的。这是使用应用程序描述符的一个缺点。

你可以使用你的 Component.js 来获得一些动态的东西。在那里你可以手动实例化你的模型......也许你也可以在没有 manifest.json 文件的情况下以“旧”方式配置组件。

于 2016-03-30T10:32:04.167 回答
0

您可以在sap.ui5/models/myModel/settings的manifest.json中指定传递给模型构造函数的对象:

"sap.app": {
  "dataSources": {
    "myDatasource": {
      "uri": "/sap/hba/r/apf/core/odata/apf.xsodata",
      "type": "OData",
      "settings": {
         "odataVersion": "2.0"
      }
    }
  }
},
"sap.ui5": {
  "models": {
     "myModel": {
        "datasource": "myDatasource",
        "settings": {
          "headers": {
             "headername1":"headervalue1",
             "headername2":"headervalue2",
          }
        }
     }
  }  
}
于 2016-03-30T10:18:18.410 回答