页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。
评论: EPPR-11231bug修复,增加异常处理

...

代码块
languagejava
titleProcess1000LimitOfIn.java
collapsetrue
package smartbi.freequery.expression.function;
import smartbi.SmartbiException;
import smartbi.freequery.metadata.SQLPart;
import smartbi.freequery.metadata.SQLPartList;
import smartbi.freequery.util.SQLPartType;
import smartbi.util.StringUtil;
public class Process1000LimitOfIn extends Function {
	@Override
	public boolean checkParams() {
		if (params.length==2) 
			return true;
		else
			return false;
	}
	protected void prepareParams() {
		try {
			super.prepareParams();
		} catch (SmartbiException e) {
			result = new SQLPartList();
		}
	}
	@Override
	public void execute() {
		try {
			String fieldName  = params[0].getSqlStr().trim();
			fieldName = trim(fieldName,"\"");
			fieldName = trim(fieldName,"'");
			String fieldValue = params[1].getSqlStr().trim();
			String sep = ",";
			String[] fieldValueArray = fieldValue.split(sep);
			int size = 1000;
			long count = Math.round(Math.ceil(((double)fieldValueArray.length)/size));
			if(count ==1){
				result.add(new SQLPart(SQLPartType.SQLSTR, fieldName + " in (" + fieldValue +")"));
				return;
			}
			//TODO 
			StringBuilder sqlSb = new StringBuilder();
			sqlSb.append("(");
			for(int i =0; i<count; i++){
				int jLen = (i+1)*size ;
				jLen = (jLen>fieldValueArray.length)?fieldValueArray.length:jLen;
				StringBuilder sb = new StringBuilder();
				for(int j = i*size; j<jLen; j++){
					sb.append(fieldValueArray[j]).append(sep);
				}
				String sbStr = sb.toString();
				if(i>0){
					sqlSb.append(" or ");
				}
				sqlSb.append(fieldName + " in (" + sbStr.substring(0, sbStr.length()-sep.length())+")");
			}
			sqlSb.append(" ) ");
			result.add(new SQLPart(SQLPartType.SQLSTR, sqlSb.toString()));
		} catch (Exception e) {
			result.add(new SQLPart(SQLPartType.SQLUnknown," 1=1 "));
		}
	}
	
	private String trim(String srcStr, String toTrimStr){
		if(StringUtil.isNullOrEmpty(srcStr)){
			return srcStr;
		}
		srcStr = srcStr.trim();
		while(srcStr.startsWith(toTrimStr)){
			srcStr = srcStr.substring(toTrimStr.length());
			srcStr = srcStr.trim();
		}
		while(srcStr.endsWith(toTrimStr)){
			srcStr = srcStr.substring(0, srcStr.length()-toTrimStr.length());
			srcStr = srcStr.trim();
		}
		return srcStr;
	}
	@Override
	public String getMDXValue() {
		return "";
	}
}

 

2.2 编写升级类

该升级类的操作是向知识库t_restree(资源树)表中插入一条数据,父节点为catalog_string(字符串),资源类型为FUNCTION(函数)
该操作用于后面在资源树中新建同名的自定义函数 

...

Process1000LimitOfIn.ext,源码:Process1000LimitOfIn_Src.rarProcess1000LimitOfIn_Src.rar