BIRT Palette脚本:如何访问数据集行

时间:2011-11-26 11:37:23

标签: birt

如果我想根据图表中未使用的字段更改散点图中圆圈的颜色,那么如何在脚本中使用该列。我的意思是如何获得该数据...例如

if(row [v_count])> 2 填补红色......

确切代码如下

function beforeDrawDataPoint(dph, fill, icsc)
{
//Fill implements Fill interface 
//ImageImpl
//ColorDefinitionImpl
//GradientImpl
//MultipleFillImpl
//EmbeddedImageImpl
//PatternImageImpl

importPackage( Packages.org.eclipse.birt.chart.model.attribute.impl );
val = dph.getOrthogonalValue();
if( fill.getClass().isAssignableFrom(ColorDefinitionImpl)){
if (row[v_count]>2){
    fill.set(255, 0, 0);
}
}
}

但我不知道我是否在脚本中获得了v_count列。是否有一些函数来获取该列?

我的意思是,如果我们根据数据绑定列中的列进行一些计算...没有在x或y轴上使用,那么我们如何在脚本中访问该列...是否有某种函数用于那..我试过了行[“v_count”],但它没有用。

阿里夫

2 个答案:

答案 0 :(得分:1)

您可以使用"持久性全局变量"。在报表的任何位置,您都可以编写以下内容来存储和加载全局变量。请注意,您不能存储整数但只能存储字符串(但在加载后,您可以将字符串转换回其他类型)。您可以将列的值存储在图表上方不可见数据字段的脚本中,因此在图表中可以读取值。

//store a value
reportContext.setPersistentGlobalVariable("varName", "value");
//load the value
var load = reportContext.getPersistentGlobalVariable("varName");

答案 1 :(得分:0)

我花了一天的样子,但我没有找到解决方案,这是我的同事谁给我:) 所以我分享。

在我的例子中,我必须为每个新年创建一个垂直标记

function beforeGeneration(chart, icsc)
{

    importPackage(Packages.org.eclipse.birt.chart.model.component.impl);
    importPackage(Packages.org.eclipse.birt.chart.model.data.impl);
    importPackage(Packages.org.eclipse.birt.chart.model.attribute);
    importPackage(Packages.org.eclipse.birt.chart.model.attribute.impl);

    var chart = icsc.getChartInstance();
    var yAxis = chart.getBaseAxes()[0];

    //get date series for my case
    series = yAxis.getRuntimeSeries();

    // but if you have multiple series ... (for exemple xaxis)
    for (i = 0; i < series.length; i++){
        var values = series[i].getDataSet().getValues();

        for (j = 0; j < values.length; j++){
            if(j > 1){
                var date1 = values[j-1];
                var date2 = values[j];
                if(date1.getYear() < date2.getYear()){
                    min_ml = MarkerLineImpl.create(yAxis, NumberDataElementImpl.create(j));
                    min_ml.getLabel().getCaption().setValue("Nouveau boitier");
                    min_ml.getLineAttributes().getColor().set(255,0,0);
                }           
            }

        }

    }
}