使用ODataModel与JSONModel有什么好处?

问题描述 投票:3回答:3

我正在使用JSONModel从HANA读取数据,只需将URL传递给源并按以下方式检索它:

var data = new sap.ui.model.json.JSONModel(urlPath);

然后我可以将它绑定到我的观点:this.getView().setModel(data);

我还看到了以下这样做的方法,其中创建了ODataModel,然后根据数据创建了JSONModel

var oModel = new sap.ui.model.odata.ODataModel(urlPath);

oModelJson = new sap.ui.model.json.JSONModel();
oModel.read("/Items",
            null,
            ["$filter=ImItems eq 'imputParameter'"],
            null,
            function(oData, oResponse) {
                oModelJson.setData(oData);
            },
            null
);

创建ODataModel首先要比创建JSONModel有什么不同。所以假设我从数据库中回来了大约5,000个数据点,我应该采用哪种方法,还是没有区别?

sapui5 datamodel jsonmodel
3个回答
2
投票

两种模型都可以毫无冲突地使用。实际上,大多数应用程序都会同时使用它

您希望使用OData模型从服务器发送/检索数据。 OData模型将处理为您构建URL。例如,如果要在没有OData模型的情况下对数据进行分页,排序或使用分页,则需要自己构建URL。

yourUrl.com/EntitySet?$filter eq Property1='Value'&$sort= ..... &top=... etc.

没有OData模型,这将很困难,并且使应用程序更难以维护和调试。让OData模型为您做到这一点:

ODataModel.read("/EntitySet, {
    filters: [new Filter("Property1", "EQ", "Value")]
});

不过,在我看来,OData模型的最大好处是直接从XML视图绑定。

<List items="{/EntitySet}">
    <items>
        <StandardListItem title="{objectTitle}"/>
    </items>
</List>

这将自动调用后端,从实体集中检索数据,并将其绑定到列表。无需构建任何URL,拨打任何电话等。

使用JSON模型从OData服务检索数据只会使事情变得更加困难。

但是......据说...... JSON模型是一个非常强大的工具。您可以使用它来存储配置数据或要在UI中保存和操作的任何数据。您可以将JSON模型用作应用程序中的一种迷你数据库,该数据库可以在您的应用程序中全局传递数据。

总而言之,您应该使用OData模型来获取/发送数据。您应该使用JSON模型进行本地数据存储。试图同时使用两者都不会有冲突。


2
投票

JSONModel是一个客户端模型,用于获取数据并将数据设置为JSON格式的视图。

ODataModel是OData协议的模型实现。这允许对OData实体进行CRUD操作。 JSONModel不支持Create / Update / Delete / Batch行动。

所以来到你的场景,我建议总是使用ODataModel进行CRUD操作(包括读取)。然后可以使用JSON模型绑定要查看的数据。

请注意,最好每个应用程序有一个ODataModel,并且多个JSONModels绑定到视图。

考虑使用ODataModel V2,因为您已经提到过要处理5K数据点,如果不是UI中的所有数据。使用setSizeLimit确保设置了正确的上限。


1
投票

两者之间的一个主要区别是:

例如,SAPUI5中的许多控件smarttable会自动绑定到odata实体,这意味着它会根据Odata元数据XML文件动态创建列和元组。在这种情况下,您不能使用JSON模型。

恕我直言,我会选择OData,因为SAPUI5有很多组件的“自动绑定”。但是,当OData实体结构不合理时,我也遇到了一些情况,这意味着某些SAP UI组件所具有的“自动绑定”并没有按预期工作。

在这些场景中,我不得不从OData中获取JSON,创建/销毁了一些属性,然后我对所提到的SAP UI组件进行了绑定。

© www.soinside.com 2019 - 2024. All rights reserved.