隨筆 - 225  文章 - 98  trackbacks - 0
          <2010年9月>
          2930311234
          567891011
          12131415161718
          19202122232425
          262728293012
          3456789

          隨筆分類

          相冊

          報表工具廠商們

          搜索

          •  

          最新評論

          閱讀排行榜

           自定義填報

          在使用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 閱讀(260) 評論(2)  編輯  收藏 所屬分類: Java報表—技術知識

          FeedBack:
          # re: Java報表工具內置JS的使用之四 2010-10-12 16:56 甘寧
          代碼什么的最難懂了。。不過還是頂下  回復  更多評論
            
          # re: Java報表工具內置JS的使用之四 2010-10-19 12:44 xiaohong
          最近在學習軟件,這篇文章很詳細了,謝謝博主  回復  更多評論
            
          主站蜘蛛池模板: 松桃| 罗山县| 综艺| 泾阳县| 嘉兴市| 威海市| 磐石市| 永兴县| 九江县| 文昌市| 嘉兴市| 隆安县| 中超| 临漳县| 庐江县| 佳木斯市| 隆昌县| 叙永县| 泸州市| 滕州市| 闻喜县| 女性| 钦州市| 抚州市| 黔南| 色达县| 哈尔滨市| 汽车| 新田县| 安西县| 镇赉县| 承德市| 从化市| 包头市| 资源县| 武山县| 宜兴市| 柳河县| 南阳市| 武威市| 泾阳县|