写在开头

当初这个文档是基于8.6及之前的版本逐步积累的,后续发现新版本会有部分脚本的优化及调整,可能下列脚本不一定适用,未来会考虑单独开帖,如有问题请在下方留言。

本篇记录了永洪在使用过程中遇到的一些奇奇怪怪得问题及解决方案,还有一些稀奇古怪的需求的解决方案。

脚本调整柱状图的颜色

1
2
3
var d = new DefColorGuide(color);
图表1.binding.markCol["Sum_利润"].colorGuide=d
var color=new Color(0xB089EF);

执行数据失败,丢弃空的参数失败

1
2
3
4
5
6
方案1.界面默认参数为空,为参数设置默认值即可
方案2.调整界面脚本,var a =下拉参数1.getSelectedObjects()[0];
if(a!=0)
{
param['年月']=a
}/*判断参数不为空*/

超链接无效

1
2
3
一般为升级版本后部分超链接丢失.
方案1:需重新设置超链接
方案2:重新靠非依赖导入(导出资源时排斥全部,界面单独导出再导入系统)

连接MYSQL数据库中文内容乱码

1
在数据库连接配置URL后添加:?useUnicode=true&characterEncoding=utf-8

界面异常显示’Infinity’

1
计算时需判断分母不为0,此问题在7.0报错弹窗提示无穷大,8.6后显示为Infinity

更换系统jar包

1
2
3
替换jar包需停机后替换
1.将/Yonghong/product/下product-xxxx移动到非产品目录下
2.将新jar包替换进去(不用改名)

获取表格内容

1
2
3
var a = getViewData("表1");
var b= a.get(1,2);
1为行,2为列

新窗口打开界面

1
2
3
4
方法1.http://ip:端口/bi/Viewer后边增加 ?proc=0&action=viewerManager 再次打开报表查看即可
方法2.通过修改viewerManager.h5=false 7.1版本就会变为原来的flash模式了(不建议),重启Tomcat后生效
方法3.打开报表之后,按F12(或FN+F12根据自身快捷键设置选择)选择网络,可以查看具体的报表地址
方法4.在7.1.1查看报告上 空白处右键-复制链接,去新打开的网页打开即可看

界面导出EXCEL问题

1
2
3
新增参数 _EXCEL_EXPORT_TYPE_设置导出Excel的类型
默认为0,导出Dashboard页和详细数据页
设置为1时仅导出Dashboard页,设置为2时仅导出详细数据页
1
2
3
设置表格导出是否合并单元格
新增参数 _KEEP_EXCEL_DATA_SPAN_
类型为布尔

提交按钮点击提交字体对齐方式会发生变化

1
2
3
/组件文字对齐
var loc = new Locator([], OBJECT, DETAIL);
提交1.setHAlignment(loc, 0);(0为左对齐,1为居中,2为右对齐)

点击提交按钮字体颜色变化

1
2
3
4
5
6
7
8
9
10
提交时运行编辑
//提交前
var color = new Color(255,255,255);
var loc=new Locator([],OBJECT,DETAIL);
//提交后
var color1 = new Color(26,208,255);
var loc1=new Locator([],OBJECT,DETAIL);
//设置按钮字体颜色
提交1.setForeground(loc1,color1);
提交2.setForeground(loc,color);

获取当前界面链接

1
在界面空白出右击,复制链接

免密登陆

通过上面的链接然后加上下面的参数即可通过直接打开某张报表,无需登陆,适合大屏(此方法有泄密风险,不建议使用

1
URL&au_act=login&adminv=用户名&passv=密码

文本参数top绑定

1
2
3
4
文本参数topN绑定
var col = 图表1.binding.getXCol(0);
col.sortRank=parseInt(param['文本参数1']);
图表1.binding.setXCol(0, col);

永洪信息外部系统监控

1
2
3
4
5
6
7
从首页 -> 管理系统 -> 系统设置页面,在数据库连接配置区域点击选择按钮,选择数据库连接。
点击测试连接:测试所用数据库是否能连接成功。
点击创建连接:创建需要的五张表(GOPERATION、GUSERS、GACTION、GACTIONS 和GRECENTQRY)到数据库,这五张表分别用来存储仪表盘访问信息、用户登录信息、用户操作信息监控统计以及运行资源信息监控统计。
点击删除连接:删除数据库中已经存在的五张表(GOPERATION、GUSERS、GACTION、GACTIONS 和GRECENTQRY)。
将bi.properties中的配置项req.record=true,设置为true表示埋点功能打开,用户操作时,会将需要记录的功能点记录到数据库中。设置为false或者无此配置默认为埋点功能关闭;
如果有配置系统监控,则会将埋点数据记录到配置的数据库中表名为OPERATIONRDCORD
如果没有配置系统监控,则会记录到系统内嵌的derby数据库中,查询方式同系统监控其他原有表的查询,表名为OPERATIONRECORD,数据默认是300s刷新一次。

获取实时时钟并展现在界面上

1
时间.data=formatDate(now(),"yyyy-MM-dd HH:mm:ss")+" "+weekdayname(now());

列表参数组件默认选中前三个值

1
2
3
4
5
6
var a=getData("列表参数1",STRING) 
arr=[]
for(i=0;i<=3;i++){
arr=a.get(i,0)
}
列表参数1.setSelectedObjects(arr,STRING)

选中第一个值

1
2
 var a=列表参数1.getObjects()[0][0]
列表参数1.setSelectedObjects([a],STRING)

将表格一列字段内容赋值给参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var arr=[] 
var data=getViewData('表1')
for(var i=1;i<data.size();i++){
arr[i]=data.get(i,0)
}
/*function unique(arr) {
var array = [];
for (var i = 0; i < arr.length; i++) {
if (array .indexOf(arr[i]) === -1) {
array .push(arr[i])
}
}
return array;
}*/
param['a']=arr

判断当期时间是星期几

1
2
3
4
5
6
7
8
var a=new Date(dateAdd(now(),"day",-1));
var b=weekdayname(a);
debug(b)
if(b=='星期一')
{文本1.data=formatDate(dateAdd(now(),"day",-3),'yyyy-MM-dd')}
else
{文本1.data=formatDate(dateAdd(now(),"day",-1),'yyyy-MM-dd')}

计算两个日期差值

1
2
3
4
5
var st1 = (param["开始时间"]+'-01 00:00:00').replace(/-/g,"/");  
var st2 = (param["结束时间"]+'-01 00:00:00').replace(/-/g,"/");
var time1 = new Date(st1); // 开始时间
var time2 = new Date(st2); // 结束时间
var days = round((time2.getTime() - time1.getTime())/86400000/30,0);

获取最新一周周一日期

1
2
3
4
5
6
7
8
9
10
11
var nowTemp = new Date();//当前时间 
var oneDayLong = 24*60*60*1000 ;//一天的毫秒数
var c_time = nowTemp.getTime() ;//当前时间的毫秒时间
var c_day = nowTemp.getDay()||7;//当前时间的星期几
var m_time = c_time - (c_day-1)*oneDayLong;//当前周一的毫秒时间
var monday = new Date(m_time);//设置周一时间对象
var m_year = monday.getFullYear();
var m_month = monday.getMonth()+1;
var m_date = monday.getDate();
param['每周一']=formatDate(date(m_year,m_month,m_date),'yyyy-MM-dd');

获取多值返回数组

1
2
3
4
5
6
var zz=公司编号.getSelectedObjects()[0];
var i=1;
while (公司编号.getSelectedObjects()[i] !=undefined)
{zz=zz+","+公司编号.getSelectedObjects()[i];
i=i+1;}
param["组织编号参数"]=zz;

多值精确查找

1
2
3
4
var sBase=upper(文本参数1.value);
var sarr=sBase.split(",");
列表参数1.setObjects(sarr);
列表参数1.setSelectedObjects(sarr,STRING);

时分秒转换

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var a=Sum(col['审批时长'])/Sum(col['总节点']);//a为小时单位
if(a>=24)
{
rounddown(a/24,0)+'天'+
rounddown(a-(rounddown(a/24,0)*24),0)+'时'+
rounddown(((a-(rounddown(a/24,0)*24)-rounddown(a-(rounddown(a/24,0)*24),0))*3600)/60,0)+'分'+
round((a*3600)-(rounddown(a/24,0)*86400)-(rounddown(a-(rounddown(a/24,0)*24),0)*3600)-(rounddown(((a-(rounddown(a/24,0)*24)-rounddown(a-(rounddown(a/24,0)*24),0))*3600)/60,0)*60),2)+'秒'
}
else if(a<24&&a>=1)
{
rounddown(a-(rounddown(a/24,0)*24),0)+'时'+
rounddown(((a-(rounddown(a/24,0)*24)-rounddown(a-(rounddown(a/24,0)*24),0))*3600)/60,0)+'分'+
round((a*3600)-(rounddown(a/24,0)*86400)-(rounddown(a-(rounddown(a/24,0)*24),0)*3600)-(rounddown(((a-(rounddown(a/24,0)*24)-rounddown(a-(rounddown(a/24,0)*24),0))*3600)/60,0)*60),2)+'秒'
}
else if(a<1&&a>=0.016666)
{
rounddown(((a-(rounddown(a/24,0)*24)-rounddown(a-(rounddown(a/24,0)*24),0))*3600)/60,0)+'分'+
round((a*3600)-(rounddown(a/24,0)*86400)-(rounddown(a-(rounddown(a/24,0)*24),0)*3600)-(rounddown(((a-(rounddown(a/24,0)*24)-rounddown(a-(rounddown(a/24,0)*24),0))*3600)/60,0)*60),2)+'秒'
}
else if(a<0.016666)
{
round((a*3600)-(rounddown(a/24,0)*86400)-(rounddown(a-(rounddown(a/24,0)*24),0)*3600)-(rounddown(((a-(rounddown(a/24,0)*24)-rounddown(a-(rounddown(a/24,0)*24),0))*3600)/60,0)*60),2)+'秒'
}

跳转到门户

1
http://ip/bi/Viewer?proc=9&req=804&resource=portalViewer&path=门户名称

组件全选

1
年.pageSelection=true;

设置按钮颜色变化

1
2
3
4
5
6
7
8
9
//提交前
var color = new Color(255,255,255);
var loc=new Locator([],OBJECT,DETAIL);
//提交后
var color1 = new Color(26,208,255);
var loc1=new Locator([],OBJECT,DETAIL);
//设置按钮字体颜色
总览按钮.setForeground(loc1,color1);
OA按钮.setForeground(loc,color);

组件文字对齐

1
2
var loc = new Locator([], OBJECT, DETAIL);
人工成本总额.setHAlignment(loc, 0);

文本参数topN绑定

1
2
3
var col = 图表1.binding.getXCol(0);
col.sortRank=parseInt(param['文本参数1']);
图表1.binding.setXCol(0, col);

下拉参数添加默认选中值

1
2
3
getViewData("下拉参数1")
下拉参数1.setSelectedIndex(0)
param["下拉参数1"]=下拉参数1.getSelectedObjects()

在有空值的表格中可以通过下面的脚本把空值中的超链接去掉

1
2
3
4
5
6
7
8
9
10
11
var a=getViewData("表1");
for(var i=1; i < a.size(0); i++)
{
if(isNull(a.get(i,1)))
{
a.removeLink(i,1)
}
else
{
}
};

自由表格实现列累加

1
2
3
4
5
var value=0
for(var i=1;i<ridx+1;i++)
{
value=value+cell(i,cidx-1)
}

自由表格实现行累加

1
2
3
4
5
var value=0
for(var i=1;i<cidx+1;i++)
{
value=value+cell(ridx-1,i)
}

给图表标记提示信息添加隐藏字段

1
2
3
图表 1.binding.hiddenMeasures=[new MeasureCol(SUM,new BCol('销售额 
',INTEGER,false))];
销售额:{col[' 销 售 额 _ 总 和 '],number,#,##0}

鼠标移动到文本自动变化颜色

1
2
3
4
5
6
7
8
9
<style type="text/css">
a{
color:#1AD0FF;
}
a:hover{
color:#FFFFFF ;
}
</style>
<a>Adil最酷了</a>

获取勾选月份月底那天

1
2
3
4
5
var y=年.getSelectedObjects()[0];
var m=月.getSelectedObjects()[0];
var firstday=formatDate(new Date(y,m-1,1),"yyyy-MM-dd");
var lastday=formatDate(new Date(y,m,0),"yyyy-MM-dd");
param["创建日期截止日期"]=lastday;

获取所有用户

1
2
3
4
5
6
7
var a="";
var b=user.roles.length;

for(i=0;i<b;i++){
a=a+user.roles[i]+";";
}
文本1.data=a;

聚合表达式根据不同条件切换不同单位

1
2
3
4
5
6
7
8
9
10
var a=Sum(col['审批时长'])/Sum(col['总节点']);
if(a>86400)
{
round(a/86400,2)+'天'
}
else if(a<86400)
{
round(a/3600,2)+'时'
}

动态设置图表最大值最小值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var a=getData("图表1")

if(a.size()>1){

var b=round(a.get(1,1)) //获取最大值

var c=round(a.get(a.size()-1,1)) //获取最小值

}

var max=Math.floor(b*1.1/Math.pow(10,len(b)-2))*Math.pow(10,len(b)-2)

var min=Math.floor(c*0.9/Math.pow(10,len(c)-2))*Math.pow(10,len(c)-2)

var major=(max-min)/3

图表1.binding.axis["度量字段名称"].max=max//设置刻度最大值

图表1.binding.axis["度量字段名称"].min=min//设置刻度最小值

图表1.binding.axis["度量字段名称"].majorIncrement=major//设置主要刻度

根据数值大小设置单元格高低

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var row_loc;
var row_idx='';
var i = 0;

clearData("自由式表格1")
var data = getViewData("自由式表格1",DATA);

for(i=0;i<data.size();i++){
row_idx = "r-" + i.toString()
row_loc = new Locator([row_idx],ROW,DETAIL);
if(data.get(i,1)>150000){
自由式表格1.setRowHeight(row_loc,50)//设置行高
}else{
自由式表格1.setRowHeight(row_loc,20)//设置行高
}
}

模糊多值查询

1
2
3
4
if(文本参数1.value==''||isNull(文本参数1.value))
{param["文本参数"]=null}else
{param["文本参数"]=文本参数1.value.split(",")}

文本参数控制自由表格排序Top N

1
2
3
4
5
if(文本参数1.value>0){
自由式表格1.maxRows=文本参数1.value
}else{
自由式表格1.maxRows=10
}

获取当前用户的组

1
2
3
4
5
6
var a="";
var b=user.roles.length;
for(i=0;i<b;i++){
a=a+user.roles[i]+";";
}
文本1.data=a;

自由式表格精确不同求和

1
2
3
4
5
6
7
8
9
10
11
12
13
var arr = [];
var i = 0;
var str_bk = ""
var sum_salary = 0;
for (i=1;i<ridx;i++) {
str_bk = cell(i,0)
if (arr.indexOf(str_bk)<0){
arr.push(str_bk)
sum_salary = sum_salary + cell(i,2)
}
}
sum_salary

自由表格间计算列排名

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var arr=[];  
for(i=2;i<rsize-1;i++){
if (cell(i,0)!='片区小计'){
arr.push(cell(i,cidx-1))}}
rank(cell(ridx,cidx-1),arr,0)

代码解释:
var arr=[]; 创建1个空列表,用来存放前1列的内容
for 循环 用来 取前1列每个单元格内容,放入arr列表中
rsize表示 总行数 ,最后1行为 全部的合计, 因此 从i=2行开始取值,到rsize-1行结束
if (cell(i,0)!='片区小计') 当遇到 小计行的内容,不放入arr 列表中
for 循环执行完成后,得到需要排名内容的列表。
最后 用rank函数排名。
rank(参数1,参数2,参数3):参数3=0时为降序排名, 参数3=1时为升序排名

tomcat端口修改

1
2
tomcat/conf/server.xml下,查找port,改成自己想换的端口,重启服务。
各系统通用

根目录下/temp/serial文件增长过大?

1
serial文件是序列化到文件系统的数据,serial文件可以删除,删除该文件夹不会影响到系统的正常启动,不过该文件夹一般在系统重启的时候会自动删除再新建,除非是磁盘空间满了之后需要手动进行删除。大数据量入集市、组合数据集等明细查询有可能会生成大量临时文件。并不会一直无限的增加,以入集市为例,当数据量比较大时 产品内存不够用会临时存储到磁盘空间上,当任务入集市完毕,serial里的临时文件就自动删除了。