如何通过模板Action修改查询的SQL语句
发布日期:2009-10-6 信息来源:http://www.chysoft.net

表单定制中如果查询条件非常复杂,我们可以通过嵌入action修改查询的sql语句,下面我们列举的是如果修改查询列表部件的sql语句。查询列表部件在定制查询中使用非常普遍,结合[数据列表单元]可以定制出各种查询的效果,主要步骤如下:
1、开发模板action类
import net.business.engine.common.I_TemplateAction;
import net.business.engine.common.TemplateContext;
import net.sysplat.access.Authentication;
import net.sysplat.common.Operator;

public class SearchCJBGAction implements I_TemplateAction
{
public int execute(TemplateContext context) throws Exception
{
HttpServletRequest request = context.getRequest();
Operator user = Authentication.getUserFromSession(request);//返回的用户对象,不同的组织结构模型可能不一样
//1、返回原来查询的sql语句
String sql = context.getListObjectPara().getQuerySql();
   StringBuffer newSql = new StringBuffer();
//2、根据需要在原有基础上组织sql语句
  newSql.append("select cjbg.* from (").append(sql).append(" union ");
  sql = sql.replaceFirst("turnoverinfo cjbg","turnoverinfo cjbg,pushMoneyInfo p ");
  sql = sql.replaceFirst("And cjbg.fillInMan='" + user.getLoginId() + "'","and cjbg.guid=p.bargainguid And " + "p.pushMoneyPerson = '" + user.getLoginId() + "'");
  newSql.append(sql);
  newSql.append(") cjbg order by cjbg_fillInDate desc");
  //3、修改查询最终的sql语句
  context.getListObjectPara().setTransitionSql(newSql.toString());
  
  return SUCCESS;
}

public String getErrorMessage()
{//返回系统错误的提示消息,null表示无错误消息(简化处理)
return null;
}
}

2、修改引用的查询列表部件的“关联action”,设置为以上类的全名。

注意:
1、select中的实际字段可以修改,但as后的别名不能改变(也就是说可以使用新的字段替换当前字段并使用相同的别名),顺序可以改变、字段的类型不能改变。
2、条件可以改变,可以增加新的表关联。

粤ICP备11095012号-1
Copyright 2005-2017 深圳市承元软件技术有限公司