Глобальная функция и глобальная переменная в 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.