永洪BI开发脚本总结

tech2023-01-24  180

一、截取函数righr()函数,right函数语法:right(text,num_chars)其中text表示要截取的字符串num_chars表示截取的字符的数量

二、脚本定义文本里的字体格式:

var gf = new GFont("Arial", BOLD, 50);

var loc = new Locator([], OBJECT, DETAIL);

var col=new Color(java.awt.Color.RED)

文本1.setForeground(loc,col)

文本1.setFont(loc, gf)

三、脚本定义绑定字段的字体格式

var gf = new GFont("Arial", BOLD, 20);

  var loc = new Locator(["product"], CELL, DETAIL);  //product为绑定的字段名

  表1.setFont(loc, gf);

四、报错error ,cannot call method split of null,是因为文本的值是空的 就会报这个错,脚本修改下加个判断条件if(a!=null),例如:

var a=文本参数1.value if(a!=null){ param['a']=a.split(",")}

五、隐藏标记脚本:图表1.hiddenTip=true

六、市场分布的比例值大于合计值的比例,则红色高亮

1、新建一个文本,绑定要用的数列

2. 报表空白处右键脚本:

getViewData("文本1") param['a']=文本1.data

点击表格设置高亮,用过滤器将要用绑定的列设置为大于a。

七、参数值    参数名  用法例如:param['week']=param['_THIS_YEAR_WEEK_']

blank string      _BLANK_

last year  _LAST_YEAR_

this year  _THIS_YEAR_

next year _NEXT_YEAR_

last quarter      _LAST_QUARTER_

this quarter     _THIS_QUARTER_

next quarter    _NEXT_QUARTER_

last month       _LAST_MONTH_

this month       _THIS_MONTH_

next month      _NEXT_MONTH_

last week _LAST_WEEK_

this week _THIS_WEEK_

next week        _NEXT_WEEK_

last day    _LAST_DAY_

this day    _THIS_DAY_

next day   _NEXT_DAY_

last quarter group   _LAST_YEAR_QUARTER_

this quarter group   _THIS_YEAR_QUARTER_

next quarter group  _NEXT_YEAR_QUARTER_

last month group     _LAST_YEAR_MONTH_

this month group     _THIS_YEAR_MONTH_

next month group   _NEXT_YEAR_MONTH_

last week group       _LAST_YEAR_WEEK_

this week group       _THIS_YEAR_WEEK_

next week group      _NEXT_YEAR_WEEK_

last day group  _LAST_FULL_DAY_

this day group _THIS_FULL_DAY_

next day group         _NEXT_FULL_DAY_

last day of week      _LAST_WEEKDAY_

this day of week      _THIS_WEEKDAY_

next day of week     _NEXT_WEEKDAY_

current locale      _CURRENT_LOCALE_

八、细节表达式dateGap(col['DATE'],now(),"year");现在日期和所需要的列日期相差年数,year可以改成month代表相差月数

九、细节表达式param['_THIS_YEAR_']-col['年']可以用这个建细节表达式,这个param['_THIS_YEAR_']表示当前的年份,col['年']这个代表您那个出生年份,但是您的字段是时间戳,得变成年份才可以

十、substring(col['DATE'],0,4)截取日期

十一、参数参与sql过滤的sql语句

例一:

select * from COFFEE_CHAIN where 1=1 <Sales> and  SALES between ?{Sales} </Sales>

<Sales1>and ?{Sales1} </Sales1>

<Product_Type1> and PRODUCT_TYPE=?{Product_Type1} </Product_Type1>

例二:

select    a.customerlotno,a.customertypename, TRIM(a.productionorderno) DD,

max(a.actiondate) as DT,sum(case when actionid=6 then 1 else 0 end) as ZQ,

sum(case when actionid=1 then 1 else 0 end) as WQ

from finishedproductlog  a

where  1=1 

<a> and a.actiondate between ?{a} </a>

<b> and ?{b} </b> and

a.actionid != 3 and a.actionid !=15

and (a.productionorderno like 'AC0%' OR a.productionorderno LIKE 'AC1%' OR a.productionorderno LIKE 'AC4%')

AND a.actiondate >=TRUNC(SYSDATE)-90

group by a.productionorderno,a.customerlotno,a.customertypename

例三:

select * from COFFEE_CHAIN <Product_Type> where PRODUCT_TYPE=?{Product_Type} </Product_Type>

例四:

select * from COFFEE_CHAIN where 1=1 

<Sales> and  SALES between ?{Sales} </Sales>

<Sales1> and ?{Sales1} </Sales1>

<Product_Type1> and PRODUCT_TYPE=?{Product_Type1} </Product_Type1>

十三、

不允许下拉参数自由选择:

if(下拉参数1.getSelectedObjects()[0]=='1'){

下拉参数2.setSelectedObjects(['3'],STRING);

}else if(下拉参数1.getSelectedObjects()[0]=='2'){

下拉参数2.setSelectedObjects(['4'],STRING);

}

允许第二个下拉参数自由选择:

var a; //设置一个变量,若是脚本不等于这个变量就按下边的两个if else执行

if(下拉参数1.getSelectedObjects()[0]!=a){

if(下拉参数1.getSelectedObjects()[0]=='1'){

下拉参数2.setSelectedObjects(['3'],STRING);

a=下拉参数1.getSelectedObjects()[0];    脚本等于这个变量了,中间的两个if else 无效,2个下拉参数自由选择。

}else if(下拉参数1.getSelectedObjects()[0]=='2'){

下拉参数2.setSelectedObjects(['4'],STRING);

a=下拉参数1.getSelectedObjects()[0];

}}

十四、参数组件、过滤组件默认全选:     装载时运行:         var a=getData('列表过滤1');//列表过滤1是列表过滤的名字,getData()可以获取列表过滤中绑定的值,以grid的形式返回。         var Vsize=a.size();//获取grid的行数         var arr1=new Array();         for(i=Vsize-1;i>0;i--){         arr1[i]=a.get(i,0);         }         getViewData("列表过滤1");         列表过滤1.setSelectedObjects(arr1, STRING); 如果设置脚本后,组件右键清空、反选不可用,需要额外添加一句脚本: 列表参数1.pageSelection = false;//需要设置pageSelection为false,运行一次后可将该句脚本可删除,如果不删除建议放到脚本第一行

十五、文本脚本

Var y1=year(now());

Var m1=month(now());

Var d1=dayr(now());

文本1.data=’截止’+y1+’年’+m1+’月’+d1+’日,在网上任务数总计’+在网.data+’项,所选季度新增’+新增.Data+’项。’;

getViewData(“新增”)//新增和在网都是组件名,获取实时数据

十六、parseDate和formatDate的区别,引申的还有dateAdd和dateGap的用法,datePart返回日期指定的field的值,例如返回的日期是一年的第几天。日期时间是个大类包括时间、日期、时间戳。同比环比必须用时间戳来实现看连接

https://www.yonghongtech.com/webbbs/forum.php?mod=viewthread&fid=44&tid=1914&highlight=%E8%84%9A%E6%9C%AC

看截图

十七、更换y轴字段通过刷新组件。

var a = toString(图表1.binding.getYCol(0));//转换成字符串

var col1 = new ChartDimCol(new BCol("MARKET",STRING,false));

if(a.indexOf('Sum_SALES')==-1){     //使用indexOf的用法获取字符串中第一个出现的字段,-1代表没出现。

    var col = ChartMeasureCol(SUM,new BCol("SALES",DOUBLE,false),null);

    图表1.binding.clearYCols();

    图表1.binding.addYCol(col); 

}else {

    var col = ChartMeasureCol(SUM,new BCol("PROFIT",DOUBLE,false),null);

    图表1.binding.clearYCols();

       图表1.binding.addYCol(col);

}

表格一列的设置超链接刷新,没刷新一次还换一行,其他组件都跟着变

var c = getData('图表1').get(1,0);//获取现在柱状图绑定的

var b=getData('表1');//获取表1绑定的数据

for(var i=0;i<b.size();i++){

if(c==b.get(i,0)){

if(i==b.size()-1){//当前图表1上的数据是表1的最后一个时

param['a']=b.get(1,0);//让图表1绑定表1的第一个数据

}else{

param['a']=b.get(i+1,0);//让图表1绑定表1的后一个数据

}

}

}

十九、使用单元格尺寸隐藏表格某列回复方法

1、普通表

    var loc = new Locator(["省份"], COL, DETAIL);

    表1.setColWidth(loc,200);//200为像素

2、自由表

    var loc = new Locator(['c-i'],COL,DETAIL);// 第一列 i 取 0,第 二列为 1,依次类推

    自由式表格1.setColWidth(loc,200);

3、交叉表

    var loc=new Locator(["市场分布","Sum_总成本"],COL,DETAIL)  //市场分布为列表头字段

    交叉表1.setColWidth(loc,20);

二十、文本拼接带有数据的,如何保留位数和单位

getViewData("文本10")

文本15.data='今日:'+(文本10.data/100000000).toFixed(2)+'亿'

保留2位小数,单位为亿

文本2.data = "hahaha"+formatNumber(getViewData("文本1"),"#,##0.##%");带百分号

二十一、将自由表的列循环表示

var a=getViewData("自由式表格1") //获取自有表格1数据

var b=a.size() //定义行数变量

var d = 0;

for(k=4;k<25;k=k+4){ //循环列数,每隔四列会出现审核效果这列

var c=new Array() //创建数组

for(i=0;i<b;i++){ //循环行数

c[i-2]=a.get(i,k) //生成数组,c[i-2]代表从第三行开始生成数组,因为前两行是表头

}

for(var j = 0;j<c.length;j++){ //数组循环相加

d = d+c[j];

}

}

if(d==0){ //如果相加等于0则正常否则异常

文本2.data="环节审核正常"

}else{

文本2.data="环节审核不正常"

}

//debug("d="+d)

效果图:

二十二、1.丢弃小数部分,保留整数部分

parseInt(5/2)

2.向上取整,有小数就整数部分加1

Math.ceil(5/2)

3,四舍五入.

Math.round(5/2)

4,向下取整

Math.floor(5/2)

二十三、提交组件背景颜色和字体颜色

var color=new Color(0xDD7D47);//橙色 var color1=new Color(0xFFFFFF);//白色 var color2=new Color(0x000000);//黑色 var loc=new Locator([],OBJECT,DETAIL); 提交1.setBackground(loc, color); 提交1.setForeground(loc, color1);

二十四、判断列表参数是否全选:

if(列表参数1.getObjects().length==列表参数1.getSelectedObjects().length){

 全选

}else{

 不全选

}//length==0可以判断为不选

判断列表过滤是否全选

if((getData('列表过滤1').size()-1) == 列表过滤1.getSelectedObjects().length){ debug('1111111') }//-1是去掉标题头

二十五、下拉参数设置日期默认值

var a = now()

//debug(a)

var b=formatDate(a,'yyyyMM')

//debug(b)

getViewData("下拉参数1")

下拉参数1.setSelectedObjects([b],STRING)

二十六、脚本执行顺序问题可以使用cleardata("biao")

 

最新回复(0)