跟我一起学extjs5(40--增加一个自定义模块[1建立表和bean文件])

跟我一起学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的数据

时间: 2024-10-07 01:23:32

跟我一起学extjs5(40--增加一个自定义模块[1建立表和bean文件])的相关文章

跟我一起学extjs5(41--增加一个自定义模块(源码下载)[2销售合同加入菜单和模块展示])

跟我一起学extjs5(41--增加一个自定义模块[2销售合同加入菜单和模块展示]) 在前面一节销售合同模块的信息导入系统后,需要在菜单中加入这个模块,但是现在菜单模块没法利用此系统进行编辑(多模块的层次现在还没有加入),因此只能在数据库里加入一条记录了: 加入后,重新启动一下tomcat,进入系统,就能在菜单"合同管理"下,看到 "销售合同"的菜单条了,点击一下,看看结果吧. 以上是自动生成"销售合同"的模块界面,这个就是最初介绍的模块的列表.

跟我一起学extjs5(33--单个模块的设计[1建立表和bean])

跟我一起学extjs5(33--单个模块的设计[1建立表和bean]) 现在开始进入这个系统的第一个核心部分,就是如何对模块的功能进行设计.请看下图,一个最简单的模块包括的内容有:模块属性,字段属性,列表定义和表单定义. 在上面的定义中,一个模块可以有n个字段组成,可以有若干个列表方案和表单方案:每一个列表和表单可以有若干个组组成,每个组下面又有若干个字段.这样的设计也符合这个教程的前20节中设计出来的功能.现在要做的就是把这些功能做成前后台交互的. 先开始模块字段和列表方案的定义.以上各个方案

如何在magento后台增加一个自定义订单状态

magento后台订单状态(order status)只有Pending.Processing.On Hold.Closed.Canceled.Pending Payment 等等,如何在magento后台增加一个自定义订单状态呢?下面最模板以增加一个”On Shipping” 为例: 1.首先你需打开app/code/core/Mage/Sales/etc/config.xml 文件找到大概第545行,在之间插入一行自定义状态代码: <statuses> <pending transl

Deppin系统 Liunx增加一个自定义分辨率开机自启动

前言: 由于会用到使用 xrandr 设置屏幕属性,所以先在这分享一个xrandr的一些常用方法:http://jouyouyun.github.io/Blog/xrandr-examples/ 感兴趣的小伙伴可以进去看看. 1.在deppin的官网中,有关于Linux开机自启动的一些说明: https://wiki.deepin.org/wiki/%E8%87%AA%E5%90%AF%E5%8A%A8%E7%A8%8B%E5%BA%8F 2.在 ~/.config/autostart 下面创建

cocos2d-x项目中如何避免增加一个cpp就必须在工程android.mk文件去添加引用

LOCAL_SRC_FILES := hellocpp/main.cpp \       ../../Classes/AppDelegate.cpp \ ../../Classes/HelloWorldScene.cpp 只要把上面这些替换成下面的: SRC_FILES := hellocpp/main.cpp SRC_FILES += $(wildcard $(LOCAL_PATH)/../../Classes/*.cpp) SRC_FILES += $(wildcard $(LOCAL_PA

跟我一起学extjs5(29--加入模块和菜单定义[2建立java bean])

跟我一起学extjs5(29--加入模块和菜单定义[2建立java bean]) 对上一节中加入的4个模块在java中建立相应的bean文件. 以上表建立好以后,需要建立java bean文件.在建立之前需要加入几个支持类. 先在com.jfok.server.common中建立包annotation,再在下面加入二个类库,这二个是自定义的注释类.分别用来注释每一个模块的信息和模块中每一字段的信息. package com.jfok.server.common.annotation; impor

跟我一起学extjs5(11--自定义模块的设计)

跟我一起学extjs5(11--自定义模块的设计) 从这一节开始我们来设计并完成一个自定义模块.我们先来确定一个独立的模块的所能定义的一些模块信息.以下信息只是我自己在开发过程中想到或用到的,希望有新的想法的或者有建议的跟贴回复. 一个独立模块包含以下信息: 1.模块的基本信息 模块ID号:一个数字的ID号,可以根据此ID号的顺序将相同分组的模块放在一块. 模块分组:模块分到哪个组里,比如说业务模块1.业务模块2.系统设置.系统管理等. 模块标识:系统中唯一的模块的标识,一般这个标识等同于数据库

跟我一起学extjs5(42--单个模块的数据新增方式)

跟我一起学extjs5(42--单个模块的数据新增方式) 前面的章节中已经加入了一个自定义的模块,并且可以进行数据的新增.修改.删除的操作了,在这个基础上就可以大作文章了.这一节来设想几种新据新增的方式,并给出一些具体的解决方案. 看了我后台java源码的可以看出,所有的模块的新增.修改.删除全部是相同的处理,只是用了反射来生成各个实体bean,这样不管你有多少个业务bean,你的这部分代码是不用再增加了,只需要考虑一些逻辑处理上的操作即可,这些在后面会提到.基于这样的方式,我们可以定义多种数据

Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 (主要是NSLayoutConstraint 的使用)

当前位置: > Swift新手入门 > Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 时间:2014-09-10 16:49来源:未知 作者:啊成 举报 点击:562次 我会复习一下有关键盘扩展的内容,然后通过使用iOS 8中的新应用扩展API的设计一个摩斯码的输入法.完成这个教程大约需要花费20分钟.完整代码 概览 通过使用自定义输入法替换系统输入法,用户可以实现一些特别的功能.例如一个特别新颖的输入方式,或输入iOS原生并不支持的语言.自定义输入法的基本功能很简单