[Logo]  E3系統 開發.操作.問題 討論區 
[Search] 搜尋主題 [Recent Topics] 最新主題 [Hottest Topics] 熱門主題 [Members] 會員列表 [Groups] E3首頁
[Register] 會員註冊 [Login] 會員登入
新增 報表程式(單資料)  XML
討論區首頁 » Java程式分析與設計
發表人 內容
e3Admin

[Avatar]

註冊時間: 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  

輕輕敲醒沈睡的心靈~  企鵝的初章 ^^
 
討論區首頁 » Java程式分析與設計
前往:   

2011 DASAMX GROUP.    Powered by JForum 2.1.9©    建議使用Firefox瀏覽