随笔 - 225  文章 - 98  trackbacks - 0
<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

随笔分类

相册

报表工具厂商们

搜索

  •  

最新评论

阅读排行榜

 自定义填报

在使用Java报表工具填报时,个别用户为了需求,需要自定义填报。

下面以FineReportJava报表工具在报表属性中的填报页面设置中可以自定义填报功能。

实例:

该实例实现首先在工具栏上加一个按钮,通知服务器要做填报然后服务器获得当前的SessionIDInfor,取出当前的报表,获得报表中A1B1扩展后的格子再把这组数据insert到数据库中;最后返回客户端一个讯息,表示填报成功了,客户端再弹个对话框,提示填报成功了。

1.    连接数据库FRDemo

2.    报表设计

2.1    新建报表

2.2    模板设计

添加一个名为ds1的数据库查询:SELECT * FROM customer,表样设计,如图

2.3    自定义报表填报属性

2.4    定义单元格空间属性

2.5    自定义报表Web属性

点击菜单栏报表|报表Web属性,进入报表Web属性窗口,在填报页面设置栏目中,将左边需要显示的按钮拖到中间的窗口中,并在右边窗口添加加载结束事件,实现自定义的填报功能,如图所示

在加载结束事件窗口中添加事件的JS代码

具体js代码如下

var $toolbar = $('.FR-ToolBar-disabled > table >tbody>tr');

var option = {

//"icon": "css:x-emb-email",

"listeners": [ {"once": false,

"action": function(e){

var xml = _g('${SessionID}').generateReportXML();

 $.ajax({

url : "test.jsp",

type : 'POST',

data : {op : 'test1', sessionID : '${SessionID}',

reportXML : xml},

complete : function(res, status) {

FR.showDialog("Relation", 300, 400, res.responseText);

}})

},

"eventName": "click"

}],

"text": "测试",

"invisible": false,

"type": "button",

"disabled": false,

"render": true};

$button = $('<div></div>');

FR.comp.create($button, "button", option);

$tc = $("<td>").append($button);

$toolbar.append($tc);

此段JS代码引用了一个test.jsp,代码为:

<%@ page import="com.fr.web.CustomSubmit" %>

<%@ page contentType="text/html" %>

<%  

     CustomSubmit.dealWithTest(request, response);

%>

将该test.jsp文件放在设计器安装的WebReport目录下。

test.jsp文件又引用了一个CustomSubmit类,将该类编译后的.class文件放在

%WebReport\WEB-INF\classes\com\fr\web目录下,该类的代码具体如下

packagecom.fr.web;

importjava.io.PrintWriter;

importjava.util.ArrayList;

importjava.util.List;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importcom.fr.base.ColumnRow;

importcom.fr.report.Report;

importcom.fr.report.core.FormReport;

importcom.fr.report.core.PackedReport;

importcom.fr.web.ParameterConsts;

importcom.fr.web.core.SessionDealWith;

importcom.fr.web.core.SessionIDInfor;

importcom.fr.web.core.WebUtils;

publicclassCustomSubmit {

publicstaticvoiddealWithTest(HttpServletRequestreq, HttpServletResponse res) throws Exception {

String sessionID = WebUtils.getHTTPRequestParameter(req,ParameterConsts.SESSION_ID);

SessionIDInforsessionIDInfor = SessionDealWith.getSessionIDInfor(sessionID);

            List cellRelation = newArrayList();

    for(int i = 0, len = sessionIDInfor.getWorkBook2Show().getReportCount(); i <len; i++) {

            Report report = sessionIDInfor.getWorkBook2Show().getReport(i);

            if (report instanceofFormReport&& report instanceofPackedReport) {

                Report fr = (PackedReport)report;

//请注意这步,我想要取的是A1B1两个格子扩展以后的他们之间关系和值,如果是想拿A1,B1,D5,对应添加ColumnRow.valueOf("D5")既可

List rl = ((FormReport)report).getExtendColumnRowList(newColumnRow[] {ColumnRow.valueOf("A1"), ColumnRow.valueOf("B1")});

                for (int c = 0, cl = rl.size(); c < cl; c++) {

                    ColumnRow[] crs = (ColumnRow[])rl.get(c);

                    ColumnRowValue[] crvs = newColumnRowValue[crs.length];

                    for (int index = 0, il = crs.length; index <il; index++) {

crvs[index] = newColumnRowValue(crs[index], fr.getCellValue(crs[index].column, crs[index].row));

                    }

                    cellRelation.add(crvs);

                }

            }

        }  

        //cellRelation里面存放着扩展以后的格子之间的关系和格子的值

//111.cpt模板为例,数据列扩展后城市NewYork对应ID 14,在cellRelation里面就是cellRelation.get(0)cellRelation.get(1),对应着两个ColumnRowValue[]

//第一个ColumnRowValue数组的ColumnRowValue[0]ColumnRowA1ValueNewYork,ColumnRowValue[1]ColumnRowB1Value1

//第二个ColumnRowValue数组的ColumnRowValue[0]ColumnRowA1ValueNewYork,ColumnRowValue[1]ColumnRowB2Value4

        if (cellRelation.size() > 0) {

            PrintWriter writer = WebUtils.createPrintWriter(res);

            for (int i = 0, len = cellRelation.size(); i <len; i++) {

                ColumnRowValue[] crvs = (ColumnRowValue[])cellRelation.get(i);

                StringBuffersb = newStringBuffer();

                for (int v = 0, vl = crvs.length; v <vl; v++) {

                    if (v != 0) {

                        sb.append(" ");

                    }

                    sb.append(crvs[v].toString());

                    if (v == vl - 1) {

                        sb.append("<br />");

                    }

                }

                writer.println(sb.toString());

            }          

            writer.flush();

            writer.close();

        }

        }

    publicstaticclassColumnRowValue {

        privateColumnRowcr;

        private Object value;

        publicColumnRowValue(ColumnRowcr, Object value) {

            this.cr = cr;

            this.value = value;

        }

        publicColumnRowgetColumnRow() {

            returncr;

        }

        public Object getValue() {

            return value;

        }

        public String toString() {

returnnew StringBuffer().append(cr.toString()).append(":").append(value.toString()).toString();

                }

            }

}

3.    保存并预览

点击填报预览,BS界面除了FR报表自带的提交按钮和数据校验按钮外,还多了一个测试按钮

点击测试按钮,出现测试界面



文章转自:http://blog.csdn.net/best_report/archive/2010/09/24/5902877.aspx



了解Java报表工具就从这里开始
posted on 2010-09-24 10:43 season 阅读(253) 评论(2)  编辑  收藏 所属分类: Java报表—技术知识

FeedBack:
# re: Java报表工具内置JS的使用之四 2010-10-12 16:56 甘宁
代码什么的最难懂了。。不过还是顶下  回复  更多评论
  
# re: Java报表工具内置JS的使用之四 2010-10-19 12:44 xiaohong
最近在学习软件,这篇文章很详细了,谢谢博主  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: