NCV6开发平台技术红皮书.docx
- 文档编号:20691805
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:53
- 大小:2.85MB
NCV6开发平台技术红皮书.docx
《NCV6开发平台技术红皮书.docx》由会员分享,可在线阅读,更多相关《NCV6开发平台技术红皮书.docx(53页珍藏版)》请在冰豆网上搜索。
NCV6开发平台技术红皮书
NCV6开发平台技术红皮书
NC-UAP6.0
用友NC-UAP
2019-07-21
第一章前言
用友公司针对大、中、小型企业分别建立了NC、U9、U8三条产品线,NC产品的目标是扮演多集团大型企业的信息化中枢,而UAP平台则扮演了整个NC产品的基础架构。
按照中国ERP企业成功应用模式,要成为一个成功的ERP软件基础平台,UAP必须支持为目标客户提供标准化、行业化、个性化的解决方案。
对于ERP系统的最终使用者来说,每天接触最多的就是包含了各种业务信息的表单。
这样,对于开发者,它意味着大部分的精力都必须投入到表单程序中,而这些程序却只能满足个性化的需求。
如何帮助开发者将主要精力转移到对业务逻辑的关注,同时帮助他们高效地创建出符合标准、行业、个性模式的表单程序?
UAP提供的解决方案是模板化——它是模式化思想的一种应用,包括以下两个方面:
1.免开发的配置模板。
利用模板设计器将表单的GUI界面保存成模板,用友的各产品研发团队可以为客户内置标准模板,实施顾问和二次开发伙伴可以针对企业的特性增加行业模板或个性化模板;另外,为了配套表单数据的查询功能、输出功能,UAP还提供了查询模板和输出模板;
2.需要开发的开发框架。
在V6版本中,代码模板主要是UI工厂II开发框架。
它利用灵活的布局方式,将界面元素进行组装。
采用模型事件通知的机制,避免了业务模型和展现控件的过度耦合和事件循环。
UI工厂II开发框架对旧的开发框架进行了彻底的颠覆,改原有的继承方式实现重用为组合方式,通过组合方式构成复杂界面。
另外,新的开发框架,提供了几种典型的模型组件和视图、Action组件,基本满足了NC相关业务开发的全部需求。
另外,新的开发框架,采用Spring的IOC机制,对界面构成元素进行依
赖注入,增加了组件的重用性和界面变化的灵活度。
另外,UIF2开发框架还完
美的支持了界面的二次开发扩展。
图1UAP单据模板化解决方案
UAP单据模板设计器将单据最常用的界面类型抽象成卡片和列表的组合,支持日期、数字、逻辑、下拉、参照等数据类型,并且可以定义数据在前台加载时自动执行的显示公式和编辑控件后触发的编辑公式。
下图是UAP单据模板设计器配置出的一个单据模板。
图2UAP单据模板设计器示例
UAP单据模板设计器承担的主要职责是定制元数据模型的界面展现形态。
而开发框架,则是综合利用UAP平台各种组件和服务,快速的、最少量的开发完成NC功能节点的构造。
UIF2开发框架基本构成元素结构图如下:
图3UI工厂II开发框架基本元素构成图
UAP表单模板化解决方案构建了符合标准化、行业化、个性化要求的表单程序,能帮助开发人员快速响应客户需求,并帮助实施顾问在交付阶段独立解决客户的部分个性化表单需求。
第二章如何建立NC开发环境
第一次在NC环境中做开发,需要首先建立一个数据库环境,这个数据库环境中指定了NC所要使用的表空间,并预先建立了NC的系统表、视图、索引等,并预置了大量的初始化数据。
然后,在Eclipse中建立一个开发项目,引用UAP的jar包即可。
经过这两步,就完成了NC开发环境的建立。
1.第一步:
建立数据库
在数据库服务器(Oracle,MSSQLServer,DB2)中新建一个数据库,并执行数据库脚本指定NC应用的表空间,不同的数据库使用的脚本不一样,以MSSQLServer为例:
假设新建的数据库叫ncdemo,MSSQLServe的数据文件存放在D:
\MicrosoftSQLServer\data下,那么数据库脚本为
ALTERDATABASE[NCDEMO]ADDFILEGROUP[NNC_DATA01]
go
ALTERDATABASE[NCDEMO]ADDFILEGROUP[NNC_DATA02]
go
ALTERDATABASE[NCDEMO]ADDFILEGROUP[NNC_DATA03]
go
ALTERDATABASE[NCDEMO]ADDFILEGROUP[NNC_INDEX01]
go
ALTERDATABASE[NCDEMO]ADDFILEGROUP[NNC_INDEX02]
go
ALTERDATABASE[NCDEMO]ADDFILEGROUP[NNC_INDEX03]
go
ALTERDATABASE[NCDEMO]ADDFILE(NAME=N'nnc_data01',FILENAME=N'D:
\MicrosoftSQLServer\data\nnc_data01_Data.NDF',SIZE=500,FILEGROWTH=200)TOFILEGROUP[NNC_DATA01]
go
ALTERDATABASE[NCDEMO]ADDFILE(NAME=N'nnc_data02',FILENAME=N'D:
\MicrosoftSQLServer\data\nnc_data02_Data.NDF',SIZE=500,FILEGROWTH=200)TOFILEGROUP[NNC_DATA02]
go
ALTERDATABASE[NCDEMO]ADDFILE(NAME=N'nnc_data03',FILENAME=N'D:
\MicrosoftSQLServer\data\nnc_data03_Data.NDF',SIZE=500,FILEGROWTH=200)TOFILEGROUP[NNC_DATA03]
go
ALTERDATABASE[NCDEMO]ADDFILE(NAME=N'nnc_index01',FILENAME=N'D:
\MicrosoftSQLServer\data\nnc_index01_Data.NDF',SIZE=200,FILEGROWTH=100)TOFILEGROUP[NNC_INDEX01]
go
ALTERDATABASE[NCDEMO]ADDFILE(NAME=N'nnc_index02',FILENAME=N'D:
\MicrosoftSQLServer\data\nnc_index02_Data.NDF',SIZE=200,FILEGROWTH=100)TOFILEGROUP[NNC_INDEX02]
go
ALTERDATABASE[NCDEMO]ADDFILE(NAME=N'nnc_index03',FILENAME=N'D:
\MicrosoftSQLServer\data\nnc_index03_Data.NDF',SIZE=200,FILEGROWTH=100)TOFILEGROUP[NNC_INDEX03]
Go
2.第二步:
运行UAP安装盘程序,安装NC服务器端环境
该步骤的目的是建立NC测试服务器,并利用它建表,并初始化数据表。
运行安装盘根目录下的ncsetup.bat文件,会进入下面的安装向导:
1、安装环境
1)选择NC服务器端环境根目录和安装哪些产品:
通过此向导,选择NC产品安装目录,以及选择哪些产品和模块进行安装。
2)开始安装NC产品
3)NC产品安装完成。
如果要对服务器进行配置,可以选择“继续选择‘应用服务器’”。
4)如果要对服务器进行配置,将打开服务器配置界面。
在此界面可以对使用的不同类型应用服务器进行配置。
安装完成之后,将在安装目录中呈现如下的目录结构:
2、配置环境
在安装目录的bin子目录中,运行ncSysConfig.bat文件,将运行NC环境的配置工具。
在此工具中,可以对应用服务器、数据源等信息进行配置。
3、环境信息配置完成之后,启动中间件,方法是在上面的NC_HOME目录中双击startup.bat,中间件即可启动,启动界面如下:
4、利用InternetExplore作为客户端登陆,在地址栏输入http:
//127.0.0.1/admin.jsp,即可看到下面的超级管理员登录界面:
5、用超级管理员帐号登录系统,root/空。
选择系统管理节点,进行业务系统的创建。
6、前面建立了NC要使用的数据库,并为数据库设置了表空间信息,但这还不够,还必须为其安装NC的系统数据表和初始化数据。
方法是点击上面系统管理页面的“升级系统”按钮,或新增按钮建立新的业务系统,开始进行数据表的建立和初始化,如下图:
1)首先选择需要安装的系统模块信息
2)开始进行系统数据安装
3)安装过程完成,可以通过浏览器进行系统的访问:
3、第三步:
在Eclipse中建立NC开发环境。
在上一个步骤中,演示了怎么搭建NC的数据环境和测试环境,但作为开发人员,日常的工作都是在Eclipse开发环境中进行。
在Eclipse中建立开发环境分下面几个步骤:
1.往Eclipse插件中加入NC开发所需的MDE插件,这些插件可以在相关工具\Eclipse_NC插件中找到,拷贝到eclipse安装路径下的plugins目录下即可。
2.取得NC_HOME,NC_HOME包含了开发环境所需的所有jar包,将安装目录拷贝到你机器上的任一路径,比如E:
\NCHOME。
3.打开Eclipse,点击菜单“新建/项目”,弹出下面的对话框:
选择MDEDevelopment下的MoudleProject即可。
4.点击下一步,开始创建MoudleProject,在下面的对话框中填入信息:
5.点击完成后,会创建项目,形成下图所示的目录结构:
6.下面,需要为此项目指定NC_HOME的路径,这样NC开发环境才有可依赖的JAR包。
方法是在Eclipse中选择菜单窗口\首选项,在弹出的对话框中针对MDEDevelopment输入NC_HOME的路径,如下:
7.点确定后,在项目上单击右键,然后选择菜单项MDETools/updateclasspath,以更新NC_HOME。
8.至此,开发环境已建立完毕。
在开发环境中调试程序,一般需要首先启动NC中间件,然后启动UAP客户端调试器。
下面我们在eclipse调试器中建立这两个程序:
1)建立中间件调试启动点,方法是在调试点管理界面左边列表的ModuleApplication下新建一个调试点,MDE插件会为它设置默认参数,我们只需改变一下调试点名称,如下所示:
2)建立UAP客户端调试器启动点,该调试器的入口类是nc.starter.test.Jstarter,因此可以新建一个JavaApplication类型的调试点,输入入口类,如下所示:
3)在设立这两个调试点之后,要注意两个问题:
一是你的项目所使用的JRE的安全策略必须是:
grant{
permissionjava.security.AllPermission;
};
这可以通过修改{$JRE根目录}/jre/lib下的java.policy文件来实现,否则在启动中间件时会出现java.security.AccessControlException;二是要成功运行UAP客户端调试器(JStarter),必须将jre/lib下的plugin.jar也加入到项目默认的JRE的classpath中,如下所示:
4)此时即可先启动中间件,再启动客户端调试环境。
客户端调试环境启动图如下:
上面显示连接的是本机中间件,如果在远程有中间件,填入其IP和端口,也可用于调试开发环境中的客户端代码。
点击“Start”按钮后即可进入NC登陆界面,如下所示:
第三章NC初学者开发指南
概述
基本概念
单据:
比如报销时的报销单,一般由表头和表体组成(有些时候还含有表尾)。
表头中包含了单据的主信息,比如日期、部门、预算项目;表体包含了单据的明细信息,比如具体的事项和金额;
单据类型:
一个业务系统为了使结构更清晰,通常也是分层的。
比如,供应链系统包含了采购、库存等子系统,每个子系统都具有一个系统类型,而每个子系统都会具有很多张单据,为了区分这些单据,为每张单据命名一个单据类型,作为唯一标识;
模板:
单据开发涉及到三大模板(单据模板、查询模板、打印模板)。
单据模板定义了单据的显示外观和基本框架,查询模板定义了单据的查询对话框,打印模板定义了单据信息打印到打印机的样式和格式;
VO:
值对象,用作传输数据的载体
聚合VO:
单据一般由表头和表体构成,因此单据的数据表通常设计成主表和子表。
聚合VO是对单据数据的抽象,它用于装载主表VO和一组子表VO.;
UI工厂:
虽然能通过三大模板定义出单据的显示,但每张单据都有一些公共的或特殊的行为。
UI工厂是一种单据开发框架,它将常用单据抽象成了很多类型,因此,UI工厂相当于是单据开发的代码模板,预置了单据的各种公共行为,比如增、删、改、查,并且可以连接到NC流程平台,支持审批、单据驱动等应用。
单据开发主要流程
NC平台对开发过程进行很多抽象和封装,使得单据开发变得非常容易。
一般地,开发环境中,开发一个单据主要包括以下步骤:
第一步、PowerDesigner中建立单据的物理模型(数据库表),保存成pdm文件(xml);
第二步、利用PowerDesigner生成单据的建表脚本(SQL语句),在数据库中执行此脚本建立数据库表结构;
第三步、利用NC集成辅助工具中的数据字典生成工具导入pdm文件,生成相应的数据字典;
第四步、利用NC集成辅助工具中的CodeSeedVO工具利用odbc连接数据库,将单据涉及的数据表生成VO对象;
第五步、以UI工厂为基础,应用Template模式,编写自己的单据类。
下面,我们以一个简单的员工信息管理系统分别介绍这几个步骤。
搭建开发环境
本文软件开发环境
1)操作系统:
Windows2000Server
2)数据库设计工具:
SybasePowerDesignerVersion9.5.0.648(以下简称PD)
为了给数据表自动生成时间戳(ts)、删除标志(dr)字段,需给PD打上插件补丁:
db2cs7.xdb,oracl8i2.xdb,sqlserv7.xdb
3)数据库:
MSSQLServer2000
4)开发工具:
Eclipse3.1.1
给PD打补丁
将三个补丁文件全部拷贝到PD的安装目录的ResourceFiles\DBMS下即可
建立数据库
因为NC本身使用了很多数据库表,所以我们建立的数据库中必须包含NC系统表和其中的某些数据,而不是简单新建库。
本文以SQLServer2000为例。
第一步、建立数据库v5test
第二步、在v5test数据库名上右键选择导入数据,根据其它已经建好的库来生成库。
或者根据数据库的备份和还原操作来建库。
这样,我们就建立起包含NC系统表的数据库,在此基础上,我们建立自己的数据表进行开发。
建立开发工程
现在已经存在NC_UAP_UIFactory工程,其中包含了部分UI工厂源码和依赖的jar包,依此工程建立我们自己的eclipse工程。
第一步、打开eclipse,新建java工程(在V5中则新建MDE工程)
第二步、设置工程名,本例为UIFactoryV5,选择从存在的资源中创建工程,选择NC_UAP_UIFactory文件夹,依次确定建立工程。
数据库表pdm及SQL脚本的生成
PD是一种高端的数据建模工具,使用它可以很方便的建立数据库、导出SQL脚本,其物理模型文件的后缀名为pdm,所以,NC辅助开发工具多处依赖PD来完成数据库相关操作。
数据模型
我们的员工信息管理系统包括员工的基本信息,员工的类别信息,员工工资,为了增强系统的可扩展性,从员工基本信息中独立出员工的家庭住址信息,街道信息。
下图显示了实体间的关系。
生成pdm步骤
第一步、打开PD文件夹中的可执行文件pdshell9.exe,启动PD,会出现如下界面,选择新建一个物理模型。
第二步、我们以MSSQLServer数据库为例,选择数据库为MiscrosftSQLServer7.x,注意,由于补丁文件只针对SQLServer7.x版本,所以,无论我们用SQLServer7.x还是2000或以上版本,此处的DBMS都要选择SQL.Server.7.x。
第三步、确定后左侧面板中会出现一个节点,双击弹出如下对话框,设置此模型的name,code等
第四步、在新建节点上点击右键选择New->Table
第五步、在General选项卡中,设置表名,表的中文描述
第六步、在Columns选项卡中定义列,列的中文描述。
注意此处列的数据类型,一般地,主键前缀为pk_,数据类型为char(20),boolean类型的列前缀为b,数据类型为char
(1),日期类型前缀为d,数据类型为char(10),等等,更多数据库表字段命名规范参照附录开发规范文档。
第七步、保存到指定目录,便得到pdm文件
生成SQL脚本步骤
第一步、选择菜单项Database->GenerateDatabase…
第二步、在弹出界面中,设置生成脚本文件的存放路径,并对Tables&Views选项卡做如下设置
第三步、对Keys&Indexs选项卡做如下设置,注意,取消除主键外的所有选项,因为此时我们没有这些选项信息
第四步、取消Database选项卡中的所有选项
第五步、按下确定按钮后,便生成了SQL脚本
生成数据字典
数据字典是NC二次开发工具中探测数据库表结构的数据基础,而不是采用每次需要数据都连接数据库的方式。
数据字典由上一步骤生成的pdm文件生成,NC二次开发工具提供了相应的生成工具。
步骤
第一步、启动NC集成辅助开发工具,选择菜单系统管理工具->数据字典管理
第二步、在弹出的界面中,选择菜单项工具->导入数据字典
第三步、选择数据字典导入文件类型,此处选择解析PDM文件
第四步、在弹出的界面中点击选择按钮,选择上一章生成的PDM文件
第五步、选择覆盖方式,一般地,选择全部覆盖
第六步、在弹出的窗口左侧会出现可供选择的数据表,选中需要导入的数据库表加到右边的窗口中
第七步,会出现如下窗口,此时便完成了数据字典的导入
参照
什么是参照
参照录入,是一种辅助的数据输入方式,通常弹出界面的形式提供可以参考的数据,比如在录入省份信息时,提供一个全国省份列表以供选择。
单据开发中,有很多输入字段存在类似的需求。
NC系统中预置了很多种常见参照(基本覆盖了所有的基本档案,比如人员参照,存货参照),如果要自定义一种参照,则需要简单的开发工作。
下面我们对员工家庭住址中的街道做一个参照,方便街道信息的录入。
建立参照类
步骤一、建立自己的参照类,定制被参照的数据及其显示样式及格式。
我们用nc.ui.mytest.ref包来存放参照类,新建RoadRefModel继承DefaultRefModel类,用于录入员工数据。
publicclassRoadRefModelextendsDefaultRefModel{
//……
}
步骤二、设置存储参照信息的数据库表名,及其关键字字段名
publicStringgetTableName(){
return"uap_test_road";
}
publicStringgetPkFieldCode(){
return"pk_road";
}
步骤三、分别重载getFieldCode()和getFieldName()方法,设置需要参照的字段(数据库表中的列名),及其显示名称
publicString[]getFieldCode(){
returnnewString[]{"vname","vdescription"};
}
publicString[]getFieldName(){
returnnewString[]{"街道名称","描述信息"};
}
步骤四、设置参照弹出对话框的标题
publicStringgetRefTitle(){
return"道路参照";
}
这样,就完成了参照类,下面将单据模板中的某些字段设置上参照。
实际应用
如果在第六章建立的单据模板中添加一条员工家庭住址信息,输入住址所在街道时需要输入街道数据表对应记录的主键,这是添上参照,使得用户录入员工家庭住址时,可以通过选择街道来填充对应的街道字段
步骤一、启动NC集成辅助开发工具,在模板管理->单据模板设置工具菜单中,修改之前建立的“T01”单据模板。
步骤二、为了给用户更加直观的感受,我们给表体增加“街道名称”列,并将这列作为参照录入的列。
在表体上按下右键菜单,选择“增加自定义项目”。
步骤三、此时会弹出如下对话框。
第四步、每一列都有一个标识,输入列标识后按下确定。
这时,表体增加roadname列,单击列头右边的属性窗口会显出出项目主键和显示名称。
第五步、修改显示名称为“街道名称”
第六步、选择高级属性选项卡,将数据类型设置为“参照”,参照类型设置为我们建立的参照类,放到“<>”中,即为“
设置关键字名为主键所在列的road,这是因为,员工地址表中关联的是街道主键,当客户在参照中选择了某个街道,需要将这条数据的主键带到界面中的road字段;
第七步、此时,点击每行的街道名称单元格时,单元格中会显示出一个按钮,提示此格数据可以选择录入。
第八步、按下按钮,弹出如下对话框。
选择某一条纪录按下确定,表体对应的单元格中就会显示出相应的数据。
单据模板中的公式使用
什么是公式
单据模板中的公式为数据的展现提供了很多灵活性,比如可定义字段C=字段A+字段B,最常用的公式还是通过主键查询数据表中其它描述字段信息的公式,比如员工家庭地址中的街道字段存储着街道详细信息表中对应记录的主键,打开单据界面时,客户不希望看到一堆难以理解的主键而是更加直观的信息,如街道名称,街道描述信息等。
同样的,选择一个街道名称后,对应的街道描述信息和街道主键也应该相应的。
公式就定义了表体中各列间数据的依赖关系,主要有显示公式、编辑公式,显示公式在界面初始化或刷新时会自动运算,编辑公式在修改列数据时自动运算。
给单据模板设置公式
下面我们就用公式实现此功能。
第一步、修改单据模板,给表体添加自定义表项:
街道描述信息“roadinfo”。
第二步、选中街道名称列头,打开其高级属性,单击编辑公式项。
第三步、在弹出的对话框中输入公式,本例公式为:
roadname->getColValue(uap_test_road,vname,pk_road,road);
roadinfo->getColValue(uap_test_road,vdescription,pk_road,road);
公式左边为模板中要置值项的项目主键,getColValue公式的第一个参数为数据库表名称,第二个参数为数据库表中要返回的列名称,第三个参数为数据库表主键,第四个参数为从当前模板中那个字段中取数
按下确定
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NCV6 开发 平台 技术 红皮书
![提示](https://static.bdocx.com/images/bang_tan.gif)