NC5单据开发步骤
1. 数据模型设计
1.1 数据设计规范
NC5系列大部分使用PowerDesigner进行数据模型设计,也有使用元数据设计数据模型。本文暂时介绍PowerDesigner的设计方法。
NC中的常用的数据类型大致为:
类型 | 数据库类型 | 备注 |
---|---|---|
档案主键 | Char(20) | |
公司主键 | Char(4) | 字段名称为pk_corp |
日期 | Char(10) | 2013-08-22 |
日期时间 | Char(19) | 2013-08-22 13:19:09 |
逻辑型 | Char(1) | Y,N |
整数 | int | |
数字、金额型 | Decimal(20,4 | 长度为20,小数占4位 |
文本型 | Varchar(20) | |
大文本 | Varchar(20) | |
短文本 | Varchar/Char | 视长度而定 |
在设计数据模型的时候每张表都必须设计ts{Char(19)}、dr{int}、pk_corp{char(4)}三个字段,分别表示记录的最后操作时间、删除标记、公司标记。
如果单据需要走审批流或业务流推式、拉式生成单据,则必须加上如下几个字段(如原单据已经考虑到则不需要添加):
编码 | 名称 | 类型 | 备注 |
---|---|---|---|
pk_corp | 公司主键 | char(4) | 审批流单据必须字段 |
pk_billtype | 单据类型 | varchar(10) | 审批流单据必须字段 |
vbillstatus | 单据状态 | int | 审批流单据必须字段 |
vapproveid | 审批人ID | char(20) | 审批流单据必须字段 |
dapprovedate | 审批日期 | char(10) | 审批流单据必须字段 |
voperatorid | 操作人id | char(20) | 审批流单据必须字段 |
doperatdate | 制单日期 | char(10) | 审批流单据必须字段 |
vapprovenote | 审批批语 | varchar(300) | 审批流单据必须字段 |
vbillno | 单据号 | varchar(50) | 审批流单据必须字段 |
pk_busitype | 业务类型 | varchar(50) | |
vbusicode | 业务编码 | varchar(50) | |
vlastbilltype | 下游单据类型 | char(20) | |
vlastbillid | 下游单据ID | char(20) | |
vlastbillrowid | 下游行ID | char(20) | |
vsourcebilltype | 源头单据类型 | char(20) | |
vsourcebillid | 源头单据 | char(20) | |
vsourcebillrowid | 源头单据行ID | char(20) |
1.2 数据模型
课程信息(bd_course)
编码 | 名称 | 类型 | 备注 |
---|---|---|---|
pk_courseid | 课程主键 | char(20) | |
coursecode | 课程编码 | varchar(100) | |
coursename | 课程名称 | varchar(100) | |
maxstunum | 最大选修人数 | int | |
memo | 课程简介 | varchar(300) | |
classroom | 教室 | varchar(100) | |
campus | 所属校区 | varchar(100) | |
major | 限定专业 | varchar(100) | |
credit | 学分 | int | |
creditcour | 学时 | int | |
pk_corp | 公司 | char(4) | |
ts | 时间戳 | char(19) | |
dr | 删除标记 | int |
学生信息(bd_student)
编码 | 名称 | 类型 | 备注 |
---|---|---|---|
pk_student | 主键 | char(20) | |
stuno | 学号 | varchar(20) | |
stuname | 姓名 | varchar(20) | |
age | 年龄 | int | |
stuid | 身份证号 | varchar(20) | |
birthplace | 户口所在地 | varchar(20) | |
address | 现住址 | varchar(50) | |
sex | 性别 | char(1) | |
telephone | 联系电话 | varchar(20) | |
邮箱 | varchar(20) | ||
birthday | 出生日期 | char(10) | |
classname | 班级名称 | varchar(50) | |
indate | 入学时间 | char(10) | |
isgraduate | 是否毕业 | char(1) | Y、N |
outdate | 毕业时间 | char(10) | |
voperatorid | 创建人 | char(20) | |
doperatdate | 创建日期 | char(10) | |
vmodifierid | 修改人 | char(20) | |
dmodifytime | 修改时间 | char(19) | |
pk_corp | pk_corp | char(4) | |
ts | ts | char(19) | |
dr | dr | int |
学生信息子表~紧急联系人(bd_contact)
编码 | 名称 | 类型 | 备注 |
---|---|---|---|
pk_contact | 主键 | char(20) | |
pk_student | 学生主键 | char(20) | |
name | 姓名 | varchar(20) | |
mobile | 电话 | varchar(20) | |
phone | 家庭电话 | varchar(20) | |
unitname | 联系人单位 | varchar(50) | |
address | 联系人地址 | varchar(50) | |
relation | 关系 | int | 父亲、母亲、配偶、亲人、朋友、同事、同学 |
ts | ts | char(19) | |
dr | dr | int |
选修课程申请(st_courseapply)
编码 | 名称 | 类型 | 备注 |
---|---|---|---|
pk_courseapply | 主键 | char(20) | |
classname | 所属班级 | varchar(50) | |
pk_student | 申请学生 | char(20) | |
teacher | 班主任 | varchar(50) | |
voperatorid | 申请人 | char(20) | |
doperatdate | 申请日期 | char(10) | |
vmodifierid | 修改人 | char(20) | |
dmodifydate | 修改时间 | char(19) | |
vapproveid | 审批人 | char(20) | |
vapprovenote | 审批批语 | Char(100) | |
dapprovedate | 审批日期 | char(10) | |
pk_billtype | 单据类型 | varchar(10) | |
vbillstatus | 单据状态 | int | |
vbillno | 申请单号 | varchar(50) | |
pk_corp | pk_corp | char(4) | |
ts | ts | char(19) | |
dr | dr | int |
选修课程(st_courseapply_b)
编码 | 名称 | 类型 | 备注 |
---|---|---|---|
pk_courseapply_b | 主键 | char(20) | |
pk_courseapply | 申请单主键 | char(20) | |
pk_cours | 课程ID | char(20) | |
credit | 学分 | int | |
memo | 备注 | varchar(300) | |
ts | ts | char(19) | |
dr | dr | int |
1.3 PowerDesigner 建模
1) 使用PowerDesigner 新建物理数据模型,点击菜单栏新建按键,弹出如下界面:
红圈处DBMS选择你所使用的数据库类型
2) 在Palette中选择表格后在空白区域点击,创建一个表对象,之后点击指针切换回鼠标界面。
3) 双击table会打开详细设计界面,在界面中填写对象中文名称与表名称
4) 点击旁边的Columns 页签,在该页签下添加详细的字段信息,如当前表有主键,请参考红框处设置表主键。
5) 以此类推完成其他几张表的设计工作。完成后注意保存模型文件,后缀为.pdm。
6) 导入数据字典,进入NC,客户化》二次开发工具》数据字典管理, 打开后新建一个文件夹,可以命名为:开发培训
7) 使用工具下面的导入数据字典进行数据导入,详见下图
2. 单据开发向导
2.1 开发前准备
1) 启动Eclipse,点击菜单栏 Window》 Preferenecs 》MDE Development ,在该界面中选择NC相关环境。(配置仅作参考,具体视情况而定)
2) 选择后,DriverList中会默认生成一个design的数据源,在列表中选择一个你配置的数据源,点击As design 即可。注意:请保证该列表的数据中
3) 点击菜单栏新建,弹出窗口选择 Module Project。
4) 确定后在在界面中输入Java工程名称及在NC中的模型名称,完成后Finish即可。
5) 在工程下创建一个文件夹,命名为pdm,将设计好的PDM文件拷贝到该目录。
6) 双击打开PDM,在弹出的界面点击右上角的小人,解析表结构,检查一下表名有没有正常解析,选择左下解的Oracle选项,然后导出建表脚本。
7) 导出建表脚本后,需要选择工程右键刷新,可以看到工程下存在ncscript 目录,该目录中包含Oracle、sqlserver的建表脚本。使用相应的SQL脚本在数据库中创建表。
2.2 列表型档案界面(课程信息维护)
2.2.1 生成单据VO
1) 双击打开PDM文件,解析数据后,选择要生成VO的表,点击右方向箭头,将其移运到主表名称中,在包名称中输入包路径,点击生成VO即可。
2) 生成完成后,选择工程右键刷新,即可在Public目录下看到刚刚生成的代码。
2.2.2 创建UI代码
1) 工程右键 选择NC Plugin》单据开发。
2) 在弹出界面中填写生成代码的包路径、单据类型、界面模型等。包路径最少为4层,单据类型编码为4个字符长度,代码模板选择列表界面。
3) 完成后点击Next确认要生成的文件,点击Finish完成即可生成代码,生成代码后请右键刷新工程,即可显示刚刚生成的代码。
4) 生成的文件大致会有三个,功能描述如下:
类名称 | 备注 |
---|---|
ClientCtrl | 负责配置界面 |
ClientEventHandler | 负责管理界面的按钮事件 |
ClientUI | 负责提供统一入口,同时管理界面字段的修改事件 |
5) 打开ClientCtrl类文件,列表界面需要在实现一个接口:nc.ui.trade.bill.ISingleController,并修改其生成的方法isSingleDetail() 返回值为true。
6) 设置单据使用的VO对象,修改CilentCtrl的getBillVoName() 方法,将返回值改为:return new String[]{HYBillVO.class.getName(),CourseVO.class.getName(),CourseVO.class.getName()};
nc.vo.trade.pub.HYBillVO 为NC产品使用的通用聚合VO对象,这个结构可以理解成:【聚合VO,表头VO,表体VO1,表体VO2】
7) 为界面添加按钮,实现public int[] getCardButtonAry()方法,该方法为卡片界面下的按钮数据
8) 查看一下生成的几个类中的方法,部分有注释,也可以从字面意思上猜出一部分。
2.2.3 功能注册
1) 在开发环境中启动NC服务端,右键工程》Run as》NC Middleware。等控制台打出Server startup in XXXX ms 的时候说明服务器端已经启动成功。现在就可以启动客户端程序了, 启动客户端使用:Run As》NC Client。
2) 进入到NC 集团下。打开功能注册的节点:客户化》二次开发工具》系统管理工具》功能注册。 选择左边树形的根目录(功能注册)点击增加,右边的数据参考下图。
左边选择刚刚添加的【开发培训】,点击增加,增加一个二级目录【学生管理系统】
选择【学生管理系统】增加可执行的功能节点,也就就是刚刚生成的ClientUI类名称全路径。可以在Eclipse中打开类文件,选择类的名称,然后右键选择Copy Qualified Name即可拷贝全路径。
3) 注意在NC中二次开发出来的功能,为了逃避授权的限制,默认第3位为H,否则部署到客户机会提示超过最大授权数。
4) 功能注册完成后需要注册一下模块信息、平台信息等,打开客户化》二次开发工具》UAP集成开发工具,点击第一个图标 会弹出一个界面,左边树形菜单选择业务组件,点击上方的 ‘ + ’按钮,增加模块信息。模块分类信息为刚刚在功能注册添加的一级模块名称。 选中子模块 添加子模块信息,注意子模块的名称在右边的下拉菜单中选择,下拉菜单中列出的为 NC Modules下的模块信息,也就是我们创建工程时填写的模块信息。
模块信息注册完毕后,还需要在系统类型定义中添加模块的信息。
5) 注意新增加模块还需要在sm_codetocode表中添加一条记录,否则无法将功能分配到公司下。
INSERT INTO sm_codetocode
(DISPCODE, DR, FUNCCODE, ISLEAF, MODULETYPE, PK_CODETOCODE, SUBFUNCCODE, TS)
VALUES
(NULL, 0, ‘HZ’, ‘Y’, 1, ‘demo’, NULL, ‘2013-08-23 17:16:00’)
FUNCCODE:为刚刚新增加的一级菜单名。
PK_CODETOCODE:为功能下主模块名称。
6) 模块信息在将来的开发过程中,不会频繁增加,大部分项目只需要注册了功能节点就可以了。
2.2.4 模板配置
1) 打开客户化》二次开发工具》模板管理 下的单据模板初始化,在该功能下添加单据模板
2) 在单据类型框中填入刚刚生成类文件时填写的单据类型,此处为“ST01”,点击显示模板,由于系统中不存在ST01的单据,所以右边的增加按钮变成可点击状态。选择左边的表前缀过滤,在文本框中输入也查找的表名称,点击列表显示,即可过滤出我们要使用的表数据,这里选择课程信息表,此处添加到主表。添加完成后点击增加。
3) 将表对象拖到中间的栏位中
最终结果为:
4) 完成后点击菜单栏的模板操作》保存模板,会弹出如下对话框,在框中输入标题与节点号(刚刚注册的功能节点号),点击确定即可
5) 在菜单栏点击生成查询模板,在弹出框中选择生成到的功能节点。
6) 完成后点击确定,在弹出的对话框中输入查询模板的名称。
7) 关联单据的默认模板。在二次开发工具下的功能节点默认模板设置,找到对应的功能节点,添加单据模板、查询模板。
8) 点击分配按钮,选择单据模板复选框,点击下面的添加,在弹出界面的左边找到刚刚添加的单据模板,右边选择默认模板,模板选择点击放大镜,选择默认模板,确定即可。
9) 在点击查询模板,点击添加弹出查询模板的分配界面,左边找到该功能节点,右边选择模板后,确定即可。
10) 最终分配完成后的界面如下图,完成后注意保存数据。
11) 以上操作完成后,分配一下功能权限就可以看到界面了。
2.2.5 深入了解
1) 在单据模板初始化中输入单据模板编码,点击显示模板,在点击下方修改按钮,进入到界面修改状态。
2) 选择表体框架,右键弹出菜单栏中点击【页签项目编辑】
3) 弹出的界面为表体字段的详细配置界面。
4) 可以通过点击表体的某个字段,在右边的属性页签中配置。
5) 不同的数据类型,可以进行不同的类型设置。
整数类型:可以设置最大最小值、字体颜色、千分位等。
小数类型:可以设置小数的精度,其余跟整数类型一致。
参照类型:可以设置参照的界面对象
下拉类型:可以设置下拉列表的显示值及选中后的存储值。
自定义项档案类型:可以参照到自定义档案列表中的东西。
6) 在模板块中右键,选择“项目重新排序”,可以变更项目的顺序,也可以使用拖拽。
7) 单据模板中的 主键、外键、pk_corp、ts、dr 等字段,必须设置为卡片列表不显示、不可编辑、非必输项。
8) 了解编辑公式与显示公司的作用。
9) 在查询模板初始化中调整默认生成的查询模板
操作符编码与名称为查询对话框中显示用的字符及生成SQL时使用的操作符号,需要适当调整一下,如果日期型、数字型的,不建议使用包含操作符。字符型的,则不建议使用大于等于、小于等于这样的操作符号。
是否缺省显示为是否默认显示到查询模板的对话框中,一般缺省显示的会列在中间,是否使用的会列在左边的树形中。
调整后的界面,如图:
2.3 管理型档案界面(学生信息维护)
2.3.1 生成单据VO
生成单据VO,解析完PDM文件,将主表选择到主表,子表选择到子表框中。添加一个包名称,如有需要可以修改一下主子表VO名称。
点击生成VO,刷新一下工作空间即可。
2.3.2 创建UI代码
右键工程,创建UI代码,注意该代码模板选择管理界面
2.3.3 功能注册
2.3.4 模板配置
输入要增加的模板类型,点击显示显示模板,左边选择学生信息主表、与联系人子表,点击增加。
将创建日期、创建人、修改人、修改日期移动到表尾,操作是在字段上右键,选择移动项目到表尾,移动完成后的效果如下图。
操作人、创建人的数据类型改为参照,类型设置中选择参照的数据为:操作员,并配置显示公式。getColValue(sm_user, user_name, cuserid, voperatorid),主要在列表状态下翻译创建人,将创建人由主键转换为名称。 修改人按上述规则调整,注意显示公式规则不同。
性别字段修改成下拉类型,数据类型设置成下拉,类型设置点击浏览,弹出界面中录入下图所示的东西。
表体的关系字段同样修改成下拉,在类型设置中按下图结构增加。
模板修改完成后,生成一下查询模板,然后将两个模板分配到功能节点上。
2.3.5 深入了解
1) 模板中配置缺省值
在单据模板中,选中性别字段,从下拉列表中选择“男”,保存即可。则新增单据时性别默认为“男”。
删除标记:0为未删除、1为删除,则可以在删除标记字段默认填写0 。
NC的逻辑型字段,有两个值:Y、N,未勾选时为N。实际上,如果未编辑过模板上的字段,则保存的时候该值为空,我们可以在模板上点击勾选,在点击取消,这样后台存储的时候就为N了。
2) 代码中填写缺省值
如果是表头表尾,则可以写到ClientUI中 setDefaultData()。
getBillCardPanel().getHeadItem(“pk_corp”).setValue(_getCorp().getPrimaryKey());//设置公司主键
getBillCardPanel().getTailItem(“voperatorid”).setValue(_getOperator());//为表尾的创建人赋值。
可以通过这种方式,为公司、创建人、创建时间 等字段赋上当前登录公司、操作人等信息。
如果是表体的字段,则必须重写ClientEventHandler下的onboAddline()方法,在增行的时候赋上值(仅适用于单表体)。
getBillCardPanelWrapper().getBillCardPanel().getBillModel().setValueAt(“缺省值”),
getBillCardPanelWrapper().getBillCardPanel().getRowCount()-1, “字段”);
2.4 管理型审批单据(选修课程审批单)
2.4.1 生成单据VO
2.4.2 创建UI代码
生成完代码需要刷新工作空间,此单据生成的代码如下图:
完成后需要修改Ctrl类的 getBillVOName()方法,添加刚刚生成的两个VO类。
Ctrl类的getBusinessActionType()返回值为IBusinessActionType.PLATFORM ,表示该单据是走审批流的,与上面讲的两个单据返回值是不同的,需要注意。
注意审批流单据需要将public boolean isExistBillStatus() 的返回值设置为true。
2.4.3 功能注册
2.4.4 单据信息注册
1) 在客户化》二次开发工具》单据管理》单据类型管理 节点注册单据信息,选择左边的开发培训节点,新增单据类型。
类型代码:创建UI类时填写的单据类型,此处为“ST03”。
类型名称:单据的名称,
功能节点编号:HZH103,该单据对应的功能节点。
审批节点编号: +功能节点编码HZH103,注意一定要以“”打头,否则会出错。
审批流检查类:默认使用:nc.bs.trade.business.HYSuperDMO,如需修改请参考该类。
填完保存即可。
2.4.5 对照注册
在VO对照管理中配置单据界面的信息,打开客户化》二次开发工具》单据管理》单据类型管理,在单据类型中输入刚刚注册的单据类型编码,然后回车,在界面中填写与单据相关的数据。
主表需要填写的信息为:
主子VO类名称:主表VO的全路径,对应Ctrl类getBillVOName() 数组的第二个字符串。
单据VO类名称:聚合VO的全路径,对应Ctrl类getBillVOName() 数组的第一个字符串。
主表的关键字段:主表VO的主键。
审批人:主表VO中设计的审批人字段
制单人:主表VO中设计的制单人字段
单据ID:主表VO的主键
对应数据库表:主表对应的表结构
单据编号:主表设计的单据号字段
单据类型:主表设计的单据类型字段
埴写完成后注意点击保存,详细参考下图:
点击子表单选框,该界面需要填写的内容为:
主子VO类名称:子表的VO全路径,对应Ctrl类getBillVOName() 数组的第3个字符串
单据VO类名称:聚合VO类全路径, 对应Ctrl类getBillVOName() 数组的第1个字符串
主表在子表的字段:子表VO的public String getParentPKFieldName() 返回的值,一般为主表的主键
对应数据库表:子表VO的表名称。
配置完成后注意点击保存,详细情况,参考下图:
2.4.6 动作脚本注册
复制动作脚本类中注释的SQL脚本,执行SQL语句(一共6个类,12行SQL语句)。
打开客户化》二次开发工具》单据管理》单据动作执行脚本 在树形中找到ST03 可以看到多出6个脚本。
打开客户化》二次开发工具》单据管理》单据动作管理 可以看到有6个动作
2.4.7 模板配置
增加模板单据,命名为“ST03”
调整一下模板
保存模板
2.4.8 审批流定义
审批过程中,如上图所示,测试2是审批者,所以当测试1提交单据之后,要审批测试1的单据就必须登录测试2的账号去审批,提交单据消息和审批单据消息都会出现在首页消息中心
2.4.8 单据号管理
单据号是自动生成的,这里相当于给单据号定一个规格标准
2.4.9 权限分配
当你在功能节点默认模板设置那里对应的目录下找不到你的节点时,先别紧张,因为很可能他跑到其他节点下面去了!