您的位置:首页 > 知识库 > 填报技术

填报表当中的参数处理类介绍

       好多用户在集成快逸报表到项目的时候都要在报表参数提交之前在项目的业务层对参数进行处理加工,快逸报表提供的参数处理类就可完成这项工作:

● 参数处理类的属性和方法:
public class AbstractParamProcessor implements ParamProcessor
属性:
protected javax.servlet.http.HttpSession session:session 对象
protected javax.servlet.http.HttpServletRequest request:request对象
protected javax.servlet.http.HttpServletResponse response:response对象
protected com.runqian.report4.usermodel.Context context:报表运行环境对象

方法:
public void process() throws Exception
说明:参数表单预处理方法, 此方法由用户类覆盖,系统调用此方法。不满足预处理要求时,抛出异常,终止提交参数

public java.lang.String getParamValue( java.lang.String paramName )
说明:获得前端提交的参数值
参数:paramName – 参数名

public void putParam( java.lang.String paramName, java.lang.String paramValue )
说明:获得前端提交的参数值
参数:paramName – 参数名
paramValue – 参数值

● 参数处理类的调用

继承com.runqian.report4.usermodel.input.AbstractParamProcessor类,并在 process()方法中实现
你的处理。然后在TAG中指定 processor属性为你的java 类名,如:
resultPage=”/myReport/student.jsp”
processor=”test.MyParamProcessor”
/>
在此类中可以直接使用 HttpSession 对象 session;可以获得应用中的数据库连接;可以获得提交的参数,可以增加或修改参数;也可以通过response控制网页的流转。

« Previous Entries

提交数据库时报missing expression

问题描述:
填报表,提交数据库时,报错:
2008-07-28 11:33:57] runqianReportLogger : [DEBUG] - ORA-00936: missing expression
java.sql.SQLException: ORA-00936: missing expression
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:180)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1451)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch
解决办法:
      该错误是由于更新属性设置不对导致
      在设置更新设置时,指定的更新表达式与更新字段名没有对应上,并且每个更新字段的数据类型指定的与数据库里实际数据类型不符。
      修改正确后,问题解决。

« Previous Entries

html标签submitTarget用法

        当需要填报提交不刷新页面或则当保存发生异常时,保留当前输入页面的时候,我们要用到submitTarget标签。
jsp用法例子如下:

<!–page language=”java” contentType=”text/html;charset=GBK–>
<!–aglib uri=”/WEB-INF/runqianReport4.tld” prefix=”report–>
<!–page import=”java.util.*”–>
<!–page import=”java.text.*”–>
<!–page import=”com.runqian.report4.view.ParamsPool”–>
<!–page import=”com.runqian.base4.util.*”–>
<!–page import=”com.runqian.report4.usermodel.Context–>

needSaveAsExcel=”yes”
submitTarget=”test”/&gt;

« Previous Entries

类excel的设计风格

       采用控件拖拽式的传统报表工具设计报表,往往存在格线对齐的困扰,尤其是设计多层复杂表头的时候,工作量巨大,还总是达不到完美的效果。excel以其独特的电子表格的设计风格,避免了格线对齐的麻烦,于是广大用户对excel情有独钟,纷纷要求报表设计界面类似excel。
于是很多程序员纷纷效仿,不就做一个表格控件吗?这有何难!

       可是,咱们的用户不是那么容易满足的,光是一个表格控件远远不能满足他们的要求,他们会提出各种各样excel拥有的设计能力,例如合并拆分单元格、自动折行、缩小字体填充、格式刷等等,至于单元格所拥有的属性就不用说啦,诸如边框、背景色、前景色、字体、字号等等,凡是excel有的报表工具都应该有。

       于是有不少报表工具厂商或者程序员想出捷径,不是要一模一样嘛,那我干脆购买或者盗用excel控件不就得了。这么简单,那用户干脆用excel好了,还用你的报表工具或者报表程序干吗?很显然,用户还有更高的要求。

       用户的理想需求是:在尽可能类似excel的基础上,提供一套完整的报表运算模型,能够很轻松地实现各种或简单或复杂的报表。简单的报表包括各种线性报表,如自由式、网格式、分组式、交叉式等;复杂的报表包括各种非线性报表,如多源、不规则分组、跨行组运算、行列对称等。有了运算报表的能力,excel的设计模型才能得到质的飞跃,真正成为用户青睐的设计风格。

       有了这些模型还不能完全让用户称心,由于用户太喜欢excel了,之前往往做好了很多excel模板,用户希望设计报表的时候,能够直接把excel模板导入,免去重复设计表样的烦恼。当然了,用报表工具设计好的报表,还能导出成excel模板,以利于对数据进行二次加工处理。

       以上是比较完美的类excel的报表工具的标准,也许有人会说,太难了,不可能有这么理想的工具。很幸运的是,快逸报表满足了以上要求,成为了新一代报表工具的领头羊。当然了,快逸报表除了具有完美的类excel设计风格以外,还有很多革命性的功能,例如强关联语义模型、多源填报模型等等。

效果演示

0

« Previous Entries

字符串函数

       字符串函数在任何一个应用中都得到了广泛的应用,报表工具也不例外,一般报表工具都会提供一部分的字符串处理的函数,例如获取子串、去掉空格、字符转换(字符转unicode或unicode转字符)、取字符长度、大小写转换、等等,随便都可以列出很多应用。

        这些函数具体到每一个来说,并不是太难,程序员自己编程也能实现,但是字符串函数的应用非常多,一个两个甚至十个二十个程序员都可以自己写,太多了精力上就顾不过来了。

举几个简单的例子:
        1、 取子串:有左子串、右子串、从中间取子串
        2、 去掉空格:从左边去掉空格、从右边去掉空格、从两边去掉空格
        3、 大小写转换:把字符串转为大写、转为小写、首字母大写等

        上述只是一些比较常见的应用,还有更加麻烦复杂一些的,比如:

        字符串分割:把某个字符串按照分隔符分割成一个字符串数组。

        这个需求乍一听很简单,其实做起来并不容易,首先分割符要求能够灵活定义,不能写死;其次分隔符可能一位可能多位;接着解析分隔符的时候有时候需要解析引号里的,有时候不能解析引号里的,也就是说,如果引号里有分隔符要不要分割?引号有单引号还有双引号,除了引号还有括号,括号里的字符也可能存在分割与不分割两种情况,而且括号还分成小括号、中括号、大括号等等。这么仔细一想,头大了吧?

        同样的需求在字符串替换里也存在,比如把某个字符串中的d替换成cc,这时候也需要考虑引号里的要不要替换,括号里的要不要替换等等诸多情况。

再举一个例子,如:

        数字大小写转换:把数字转换成大写的汉字

        这个例子听起来好简单啊,不就是把1替换成一,把2替换成二吗?谁不会呀!在实际应用中就两码事了,首先大写的数字有两种,一二三四五六七 和 壹贰叁肆伍陆柒,你需要提供参数配置替换成哪一种,另外,数字替换的时候有时候不需要个十百千这类标明数值位数和大小的字符,有时候却需要,你是否也应该提供参数配置?当然十百千也有另一种写法:拾佰仟。呵呵,足够复杂了吧?

        不过不用害怕,一般来说,贴心的报表工具都会提供大量的字符串解析函数,字符串解析函数越多,其参数选项越灵活,报表工具就越好用。快逸报表提供了大量的字符串解析函数,而且每一个函数都提供了多个灵活的参数供选择,比如上面说到的数字大小写转换,快逸报表一个函数就搞定了,因此参数足够灵活也非常重要。有些报表工具厂商不善于对功能进行抽象总结,不知道在参数的灵活配置上下功夫,结果每一种需求都增加一个函数,最后搞得函数的个数非常多,使用者无所适从,不知道该用哪个。

举几个快逸字符串函数的介绍:

 字符串分割函数
函数说明:
        将字符串按分割符分割成多个子串
语法:
        split( srcExp,sepExp{,boolExp})
参数说明:
        srcExp 待分割的字符串表达式
        sepExp 分隔符表达式
        boolExp bool型,是否解析引号、括号里的分隔符,
        为true时解析,为false时不解析,缺省为false
返回值:
        分割后的字符串列表
示例:
        例1:=split(”ab;cd;ef;tg;tt”,”;”) 返回数组:["ab","cd","ef","tg","tt"]
        例2:=split(”ab;c’d;e’f;tg;tt”,”;”,false) 返回数组:["ab","c'd;e'f","tg","tt"] 不解析引号里的分隔符
        例3:=split(”ab;c[d;e]f;tg;tt”,”;”,false) 返回数组:["ab","c[d;e]f”,”tg”,”tt”] 不解析括号里的分隔符
        例4:=split(”ab;c’d;e’f;tg;tt”,”;”,true) 返回数组:["ab","c'd","e'f","tg","tt"] 解析引号里的分隔符
        例5:=split(”ab;c[d;e]f;tg;tt”,”;”,true) 返回数组:["ab","c[d","e]f”,”tg”,”tt”] 解析括号里的分隔符

将数字转换成大写

函数说明:
        将一个整数转化成汉字大写
语法:
        chn( intExp{, abbrivateExp{, uppercaseExp }} )
参数说明:
        intExp 整数表达式
        abbrivateExp 为true时采用亿万千百十的写法,
        为false时采用一二三四五六七的写法,缺省为false
        uppercaseExp 为false时采用零一二三四五六七八九十百千,
        为true时采用壹贰叁肆伍陆柒捌玖拾佰仟,缺省为false
返回值:
        字符型
示例:
        例1:chn(1234567,true) 返回:”一百二十三万四千五百六十七”
        例2:chn(1234567) 返回:”一二三四五六七”
        例3:chn(1234567,true,true) 返回:”壹佰贰拾叁万肆仟伍佰陆拾柒”
        例4:chn(1234567,,false) 返回:”一二三四五六七”

908

« Previous Entries

utf-8中文参数乱码

快逸报表用于utf-8的页面中,传递中文参数的时候,如果出现乱码,特别是双数中文正常,单数中文乱码的情况,可以尝试用如下办法解决:
1、客户端编码,使用js方法
function encode(obj){
obj.value=encodeURI(obj.value);
}
2、服务端解码,使用java类方法
keyword = java.net.URLDecoder.decode(keyword, “UTF-8″);

« Previous Entries

使用javascript将页面中的关键字高亮显示

参考代码如下:

    <script type=”text/javascript”>

//将页面中的关键字高亮显示,bodyonload中调用
function HighLight(nWord){
var orange = document.body.createTextRange();
while(orange.findText(nWord)){
orange.pasteHTML(”<span style=’color:black;background-color: #ff9999;’>” + orange.text + “</span>”);
orange.moveStart(’character’,1);
}
}

//将页面中的关键字高亮显示,bodyonload中使用(支持多个关键字,多个关键字用空格分开)
function highword(nWord)
{
//
将全角空格(逗号)转半角空格

nWord = nWord.replace(/\
 /g,”|”);
nWord = nWord.replace(/\,/g,”|”);
nWord = nWord.replace(/\
/,”|”);
nWord = nWord.replace(/\ /g,”|”);

var Arr = nWord.split(”|”);
for(var i=0;i<Arr.length;i++){
HighLight(Arr[i]);
}
}

function hWord(){
highword(”快逸
报表 功能”);

}

</script>

<body OnLoad=”hWord()”>

« Previous Entries

关于翻页时弹出新页面的问题

问题描述:
当使用showModalDialog展现报表页面时,如:window.showModalDialog(”showReport.jsp?raq=test.raq”)
点击第一次下一页时,会打开一个新的页面展现报表第二页。如何避免弹出一个新的页面呢?
解决方法:
在showReport.jsp页面head中加入,如:

<head>
<base target=”_self” />
</head>

« Previous Entries

统一修改填报属性“模式”,而不修改其它属性

问题描述:
由于报表用户更换了数据库,需要重新更改报表中“填报功能”里的“更新”属性。报表用户想通过API实现只统一修改报表“模式”属性,而不修改其它属性。

问题解决方法:
API代码代码如下:

import com.runqian.report4.model.ReportDefine;

import com.runqian.report4.usermodel.INormalCell;

import com.runqian.report4.usermodel.input.InputProperty;

import com.runqian.report4.usermodel.input.TableRelations;

import com.runqian.report4.usermodel.input.UpdateProperty;

import com.runqian.report4.util.ReportUtils;

 

public class Update {

    public static void main(String[] args) {

        try{

            ReportDefine rd = (ReportDefine)ReportUtils.read(”D:/1.raq”);

 

            for(int r=1;r<=rd.getRowCount();r++){

                for(short c=1;c<=rd.getColCount();c++){

                    // 获取填报属性

                    INormalCell cell = rd.getCell(r, c);

 

                    InputProperty ip = cell.getInputProperty();

                    if(ip==null || ip.getUpdateList()==null) continue;

                    // 获取更新属性

                    UpdateProperty up = (UpdateProperty)ip.getUpdateList().get(0);

                    Object relations = up.getRelation();

                    TableRelations trs = (TableRelations)relations;

                    trs.setSchema(”TEST”);

                }

            }

            ReportUtils.write(”D:/2.raq”, rd);

            System.out.println(”done!”);

        }

        catch(Exception e){

            e.printStackTrace();

        }

    }

}

« Previous Entries

自定义函数编译报错

问题描述:
自定义函数报错:
customFunctions.properties found.
java.lang.UnspportedClassVersionErroe:com/bytter/demo/test1
问题解决描述:
JDK不匹配,编译类的JDK和快逸的JDK不一致,换成一致即可

« Previous Entries

« Previous Entries