NC客户化开发全书(第三版)-nc56_第1页
NC客户化开发全书(第三版)-nc56_第2页
NC客户化开发全书(第三版)-nc56_第3页
NC客户化开发全书(第三版)-nc56_第4页
NC客户化开发全书(第三版)-nc56_第5页
已阅读5页,还剩217页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用友集团ERP客户化开发系列丛书目录TOC\o"1-4"\h\z\u第一篇入门篇 71. 搭建NC环境 71.1. 内容概述 71.2. 详细介绍 81.2.1. 建立数据库 81.2.2. 安装NC 81.2.3. 配置启动NC 121.2.4. Eclipse中建立NC开发环境 161.2.5. 产品参数,档案初始化 221.2.6. 权限管理 251.2.7. 产品主要目录结构介绍 272. NC基础技术 282.1. 内容概述 282.2. 详细介绍 282.2.1. NC开发基本概念 282.2.2. NCUAP总体介绍 302.2.3. NC的开发模型 352.2.4. 开发远程接口 37. 定义接口 37. 实现该接口 37. 部署组件 37. 客户端调用 38. 事务型组件发布 38. 客户端代码 403. NC数据库持久化技术 413.1. 内容概述 413.2. 详细介绍 423.2.1. 核心类介绍 423.2.2. 通过JDBCFrameWork访问数据库 423.2.3. 通过BaseDao进行对象的持久化 443.2.4. 结果集合操作 453.2.5. 结果集控制 46第二篇中级篇 484. 元数据建模 484.1. 内容概述 484.2. 详细介绍 484.2.1. 新建元数据模型 484.2.2. 建立模型文件 494.2.3. 建立数据实体 494.2.4. 发布元数据 594.2.5. 导出JAVA源代码 604.2.6. 生成SQL脚本并执行 604.2.7. 最终成果 615. 功能建模 625.1. 内容概述 625.2. 详细介绍 625.2.1. 进入Workshop 625.2.2. 表单开发流程导航工具 65. 新建业务组件 65. 公共信息设置 66. 单据模板设置 66. 查询模板设置 69. 配置打印模板 70. 建立单据类型 71. 单据动作编辑 71. 单据动作脚本设置 73. 单据VO交换 730. 单据号设置 741. 自定义按钮设置 752. UI组装 753. 发布UI 764. 生成代码到本地 765.2.3. 权限分配 786. 单据开发技术 786.1. 内容概述 786.2. 详细介绍 786.2.1. UI工厂 78. UI工厂结构图 79. UI工厂最基础类说明 79. 单据模型介绍 81. 界面加载 81. 事件处理 826.2.2. 参照开发 83. 参照的类结构图 83. 自定义参照开发规范 83. UIRefPane和refModle设置 866.2.3. 单据号 87. 单据号规则 87. 接口方法 896.2.4. 公式 91. 常用公式 91. 创建公式执行器 92. 设置公式执行器环境 93. 设置公式的值 93. 对公式进行语法检查 94. 提取公式变量 95. 给公式变量赋值 95. 取公式的值 966.2.5. 锁 966.2.6. 日志 98. 日志API的选择 99. 日志级别的选择 1006.2.7. 异常 100第三篇高级篇 1017. 流程平台 1027.1. 内容概述 1027.2. 详细介绍 1027.2.1. 流程平台介绍 1027.2.2. 业务流程 104. 建立数据交换 104. 建立业务类型 109. 单据动作配置(推式流程配置) 109. 流程配置 110. 单据来源配置(拉式流程配置) 110. 动作约束配置 112. 动作事件控制配置 113. 动作驱动配置(推式流程配置) 114. 其他工作 1150. 推式流程过程 1161. 拉式单据过程(单据的上下游参照) 1167.2.3. 审批流 118. 审批流定义 118. 流程模型 120. 消息配置(MessageConfig) 121. 工作项的审批结果 122. 相关平台类介绍 123. 动作处理时序图 124. UI端调用-PfUtilClient 1241. 判断是否进行动作前提示 125. BS端调用 1251. 单据动作处理 1257.2.4. 消息中心 130. 展现样式 131. 消息类型 1338. 查询引擎 1348.1. 内容概述 1348.2. 详细介绍 1348.2.1. 进入查询引擎管理页面 1348.2.2. 创建查询对象 1348.2.3. 设置报表参数 1358.2.4. 制作查询定义 1368.2.5. 查询格式设计 1389. 预警平台 1419.1. 内容概述 1419.2. 详细介绍 1419.2.1. 预警类型注册 1419.2.2. 预警条目注册 14310. 交换平台 14810.1. 内容概述 14810.2. 详细介绍 14810.2.1. 交换平台使用 148. 注册外部系统 149. 准备外系统数据 150. 配置辅助信息(可选) 151. 设置基础数据对照(可选) 151. 配置Servlet的URL地址 152. 利用客户端发送数据 15211. 会计平台 15411.1. 内容概述 15411.2. 详细介绍 15511.2.1. 会计平台注册 15611.2.2. 代码调用 16012. 单点登陆 16212.1. 内容概述 16212.2. 详细介绍 16312.2.1. 单点登陆 16312.2.2. 打开代办事项 16513. NC开发webservice 16713.1. 内容概述 16713.2. 详细介绍 16713.2.1. 发布服务 167. 创建WSDL文件 168. 创建XSD文件 169. 配置UPM文件 17013.2.2. 客户端调用 176. 创建相关JAVA类文件 176. 创建JAVA接口 177. 测试用例 178第四篇附录 18214. XML和EXCEL 18214.1. 内容概述 18214.2. 详细介绍 18214.2.1. 利用XmlUtils读取XML 18214.2.2. Excel文件读写 18815. 多语言 18915.1. 内容概述 18915.2. 详细介绍 18915.2.1. 生成资源文件 19015.2.2. 代码调用 19016. 补丁与安装盘 19116.1. 内容概述 19116.2. 详细介绍 19116.2.1. 安装盘结构 19116.2.2. 产品结构 19116.2.3. 模块结构 19216.2.4. 制作补丁 19417. 设计开发规范 19717.1. 内容概述 19717.2. 详细介绍 19717.2.1. SQL规范 197. 概述 197. 书写风格 197. 性能优化 198. 四、多数据库的考虑 19917.2.2. JAVA开发规范 201. 文件 201. 命名规则 202. 注释规范 206. 编码规范 21118. 开发常见问题与技巧 21518.1. 内容概述 21518.2. 详细介绍 21518.2.1. 环境变量类nc.ui.pub.ClientEnvironment 21518.2.2. UAP发送待办消息方法 21718.2.3. 模板中下拉框的值 21818.2.4. 数据权限过滤 21819. 技术红皮书 22119.1. 内容概述 22119.2. 详细介绍 22119.2.1. 技术红皮书目录 221第一篇入门篇欢迎您成为用友NC开发队伍中的一员!如果您从未接触过NC的开发,本篇将从NC产品使用开始,循序渐进的带您步入精彩的NC产品世界.本学时教程是在完成NC产品使用入门阅读的最佳起点。在开始学习之前,您需要掌握以下基本技能:Eclipse使用JAVA和J2EE基础知识本学时教程中将会讲述以下内容:NC产品入门,本章旨在为那些对NC尚不了解的新进人员就NC的大体形态做个简单的讲解,以便对NC产品有个简单的认识,并学习到与NC产品二次开发有关的产品操作技术入门知识。开发环境的安装和搭建,本章是为第一次使用NC的人员做准备,达到迅速的安装和搭建NC环境。NC技术框架简介,本章您将会学习NC技术框架理论概念,通过学习范例代码掌握VO\BO\远程接口的概念。NC56的数据建模,介绍如何基于元数据进行业务建模,以及如何在运行时对元数据进行管理。搭建NC环境内容概述第一次在NC环境中做开发,需要首先建立一个数据库环境,这个数据库环境中指定了NC所要使用的表空间,并预先建立了NC的系统表、视图、索引等,并预置了大量的初始化数据。然后,在Eclipse中建立一个开发项目,引用UAP的jar包即可。经过这两步,就完成了NC开发环境的建立。NC环境安装完成后还需要对系统进行初始化,包括参数,组织结构,权限,基本档案的建立,这样一个系统才算真正可以使用。详细介绍建立数据库在数据库服务器(Oracle,MSSQLServer,DB2)中新建一个空数据库,并执行数据库脚本建立NC需要的表空间,不同的数据库使用的脚本不一样(正式安装盘下有安装说明),以Oracle为例:其数据文件存放在D:\sql\data下,那么数据库脚本为:CREATETABLESPACENNC_DATA01DATAFILE'D:\sql\data\nnc_data01.dbf'SIZE500MAUTOEXTENDONNEXT50MEXTENTMANAGEMENTLOCALUNIFORMSIZE256K;CREATETABLESPACENNC_DATA01DATAFILE'D:\sql\data\nnc_data01.dbf'SIZE500MAUTOEXTENDONNEXT50MEXTENTMANAGEMENTLOCALUNIFORMSIZE256K;CREATETABLESPACENNC_DATA02DATAFILE'D:\sql\data\nnc_data02.dbf'SIZE300MAUTOEXTENDONNEXT50MEXTENTMANAGEMENTLOCALUNIFORMSIZE256K;CREATETABLESPACENNC_DATA03DATAFILE'D:\sql\data\nnc_data03.dbf'SIZE500MAUTOEXTENDONNEXT100MEXTENTMANAGEMENTLOCALUNIFORMSIZE512K;CREATETABLESPACENNC_INDEX01DATAFILE'D:\sql\data\nnc_index01.dbf'SIZE500MAUTOEXTENDONNEXT50MEXTENTMANAGEMENTLOCALUNIFORMSIZE128K;CREATETABLESPACENNC_INDEX02DATAFILE'D:\sql\data\nnc_index02.dbf'SIZE300MAUTOEXTENDONNEXT50MEXTENTMANAGEMENTLOCALUNIFORMSIZE128K;CREATETABLESPACENNC_INDEX03DATAFILE'D:\sql\data\nnc_index03.dbf'SIZE500MAUTOEXTENDONNEXT100MEXTENTMANAGEMENTLOCALUNIFORMSIZE256K;CREATEUSERNC50IDENTIFIEDBYNC50DEFAULTTABLESPACENNC_DATA01TEMPORARYTABLESPACEtemp;GRANTconnect,dbatoNC50;安装NC该步骤的目的是建立NC测试服务器,并利用它建表,并初始化数据表。运行NC56标准金盘中UAP模块下的ncsetup.bat文件,进入安装向导:点击【下一步】按钮,进入版权申请页面:选择同意后,点击【下一步】按钮,进入选择安装目录页面:目录设置完成后,点击【下一步】按钮,进入选择安装产品页面:选择客户化模块后,会将下面所有的功能都选择上,点击【下一步】按钮,进入安装页面后,点击【开始安装】按钮后进行产品的安装:选择第三方中间件,如果没有则默认使用NC自带中间件,直接点击【下一步】按钮:点击【完成】按钮,完成安装:执行完此向导后,可以在你指定的NC_HOME目录中创建NC服务器端环境,如下图:配置启动NC1)在NC_HOME\BIN目录下运行ncSysConfig.bat,首先需要建立数据源。2)修改服务器端口,可以在server页签修改web服务器的端口3)下面启动NC自带的中间件,方法是在上面的NC_HOME目录中双击startup.bat,中间件即可启动,启动界面如下:4)利用InternetExplore作为客户端登陆,在地址栏输入/login.jsp,即可看到下面的界面:输入用户名root,密码为空,登陆到系统管理帐套中 5)帐套管理里面新建帐套,用户。前面建立了NC要使用的数据库,并为数据库设置了表空间信息,但这还不够,还必须为其安装NC的系统数据表和初始化数据。方法是点击上面帐套管理页面的“升级帐套”按钮,开始进行数据表的建立和初始化,如下图:然后开始初始化:至此,NC数据环境已准备好。注销后再登陆到”学习帐套”,即进入了真正的NC系统,如下所示:Eclipse中建立NC开发环境在上一个步骤中,演示了怎么搭建NC的数据环境和测试环境,但作为开发人员,日常的工作都是在Eclipse开发环境中进行。在Eclipse中建立开发环境分下面几个步骤:1.在Eclipse插件中加入NC开发所需的MDE插件(nc.uap.mde.editor_1.0.1.jar和nc.uap.mde_1.0.2.jar),这些插件可以在相关工具\Eclipse_NC插件中找到,拷贝到eclipse安装路径下的plugins目录下即可。2.取得NC_HOME,NC_HOME包含了开发环境所需的所有jar包,NC_HONE就是安装完NC产品的主目录。通过Preferences中MDEDevelopment中设置NCHome。还可以设置数据源,模块选择。3.打开Eclipse,点击菜单“新建/项目”,弹出下面的对话框:选择MDEDevelopment下的MoudleProject即可。4.点击下一步,开始创建MoudleProject,在下面的对话框中填入信息:5.点击完成后,会创建项目,形成下图所示的目录结构:6.至此,开发环境已建立完毕。在开发环境中调试程序,一般需要首先启动NC中间件,然后启动UAP客户端调试器。下面我们在eclipse调试器中建立这两个程序:建立中间件调试启动点,方法是在调试点管理界面左边列表的ModuleApplication下新建一个调试点,MDE插件会为它设置默认参数,我们只需改变一下调试点名称,如下所示:programarguments设置如下:${FIELD_NC_HOME}/ierp/bin/prop.xml-Dnc.server.location=${FIELD_NC_HOME}-DEJBConfigDir=${FIELD_NC_HOME}/ejbXMLs-DExtServiceConfigDir=${FIELD_NC_HOME}/ejbXMLsVMarguments设置如下:-Dnc.server.location=${FIELD_NC_HOME}-DEJBConfigDir=${FIELD_NC_HOME}/ejbXMLs-DExtServiceConfigDir=${FIELD_NC_HOME}/ejbXMLsWorkingdirectory选择Other内容为${FIELD_NC_HOME}启动中间件快捷方式是在工程点击右键,在runas出点击NCMilldeware就可以。建立UAP客户端调试器启动点,该调试器的入口类是nc.starter.test.Jstarter,因此可以新建一个JavaApplication类型的调试点,输入入口类,如下所示:在设立这两个调试点之后,要注意两个问题:一是你的项目所使用的JRE的安全策略必须是:grant{grant{ permissionjava.security.AllPermission;};这可以通过修改{$JRE根目录}/jre/lib下的java.policy文件来实现,否则在启动中间件时会出现java.security.AccessControlException;二是要成功运行UAP客户端调试器(JStarter),必须将jre/lib下的plugin.jar,Tools.jar也加入到项目默认的JRE的classpath中,如下所示:此时即可先启动中间件,再启动客户端调试环境。即可进入NC登陆界面,如下所示:至此,NC的环境完全建立起来。产品参数,档案初始化利用NC-UAP进行开发的时候并不是做一个单据,报表就可以运行的,NC作为一个ERP软件,需要对系统进行一些初始化才可以正常运行,主要是对组织机构,人员,权限,会计期间,参数,档案的初始化。(本节只对这些设置进行简单描述,详细介绍可参考相应产品手册,比如基本档案,权限手册)参数在NC管理软件中,参数设置平台管理系统所有的参数,并对参数按实际需要进行逐级分配,实现既能统一控制,又能满足单位灵活运用。参数包括公共参数和业务参数,以集团进入还是以公司进入看到的参数设置界面内容是不同的。主菜单中双击【客户化】-【参数设置】:必须设置的参数是集团本位币。币种对于全集团用到的币种在本功能中进行设置。总公司或上级单位确定集团公司或所属下级单位使用的全部币种,包括本位币。币种设置完成后,集团公司所有内部单位还需在各自单位账中录入相应的主辅币信息及汇率信息,待这些信息录入完毕后,方能在日常业务使用的这些币种。在主菜单中双击【客户化】-【基础数据】-【币种】,系统将弹出界面。属于集团档案会计期间方案和会计期间会计期间方案用来定义账套拥有的会计期间数目,然后为每个期间方案定义一套会计期间。在主菜单中双击【客户化】-【基础设置】-【会计期间】会计期间节点用来定义账套的会计月度和会计季度。启用多账簿的情况下会计期间按照会计期间方案分别进行设置。公司目录公司目录用于定义集团公司所有公司的基本信息、联系信息,包括公司编号、名称、联系方式等相关信息,并确定分子公司之间的关系。以公司身份登陆后,只能查询。在主菜单中双击【客户化】-【基础数据】-【公司目录】建公司帐新建公司账是为已经存在公司目录中的公司建账、增补系统模块,以便初始化业务数据及业务参数,已建账的公司才能处理有关业务。新建公司账还可为已建账公司增补功能节点。在主菜单中双击【客户化】-【建公司账】-【新建公司账】基本档案在基本档案节点为集团和公司建立基本信息,以便于业务系统使用,包括部门、人员、库存、自定义项、组织机构、财务信息、业务信息、制造信息等等。除少数几个档案只能在集团增加外,其他档案受集团参数设置节点的【客户化】中的【基本档案】参数决定,为“是”公司和集团均可增加档案内容,为“否”则公司不能增加。常见的档案添加比如:部门档案在公司增加,人员类别在集团,人员档案在公司。具体档案初始化参考基本档案产品手册,不一一介绍。权限管理NCV5.0权限管理与之前版本最大的区别在于在权限管理中引入了“角色”概念。先规划好各种角色并分配权限,再将用户与角色关联起来,将角色作为桥梁把“用户”和“权限”连接起来。换句话说就是:通过规划好各种角色先将用户分类,再为各类用户分配权限。资源权限控制界面用来为当前登录公司以及当前登录公司的下属公司启用按钮权限控制和数据权限控制。NC系统中的权限由三个部分构成,分别为功能权限、数据权限和按钮权限。功能权限是指节点的查看和打开的权限;数据权限是指档案的参照权限,而按钮权限是只指各个界面上按钮的查看和使用权限。如果不启用权限控制,则不需要分配权限,系统默认角色具有所有权限;启用权限控制后,可以为具体的角色分配具体的权限。NCV5.0系统默认启用了功能权限控制,且该设置不可修改;数据权限和按钮权限的权限控制默认为不启用状态,但可在本界面对设置进行修改。在用户管理界面可以为当前登录公司以及当前登录公司的下级公司增加用户,还可以为在这些公司创建的用户委派角色。用户必须被委托角色才有相应权限角色管理的界面如图所示。角色管理节点用来为当前登录公司以及当前登录公司的下属公司创建角色,将创建的角色分配给下属公司以及为角色关联用户。权限分配的界面如图所示。权限分配节点用来为当前登录公司和当前登录公司下属公司的角色分配功能权限、按钮权限以及档案的数据权限。经过以上操作可以为公司建立角色,用户,并赋予相应权限。深入的权限管理参考权限管理产品手册。产品主要目录结构介绍ierp/bin:与整个产品相关的配置文件都存放在该目录,如日志配置文件pertiesmodules:NC产品模块存放的目录,下面的所有模块在系统启动时得到加载modules/<模块名>:某个模块的目录,模块名必须是小写的英文字母,在能表达意义的基础上尽量的短modules/<模块名>/META-INF/module.xml:必须存在,配置模块的一些通用属性,如名称,描述,classloader等,注意名称必须与模块名称同名modules/<模块名>/lib:模块公开的API类,如接口,接口相关的VO等,放JAR包modules/<模块名>/classes:模块公开的API类,如接口,接口相关的VO等,放带目录的.class文件等,用于补丁modules/<模块名>/META-INF/lib:模块私有的代码,如DMO,业务实现等,放JAR包modules/<模块名>/META-INF/classes:模块私有的代码,放带目录的.class文件等,用于补丁modules/<模块名>/extension/lib,classes:用于二次扩展的公开的APImodules/<模块名>/extension/META-INF/lib,classes:用于二次扩展的私有的APImodules/<模块名>/client/lib,classes:用于从目标上来说不属于公共的API,但是客户端用到的代码webapps/nc_web:NC产品的web应用hotwebs:下面放其他的web应用,如hrss,lfw等resource:存放与整个产品相关的资源,如产品的多与资源lib,classes,external/lib,classes:由平台维护和提供的类库,不允许第三方调整NC基础技术内容概述本章将介绍UAP-NC平台的技术结构,开发模型,并通过一个例子亲身感受远程接口开发。详细介绍NC开发基本概念单据:比如报销时的报销单,一般由表头和表体组成(有些时候还含有表尾)。表头中包含了单据的主信息,比如日期、部门、预算项目;表体包含了单据的明细信息,比如具体的事项和金额;单据类型:一个业务系统为了使结构更清晰,通常也是分层的。比如,供应链系统包含了采购、库存等子系统,每个子系统都具有一个系统类型,而每个子系统都会具有很多张单据,为了区分这些单据,为每张单据命名一个单据类型,作为唯一标识;模板:单据开发涉及到三大模板(单据模板、查询模板、打印模板)。单据模板定义了单据的显示外观和基本框架,查询模板定义了单据的查询对话框,打印模板定义了单据信息打印到打印机的样式和格式;VO是ValueObject的简写,在NC中是一个抽象类,它实现了Cloneable和Serializable接口。是NC业务数据的载体在系统各层之间传递业务数据。CircularlyAccessibleValueObject是ValueObject的子类,提供了对自身的属性进行存取操作的方法。SuperVO是CircularlyAccessibleValueObject的子类,是NC系统中最常使用的VO类型,它与一张数据库表对应,可以方便的利用NC的JDBCFramework进行持久化操作。以上是对一个数据对象的抽象,在NC产品中,绝大部分功能是通过单据的形式提供的,而NC的单据大部分是一对多的关系,我们称之为一个主表记录对应多个子表记录。AggregatedValueObject就是用于存储一对多关系的主子表数据。对于一主多子的情况,实现IExAggVO接口。聚合VO:单据一般由表头和表体构成,因此单据的数据表通常设计成主表和子表。聚合VO是对单据数据的抽象,它用于装载主表VO和一组子表VO.;UI工厂:虽然能通过三大模板定义出单据的显示,但每张单据都有一些公共的或特殊的行为。UI工厂是一种单据开发框架,它将常用单据抽象成了很多类型,因此,UI工厂相当于是单据开发的代码模板,预置了单据的各种公共行为,比如增、删、改、查,并且可以连接到NC流程平台,支持审批、单据驱动等应用。远程接口:V5远程组件开发都是基于接口(替代原先的BO访问),访问也都是基于接口。参照:是一种辅助的数据输入方式,通常弹出界面的形式提供可以参考的数据,比如在录入省份信息时,提供一个全国省份列表以供选择。单据开发中,有很多输入字段存在类似的需求。NC系统中预置了很多种常见参照(基本覆盖了所有的基本档案,比如人员参照,存货参照),如果要自定义一种参照,则需要简单的开发工作。ToftPanel:提供对NC产品功能节点开发的支持,统一功能节点的注册类型(ToftPanel)。提供了节点开发过程中按钮的注册机制以及按钮与界面的互动机制(通过ToftPanel的onButtonClick(bo)方法进行事件响应)。节点打开时,真正运行的是FramePanel实例,它提供了ButtonBar进行按钮展示,TitlePanel进行节点标题的显示,同时将用户开发的ToftPanel子类放置到中心位置进行展现。下图是ToftPanel区域介绍:FramePanelFramePanelButtonBarToftPanelTitlePanelNCUAP总体介绍UAP-NC作为基于多组织架构的企业应用运行平台、基于模式化的开发平台、开放的系统集成平台及统一的系统管理平台,是建立在Java语言所提供的强大功能的基础上开发的。Java是一种简单的、面向对象的、分布式的、结构中立的、安全的、可移植的、性能优异的、多线程的、动态的开发语言,适合构建基于网络计算的企业应用。由于Java的平台无关性,使得UAP-NC可以运行在不同硬件平台、不同操作系统平台上。基于UAP-NC所开发的应用软件采用Browser/Server(浏览器/服务器)的方式来运行。B/S的运行方式最大限度地方便了用户部署和维护大型软件系统,保证了瘦客户机运行,从而大大降低了用户目标系统的总体拥有成本(TCO)。系统框架层主要指基础软件,如操作系统、数据库及J2EE应用服务器。UAP-NC支持多种操作系统(Solaris、AIX、Linux、Windows等),可运行于符合J2EE规范的多种应用服务器(IBMWebSphere、BEAWebLogic、UFIDAApplicationServer等),支持多种数据库DBMS(DB2、Oracle、SQLServer、OSCAR等)。UAP-NC还提供Portal服务器进行内容集成以使用户对企业资源有一个统一的访问点。技术框架层是在系统框架层(操作系统、数据库及应用服务器)和应用系统之间建立的一层技术封装层和系统资源监控和管理层。技术框架层屏蔽不同具体技术实现的细节,减少直接使用系统资源带来的复杂性、异构性、不安全性及不稳定性;技术框架层监控和管理系统资源,保证系统资源的可用性及其合理使用;技术框架层提供最佳编程模式,加快在不同技术平台上开发和部署应用的速度,保证应用的健壮性。技术框架层所屏蔽技术实现细节包括界面风格、远程接入、EJB实现/访问、多数据库适配、事务处理、并发处理、缓存处理、安全管理等等。企业服务架构(EnterpriseServiceArchitecture,ESA)企业服务架构是一个服务集成总线,支持异构环境的服务、消息及基于事件的交互。通过ESA,可以使用与实现无关的接口来定义服务,可发现和调用所需的服务,可解决服务之间的相互依赖。连接框架(ConnectFramework)连接框架连接客户端与服务器,使不同客户端(浏览器小应用程序、Java应用程序、浏览器JSP)可通过不同访问协议(HTTP/HTTPS,RMI)使用服务器提供的服务。同步(Synchronization)同步服务实现客户端与服务器代码和数据的同步,及集群环境下服务器之间的资源同步。SQL翻译器(SQLTranslator)SQL翻译器将SQL翻译成适合目标数据库的SQL语句,以适配不同数据库厂商提供的产品;优化SQL,充分发挥不同数据库的最大性能。元数据管理(MetadataManagement)元数据是描述系统数据(包括界面定义、规则定义、流程定义等)的数据。通过元数据管理,对系统数据统一进行维护以支持用户自定义,如改变字段的可编辑属性、字段的取值范围等。工作流引擎(Workflow) 工作流引擎根据工作过程的描述,通过执行一系列已定义的工作项,完成此工作过程。UAP-NC的工作流引擎支持多种工作流模式,如分支、合并、并行、选择、循环、回退等;支持工作项的抢占与会签;支持可配置的动作执行脚本,等等。规则引擎(RuleEngine) 规则引擎用来定义和执行各种规则,包括界面规则、关联关系、计算规则、条件跳转规则等。使用规则可以让应用更加富有柔性。规则需要通用的行业化语言精确表达且浅显易懂。规则引擎需要满足一定的计算速度,支持规则的批量处理及理解外部数据。持久化框架(PersistenceFramework)封装不同持久化技术(如JDBC、普通文件、XML、Excel)。持久化框架可解决对象与关系之间的“阻抗失配”问题。基础算法(BasicAlgorithms)提供统一的基本算法,如排序,XML文档操作,方便开发与编程,统一代码规范。登录和安全(Login/CASecurity)统一管理系统登录时的身份认证。支持多种身份认证策略,如静态密码认证、基于USBKey的CA身份认证等。支持对业务敏感数据使用证书进行签名和验证以防止数据篡改和提供抗抵赖性。调度引擎(Scheduler) 调度引擎对服务和线程进行统一管理,以屏蔽不同应用服务器的异构性。调度引擎调度各种服务、常驻系统服务、客户端的请求服务、以及一些服务的组合。异常(Exception)统一解释与封装异常消息,如不同厂商的数据库异常的不一致。缓存(Cache)提供在服务器端与客户端的临时内存中进行缓存的机制,包括对象的创建、共享访问、假脱机(Spooling)、失效等,加快对用户操作的响应。日志(Log)日志机制提供对系统运行时的监控及支持对系统异常的追踪与定位。日志机制可控制日志输出的格式、日志信息的级别、日志信息输出的目的地(文件、控制台、SocketServer等)。通过配置文件进行灵活的设置,用户可以细致地控制日志的生成过程,而不需修改程序代码。应用框架层是基于企业建模理论的、以业务导向和驱动的、可快速构建应用软件的软件平台。应用框架层的出现是一种技术创新,它使软件平台多了一个具有革命性意义的战略层次,为降低大型复杂软件系统的实现难度提供了新的途径。将应用软件的业务逻辑和开发技术相对分开,使得应用软件的开发者可以仅关注应用的业务逻辑,而不必关注其繁琐的技术实现。这使管理层与业务人员参与应用软件的开发成为可能。UAP-NC应用框架层基于业务和管理层面,以业务建模(组织、流程、功能、资源、信息)为基本手段,从而构造、开发和维护业务应用系统。使用UAP-NC提供的应用框架层,可大大缩短研发周期,提高研发效率,加快应用开发的速度;减少企业信息系统开发的风险;降低开发成本;实现最终用户的个性化的需求;支持用户在发展过程中各种各样的需求变化;提供应用的高价值。国际化(I18N)实现界面的多语化及数据和展示的本地化。界面的多语化是指根据用户登录时指定的语种显示相应的语言界面。企业用户可以修改相应的语言信息及显示的图片。数据和展示的本地化指日期、时间、数字、货币、汇率等可根据企业用户本地的习惯进行展示。消息管理(MessageManagement)消息管理集中显示通过ESA所传送的消息,如应用系统所产生的预警消息,通知消息,业务流程相关的消息,及企业公告和用户对发消息等。移动管理(MobileManagement)支持通过移动设备进行消息的交互及操纵业务数据等。对无线设备的广泛支持,UAP-NC带来的是企业管理的无处不在和服务的无限拓展,同时也为企业决策人员提供了高端、迅捷的管理机制。组织管理(OrganizationManagement)提供从不同维度管理企业,如公司、部门、主体账簿等。数据传输(DataTransfer)数据传输负责传输以规则定义的数据集以支持数据层的应用集成。数据交换(DataExchange)与第三方系统进行数据交换,提供灵活的数据映射及数据绑定,支持根据业务规则的转换,同时结合工作流平台整合业务流程。动态会计平台(FinancialAccountPlatform)通过定义会计科目类别和凭证模板,使用凭证生成器,根据业务数据生成实时凭证。在保持业务数据与财务数据相对独立的基础上保证数据的一致性和及时性。 预警平台(PreAlert) 在预警平台上可定义多种方式的预警条件以进行形式多样的预警,如时间条件、库存大小、生日等。预警还可配置在用户登录时触发。预警消息可以用HTML网页的形式发布,可以通过邮件发布,还可使用短消息发送。业务流程和审批流程的编排(BusinessProcessandApprovalFlowOrchestration)用来定义业务流程和审批流中数据的流向,数据间的关系及以人员的关系。 访问控制(AccessControl)使用基于用户角色和对象权限的权限分配方式。每一角色都包含公有权限和属于某一具体公司的私有权限。角色还提供信任功能。应用模式(ApplicationPatterns)UAP-NC根据经验积累与用户实施,总结出一套与应用界面相关的模式(表单、报表和打印),更好地提供满足用户需求的界面展现,更快地满足用户个性化的需求。NC的开发模型系统前端为客户端UI代码,UI端代码继承ToftPanel,UI代码通过调用远程组件与服务器端进行交互,中间传递的数据模型为VO,远程组件调用底层的业务实现代码,完成整个交互逻辑。通过JDBCFramework,系统提供了一套良好的数据持续机制,解决数据库交互的复杂问题。下图是NCV5的代码结构图NC5后将代码分区域存放:Public目录存放接口和公共代码(比如VO和公共算法)Private目录存放实现和其它实现细节Client目录存放客户端代码META-INF目录存放模块配置文件目录,包括module.xml文件和xxx.module接口配置文件。针对上面的开发模式,我们规范一下代码的包结构:nc.itf.<模块>:表示该模块定义的接口nc.impl.<模块>:表示该模块定义的接口实现nc.vo<模块>:表示VO的实现nc.bs.<模块>:普通的后台应用nc.ui.<模块>.*:客户端代码开发远程接口V5.0版本的远程组件开发是基于接口,因此远程组件的开发按照下面两个步骤开发:定义远程接口,注意这里的远程接口不用实现java.rmi.Remote接口,普通接口就可以了对该接口进行实现把该组件部署为远程组件下面以HelloWord为例子:定义接口packagenc.itf.sample.service;publicclassIHelloWorld{ StringsayHello(StringtoName);}实现该接口packagenc.impl.sample.service;publicclassHelloWorldImplimplementsIHelloWorld{ publicStringsayHello(StringtoName){ StringretValue="Welcome"+toName+"exploreV5"; System.out.println(retValue); returnretValue;}部署组件编辑或新建该产品模块下的模块部署描述文件(META-INF下的.module文件),加入一个公共组件:<?xmlversion="1.0"encoding="UTF-8"?><modulename="sample"><public><componentremote=”true”><interface>nc.itf.sample.service.IHelloWorld</interface><implementation>nc.impl.sample.service.HelloWorldImpl</implementation></component></public></module>远程组件只要指出他的remote属性为true即可。客户端调用接下来客户端就可以通过下面的方式进行远程访问了:IHelloWorldhello=NCLocator.getInstance().lookup("nc.itf.sample.service.IHelloWorld");System.out.println(hello.sayHello("uap"));系统输出:WelcomeuapexploreV5你的一个实现可以同时实现多个接口,并且可以在部署的时候选择性的公布出你需要远程分布的接口,例如你的一个实现类,实现了多个接口IService1,IService2,IService3,你可以选择只远程公布接口IService2,IService3,部署信息如下:<?xmlversion="1.0"encoding="UTF-8"?><modulename="sample"><public><componentremote="true"supportAlias="true"><interface>nc.itf.sample.service.IService2</interface><interface>nc.itf.sample.service.IService3</interface><implementation>nc.impl.sample.service.MultiServiceImpl</implementation></component></public></module>注意我们使用了supportAlias属性,指出我们可以通过两个接口中的任何接口进行远程组件的查找。supportAlias为true只有在公共组件中才起作用。事务型组件发布定义远程接口,就是普通接口,分有事务和无事务,区别在于部署文件时放在private下而不是public下,部署成private的接口需要生成ejb代码,否则无法调用,部署成public的代码不需要生成ejb代码。一般来说,增删改操作发布成private接口,查询发布成public接口。下面是两种接口的发布事例:<?xmlversion="1.0"encoding="UTF-8"?><?xmlversion="1.0"encoding="UTF-8"?><module><public><componentpriority="0"singleton="true"remote="true"tx="NONE"><interface>nc.itf.sample.IHelloPub</interface><implementation>nc.impl.sample.HelloWorldPub</implementation></component></public><private><componentname="IHelloWorld"priority="0"singleton="false"><implementation>nc.impl.sample.HelloWorldImpl</implementation></component></private></module>配置文件规范:所有的属性中不能出现(除系统生成的proxy外)supportAlias=”所有的属性中不能出现(除系统生成的proxy外)supportAlias=”true|false”priority属性只对活动组件有用公共组件约定:公共组件的属性中不能出现:name=””,公共组件可以出现以下属性:tx=”NONE”,singleton=”true”//根据不同情况进行决定,建议采用trueremote=”true|false”私有组件约定私有组件的节点中不能出现:<interface>…</interface>不能出现以下属性:tx=””,remote=”” 可以出现以下属性:singleton=”true”//根据不同情况进行决定,建议采用truename=名称以接口名称为准(不包含包名称)对于事务型的组件(是指该组件的方法调用中事务处理会自动参与)可通过后缀名来判断事务类型:方法名后缀RequiresNew:新事物方法名后缀Mandatory:必须在一个已有的事务环境中运行改方法方法名后缀Supports:只是支持事务,不建议使用方法名后缀NotSupported:不支持事务,不建议使用方法名后缀Never:不能有事务,否则出错没有方法名后缀:如果有事务,就在该事务环境下工作,否则新启事务,这是大部分事务型组件的情况事务型组件一般都是针对数据库等事务性资源进行操作,如果没有对事务性资源进行操作,请不要把组件定义为事务性组件。对于发布成private的组件,需要点击xxx.module部署文件,在代理组件生成页签,选择需要发布的接口,输入ejb名字,点击生成就可将代码生成到gen目录下。只有这样,才可以调用private的接口。安装nc产品后通过sysconfig部署代码操作也是这个过程。客户端代码客户端调试代码可以通过junit和注册Toftpanel来实现。通过junit运行调试接口比较方便,不需要进行客户端登陆。新做一个类继承AbstractTestCase,实现一个以test开头的方法,在方法里面写调用远程组件的方法。然后以JUnit来运行。Toftpanel方式是写一个ToftPanel的子类,将此类注册成nc节点,然后通过eclipse启动jstarter来进入nc,点击相应节点执行相应方法。通过扩展ToftPanel,实现getTitle()方法,在postInit()方法中初始化界面,调用setButtons(ButtonObject[])方法设置菜单,实现onButtonClicked(ButtonObject)方法响应菜单事件。NC数据库持久化技术内容概述在NC中很多时候需要我们直接操作数据库,对数据库德访问NC提供了框架类。JDBCFrameWork为NC访问数据库提供统一的数据操作访问,简化数据访问操作。BaseDao是在JDBCFrameWork之上提供数据持久化的工具类。下图是NC数据库访问的层次图:详细介绍核心类介绍PersistenceManager管理连接会话的生命周期,并提供了对单表VO操作的常用实现可以传递构造参数选择不同的数据源JdbcSession对JDBC的API封装和简化SQLParameter封装执行SQL的参数ResultSetProcessor结果集处理回调接口,封装结果集处理DbException封装不同数据库的异常,和统一处理不同数据库的ErrorCodeBaseDAO/IUAPQueryBS/IVOPersistence管理连接会话的生命周期,提供了对单表VO操作的常用实现通过JDBCFrameWork访问数据库通过代码和注释来看如何通过JdbcSession访问数据库PersistenceManagersessionManager=null;try{sessionManager=PersistenceManager.getInstance();//构造参数可指定数据源JdbcSessionsession=sessionManager.getJdbcSession();//开始jdbc会话Stringsql="updatebd_invmandocsetpk_invmandoc='0001AA10000000000DDD'wherepk_invmandoc=?”;SQLParameterparameter=newSQLParameter();构造参数对象parameter.addParam("0001AA10000000000DDD");添加参数,JdbcSession会将参数对象中的每个对象放入到预处理对象的相应位置session.executeUpdate(sql,parameter);}catch(DbExceptione){//根据数据库的不同统一异常处理if(e.isBadSQLGrammar())//如果是语法错误//todo相关处理if(e.isDataIntegrityViolation())//如果是数据一致性错误//todo相关处理}}finally{if(sessionManager!=null)sessionManager.release();//需要关闭会话}下面是几种参数语法介绍:1.无参查询Stringsql="select*frombd_deptdoc";//构造查询语句Listlist=(List)session.executeQuery(sql,newArrayListProcessor());2.有参查询Stringsql="select*frombd_deptdocwheredept_code=?";SQLParameterparam=newSQLParameter();//构造参数对象param.addParam(“aaa”);//添加参数Listlist=(List)session.executeQuery(sql,param,newArrayListProcessor());3.有参更新Stringsql="updatebd_deptdocsetdept_code=‘aaa’wheredept_code=?”;SQLParameterparam=newSQLParameter();//构造参数对象param.addParam(“bbb”);//添加参数session.executeUpdate(sql,param);5.无参批量更新Stringsql="updatebd_deptdocsetdept_code=‘aaa’wheredept_code=‘bbb’";session.addBatch(sql);//添加需要执行的同构SQLintrows=session.executeBatch();//执6.特殊参数1.Null参数param.addNullParam(java.sql.Types.INTEGER);2.Blob参数param.addBlobParam(newObject());3.Clob参数param.addClobParam(newString());通过BaseDao进行对象的持久化通过持久层框架可以很方便的实现把内存中的对象持久化到数据库、把数据库中的关系数据加载到内存中。作为入门的一个例子,我们使用一个简单的JavaBeanPerson类(注意需要进行持久化的VO类必须符合JavaBean规范)1.前台数据访问:使用IVOPersistence服务组件,进行增删改操作;使用IUAPQueryBS服务组件,进行查询操作。IUAPQueryBSiUAPQueryBS=(IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class.getName());iUAPQueryBS.executeQuery()2.后台数据访问:使用BaseDAO工具类3.对象读取BaseDAOdao=newBaseDAO();//构造参数可以指定数据源PersonVOMetameta=newPersonVOMeta();dao.retrieveByClause(Person.class,meta,"id=5");4.对象写入BaseDAOdao=newBaseDAO();Personperson=newPerson();person.setName(“tom”);person.setAge(“20”);PersonVOMetameta=newPersonVOMeta();dao.insertObject(person,meta);//默认会为Person对象生成主键类说明Person是普通值对象,PersonVOMeta映射元数据类实现IMappingMeta接口,用于影射值对象和数据库关系,SupperVO不需要实现影射类结果集合操作对查询结果集合的操作,主要由ResultProcessor类来实现,这是一个接口ResultProcessor包含有一个简单的方法,不同的ResultProcessor实现返回不同的结果对象。系统提供了一系列常用的默认实现。ArrayProcessor数组处理器,返回一个对象数组,结果集中只有一行数据,其中结果集中每一列对应数组的一个元素。ArrayListProcessor数组集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个数组,每个数组对应结果集中的一行数据,其中结果集中每一列对应数组的一个元素。MapProcessorHashMap处理器,返回一个HashMap,结果集中只有一行数据,其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值。MapListProcessorHashMap集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个HashMap,每个HashMap对应结果集中的一行数据,其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值。BeanProcessor值对象处理器,返回一个JavaBean,结果集中只有一行数据,该处理器能自动把结果集中的值按列的名称映射到javaBean中,如结果集中有名称为”name”的字段,那么只要该java对象中有getName()方法就能把结果集合中”name”对应的值映射到对象中。BeanListProcessor值对象集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个javaBean,每个javaBean对应结果集合中一行数据,其中每个JavaBean中的数据映射关系和BeanProcess同理。还有ColumnProcessor,BeanMappingListProcessor,BeanMappingProcessor几个类BeanListProcessor作为结果集的例子:ArrayListlist=(ArrayList)session.executeQuery(sql,param,newBeanListProcessor(TrainReqmatbillVO.class));//TrainReqmatbillVO是一个普通vo类intlistcount=list.size();TrainReqmatbillVO[]vos=newTrainReqmatbillVO[listcount];for(inti=0;i<vos.length;i++){ vos[i]=(TrainReqmatbillVO)list.get(i);}结果集控制在NC持久层中为了防止执行大查询后返回结果集合过多导致系统内存溢出系统默认设置了最大返回结果集行数是10万行,如果如要返回更多行数或者不限制返回行数,需要做如下设置:在SuperDMO中设置返回行数SuperDMOsuperDmo=newSuperDMO();superDmo.setMaxRows(行数);如果rows=-1表示不限制返回行数在BaseDAO中设置返回行数BaseDAObaseDao=newBaseDAO();BaseDAO.setMaxRows(行数);如果rows=-1表示不限制返回行数在ResultsetProcessor中设置返回行数BaseProcessorprocessor=newArrayListProcessor();Processor.setMaxRows(行数);在结果集中设置返回行数CrossDBResultsetresultset=(CrossDBResultset)rs;Resultset.setMaxRows(行数);第二篇中级篇经过入门篇的学习,你已经初步了解了NC的环境,使用和技术规范。但是离真正的业务开发还差很远,通过本篇的学习,你将真正进入NC的业务开发,了解NC单据的开发,数据库操作,报表等技术,通过本章的学习,你将可以具备实用的需求业务开发能力。元数据建模内容概述本文档主要介绍了如何基于元数据进行业务建模,以及如何在运行时对元数据进行管理。最后列举了元数据的一些典型应用。目的是尽可能地让大家在使用元数据的时候更加方便。关于元数据本身的代码架构,以及元数据的基本概念,请参见《NCV5.5-元数据开发红皮书》。详细介绍新建元数据模型为方便操作,将eclipse设为“NC模型设计器”模式,如下图。建立元数据模型的流程如下:建立模型文件模型文件概念:一个模型文件(bmf文件),对应一个元数据模型,对应一个业务组件。本例具体操作:如下图,在[MDP资源浏览器]中,新建模型文件,输入模型文件名。建立数据实体一个数据实体,可以理解为对应一个数据库表。一张主子表的单据应包含一个主实体、一个子实体。一个bmf文件中,有且仅有一个主实体。[建立数据实体]总结为4个必要步骤:1建立空实体,2指定实体的properties,3为实体添加属性,4实现业务接口。建立空实体操作简介如上图,在工具箱中,点击“实体”,然后在左侧画布区域点击,即可建立一个空实体。建立后的实体如下图所示。本例具体操作本示例需要建立两个实体,如下表实体对应数据表对应VO主实体采购订单主表采购订单主VO子实体采购订单子表采购订单子VO指定数据的properties操作简介如上图,选中实体对象,在Properties页签中指定实体的property值。下表为关键property值代表的含义。propertyvalue访问器类型AggVO:指聚合实体,主实体要设为这个POJO:暂不知含义NCVO:指普通实体,子实体要设为这个包装类名当选择AggVO时,才出现。指聚合VO类类名称指VO类名名称实体名称,一般设为VO名称相同缺省表名数据库表名显示名称在画布中的显示名称,在NC元数据管理中的显示名称主属性实体的主键,需要[为实体添加属性]后指定本示例的具体操作本例中,按下表,指定实体的properties。PropertyValue主实体访问器类型AggVO包装类名自动生成类名称自动生成名称OrderHVO缺省表名ln_order_h显示名称采购订单主表主属性订单主键([为实体添加属性]后指定)子实体访问器类型NCVO包装类名自动生成类名称自动生成名称OrderBVO缺省表名ln_order_b显示名称采购订单子表主属性明细主键([为实体添加属性]后指定)为实体添加属性操作简介如上图,在[模型视图]中增加实体属性。上图中关键的列含义解释见下表:列value名称属性在VO中的名称显示名称在画布实体中的显示名称,NC元数据管理中的显示名称类型样式SINGLE:简单类型,UFID、Sring、Integer、UFDouble等REF:参照类型ARRAY:子实体聚合在主实体中,共同组成一张单据。那么,子实体在主实体中就是ARRAY。类型VO中的属性类型。UFID:主键类型,一定要用这个,20位长度;前边选REF时,要在这儿选择具体的参照,如:公司目录。字段名称数据库表中的字段名字段类型数据库表中的字段类型。参照名称下拉框,选参照时,带过来的,有时会有多个参照,择适合自己的。记问策略nc.md.model.access.BodyOfAggVOAccessor:主实体中的聚合子实体,一定选这个实体中必须添加的属性见下表名称显示名称类型样式类型字段名称字段类型参照名称访问策略主实体(名称中的“主键”、“子表明细”用的汉字,我为了表达清晰,别傻呵呵的写汉字,练练英文)主键主键SINGLEStringpk_order_hcharpk_corp公司IDREF公司目录Pk_corp公司目录(集团)vbillno单据号SINGLEStringvbillnovarcharvbillstatus单据状态SINGLEIntegervbillstatusintpk_billtype单据类型REF单据类型pk_billtype影响因素单据类型pk_busitype业务类型REF业务类型pk_busitype业务类型voperatorid制单人REF用户voperatorid用户vapproveid审批人REF用户vapproveid用户dapprovedate审批日期SINGLEUFDatedapprovedateCharvapprovenote审批批语SINGLEStringvapprovenoteVarchar子表明细明细ARRAY采购订单明细pk_order_hCharnc.md.model.access.BodyOfAggVOAccessor赋值方法:在此处加上此字段即可,不用为其手工设置类型样式、类型,在完成下一步操作“设置组合关系”时,会自动赋值。但“字段名称”你千万别省事,一般设为与主键相同,代表此属性是子表的外键。子实体(其实,除了主键,没有必须的属性)子表主键设置组合关系操作简介如上图,在[工具箱]中点击组合,从主实体画向子实体。完成后,选中新画的组合关系,在[Properties]页签中为其设置属性值,如下图,关键的Property介绍如下Propertyvalue显示名称画布中的组合名称。源属性选择:主实体中建立的那个ARRAY属性,子表明细。此将作为主表在子表中的外键。目标组合的目标,也就是子实体源点组合的源点,也就是主实体实现业务接口操作简介业务接口详细使用可见《NCV5.5-元数据建模及管理红皮书》。

如上图,在[MDP资源浏览器]的引用模型中,找到需要引用实现的业务接口,鼠标拖拽到画布,如上图,在[工具箱]中点击“业务接口实现”,由实体画向业务接口,操作完成。本示例的具体操作本示例中,元数据的主实体要实现如下业务接口:接口名接口路径作用流程信息获取引用模型\uap\pf\pfbizitf.bmf指定制单人、单据号等。没有此接口,保存不了单据,抛没有实现IFlowBusInf接口异常。交换前后对单据VO的调整处理同上数据交换时使用单据主子VO查询同上参照本单据时使用业务接口属性映射完成此步之前,要选中主实体,在[模型视图]中完成。指定模型文件的Properties操作简介如上图,在画布空白区域点击,在[properties页签]中,指定property值,关键property含义见下表:propertyvalue显示名称起一个可读的名字主实体这儿选“采购订单主表”发布元数据在保证中间已启动、且数据库连接正常的情况下,在画布区城右击(如上图),点击“发布元数据”。若发布元数据时,出现如下图所示的错误,则说明没有启动中间件,或数据库连接有问题。导出JAVA源代码操作简介在中间件已启动、且数据库连接有问题时,右键数据实体(如上图),点击“导出为JAVA源文件”,在随后弹出的导出路径选择框中,选择导出到{%当前eclipse工程%/src/public包}。生成SQL脚本并执行操作简介启动中间件、连接数据库,右键画布任意区域(如上图),点击“生成建库SQL脚本并执行”,在随后弹出的路径选择框中,选择任意有意义的路径。最终成果经过上述步骤,元数据模型完成,其实,我们还附带完成了导出VO代码、执行建表脚本的操作。最终的完成的成果见下表。成果项成果描述元数据模型即bmf文件,元数据模型如下图。若以后修改此文件,则需要重新发布元数据。VO代码聚合VO、主VO、子VO。SQL脚本数据库建表脚本。数据表数据表已建立到数据库中功能建模内容概述NC中最重要的概念就是单据,几乎大部分业务数据录入都是通过单据完成,所以单据开发是NC中最重要的技术。单据开发中重要的技术是单据模板和UI工厂。我们开发可以通过集成开发工具向导完成初步开发,经过集成开发工具设计的单据,已经可以完成日常的操作,比如增删改,审核等工作,如果有需要,可以把集成开发工具生成的代码导出到eclipse,然后继续修改,完成复杂业务逻辑功能。UAP发展到现在,已经提供了不少二次开发工具和其他辅助性开发工具,更重要的是,也同时积累下来了一些标准的开发流程。作为NC内部和外部的开发者,通常的疑惑是如何使用这些工具,以及标准开发流程到底是什么(比如在表单开发中,何时该导入数据字典,何时配置单据模板)。NC集成开发工具(UAPDeveloperWorkshop)的目标就是:集成UAP现有的所有二次开发工具,对其进行一定的组织;集成内置标准开发流程的(具有增值性)开发工具,比如表单开发工具、报表开发工具,以插件的形式组装起来。详细介绍进入Workshop登陆到NC后,点击功能节点客户化/二次开发工具/UAP集成开发工具,可打开下面的页面:点击最左边的图标即可进入UAP集成开发工具中,主界面为:上面菜单和工具栏,主要针对中心编辑区。组件导航和组件资源导航两个页签,中心是用户编辑

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论