2017-02-14 9 views
0

1つの画面に複数のodataコールがあり、バッチコールではありません。私はすべての呼び出しが終了した後にイベントをトリガーしたい。私はどうしますか?すべてのodata呼び出しが完了したら、画面でどのように知りますか?

+0

を拡張するすべてのコントロールのために働くには、トリッキーなビジネスです。あなただけのテーブルやリストを使用していますか?はいの場合は方法があります –

+0

私は主に画面上にテーブルを持っています。私は5つのテーブルを5つの異なるエンティティセットから、1つの画面で読み取ることができます。 5つの異なるodataコールがあります。では、すべての通話が終了したらどのように知っていますか? – Gautami

答えて

0

sap.ui.model.odata.v2.ODataModelのイベントbatchRequestCompleted(oControlEvent)を使用できます。ドキュメントから:リクエストが成功したかどうかに関係なく、リクエストが完了した後(応答の受信を含む)、 'batchRequestCompleted'イベントが発生します。

https://sapui5.hana.ondemand.com/sdk/#docs/api/symbols/sap.ui.model.odata.v2.ODataModel.html#event:batchRequestCompleted

+0

私は一度の呼び出しを持っていません。 – Gautami

0

モデルは要求を終了するたびに呼び出されます、あなたのモデルに以下のコードを追加します。

this.getView().getModel().attachRequestCompleted(function(){console.log("complete!");});

+0

これは、単一コールが行われた場合にのみ機能します – Gautami

0

あなたがテーブルを使用している場合は、それぞれの読み取りが完了したときに通知するupdateFinishedイベントを使用することができます。あなたは

onInit: function() { 
     this.oComplete = { 
      "tab1" : false, 
      "tab2" : false, 
      "tab3" : false 
     } 

を初期化するとき

<Table headerText="tab1" 
     updateFinished="onTableUpdate" 
     items="{/Collection}"... 

    <Table headerText="tab2" 
     updateFinished="onTableUpdate" 
     items="{/Collection}"... 

    <Table headerText="tab3" 
     updateFinished="onTableUpdate" 
     items="{/Collection}"...  

あなたはフラグを維持する必要がありますチェックを維持し、各テーブルは、その更新を完了したときはtrueにこれらのフラグを設定する方法が必要になります。

onTableUpdate: function(oEvent){ 
     var oTable= oEvent.getSource(), 
      sText = oTable.getHeaderText(); 
     this.oComplete[sText] = true; 
     //Check if all read's are complete 
     if(this.oComplete["tab1"] && this.oComplete["tab2"] && this.oComplete["tab3"]){ 
      this._updateFinished(); 
     } 

    }, 

    _updateFinished : function(){ 
     //Add you logic which should run after all call's complete 
     ... 
    } 

完了したら、_updateFinishedがトリガーされます。

注:updateFinishedイベントはすべてのコールが完了しているかどうかを知るためにsap.m.ListBase

関連する問題