2016-09-06 5 views
0

XMLビューでは、ステータスが異なる3つのタイルがあります。特定のタイルをクリックすると、このステータスに基づいてテーブルデータが表示される別のXMLに移動する必要があります。タイルクリックで他のビューに移動できます。しかし、私のテーブルは、その特定のステータスのデータを表示するのではなく、すべてのデータを表示します。私は、対応するタイルがクリックされたときにのみオープンステータスデータを表示したい:ODataテーブルのデータは、sapui5のタイルクリックに基づいて表示されます。

Tile View

Table View

私はoModel.read()を使用してタイルに状態の数だけを表示します。 タイルにカウントが

oModel.read("/ServiceRequestCollection?$filter= CustomerID eq '1001192'", { 
     success: function(oData, response) { 
     var fld = []; 
     fld = oData.results; 
     var x = []; 
     var count1 = 0; 
     var count2 = 0; 
     var count3 = 0; 
     for (var i = 0; i < oData.results.length; i++) { 
     var p1 = "1001190"; 
     var obj = fld[i]; 
     if(x[obj.ProductID] === p1) { 
     x[obj.ServiceRequestLifeCycleStatusCodeText] = [obj.ServiceRequestLifeCycleStatusCodeText]; 
     x[obj.ServiceRequestLifeCycleStatusCodeText].push(obj); 
     // console.log(x); 
     } 
     if (fld[i].ServiceRequestLifeCycleStatusCodeText === "Open") { 
     var OpenArray = []; 
     count1 = count1 + 1; 
     OpenArray.push(count1); 
     OpenArray = {tilearray:OpenArray}; 
     var oVizFrame3Model = new sap.ui.model.json.JSONModel(OpenArray); 
     var oTile = oView.byId("opentile"); 
     oTile.setModel(oVizFrame3Model); 
     oTile.setNumber(count1); 
     // return OpenArray; 
     } else { 
     if (fld[i].ServiceRequestLifeCycleStatusCodeText === "In Process") { 
     var InProcessArray = []; 
     count2 = count2 + 1; 
     InProcessArray.push(count2); 
     InProcessArray = {tilearray:InProcessArray}; 
     oVizFrame3Model = new sap.ui.model.json.JSONModel(InProcessArray); 
     oTile = oView.byId("inprocesstile"); 
     oTile.setModel(oVizFrame3Model); 
     oTile.setNumber(count2); 
     // return TileData; 
     } 
     } 
     if (fld[i].ServiceRequestLifeCycleStatusCodeText === "Completed") { 
     var CompletedArray = []; 
     count3 = count3 + 1; 
     CompletedArray.push(count3); 
     CompletedArray = {tilearray:CompletedArray}; 
     oVizFrame3Model = new sap.ui.model.json.JSONModel(CompletedArray); 
     oTile = oView.byId("completedtile"); 
     oTile.setModel(oVizFrame3Model); 
     oTile.setNumber(count3); 
     // return TileData; 
     } 
     } 
     } 
     }); 

テーブルデータは、そのビューに異なる配列からロードされたコードを使用して表示されます。これを達成する方法についての提案を提供してください。

答えて

0

フィルタを使用してデータをフィルタリングする必要があります。私はあなたにOpenとしてのステータスのためにそれを行うコードを示しています。ここで 'iHome1'はあなたのテーブルのIDです。

var filters = []; 

var f1 = new sap.ui.model.odata.Filter('CustomerID', [{operator:"EQ",value1:"1001192"}]); 
var f2 = new sap.ui.model.odata.Filter('Status', [{operator:"EQ",value1:"SALESREP"}]); 
      filters.push(f1); 
      filters.push(f2); 
      var oModel = new sap.ui.model.odata.ODataModel("/ServiceRequestCollection", 
        false); 
      var oHtable1 = sap.ui.getCore().byId("iHome1") 
      oHtable1.setModel(oModel); 
      oHtable1.bindRows({path:"/ServiceRequestCollection", filters: filters} ); 
+0

ご協力ありがとうございました。私はあなたの提案に似た何かを試し、それぞれの状態のために3つの別々の配列を得ました。タイルがクリックされたイベントも取得できます。私ができないのは、それぞれのタイルがクリックされたときに特定の配列をテーブルにバインドすることです。 –

+0

開いているタイルをクリックすると、3つの配列のうちの1つだけをバインドできます。正しいパスを使用しているのか、自分のコードを変更する必要があるのか​​、あなたの提案をしてください。 –

+0

専門家が同じことについての提案をしてくれれば非常に役に立ちます。 –

関連する問題