【问题标题】:SAPUI5 > 1.30, how to set custom model headers before initial requestSAPUI5 > 1.30,如何在初始请求之前设置自定义模型头
【发布时间】:2021-01-07 05:21:26
【问题描述】:

在使用清单文件之前,我曾经将自定义标头添加到我的 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);

【问题讨论】:

  • 你能添加一些代码吗?目前,我认为您在没有清单的情况下所做的是在加载模型之前传递 metadataUrlParams?我认为在清单中这也存在.. "models": --> "" --> Settings --> metadataUrlParams ... JSON 样式。
  • @zyrax 抱歉,如果我不清楚,我需要在运行时计算我的标头值...

标签: sapui5 sap-fiori


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您可以在 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",
              }
            }
         }
      }  
    }
    

    【讨论】:

    • 从我的角度来看,这与您之前所做的完全相同。您在模型初始化期间传递了标头。这在应用程序描述符语言中是相同的......也许我不明白这一点?但认为你不能在运行时做到这一点,现在我明白了。但是 oData 模型有一个方法“setHeaders”......也许这有帮助?
    • manifest.json 不支持动态配置。在调用 init() 方法之前读取清单并初始化模型,因此您既不能影响模型实例化,也不能事先修改清单数据。您必须在 init() 方法中实例化您自己的模型。您仍然可以在清单中定义数据源,并在 init() 方法中定义 read the values like uri from the manifest 来配置您的模型。
    猜你喜欢
    • 2021-04-01
    • 1970-01-01
    • 2013-12-10
    • 2012-06-09
    • 2017-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多