SAPUI5创建模型返回警告

时间:2017-06-20 21:28:02

标签: model sapui5

我正在尝试编写自己的util类并创建模型,但我收到警告,我不明白:

警告讯息:

EventProvider sap.ui.model.odata.ODataModel path /$metadata should be absolute if no Context is set -

这是我的代码:

sap.ui.define([], function() {

    var Test = function () {};
    Test.prototype.PATH__TO_ROOT = "https://xxx/root";
    Test.prototype.configModel = function () {
        var configModel = new sap.ui.model.odata.ODataModel(this.PATH__TO_ROOT + "/someDetails.odata", true);
    };

    return new Test();
});

如果我使用全局变量,它可以在没有警告的情况下工作,但是WEB IDE不会自动填充“Test”。

为什么我会收到警告,如何解决?

Best Kurt

2 个答案:

答案 0 :(得分:2)

在您的代码中,您正在使用depracated sap.ui.model.odata.ODataModel。相反,您应该使用V2或V4 ODataModel(而V4可能还没有所有功能......)。有关详细信息,请参阅此处:https://blogs.sap.com/2017/02/03/stop-using-sap.ui.model.odata.odatamodel-aka-v1-odatamodel-its-deprecated-since-2014/

就像在另一个答案中已经提到的那样,您也可以考虑使用manifest.json让UI5自动为您实例化v2.ODataModel。但是,这不是必须的 - 但这是一种最佳实践!

手动实例化v2.ODataModel也可以正常工作。但是,上面的答案声称,在您的代码中,您最终会得到类似 https://somaddress.com//https://xxx/root/someDetails.odata 的内容,绝对错误。看一下我的例子here,这样的事情就可以了。

var oModel = new sap.ui.model.odata.v2.ODataModel("https://www.myserver.copm/path/to/my/odata/service.svc/", {
    json : true,
    useBatch : false
});
//...

当然,在上面的代码段中,您可能必须考虑浏览器的相同原始策略...如果您想在同一服务器上访问OData服务,您可以使用相对URL:

var oModel = new sap.ui.model.odata.v2.ODataModel("/path/to/my/odata/service.svc/", {
    json : true,
    useBatch : false
});
//...

答案 1 :(得分:1)

SAPUI5将从/开始的所有字符串视为绝对路径。在你的例子中,PATH__TO_ROOT不是从/开始的,所以它认为你声明了相对路径。

实际上,这并不像oData通常获得服务网址那样。 ODataModel将获取您当前启动的应用程序的主机名,并将服务URL连接到该主机名。在你的情况下,它会导致像这个字符串一样接近。

https://somaddress.com//https://xxx/root/someDetails.odata

那是错的。 第二件事,考虑使用metadata.json或元数据部分(取决于您的SAPUI5版本),以使SAPUI5为您完成工作并创建适当的路径ODataModel。

manifest.json示例的一部分

    "sap.app": {
        "id": "appid",
        "type": "application",
        "i18n": "i18n/i18n.properties",
        "applicationVersion": {
            "version": "1.0.0"
        },
        "title": "{{appTitle}}",
        "description": "{{appDescription}}",
        "dataSources": {
            "mainService": {
                "uri": "/sap/opu/odata/exampleapp/someodata",
                "type": "OData",
                "settings": {
                    "odataVersion": "2.0",
                    "localUri": "localService/metadata.xml"
                }
            }
        }
    }

您无需手动创建ODataModel。