Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript BIRT中的全局函数和全局变量,并从元素的onRender访问它_Javascript_Java_Birt_Crosstab_Onrender - Fatal编程技术网

Javascript BIRT中的全局函数和全局变量,并从元素的onRender访问它

Javascript BIRT中的全局函数和全局变量,并从元素的onRender访问它,javascript,java,birt,crosstab,onrender,Javascript,Java,Birt,Crosstab,Onrender,我正在编写BIRT交叉表报告。在我的报告中,我需要创建一个全局数组变量,并需要根据交叉表的列计数填充数组变量。我正在计算交叉表的onRender事件中的columnCount,我需要将此值传递给全局函数,并根据全局函数的结果填充全局变量。然后在一些其他交叉表或相同的交叉表中,我需要访问这个数组变量 columnCount = 1; counter = 1; names=new Array(); names.push(''); /* for 0th position */ func

我正在编写BIRT交叉表报告。在我的报告中,我需要创建一个全局数组变量,并需要根据交叉表的列计数填充数组变量。我正在计算交叉表的onRender事件中的columnCount,我需要将此值传递给全局函数,并根据全局函数的结果填充全局变量。然后在一些其他交叉表或相同的交叉表中,我需要访问这个数组变量

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);
}
简单地说,我正在生成列名A、B、C…Z、AA、AB…等,根据crosstab中数据元素的onRender中生成的列计数,我需要通过将此计数传递给全局函数来填充数组变量,然后函数返回它作为参数1-A、2-B、3-C…26-Z接收的数字的excel名称,27-AA…等此结果被添加到数组变量中。此数组变量将在数据元素onRender的交叉表的另一行中使用,我无法使用dataset执行此操作,因为交叉表中应用了排序函数以克服交叉表的默认排序


我怎样才能做到这一点,或者用其他简单的方法来处理这个问题呢?

我明白了。一个不小心的小错误花了4天时间1.我按如下方法解决了它

在报表初始化事件中初始化全局变量和函数。通过传递计数器值从交叉表数据元素的onRender事件调用此函数,该函数将获取此计数器值,并找到其等效的列名称并插入全局变量

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时数据元素的更改方式