页面树结构
转至元数据结尾
转至元数据起始

实际场景下,java查询需要支持传递参数实现条件查询,与不带参数的Java查询相比,带参数Java查询代码的显著区别就是需要定义Java查询参数对象,对应类名为 smartbi.freequery.metadata.JavaQueryParameter

以下是示例代码:

package smartbi;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Random;
import smartbi.freequery.metadata.IJavaQueryData;
import smartbi.freequery.metadata.JavaQueryConfig;
import smartbi.freequery.metadata.JavaQueryOutputField;
import smartbi.freequery.metadata.JavaQueryParameter;
import smartbi.freequery.querydata.CellData;
import smartbi.freequery.querydata.GridData;
import smartbi.net.sf.json.JSONObject;
import smartbi.util.StringUtil;
import smartbi.util.ValueType;
public class IntegerGenerator implements IJavaQueryData {
    private static final Random RANDOM = new Random();
    private Integer max = null;
    private Integer min = null;
    /** {@inheritDoc} */
    public void close() {
    }
    /** 获取Java查询需要的配置信息 */
    public List<JavaQueryConfig> getConfigs() {
        return new ArrayList<JavaQueryConfig>();
    }
    /** 获取指定行的数据 */
    public GridData getGridData(int from, int count) {
        GridData grid = new GridData();
        List<String> headers = new ArrayList<String>();
        for (JavaQueryOutputField f : getOutputFields()) {
            headers.add(f.getId());
        }
        grid.setStringHeaders(headers);
        List<List<CellData>> data = new ArrayList<List<CellData>>();
        for (int i = from, len = from + count; i < len; i++) {
            List<CellData> row = new ArrayList<CellData>();
            CellData cell = new CellData();
            cell.setType(ValueType.INTEGER);
            cell.setIntValue(generateRandomIntValue());
            row.add(cell);
            data.add(row);
        }
        grid.setData(data);
        return grid;
    }
    private int generateRandomIntValue() {
        int value = RANDOM.nextInt();
        if (min == null && max == null) {
            //
        } else if (min == null) {
            value = RANDOM.nextInt(max);
        } else if (max == null) {
            value = Math.abs(value) + min;
        } else {
            int v0 = Math.min(max, min);
            int v1 = Math.max(max, min);
            value = RANDOM.nextInt(v1) % (v1 - v0 + 1) + v0;
        }
        return value;
    }
    /** 返回Java查询的输出字段 */
    public List<JavaQueryOutputField> getOutputFields() {
        List<JavaQueryOutputField> result = new ArrayList<JavaQueryOutputField>();
        result.add(new JavaQueryOutputField("Integer", "Integer", "Integer", "", ValueType.INTEGER, ""));
        return result;
    }
    /** 返回参数对象 */
    public List<JavaQueryParameter> getParameters() {
        List<JavaQueryParameter> result = new ArrayList<JavaQueryParameter>();
        /**最后一个参数值true代表参数非必填,允许为空*/
        result.add(new JavaQueryParameter("Max", "Max", "最大值", "", ValueType.INTEGER, true));
        result.add(new JavaQueryParameter("Min", "Min", "最小值", "", ValueType.INTEGER, true));
        return result;
    }
    /**  返回总行数,返回Integer.MAX_VALUE表示未知总行数 */
    public int getRowCount() {
        return Integer.MAX_VALUE;
    }
    /** {@inheritDoc} */
    public void init() {
    }
    /** {@inheritDoc} */
    public void loadConfigs(String configs) {
    }
    /** 保存配置信息 */
    public String saveConfigs() {
        return new JSONObject().toString();
    }
    /** {@inheritDoc} */
    public void setConfigValue(String key, String value) {
    }
    /** {@inheritDoc} */
    public void setConfigValues(Map<String, String> configValues) {
    }
    /** 设置参数值 */
    public void setParameterValue(String id, String value, String displayValue) {
        if (StringUtil.isNullOrEmpty(value)) {
            return;
        } else if ("Max".equals(id)) {
            try {
                max = Double.valueOf(value).intValue();
            } catch (NumberFormatException e) {
                max = null;
            }
        } else if ("Min".equals(id)) {
            try {
                min = Double.valueOf(value).intValue();
            } catch (NumberFormatException e) {
                min = null;
            }
        }
    }
}

  • 无标签