Javascript 获取SAPUI5 VizFrame';dataPointStyle规则回调中的s id
我通过循环从我的Javascript 获取SAPUI5 VizFrame';dataPointStyle规则回调中的s id,javascript,sapui5,sap-fiori,Javascript,Sapui5,Sap Fiori,我通过循环从我的Odata服务得到的响应来生成一些动态vizframe柱形图。我对图表的一个要求是根据数据中字段的值以不同的颜色显示列。我们称之为验证状态 关于如何在正常情况下通过使用setVizProperties方法并为dataPointStyle属性设置规则来实现这一点,我有一个相当好的想法。如果我对所有图表和所有值都有相同的标准,这仍然是可能的。但事实并非如此,因为我需要逐个检查每条记录以确定其状态。因此,我考虑使用dataPointStyle的回调功能。但这里的问题是,虽然它给了我上下
Odata
服务得到的响应来生成一些动态vizframe
柱形图。我对图表的一个要求是根据数据中字段的值以不同的颜色显示列。我们称之为验证状态
关于如何在正常情况下通过使用setVizProperties
方法并为dataPointStyle
属性设置规则来实现这一点,我有一个相当好的想法。如果我对所有图表和所有值都有相同的标准,这仍然是可能的。但事实并非如此,因为我需要逐个检查每条记录以确定其状态。因此,我考虑使用dataPointStyle
的回调功能。但这里的问题是,虽然它给了我上下文,但它没有告诉我这个回调是从哪个图表触发的。我的想法是,如果我得到图表名称或它的参考,那么我可以访问它的模型并确定颜色
因此,如果我能以某种方式从触发回调的位置获取vizframe
的引用,它将解决我的问题
回调
说明:
function(data,extData){…}=>true | false
用于确定给定数据是否与规则匹配的函数。参数:
数据是一个对象,所有绑定字段ID作为键,相应的值作为值。它有助于将其视为包含在代码>数据DATAPON/<代码> >代码>鼠标> <代码>代码>工具提示> /代码>中的所有对象。如果在FlatTableDataset
上下文字段中设置了未绑定维度或度量值,则相关的键/值对也将包含在此参数中。
extData
是一个对象,所有其他测量字段与当前数据点在同一行。测量ID作为键,测量相应的值作为值。它有助于比较不同度量之间的值
我的数据如下所示:
[{
"RunLogId": "0000000040",
"RuleId": "00016",
"CreatedOn": "2020-07-21",
"CreatedAt": "09:44:35",
"NAV_SUBSCRIBED_LOGS": {
"results": [
{
"RunLogId": "0000000040",
"Sequence": "00001",
"RuleId": "00016",
"Variation": "-3.94",
"ValidationStatus": "F",
"Dimension": "ABC"
},
{
"RunLogId": "0000000040",
"Sequence": "00002",
"RuleId": "00016",
"Variation": "1.04",
"ValidationStatus": "S",
"Dimension": "DEF"
}
]
}
},
{
"RunLogId": "0000000033",
"RuleId": "00014",
"CreatedOn": "2020-07-15",
"CreatedAt": "11:10:09",
"NAV_SUBSCRIBED_LOGS": {
"results": [
{
"RunLogId": "0000000033",
"Sequence": "00001",
"RuleId": "00014",
"Variation": "-2.36",
"ValidationStatus": "F",
"Dimension": "ABC"
},
{
"RunLogId": "0000000033",
"Sequence": "00002",
"RuleId": "00014",
"Variation": "-5.05",
"ValidationStatus": "F",
"Dimension": "DEF"
}
]
}
}]
我的代码如下所示:
for (var i = 0; i < chartsCount; i++) {
var oModel = new JSONModel();
var chartData = aSubscriptions[i].NAV_SUBSCRIBED_LOGS.results;
var aDimensions = [];
var aDimFeeds = [];
aDimensions.push({
name: "Dimension",
value: "{Dimension}"
});
aDimFeeds.push("Dimension");
oModel.setData(chartData);
oModel.refresh();
var oDataset = new FlattenedDataset({
dimensions: aDimensions,
measures: [{
name: "Variation",
value: "{Variation}"
}],
data: {
path: "/"
}
});
var oVizFrame = new VizFrame();
oVizFrame.setVizType("column");
oVizFrame.setHeight("450px");
oVizFrame.setDataset(oDataset);
oVizFrame.setModel(oModel);
var feedValueAxisActual = new sap.viz.ui5.controls.common.feeds.FeedItem({
"uid": "valueAxis",
"type": "Measure",
"values": ["Variation"]
}),
feedCategoryAxis = new sap.viz.ui5.controls.common.feeds.FeedItem({
"uid": "categoryAxis",
"type": "Dimension",
"values": aDimFeeds
});
oVizFrame.addFeed(feedValueAxisActual);
oVizFrame.addFeed(feedCategoryAxis);
oVizFrame.setVizProperties({
plotArea: {
dataPointStyle: {
"rules": [
{
callback: function (oContext, extData) {
that.checkValue(oContext, "S");
},
"properties": {
"color": "sapUiChartPaletteSemanticGoodLight1"
},
"displayName": "Successful"
}
, {
callback: function (oContext, extData) {
that.checkValue(oContext, "F");
},
properties: {
color: "sapUiChartPaletteSemanticBadLight1"
},
"displayName": "Failed"
}
],
others: {
properties: {
color: "sapUiChartPaletteSemanticNeutral"
},
"displayName": "Undefined"
}
}
}
});
//Chart Container
var oChartContainer = new ChartContainer();
var oChartContainerContent = new ChartContainerContent();
oChartContainerContent.setContent(oVizFrame);
oChartContainer.addContent(oChartContainerContent);
}
for(变量i=0;i
我不确定我是否理解正确,但无论如何我会试一试。如果我错了,请告诉我
在循环中创建图表。您希望在回调中访问特定图表
您为什么不在回调中访问oVizFrame
首先,我将用forEach
替换for循环forEach
为数组中的每个元素调用给定函数:
assubscriptions.forEach(函数(ossubscription){
康斯特o