跟我一起學extjs5(40--增加一個自訂模組[1建立表和bean檔案]),extjs540--
跟我一起學extjs5(40--增加一個自訂模組[1建立表和bean檔案])
經過上面的工作,一個獨立模組的CRUD已經可以運行了,為了更好的可以看到其他自訂功能,我們做一個自訂的獨立模組,這個模組中包括了各種的資料類型。 新增一個“銷售合約“的獨立模組,模組名稱為Agreement,裡麵包括了20幾個欄位,把主要的欄位類型都設定了,有字串型,整型,浮點型,金額型,日期型,布爾型,百分比,還包括計算欄位。 建立表的sql語句如下:
/****** 對象: Table [dbo].[Agreement] 指令碼日期: 10/16/2014 14:13:11 ******/CREATE TABLE [dbo].[Agreement]([tf_agreementId] [int] NOT NULL,[tf_code] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NOT NULL,[tf_name] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,[tf_customerNme] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,[tf_orderId] [int] NULL,[tf_signDate] [datetime] NOT NULL,[tf_productName] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,[tf_salesman] [nchar](10) COLLATE Chinese_PRC_CI_AS NOT NULL,[tf_number] [int] NOT NULL,[tf_allLength] [money] NULL,[tf_unitPrice] [money] NOT NULL,[tf_unitText] [nvarchar](10) COLLATE Chinese_PRC_CI_AS NULL,[tf_discount] [money] NOT NULL CONSTRAINT [DF_Agreement_tf_discount] DEFAULT ((1)),[tf_amount] AS (round(([tf_number]*[tf_unitPrice])*[tf_discount],(2))),[tf_receivedPrice] [money] NULL,[tf_receivedPercent] AS (case when ([tf_number]*[tf_unitPrice])*[tf_discount]<>(0) then [tf_receivedPrice]/round(([tf_number]*[tf_unitPrice])*[tf_discount],(2)) else (0) end),[tf_finished] [bit] NULL,[tf_isImportant] [bit] NULL,[tf_beginDate] [datetime] NULL,[tf_endDate] [datetime] NULL,[tf_remark] [nvarchar](max) COLLATE Chinese_PRC_CI_AS NULL, CONSTRAINT [PK_Agreement] PRIMARY KEY CLUSTERED ([tf_agreementId] ASC)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]) ON [PRIMARY]GO/****** 對象: Index [IX_Agreement_tf_name] 指令碼日期: 10/16/2014 14:13:53 ******/CREATE UNIQUE NONCLUSTERED INDEX [IX_Agreement_tf_name] ON [dbo].[Agreement] ([tf_name] ASC)WITH (SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF) ON [PRIMARY]
先在com.jfok.server.hibernate下建立使用者自己bean的包app, 然後再建立java bean 檔案 Agreement.java檔案,
package com.jfok.server.hibernate.app;import java.io.Serializable;import java.util.Date;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import org.hibernate.annotations.GenericGenerator;import com.jfok.server.common.annotation.FieldDefine;import com.jfok.server.common.annotation.TableDefine;/** * 一個用於示範單個模組所有自訂屬性的類 * * @author jfok * * 2014.10.16 * */@SuppressWarnings("serial")@Entity@org.hibernate.annotations.Entity(dynamicUpdate = true)@TableDefine(group = "合約管理", id = 2010, title = "銷售合約")public class Agreement implements Serializable {@Id@GeneratedValue(generator = "increment")@GenericGenerator(name = "increment", strategy = "increment")@FieldDefine(title = "ID號", number = 10, hidden = true)private Integer tf_agreementId;@FieldDefine(title = "合約編碼", number = 20)@Column(nullable = false, length = 20)private String tf_code;// 這個欄位是這個模組的namefields欄位,在刪除等操作時會提示顯示這個欄位的資訊@FieldDefine(title = "合約名稱", nameField = true, number = 30)@Column(length = 50, nullable = false)private String tf_name;// 因為是一個獨白模組,沒有做相應的客戶單位,產品名稱的表來關聯@FieldDefine(title = "客戶單位名稱", number = 40)@Column(length = 50, nullable = false)private String tf_customerNme;@FieldDefine(title = "順序號", number = 50)private Integer tf_orderId;@FieldDefine(title = "簽訂日期", number = 60)@Column(nullable = false)private Date tf_signDate;@FieldDefine(title = "產品名稱", number = 70)@Column(length = 50, nullable = false)private String tf_productName;@FieldDefine(title = "銷售人員", number = 80)@Column(length = 10, nullable = false)private String tf_salesman;@FieldDefine(title = "數量", number = 90)@Column(nullable = false)private Integer tf_number;@FieldDefine(title = "總長度", number = 100)private Double tf_allLength;@FieldDefine(title = "單價", number = 110, money = true)private Double tf_unitPrice;@FieldDefine(title = "計量單位", number = 120)@Column(length = 10)private String tf_unitText;// 預設折扣是 1.00,即不打折@FieldDefine(title = "折扣", number = 130, percent = true)private Double tf_discount = 1.0;@FieldDefine(title = "總金額", number = 140, money = true, remark = "總金額=數量*單價*折扣")@Column(updatable = false, insertable = false)private Double tf_amount;@FieldDefine(title = "已收金額", number = 150, money = true)private Double tf_receivedPrice;@FieldDefine(title = "已收比例", number = 160, percent = true, remark = "已收比例=已收金額/總金額")@Column(updatable = false, insertable = false)private Double tf_receivedPercent;@FieldDefine(title = "是否完成", number = 170)private Boolean tf_finished;@FieldDefine(title = "是否重要", number = 180)private Boolean tf_isImportant;@FieldDefine(title = "開始時間", number = 190)private Date tf_beginDate;@FieldDefine(title = "結束時間", number = 200)private Date tf_endDate;@FieldDefine(title = "備忘", number = 290)private String tf_remark;public Agreement() {}//getter and setter}在hibernate.cfg.xml檔案中加入
<!-- 合約管理 --><mapping class="com.jfok.server.hibernate.app.Agreement" />
根據我這套系統的最終設計目標,新增一個模組只要做上面二步就行了,那麼下面我們來具體的實現一下過程。第一步:在前台執行功能,根據標註在Agreement上的註解和標註在各個欄位上的註解來自動產生成_Module,_ModuleField中的記錄,並產生一個預設的列表方案和一個表單方案。
前面我們也做過這個功能,但是是在瀏覽器中輸入一個地址來實現的,現在我們把這個功能移到前台。 在Top.js的toolbar中再加入一按鈕,放在“搜尋“後面,用來輸入模組名稱,然後把該模組的定義和欄位定義加入到各個表中。
{text : '匯入',handler : function() {Ext.MessageBox.prompt('增加模組', '請輸入要增加模組的類名稱:', function(btn, text) {if (btn == 'ok') {Ext.Ajax.request({scope : this,url : 'systemframe/addmodule.do',params : {moduleName : text},success : function(response) {if (response.responseText)Ext.MessageBox.show({title : '匯入失敗',msg : '匯入模組失敗<br/><br/>' + response.responseText,buttons : Ext.MessageBox.OK,icon : Ext.MessageBox.ERROR});else {Ext.toastInfo('增加模組', '模組:' + text+ '的定義和grid,form定義已經到加系統中!');}},failure : function() {window.alert(text + '儲存失敗!')}})}})}}
現在可以來匯入Agreement 的資訊了。
確定後,如果匯入成功,會顯示如下提示:
背景程式會根據模組名稱來進行匯入操作。_Module表的資料
_ModuleField的資料