1.FormDataset+QueryCommand
QueryCommand控件自动将FormDataset中的Field与AutoSqlDataset中的MatchRules匹配实现查询功能。
2.Dataset自身的flushData方法实现局部刷新的AJAX机制的查询功能。
button的onclick事件中的代码:
var conditionRecord = datasetCondition.getCurrent();
if(conditionRecord){
var empid = conditionRecord.getValue("empid");
var empName = conditionRecord.getValue("empName");
var empMinSalsry = conditionRecord.getValue("empMinSalsry");
var empMaxSalary = conditionRecord.getValue("empMaxSalary");
datasetEmployee.parameters().setValue("empId",empid);
datasetEmployee.parameters().setValue("empMinSalary",empMinSalsry);
datasetEmployee.parameters().setValue("empMaxSalary",empMaxSalary);
if("" != empName && null != empName){
datasetEmployee.parameters().setValue("empName","%"+empName+"%");
}
datasetEmployee.flushData();
datasetCondition.flushData();
}
与第一个查询相比,本处查询并没有出现服务端处理状态框。
3.通过Dataset数据集对象自身事件的触发调用查询的执行,当用户输入完成后即触发事件,并不需要用户单击Button控件触发。
switch (field.getName()) {
case "empid":
if(dataset.getCurrent()){//注意这里的dataset是传递过来的参数
var empid = record.getValue("empid");//record是传递过来的参数
datasetEmployee.parameters().setValue("empId",empid);
datasetEmployee.flushData();
if(datasetEmployee.getCurrent()){
var empName = datasetEmployee.getValue("employee_name");
if("" != empName && null != empName){
dataset.disableEvents();
dataset.setValue("empName",empName);
dataset.enableEvents();
dataset.getField("empid").setReadOnly(true);
dataset.getField("empName").setReadOnly(false);
dataset.refreshControls();
}
}
}
break;
}
4.Dataset的监听器中动态拼装SQL语句的方式实现条件查询功能。利用到的是SqlDataset数据集实现,先设置sql:
select * from employee where 1=1 ,在按钮中实现
var currentRecord = datasetCondition.getCurrent();
if(currentRecord){
var empId = currentRecord.getValue("empId");
var empName = currentRecord.getValue("empName");
var empMinSalary = currentRecord.getValue("empMinSalary");
var empMaxSalary = currentRecord.getValue("empMaxSalary");
alert(empId);
datasetEmployee.parameters().setValue("empId",empId);
datasetEmployee.parameters().setValue("empName",empName);
datasetEmployee.parameters().setValue("empMinSalary",empMinSalary);
datasetEmployee.parameters().setValue("empMaxSalary",empMaxSalary);
datasetEmployee.flushData();
}
这里通过setValue来设置类似于Map,接着通过datasetEmployee 右键生成Open Listener
beforeLoadData(Dataset)重载该方法。
public class EmployeeDatasetListener extends AbstractDatasetListener {
@Override
public boolean beforeLoadData(Dataset dataset) throws Exception {
String empId = dataset.parameters().getString("empId");
String empName = dataset.parameters().getString("empName");
String empMinSalary = dataset.parameters().getString("empMinSalary");
String empMaxSalary = dataset.parameters().getString("empMaxSalary");
SqlDataset empDataset = (SqlDataset) dataset;
String sql = empDataset.getSql();
System.out.println("+++++++++++++++"+sql);
if(StringHelper.isNotEmpty(empId)){
sql += " and employee_id = '" + empId + "'";
}
if(StringHelper.isNotEmpty(empName)){
sql += " and employee_name like '%" + empName +"%'";
}
if(StringHelper.isNotEmpty(empMinSalary)){
sql += " and salary >= " + empMinSalary;
}
if(StringHelper.isNotEmpty(empMaxSalary)){
sql += " and salary <= " + empMaxSalary;
}
empDataset.setSql(sql);
System.out.println("+++++++++++++++"+sql);
return super.beforeLoadData(dataset);
}
}