簡體   English   中英

BIRT中的全局函數和全局變量,並從元素的onRender訪問

[英]global function and global variable in BIRT and access it from onRender of an element

我正在研究BIRT交叉表報告。 在我的報告中,我需要創建一個全局數組變量,並需要根據交叉表的列數填充該數組變量。 我正在計算交叉表的onRender事件中的columnCount,並且我需要將此值傳遞給全局函數,並且從全局函數的結果中需要填充全局變量。 然后在其他一些交叉表或相同的交叉表中,我需要訪問此數組變量。

我只是根據交叉表中數據元素的onRender生成的列數來生成列名A,B,C ... Z,AA,AB ...等,我需要通過傳遞此數來填充數組變量到全局函數,然后該函數返回它作為參數接收的數字的excel名稱(例如1-A,2-B,3-C,.... 26-Z,27-AA ...等)將結果添加到數組變量中。此數組變量將在數據元素onRender的交叉表的另一行中使用,我無法使用數據集執行此操作,因為在交叉表中應用了排序功能(以克服交叉表的默認排序方式)。

我如何才能實現這一目標,或其他任何簡便的方法來實現這一目標?

我知道了。 一個小小的粗心的錯誤花了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++;

這就是通過onRender事件導出到excel時如何更改數據元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM