亿信ABI
当前版本:BI4.7

计算前脚本执行sql情景案例

1. 需求

在计算报表模板前执行自定义的一段sql语句

2. 情景一

执行一段查询sql,且这段sql中用到报表模板的维下拉参数,参数可多选

脚本样例:


计算前脚本执行sql情景案例


import com.esen.jdbc.*;
import com.esen.platform.server.*;
import java.sql.ResultSet;
ConnectionFactory confac = EsenServer.getConnFactory("");
SqlExecuter executer = SqlExecuter.getInstance(confac);
try{
String sql = "select max(a.PRICE) as B1,max(a.NUM) as C1,max(a.SALES) as D1,a.ID as A1,max(a.NAME) as mc_A10 from ALLBOOK a where (";
String p_tsfl = params.getValue("@cs");
String[] p_tsfls = p_tsfl.split("|");
for(int i = 0; i < p_tsfls.length; i++){
 if(i == 0){
  sql += "a.ID like "" + p_tsfls[i] + "%"";
 }else{
  sql += " or a.ID like "" + p_tsfls[i] + "%"";
 }
}
sql += ") group by a.ID";
System.out.println("sql=" + sql);
ResultSet rs;
try{
 rs = (ResultSet)executer.executeSql(sql);
 while (rs.next()) {
  System.out.println(rs.getString(1) + "	" + rs.getString(2) + "	" + rs.getString(3) + "	" + rs.getString(4) + "	" + rs.getString(5));
 }
}finally{
 rs.close();
}
}finally{
  executer.close();
}

脚本中@cs是报表模板中参数的参数名称

3. 情景二

报表模板计算前执行一段更新sql(insert,delete,update等等)

脚本样例:


import com.esen.jdbc.*;
import com.esen.platform.server.*;
import java.sql.ResultSet;
ConnectionFactory confac = EsenServer.getConnFactory("");
SqlExecuter executer = SqlExecuter.getInstance(confac);
try{
String sql = "insert into AUGE_TOTALINFO (farendma, baobleix, jiaoyirq, bbjigouh, zongzquj, baobbizh, kemuhaoo, bnbwbioz, kemujibi, kemumnch, bwbzhong, jibzhsbs, mocekmbz, sqjiefye, sqdaifye, bqjffshe, bqdffshe, bqijfyue, bqidfyue, bqjfbish, bqdfbish, xjjfbish, xjdfbish, xjjffshe, xjdffshe, zzjfbish, zzdfbish, zzjffshe, zzdffshe, weihguiy, weihjigo, weihriqi, shijchuo, jiluztai, ods_timestamp, ysqjiefye, ysqdaifye, ybqjffshe, ybqdffshe, ybqijfyue, ybqidfyue) values ("9999", "1", "20170602", "1010", "0", "01", "660208", "0", 2, "差旅费", "01", "1", "1", 1237.33, 0, 0, 0, 1237.33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1237.33, 0, "B99991", "0000", "20170320", 1492785609043, "0", to_timestamp("22-06-2017 17:24:06.000000", "dd-mm-yyyy hh24:mi:ss.ff"), null, null, 0, 0, null, null)";
System.out.println("sql=" + sql);
executer.executeSql(sql); 
}finally{
  executer.close();
}


4. 情景三

计算前脚本调用存储过程

脚本样例:


import com.esen.jdbc.*;
import com.esen.platform.server.*;
import java.sql.ResultSet;
ConnectionFactory confac = EsenServer.getConnFactory("");
SqlExecuter executer = SqlExecuter.getInstance(confac);
try{
//传参情况,@p1是参数名,p_test2_copy是存储过程名
String p1 = params.getValue("@p1");
    exe.executeSql("{call p_test2_copy('1','"+p1+"')}");
//不传参情况
//  exe.executeSql("{call p_test2_copy()}");
//p_test2_copy是存储过程名称
}finally{
  executer.close();
}

附件列表

1

文档内容仅供参考
如果您需要解决具体问题,还可以登录亿信社区
在提问求助板块提问,30分钟内帮您解决问题

如果您认为本词条还有待完善,请编辑

上一篇行收缩脚本

下一篇多彩门户如何配置导航树默认隐藏

请先登录