2017-01-05 7 views
2

私はJSONModelを使用してHANAからデータを読み込み、単にソースにURLを渡して、次のようにそれを取得しています:ODataModelとJSONModelの利点は何ですか?

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); 

最初にJSONModelを作成するよりも、最初にODataModelを作成する点でどのような違いがありますか。だから私はデータベースから約5,000データポイントを取得していると仮定すると、どちらのアプローチをとるべきでしょうか、あるいは違いはありませんか?

+0

2番目のコードスニペットはアンチパターンです。まず、デフォルトで多くの同期要求を送信する(廃止された)(https://ui5.sap.com/#/api/sap.ui.model.odata.ODataModel) 'ODataModel'(V2またはV4の代わりに)を使用します。第2に、エンティティセット ( '"/Items "')全体を読み取ってそれを 'JSONModel 'でバインドすると、' JSONModel'がクライアント側のモデルであるため、何度もテストするだけでなく、ホイールを再発明することができます。したがって、「ODataModel」が[Kyle's answer](https://stackoverflow.com/a/44081293/5846045)(彼の答えを受け入れることを提案する)で説明されているように、すでに提供している多くのAPIが欠けています。 – boghyon

答えて

0

JSONModelは、データを取得してJSON形式のビューにデータを設定するクライアントモデルです。

ODataModelは、ODataプロトコルのモデル実装です。 これにより、ODataエンティティに対するCRUD操作が可能になります。 JSONModelはCreate/Update/Delete/Batch操作をサポートしていません。

私はODataModelを常にCRUD操作(読み込みを含む)を行うために使用することをお勧めします。次に、JSONモデルを使用してデータをバインドして表示できます。

1つのアプリケーションに1つのODataModelがあり、複数のJSONModelがビューにバインドされている方がよいことに注意してください。

ODataModel V2を使用することを検討してください。また、UIのすべてのデータがない場合は、5kデータポイントを扱っていると述べているので、適切な上限を設定していることを確認するには、setSizeLimitを使用してください。

0

それらの両方beetween一つの大きな違いは次のとおりです。

例えばSAPUI5のコントロールの多くは、smarttable、ODATAエンティティに自動的に結合し、それはdinamically ODATAメタデータXMLに基づいて列やタプルを作成する意味ファイル。このシナリオでは、JSONモデルを使用することはできません。

IMHO、SAPI 5の多くのコンポーネントにはこの「自動バインディング」があるため、ODataを使用します。

しかし、odataエンティティが構造化されていないシナリオもありました。これは、一部のSAP UIコンポーネントが持っていた「自動バインド」が期待どおりに機能しないことを意味します。

これらのシナリオでは、jsonをodataから取り出し、いくつかのプロパティを作成/破棄してから、前述のSAP UIコンポーネントにバインドしました。

乾杯、

+0

私はこの問題に直面したので、私はこの質問をしています。私はODataを使ってデータをバインドすることができませんsap.m.tableにデータをバインドしていますが、JSONモデルでうまく動作し、私はxmlビューを使って私のテーブルを定義していないようですODataだけでうまくいく – polaris

+0

SmartTables(https://sapui5.hana.ondemand.com/explored.html#/entity/sap.ui.comp.smarttable.SmartTable/samples)は、sap.m.table(https: //sapui5.hana.ondemand.com/explored.html#/entity/sap.m.table/samples)。つまり、OdataModelとJsonModelをsap.m.tableにバインドできるはずです。これをチェックしてください:https://archive.sap.com/discussions/thread/3505900 –

1

どちらのモデルも矛盾なく使用できます。実際、ほとんどのアプリケーションは両方を使用します。

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> 

これは自動的にバックエンドを呼び出し、エンティティセットからデータを取得し、それをリストにバインドします。

JSONモデルを使用してODataサービスからデータを取得すると、必要以上に困難になります。

しかし...そう言われています... JSONモデルは非常に強力なツールです。これを使用して、設定データや、保持するデータをUIに格納して操作することができます。 JSONモデルは、アプリケーション全体でデータを渡すことができるミニデータベースの一種として使用できます。

要約すると、ODataモデルを使用してデータを取得/送信する必要があります。ローカルデータストレージにはJSONモデルを使用する必要があります。両方を使用しようとすると競合は起こりません。

関連する問題