我试图在表和图表上一起显示结果数据。例如:用户提供一个值作为输入,并且必须对服务器进行查询以根据用户输入过滤表并为结果提供结果。

我在表上实现过滤器,然后将过滤后的结果集绑定到表。我写下面的代码工作正常。

var oModel = new sap.ui.model.odata.ODataModel( "../TEST_ODATA.xsodata",false);
oTable.setModel(oModel);
var oFilter=new sap.ui.model.Filter("SUPPLIERID",sap.ui.model.FilterOperator.EQ,oInput1.getValue());
oTable.getBinding("rows").filter(oFilter);
var NumberOfRows = oTable.getBinding("rows").iLength;
oTable.setTitle("Title1" + "(" + NumberOfRows + ")");
oTable.placeAt("content");


现在,我也需要将ofilter绑定到图表,并且编写以下代码,该代码无法正常工作。

var oDataset = new sap.viz.ui5.data.FlattenedDataset({
    dimensions : [{axis : 1, name : 'SUPPLIERID', value : "{SUPPLIERID}"},{axis : 2, name : 'MATERIALNUMBER', value : "{MATERIALNUMBER}"}],
    measures : [{name : 'Result', value : '{Result}'}],
    data : {
  path : "/service_path"
  }});

var oStackChart = new sap.viz.ui5.StackedColumn({
  width : "80%",
  height : "400px",
  plotArea : {'colorPalette' : d3.scale.category20().range()},
  title : {visible : true,text : 'Title2'},
  dataset : oDataset});

oStackChart.setModel(oModel);
var oFilter=new sap.ui.model.Filter("SUPPLIERID",sap.ui.model.FilterOperator.EQ,oInput1.getValue());
oStackChart.getBinding("rows").filter(oFilter);
oStackChart.placeAt("content");


任何人都可以建议更改我的代码来这样做。请帮助。

谢谢

最佳答案

您可以将过滤器添加到FlattenedDataset像

var oDataset = new sap.viz.ui5.data.FlattenedDataset({
  dimensions : aDimensions,
  measures : aMeasures,
  data : {
    path : sEntity,
    filters: [oFilter],
    parameters: {select: 'ProductID,UnitPrice,Quantity'}
  }
});


请参阅JsBin: Flattened DataSet bound to OData Entity with filter按单价的产品销售,过滤器位于ProductID上

注意,我使用“参数”来减少返回的列,我还要求使用JSON而不是XML,这样可以大大减少返回的有效负载

var oModel = new sap.ui.model.odata.ODataModel(sURI, true);

10-05 20:52
查看更多