...
代码块 | ||||||
---|---|---|---|---|---|---|
| ||||||
package smartbi.ext.function.upgrade; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Timestamp; import org.apache.log4j.Logger; import smartbi.repository.UpgradeTask; import smartbi.util.DBType; /** * */ public class UpgradeTask_New extends UpgradeTask { /** */ private static final Logger LOG = Logger.getLogger(UpgradeTask_New.class); @Override public boolean doUpgrade(Connection conn, DBType type) { PreparedStatement prep = null; try { Statement sta = conn.createStatement(); ResultSet rs = sta.executeQuery("select c_resid from t_restree where c_resid = 'func_Process1000LimitOfIn'"); if(!rs.next()){ prep = conn.prepareStatement("insert into t_restree(c_resid, c_resname, c_resalias, c_pid, c_restype, c_order, c_perm, c_resdesc, c_created, c_lastmodified) values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); prep.setString(1, "func_Process1000LimitOfIn"); prep.setString(2, "Process1000LimitOfIn"); prep.setString(3, "Process1000LimitOfIn"); prep.setString(4, "catalog_string"); prep.setString(5, "FUNCTION"); prep.setInt(6, 9000); prep.setString(7, "<Permissions inherited=\"YES\" role=\"ADMINS\"><Permission perm=\"READ\" descend=\"FOLDER_FILE\"/></Permissions>"); prep.setString(8, "处理多选树参数或下拉框参数超过1000时报错问题,如Process1000LimitOfIn(\"A\",下拉参数)。<br/> 参数1:要过滤的字段名(如 table1.A),如果是可视化查询直接拖字段,如果是原生sql,字段最好加英文双引号,如\"table1.A\";参数2:树参数或下拉框参数 <br/>返回值:每超过1000个值生成一个or(如(A in (a,b,c。。。) or A in (d,e,f。。。)) )"); prep.setTimestamp(9, new Timestamp(new java.util.Date().getTime())); prep.setTimestamp(10, new Timestamp(new java.util.Date().getTime())); prep.executeUpdate(); prep.close(); } rs.close(); sta.close(); return true; } catch (SQLException e) { LOG.error("Upgrade UpgradeTask_New '" + this.getClass().getPackage().getName() + "' to " + getNewVersion() + " fail.", e); return false; } } @Override public String getNewVersion() { return "0.0.1"; } } |
2.3 手动方式增加自定义函数
前面讲了使用升级类添加自定义函数方式,加入不想写升级类(升级类有个好处就是只要加载了扩展包即可,不用手动添加便于迁移),这里介绍手动添加方式。前面讲了使用升级类添加自定义函数方式,假如不想写升级类(升级类有个好处就是只要加载了扩展包即可,不用手动添加便于迁移),这里介绍手动添加方式。
1,在定制管理界面,找到 函数列表 > 系统函数 > 字符串节点。
...
2, 在“字符串”的右键菜单中选择 增加自定义函数,弹出“自定义函数”窗口。
3 在“自定义函数”窗口输入名称,该名称必须要与上面自定义函数类文件名称一致。在“自定义函数”窗口输入名称,该名称必须要与上面自定义函数类文件名称一致,譬如本例就是Process1000LimitOfIn。
4 创建完成后,就可以和系统内置函数一样在产品中拖拽使用了。
...