Глобальная функция и глобальная переменная в BIRT и доступ к ней из onRender элемента

Я работаю над отчетом о кросс-таблице BIRT. В моем отчете мне нужно создать глобальную переменную массива и заполнить переменную массива на основе количества столбцов кросс-таблицы. Я вычисляю columnCount в событии onRender кросс-таблицы, и мне нужно передать это значение в глобальную функцию, а из результата глобальной функции нужно заполнить глобальную переменную. Затем в другой кросс-таблице или той же кросс-таблице мне нужно получить доступ к этой переменной массива.

Просто я генерирую имена столбцов A,B,C...Z,AA,AB... и т. Д., Основываясь на количестве столбцов, сгенерированном в onRender элемента данных в кросс-таблице, мне нужно заполнить переменную массива, передав этот счетчик в глобальную функцию, а затем функция возвращает имена Excel для числа, полученного в качестве параметра (например, 1-A,2-B,3-C,....26-Z,27-AA... и т. д.) результат добавляется в переменную массива. Эта переменная массива будет использоваться в другой строке кросс-таблицы элемента данных onRender, я не могу сделать это с набором данных, потому что в кросс-таблице применяется функция сортировки (для преодоления сортировки по умолчанию кросс-таблицы).

Как я могу добиться этого, или любой другой простой способ справиться с этим?

1 ответ

Я понял. Небольшая неосторожная ошибка заняла 4 дня. Я решил ее следующим образом.

Инициализируйте глобальную переменную и функцию в отчете. Инициализируйте событие. Вызывая эту функцию из события onRender элемента кросс-таблицы с передачей значения счетчика, функция получает значение этого счетчика и находит его эквивалентное имя в Excelcolumn и вставляет в глобальную переменную.

columnCount = 1;
counter = 1;
names=new Array();
names.push('');     /* for 0th position */    
function toName(number)
{
    name = "";
    while(number>0)
    {
        modulo = (number-1)%26;
        name = String.fromCharCode(65 + modulo).toString()+name;
        number = parseInt((number-modulo)/26);  
    }
    names.push(name);
}

Приведенный выше код объявлен в событии инициализации отчета.

Затем в элементе данных передайте значение счетчика функции следующим образом. а затем увеличить счетчик.

toName(columnCount);
columnCount++;

Затем в элементе данных, для которого мне нужно имя столбца Excel, чтобы задать формулу Excel, метод onRender этого элемента получает значение массива для индекса счетчика.

if(counter==columnCount)
{
    counter=1;
}   
this.setDisplayValue(names[counter]);
counter++;

Вот как изменяется элемент данных при экспорте в Excel по событию onRender.

Другие вопросы по тегам