在 SAPUI5 中加载没有 Table 或列表对象的 OData

Loading OData without Table or List object in SAPUI5

我有 2 周的时间寻找示例来了解 OData 的工作原理。 我在 Manifest.json 中定义了我的 url 和 OData 服务

{
"_version"  : "1.7.0",
"sap.app"   : {
    "id"            : "test",
    "type"          : "application",
    "i18n"          : "i18n/i18n.properties",
    "applicationVersion": {
        "version"       : "1.0.0"
    },
    "title"         : "{{appTitle}}",
    "description"   : "{{appDescription}}",
    "sourceTemplate": {
        "id"            : "servicecatalog.connectivityComponent",
        "version"       : "0.0.0"
    },
    "dataSources"   : {
        "Test"  : {
            "uri"           : "/sap/opu/odata/sap/ZMY_SERVICE_SRV/",
            "type"          : "OData",
            "settings"      : {
                "odataVersion"  : "2.0",
                "localUri"      : "localService/metadata.xml"
            }
        }
    }
}..
    "models": {
        "i18n": {
            "type": "sap.ui.model.resource.ResourceModel",
            "settings": {
                "bundleName": "test.i18n.i18n"
            }
        },
        "Test": {
            "type": "sap.ui.model.odata.v2.ODataModel",
            "settings": {
                "defaultOperationMode": "Server",
                "defaultBindingMode": "TwoWay",
                "defaultCountMode": "None"
            },
            "dataSource": "Test"
        },

并且在我的 Component.js 中的 Init 方法中:

init: function() {
        // call the base component's init function
        UIComponent.prototype.init.apply(this, arguments);
        // create the views based on the url/hash
        this.getRouter().initialize();
        // set the device model
        this.setModel(models.createDeviceModel(), "device");


        var sServiceUrl = this.getMetadata().getManifestEntry("sap.app").dataSources["Test"].uri;
        var oModel = new sap.ui.model.odata.v2.ODataModel(sServiceUrl);
        this.setModel(sabModel, "/Test");
        sabModel.read(sServiceUrl, "Test");
    }

我不想使用 Table 或列表从后端加载 OData。我想加载信息 "manually" 并根据我从后端获得的信息导航到一个或另一个视图。

在导航器中调试结果我看到以下错误:Console

查看错误日志我可以看到:Error Log

如果我在后端测试服务工作正常:OData Service

我得到了:

<?xml version="1.0"?><feed xml:base="http://Myserver:8000/sap/opu/odata/sap/ZMY_SERVICE_SRV/" 
xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" 
xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns="http://www.w3.org/2005/Atom">
<id>http://Myserver:8000/sap/opu/odata/sap/ZMY_SERVICE_SRV/TestSet</id>
<title type="text">TestSet</title>
<updated>2017-10-23T20:37:55Z</updated>
-<author>
    <name/>
</author>
<link title="TestSet" rel="self" href="TestSet"/>
-<entry>
    <id>http://Myserver:8000/sap/opu/odata/sap/ZMY_SERVICE_SRV/TestSet('1')</id>
    <title type="text">TestSet('1')</title>
    <updated>2017-10-23T20:37:55Z</updated>
    <category scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" term="ZMY_SERVICE_SRV.Test"/>
    <link title="Test" rel="self" href="TestSet('1')"/>
    -<content type="application/xml">
        -<m:properties xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" 
            xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
            <d:Pernr>1</d:Pernr>
            <d:Nachn>TestUser</d:Nachn>
            <d:Vorna>UserTest</d:Vorna>
            <d:SavingDate m:null="true"/>
            <d:Option/>
            <d:MsgType/>
            <d:MsgNumb/>
        </m:properties>
    </content>
</entry>

感谢您的帮助!!!欢迎任何意见!!

阅读有关 "read" 方法的 API 文档: https://sapui5.netweaver.ondemand.com/#/api/sap.ui.model.odata.v2.ODataModel

您不应在读​​取方法中指定服务 URL,因为它会自动与您作为第一个参数传递的 "sPath" 连接。您应该使用要以斜线“/”开头的实体集名称(在 $metadata 中定义)。

试试这个

var oModel = this.getModel("Test");//get the model
oModel.read("/TestSet", {
    method: "GET",
    success: function(data) {
        alert(JSON.stringify(data));
    },
    error: function() {

    }
});