Сценарии BIRT Palette: как получить доступ к строке набора данных - PullRequest
3 голосов
/ 26 ноября 2011

Если я хочу изменить цвет кругов на точечной диаграмме на основе поля, не используемого на диаграмме, то как использовать этот столбец в сценарии.Я имею в виду, как я могу получить эти данные ... например

If (строка [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, то как нам получить доступ к этому столбцув скрипте .. есть какая-то функция для этого .. Я попробовал row ["v_count"], но он не работает.

Arif

Ответы [ 2 ]

1 голос
/ 06 февраля 2015

Вы можете использовать «постоянные глобальные переменные». В любом месте вашего отчета вы можете написать следующее для хранения и загрузки глобальной переменной. Обратите внимание, что вы не можете хранить целые числа, а только строки (но после загрузки вы можете привести ваши строки обратно к другим типам). Вы можете сохранить Значение вашего столбца в Сценарии невидимого поля данных, расположенного над вашей диаграммой, поэтому внутри вашей диаграммы вы можете прочитать значение.

//store a value
reportContext.setPersistentGlobalVariable("varName", "value");
//load the value
var load = reportContext.getPersistentGlobalVariable("varName");
0 голосов
/ 20 октября 2016

Я провожу свой день, но я не нашел решения, это мой коллега, который дает мне :) Так что я делюсь.

в моем примере мне пришлось создавать вертикальный маркер для каждого нового года

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);
                }           
            }

        }

    }
}
...