private void parseStandardSqlParamBean(EditableReportParamBean paramBean, String reportTypeKey) {
   if (Tools.isDefineKey("@", paramBean.getParamname())) {
     if (this
         .isAutoReportdata()) { // 自动获取某列的数据进行保存操作(这个判断主要是针对配置更新脚本的<button/>,因为它的@{param}数据有可能是客户端传的,而不是从报表中获取的)
       String configproperty = Tools.getRealKeyByDefine("@", paramBean.getParamname());
       String realproperty = configproperty;
       if (realproperty.endsWith("__old"))
         realproperty = realproperty.substring(0, realproperty.length() - "__old".length());
       ColBean cbeanUpdateDest =
           this.owner.getReportBean().getDbean().getColBeanByColProperty(realproperty);
       if (cbeanUpdateDest == null) {
         throw new WabacusConfigLoadingException(
             "解析报表的更新语句失败,没有找到column/property属性为" + realproperty + "的列");
       }
       if (cbeanUpdateDest.isNonValueCol()
           || cbeanUpdateDest.isSequenceCol()
           || cbeanUpdateDest.isControlCol()) {
         throw new WabacusConfigLoadingException(
             "加载报表"
                 + this.owner.getReportBean().getPath()
                 + "失败,列"
                 + cbeanUpdateDest.getColumn()
                 + "不是从数据库获取数据的列,不能取其数据");
       }
       EditableReportColBean ercbeanDest =
           (EditableReportColBean) cbeanUpdateDest.getExtendConfigDataForReportType(reportTypeKey);
       if (ercbeanDest == null) {
         ercbeanDest = new EditableReportColBean(cbeanUpdateDest);
         cbeanUpdateDest.setExtendConfigDataForReportType(reportTypeKey, ercbeanDest);
       } else {
         paramBean.setDefaultvalue(ercbeanDest.getDefaultvalue());
       }
       paramBean.setOwner(cbeanUpdateDest);
       ColBean cbeanUpdateSrc = cbeanUpdateDest;
       if (Consts.COL_DISPLAYTYPE_HIDDEN.equals(cbeanUpdateDest.getDisplaytype())) {
         ColBean cbSrcTmp = cbeanUpdateDest.getUpdateColBeanSrc(false);
         if (cbSrcTmp != null) cbeanUpdateSrc = cbSrcTmp;
       }
       setParamBeanInfoOfColBean(cbeanUpdateSrc, paramBean, configproperty, reportTypeKey);
     } else {
       ((EditableReportSQLButtonDataBean) this).setHasReportDataParams(true);
     }
   } else if (Tools.isDefineKey("#", paramBean.getParamname())) {
     String paramname = Tools.getRealKeyByDefine("#", paramBean.getParamname());
     paramBean.setParamname(paramname);
     paramBean.setOwner(this.getExternalValueBeanByName(paramname, true));
   }
 }
Пример #2
0
 protected Object doGetResultSet(
     SPDataSetValueBean spBean, Object typeObj, StringBuffer systemParamsBuf) {
   log.debug(systemParamsBuf.toString());
   String procedure = spBean.getProcedure();
   if (rbean.getInterceptor() != null) {
     Object obj = rbean.getInterceptor().beforeLoadData(rrequest, rbean, typeObj, procedure);
     if (!(obj instanceof String)) {
       return obj;
     }
     procedure = (String) obj;
   }
   if (Config.show_sql) log.info("Execute sql: " + procedure);
   CallableStatement cstmt = null;
   try {
     cstmt =
         rrequest
             .getConnection(spBean.getOwnerSpProvider().getDatasource())
             .prepareCall(procedure);
     AbsDatabaseType dbtype = rrequest.getDbType(spBean.getOwnerSpProvider().getDatasource());
     VarcharType varcharObj =
         (VarcharType) Config.getInstance().getDataTypeByClass(VarcharType.class);
     int idx = 1;
     if (spBean.getLstStoreProcedureParams() != null
         && spBean.getLstStoreProcedureParams().size() > 0) {
       for (String paramTmp : spBean.getLstStoreProcedureParams()) {
         if (WabacusAssistant.getInstance()
             .isGetRequestContextValue(paramTmp)) { // 从request/session中取值
           varcharObj.setPreparedStatementValue(
               idx,
               WabacusAssistant.getInstance().getRequestContextStringValue(rrequest, paramTmp, ""),
               cstmt,
               dbtype);
         } else if (Tools.isDefineKey("condition", paramTmp)) {
           setConditionValue(
               rrequest,
               spBean,
               cstmt,
               dbtype,
               idx,
               Tools.getRealKeyByDefine("condition", paramTmp),
               varcharObj);
         } else {
           varcharObj.setPreparedStatementValue(idx, paramTmp, cstmt, dbtype);
         }
         idx++;
       }
     }
     if (spBean.getOwnerSpProvider().isUseSystemParams()) {
       if (systemParamsBuf == null) systemParamsBuf = new StringBuffer();
       cstmt.setString(idx++, systemParamsBuf.toString()); // 如果是查询报表数据,将系统参数传入
     }
     if (dbtype instanceof Oracle) {
       cstmt.registerOutParameter(idx, OracleTypes.CURSOR);
     }
     rrequest.addUsedStatement(cstmt);
     cstmt.executeQuery();
     ResultSet rs = null;
     if (dbtype instanceof Oracle) {
       rs = (ResultSet) cstmt.getObject(idx);
     } else {
       rs = cstmt.getResultSet();
     }
     return rs;
   } catch (SQLException e) {
     throw new WabacusRuntimeException(
         "从数据库取报表" + rbean.getPath() + "数据时执行SQL:" + procedure + "失败", e);
   }
 }
Пример #3
0
 private void processDependParams(ReportBean rbeanSlave, ReportBean rbeanMaster) {
   Map<String, Map<String, String>> mDependParams = rbeanMaster.getMDependChilds();
   if (mDependParams == null) {
     mDependParams = new HashMap<String, Map<String, String>>();
     rbeanMaster.setMDependChilds(mDependParams);
   }
   if (rbeanSlave.getDependparams() == null || rbeanSlave.getDependparams().trim().equals("")) {
     throw new WabacusConfigLoadingException(
         "加载页面"
             + this.getPath()
             + "失败,其下的报表"
             + rbeanSlave.getId()
             + "依赖其它报表,但不存在依赖的动态参数,无法完成依赖操作");
   }
   List<String> lstParams = Tools.parseStringToList(rbeanSlave.getDependparams(), ";", false);
   List<String> lstTemp;
   Map<String, String> mParams = new HashMap<String, String>();
   mDependParams.put(rbeanSlave.getId(), mParams);
   if (rbeanMaster.isDetailReportType())
     rbeanSlave.setMDependsDetailReportParams(
         mParams); // 如果主报表是细览报表,则存放其所用到的参数,以便加载此从报表数据时可以知道要取哪些参数
   for (String param : lstParams) {
     lstTemp = Tools.parseStringToList(param, "=", false);
     String paramname = lstTemp.get(0).trim();
     String paramvalue = "";
     if (lstTemp.size() == 2) {
       paramvalue = lstTemp.get(1).trim();
     } else if (lstTemp.size() > 2) {
       throw new WabacusConfigLoadingException(
           "加载页面"
               + this.getPath()
               + "失败,其下报表"
               + rbeanSlave.getId()
               + "配置的dependsparams:"
               + rbeanSlave.getDependparams()
               + "不合法,出现多个=号");
     }
     if (paramname.equals("")) { // 每个从报表的动态参数必须定义成@{<col/>的property}格式
       throw new WabacusConfigLoadingException(
           "加载页面"
               + this.getPath()
               + "失败,其下报表"
               + rbeanSlave.getId()
               + "配置的dependsparams:"
               + rbeanSlave.getDependparams()
               + "不合法,参数名不能为空");
     }
     ConditionBean conbeanTmp = rbeanSlave.getSbean().getConditionBeanByName(paramname);
     if (conbeanTmp != null) {
       if (!conbeanTmp.isConditionValueFromUrl()) {
         throw new WabacusConfigLoadingException(
             "加载从报表"
                 + rbeanSlave.getPath()
                 + "失败,在dependsparams中配置的"
                 + paramname
                 + "对应的查询条件<condition/>不是从URL中获取条件数据");
       }
     }
     mParams.put(paramname, paramvalue);
     if (Tools.isDefineKey("@", paramvalue)) {
       paramvalue = Tools.getRealKeyByDefine("@", paramvalue); // 父报表的某个<col/>的property
       ColBean cb = rbeanMaster.getDbean().getColBeanByColProperty(paramvalue);
       if (cb == null) {
         throw new WabacusConfigLoadingException(
             "加载页面"
                 + this.getPath()
                 + "失败,其下报表"
                 + rbeanSlave.getId()
                 + "配置的dependsparams:"
                 + rbeanSlave.getDependparams()
                 + "中动态参数"
                 + paramvalue
                 + "在被依赖的父报表中不存在property为此值的<col/>");
       }
       if (rbeanMaster.isListReportType()) {
         AbsListReportColBean alrcean =
             (AbsListReportColBean) cb.getExtendConfigDataForReportType(AbsListReportType.KEY);
         if (alrcean == null) {
           alrcean = new AbsListReportColBean(cb);
           cb.setExtendConfigDataForReportType(AbsListReportType.KEY, alrcean);
         }
         alrcean.setSlaveReportParamName(paramname); // 将此ColBean标识为参与刷新从报表的参数,并记下对应的参数名
         rbeanSlave.addParamNameFromURL(paramname);
         cb.setDisplayNameValueProperty(true);
       }
     }
   }
 }