發表人 |
內容 |
![[Post New]](/forum/templates/default/images/icon_minipost_new.gif) 2011-06-22 13:29:38
![[Up]](/forum/templates/default/images/icon_up.gif)
1樓
|
e3Admin
![[Avatar]](/forum/images/avatar/a87ff679a2f3e71d9181a67b7542122c.png)
註冊時間: 2011-06-09 18:31:13
文章: 73
離線
|
這裡的單資料是指只要下一句SQL語法就可以產出
所要資料的標準型報表的製作. 例如: 產品列表,
客戶名冊, 廠商名冊..等.
這裡以SDK示範專案 "會員年費單列表" 作範本.
遇同類型的報表設計可以依照流程複製, 再做修改
就可以產生新的報表.
A. 主選單項目
x.add2(rs,2,"B",".會員年費單列表","rpt.CmzMemberYearFeeList",1,"report_1",3,null);
B. Client報表程式
src/com/dasam/e3010001/client/rpt/CmzMemberYearFeeList.java
一開始設計, 報表操作介面, 有那些報表範圍條件, 表尾條文..等
行9, 可以在沒有報表fmt檔時做測試執行
行52, 測試select的資料,到client的實際情況,做第一步除錯
public class CmzMemberYearFeeList extends XFrameReport {
public CmzMemberYearFeeList() throws Exception {
//this.langTableId = "rpt";
this.convLangTables = "cmzMemberYearFee,member,x";
this.serviceClassId = "rpt.CmzMemberYearFeeList";
//this.isViewDebug = true;
}
//==========================================================================
//重載,起始
public void doWorkInit(HashMap map) throws Exception {
super.doWorkDefault(map,this);
//編輯項目
this.addXETextRange("年度",6,"tsYear",DATE_Y,20,true,"time",null);
XLib.memberId(this,true,"會員");
XLib.sw(this,true,"狀態","swState","swState.def","{def=255}{left=2}{right=2}");
setOtherFilterBegin();//----------
XLib.tsDate(this,true,"收款日");
XLib.swDel(this,true);
setOtherFilterEnd();//----------
addEndingAndFormats();
this.viewPack();
this.doWorkBarAction("init");
}
//==========================================================================
//組合報表的條件式文字,
public void doMakeReportExtParam() throws Exception {
this.addReportExtParam("filter1", getFilters("@tsYear, &&, @memberId"));
this.addReportExtParam("filter2", getFilters("@tsDate, &&, swState"));
this.addReportExtParam("filter3", getFilters("&&, swDel"));
}
//==========================================================================
//報表資料加工,
public void doAdjustReportRs(XProgressWork xpw, XRowSet rs, HashMap rptParam) throws Exception {
HashMap state = this.tblMap("swState.def");
//加入主表欄位,
rs.insertField(new XField("state_txt", XField.TYPE_STRING,50));
rs.insertField(new XField("del_txt", XField.TYPE_STRING,50));
for (int i=0; rs.setRowIndex(i); i++){
rs.setObject("state_txt", state.get(rs.getString("swState"))); //狀態,
rs.setString("del_txt", rs.getBoolean("swDel")?"**":""); //作廢文字
}
//rs.printData();
}
}
C. Server報表程式
src/com/dasam/e3010001/server/rpt/CmzMemberYearFeeList.java
主要是由client的操作條件來select資料庫的資料
行62 會依client條件欄,組合SQL的Where子句
public class CmzMemberYearFeeList extends XServiceReport {
//==========================================================================
//make,
public HashMap makeReport(HashMap map) throws Exception {
XRowSet rs = XRowSet.getRowSet(map);
String where = XSql.getWhere(rs,"a.tsYear=@, a.memberId=@, a.recDate:tsDate=@, a.swState==, a.swDel==");
String sql = new StringBuffer()
.append("select a.id, a.tsYear, a.memberId, a.money, a.swState, a.recDate, a.swDel, b.name 'member_name' ")
.append("from cmzMemberYearFee a ")
.append("left join member b on b.id=a.memberId ")
.append(where).toString();
xdb().exeSql(sql);
return this.getReturnMapReport(rs);
}
}
D. 設計報表輸出樣式
resource/com/dasam/e3010001/client/rpt/fmt/CmzMemberYearFeeList.xml
這裡的樣式是用ireport工具來做設計, 原始碼是一個xml檔,
但設計完成可以編譯儲存為fmt檔, E3是整合執行fmt檔.
可以直接執行 C:\dasamx_dev\ireport.bat 再開啟xml檔做編譯.
開啟ireport後, 按[File] / [Open], 讀取xml後, 再按 [Build] / [Compile]
要先看 E3/SDK安裝説明 設好JAVA_SDK_PATH.
|
修改3次,最後2011-06-27 10:39:15 |
輕輕敲醒沈睡的心靈~ 企鵝的初章 ^^  |
|
 |
|
|
|