QEHM质量&环境&安全测量管理体系审核员内部审核员培训试题 。帮帮忙,急用。谢谢。

ISO22000质量手册_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
ISO22000质量手册
阅读已结束,下载本文需要
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩33页未读,
定制HR最喜欢的简历
你可能喜欢10326 条评论分享收藏感谢收起nanrenwa.com 「男人袜」谢谢大家。赞同 615183 条评论分享收藏感谢收起ISO22000质量手册_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&100W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
ISO22000质量手册
阅读已结束,下载本文需要
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩33页未读,
定制HR最喜欢的简历
你可能喜欢用友集团ERP客户化开发系列丛书
NC客户化开发进阶
本教程是用友软件股份有限公司内部培训资料,只限于用友公司内部开发应用,任何人未经过事先书面许可不得扩大本教程的使用范围。同样,未经过用友公司书面许可,任何人不得以任何形式对本手册进行增删、改编、节选、翻译、翻印或仿制,违者必究!
?本手册的著作权属于用友软件股份有限公司
版权所有?翻制必究
2009年1月第一次印刷
在中华人民共和国印制
用友软件股份有限公司
第一篇 入门篇 ................................................................................................................................. 5
1. 建立NC环境 ........................................................................................................................... 5
内容概述 ................................................................................................................................... 5
详细介绍 ................................................................................................................................... 6
1.1.1. 建立数据库 ....................................................................................................... 6
1.1.2. 安装NC ............................................................................................................ 7
1.1.3. 配置启动NC .................................................................................................... 9
1.1.4. Eclipse中建立NC开发环境 ......................................................................... 13
1.1.5. 产品参数,档案初始化 ................................................................................. 19
1.1.6. 权限管理 ......................................................................................................... 22
1.1.7. 产品主要目录结构介绍 ................................................................................. 24
2. NC基础技术 .......................................................................................................................... 25
内容概述 ................................................................................................................................. 25
详细介绍 ................................................................................................................................. 25
2.1.1. NC UAP 总体介绍 ........................................................................................ 25
2.1.2. NC开发中的一些基本概念 .......................................................................... 30
2.1.3. NC的开发模型 .............................................................................................. 32
2.1.4. 开发远程接口 ................................................................................................. 34
? 定义接口 ......................................................................................................... 34
? 实现该接口 ..................................................................................................... 34
? 部署组件 ......................................................................................................... 34
? 客户端调用 ..................................................................................................... 35
? 事务型组件发布 ............................................................................................. 36
? 客户端代码 ..................................................................................................... 38
3. 数据建模 ................................................................................................................................. 40
内容概述 ................................................................................................................................. 40
详细介绍 ................................................................................................................................. 40
3.1.1. PowerDesigner建模 ....................................................................................... 40
3.1.2. 生成NC数据字典 ......................................................................................... 48
第二篇 中级篇 ............................................................................................................................... 49
4. 单据开发 ................................................................................................................................. 50
内容概述 ................................................................................................................................. 50
详细介绍 ................................................................................................................................. 50
4.1.1. 进入Workshop ............................................................................................... 50
4.1.2. 表单开发流程导航工具 ................................................................................. 52
4.1.3. UI工厂............................................................................................................ 65
5. NC数据库持久化技术 .......................................................................................................... 68
内容概述 ................................................................................................................................. 68
详细介绍 ................................................................................................................................. 69
5.1.1. 核心类介绍: ................................................................................................. 69
5.1.2. 通过JDBC FrameWork访问数据库 ............................................................. 70
5.1.3. 通过BaseDao进行对象的持久化................................................................. 73
用友软件股份有限公司
5.1.4. 结果集控制 ..................................................................................................... 74
6. 单据开发其他相关技术 ......................................................................................................... 75
内容概述 ................................................................................................................................. 75
详细介绍 ................................................................................................................................. 75
6.1.1. 参照开发 ......................................................................................................... 75
6.1.1.1. 参照的类结构图 ..................................................................................... 75
6.1.1.2. 自定义参照开发规范 ............................................................................. 76
6.1.1.3. UIRefPane 和refModle设置 ................................................................ 78
6.1.2. 单据号 ............................................................................................................. 79
6.1.2.1. 单据号规则 ............................................................................................. 79
6.1.2.2. 接口方法 ................................................................................................. 81
6.1.3. 公式 ................................................................................................................. 83
6.1.4. 锁 ..................................................................................................................... 88
6.1.5. 日志 ................................................................................................................. 90
6.1.6. 异常 ................................................................................................................. 91
7. 报表开发 ................................................................................................................................. 93
内容概述 ................................................................................................................................. 93
详细介绍 ................................................................................................................................. 93
7.1.1. 入门 ................................................................................. 错误!未定义书签。
7.1.2. 查询模型 ......................................................................... 错误!未定义书签。
7.1.3. 格式设计 ......................................................................... 错误!未定义书签。
7.1.4. 发布报表 ......................................................................... 错误!未定义书签。
第三篇 高级篇 ............................................................................................................................... 93
8. 预警平台 ................................................................................................................................. 93
内容概述 ................................................................................................................................. 93
详细介绍 ................................................................................................................................. 94
8.1.1. 预警类型注册 ................................................................................................. 94
8.1.2. 预警条目注册 ................................................................................................. 96
9. 交换平台 ............................................................................................................................... 101
内容概述 ............................................................................................................................... 101 详细介绍 ...............................................................................................................................
9.1.1. 交换平台使用 ............................................................................................... 101
9.1.2. 交换平台插件开发 ....................................................................................... 107
10. 流程平台 ....................................................................................................................... 109
内容概述 ............................................................................................................................... 109 详细介绍 ...............................................................................................................................
10.1.1. 流程平台介绍 ............................................................................................... 109 10.1.2. 业务流程 ....................................................................................................... 111
业务类型 ............................................................................................................... 112
流程配置 ............................................................................................................... 113
单据权限配置 ....................................................................................................... 114
单据来源配置 ....................................................................................................... 115
动作约束配置 ....................................................................................................... 116
动作事件控制配置 ............................................................................................... 117
用友软件股份有限公司
动作驱动配置 ....................................................................................................... 117
单据VO交换 ....................................................................................................... 118
下面是一个最小化的推式流程过程 ................................................................... 120
拉式单据(单据的上下游参照) ....................................................................... 121
10.1.3. 审批流 ........................................................................................................... 122
审批流定义 ........................................................................................................... 122
审批流编程 ........................................................................................................... 127
10.1.4. 消息中心 ....................................................................................................... 135
11. 会计平台 ....................................................................................................................... 139
内容概述 ............................................................................................................................... 139 详细介绍 ...............................................................................................................................
11.1.1. 会计平台注册 ............................................................................................... 140 11.1.2. 代码调用 ....................................................................................................... 146
12. 单点登陆 ....................................................................................................................... 147
内容概述 ............................................................................................................................... 147 详细介绍 ...............................................................................................................................
12.1.1. 单点登陆 ....................................................................................................... 148 12.1.2. 打开代办事项 ............................................................................................... 151
13. NC开发webservice-Axis ............................................................................................ 152
内容概述 ............................................................................................................................... 152 详细介绍 ...............................................................................................................................
13.1.1. 发布webservice ............................................................................................ 152 13.1.2. 客户端代码调用 ........................................................................................... 156 第四篇 附录 .................................................................................................................................
14. XML和EXCEL ........................................................................................................... 157
内容概述 ............................................................................................................................... 157 详细介绍 ...............................................................................................................................
14.1. 利用XmlUtils读取XML ............................................................................ 157 14.2. Excel文件读写 ............................................................................................. 163
15. 多语言 ........................................................................................................................... 164
内容概述 ............................................................................................................................... 164 详细介绍 ...............................................................................................................................
15.1.1. 生成资源文件 ............................................................................................... 165 15.1.2. 代码调用 ....................................................................................................... 165
16. 补丁与安装盘 ............................................................................................................... 166
内容概述 ............................................................................................................................... 166 详细介绍 ...............................................................................................................................
16.1. 安装盘结构 ................................................................................................... 166 16.2. 产品结构 ....................................................................................................... 167 16.3. 模块结构 .......................................................................................................
167 16.4. 制作补丁 ....................................................................................................... 170
17. 设计开发规范 ............................................................................................................... 173
内容概述 ............................................................................................................................... 173 详细介绍 ...............................................................................................................................
用友软件股份有限公司
17.1. SQL规范 ...................................................................................................... 173 17.2. java开发规范 ............................................................................................... 176
18. 开发常见问题与技巧 ................................................................................................... 189
内容概述 ............................................................................................................................... 189 详细介绍 ...............................................................................................................................
18.1. 环境变量类 nc.ui.pub.ClientEnvironment................................................... 189 18.2. 发送待办消息 ............................................................................................... 191 18.3. 模板中下拉框的值 .......................................................................................
用友软件股份有限公司
第一篇 入门篇
欢迎您成为用友NC开发队伍中的一员!如果您从未接触过NC的开发,本篇将从NC产品使用开始,序渐进的带您步入精彩的NC产品世界.本学时教程是在完成NC产品使用入门阅读的最佳起点。在开始学习之前,您需要掌握以下基本技能:
? Eclipse使用
? JAVA和JE22基础知识
本学时教程中将会讲述以下内容:
NC产品入门,本章旨在为那些对NC尚不了解的新进人员就NC的大体形态做个简单的讲解,以便对NC产品有个简单的认识,并学习到与NC产品二次开发有关的产品操作技术入门知识。
开发环境的安装和搭建,本章是为第一次使用NC的人员做准备,达到迅速的安装和搭建NC环境。
NC技术框架简介,本章您将会学习NC技术框架理论概念,通过学习范例代码掌握VO\BO\远程接口的概念。
NC5.X的数据建模,使用PowerDesigner进行数据库建模。
1. 建立NC环境
第一次在NC环境中做开发,需要首先建立一个数据库环境,这个数据库环境中指定了NC所要使用的表空间,并预先建立了NC的系统表、视图、索引等,并预置了大量的初始化数据。然后,在Eclipse中建立一个开发项目,引用UAP的jar包即可。经过这两步,就完成了NC开发环境的建立。
NC环境安装完成后还需要对系统进行初始化,包括参数,组织结构,权限,基本档案的建立,这样一个系统才算真正可以使用。
用友软件股份有限公司
1.1.1. 建立数据库
在数据库服务器(Oracle,MS SQLServer,DB2)中新建一个空数据库,并执行数据库脚本建立NC需要的表空间,不同的数据库使用的脚本不一样(正式安装盘下有安装说明),以MS SQLServer为例:假设新建的数据库叫ncdemo,MS SQLServe的数据文件存放在D:\Microsoft SQL Server\data 下,那么数据库脚本为
用友软件股份有限公司
该步骤的目的是建立NC测试服务器,并利用它建表,并初始化数据表。 运行UAP V5安装盘 下的ncsetup.bat文件,会进入下面的安装向导:
1) 选择NC服务器端环境根目录:
2) 选择要安装的UAP产品模块:
3) 开始NC环境的安装
用友软件股份有限公司
4) 选择第三方中间件,如果没有则默认使用NC自带中间件。
执行完此向导后,可以在你指定的NC_HOME目录中创建NC服务器端环境,如下图:
用友软件股份有限公司
1.1.3. 配置启动NC
1)在NC_HOME\BIN 目录下运行ncSysConfig.bat,首先需要建立数据源。
2)部署代码,NC5.X需要通过部署生成Ejb代码,否则程序无法使用。所以在添加数据源后必须部署产品,选择需要部署的模块,点击部署按钮。
用友软件股份有限公司
3)修改服务器端口,可以在server页签修改web服务器的端口
4) 下面启动NC自带的中间件,方法是在上面的NC_HOME目录中双击startup.bat,中间件即可启动,启动界面如下:
用友软件股份有限公司
5) 利用InternetExplore作为客户端登陆,在地址栏输入即可看到下面的界面:输入用户名root,密码为空,登陆到系统管理帐套中
6)帐套管理里面新建帐套,用户。
前面建立了NC要使用的数据库,并为数据库设置了表空间信息,但这还不够,还必须为其安装NC的系统数据表和初始化数据。方法是点击上面 帐套管理 页面的“升级帐套”按钮,开始进行数据表的建立和初始化,如下图:
用友软件股份有限公司
然后开始初始化:
用友软件股份有限公司
至此,NC数据环境已准备好。注销后再登陆到”学习帐套”,即进入了真正的NC系统,如下所示:
1.1.4. 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中MDE Development 中设置NC Home。 还可以设置数据源,模块选择。
3.打开Eclipse,点击菜单“新建/项目”,弹出下面的对话框:
用友软件股份有限公司
选择MDE Development下的Moudle Project即可。
4.点击下一步,开始创建Moudle Project,在下面的对话框中填入信息:
5.点击完成后,会创建项目,形成下图所示的目录结构:
用友软件股份有限公司
6.至此,开发环境已建立完毕。在开发环境中调试程序,一般需要首先启动NC中间件,然后启动UAP客户端调试器。下面我们在eclipse调试器中建立这两个程序:
建立中间件调试启动点,方法是在调试点管理界面左边列表的Module Application下新建一个调试点,MDE插件会为它设置默认参数,我们只需改变一下调试点名称,如下所示:
用友软件股份有限公司
program arguments设置如下:
${FIELD_NC_HOME}/ierp/bin/prop.xml -Dnc.server.location=${FIELD_NC_HOME} -DEJBConfigDir=${FIELD_NC_HOME}/ejbXMLs
-DExtServiceConfigDir=${FIELD_NC_HOME}/ejbXMLs
VM arguments设置如下:
-Dnc.server.location=${FIELD_NC_HOME}
-DEJBConfigDir=${FIELD_NC_HOME}/ejbXMLs
-DExtServiceConfigDir=${FIELD_NC_HOME}/ejbXMLs
Working directory
选择Other 内容为 ${FIELD_NC_HOME}
启动中间件快捷方式是在工程点击右键,在run as出点击NC Milldeware就可以。
建立UAP客户端调试器启动点,该调试器的入口类是nc.starter.test.Jstarter,因此可以新建一个 Java Application类型的调试点,输入入口类,如下所示:
在设立这两个调试点之后,要注意两个问题:一是你的项目所使用的JRE的安全
用友软件股份有限公司
策略必须是:
这可以通过修改 {$JRE根目录}/jre/lib下的java.policy文件来实现,否则在启动中间件时会出现java.security.AccessControlException;二是要成功运行UAP客户端调试器(JStarter),必须将jre/lib下的plugin.jar,Tools.jar也加入到项目默认的JRE的classpath中,如下所示:
此时即可先启动中间件,再启动客户端调试环境。客户端调试环境启动图如下:
用友软件股份有限公司
上面显示连接的是本机中间件,如果在远程有中间件,填入其IP和端口,也可用
于调试开发环境中的客户端代码。点击“Start”按钮后即可进入NC登陆界面,如
至此,NC的环境完全建立起来。
1.1.5. 产品参数,档案初始化
利用NC-UAP进行开发的时候并不是做一个单据,报表就可以运行的,NC作为一个ERP软件,需要对系统进行一些初始化才可以正常运行,主要是对组织机构,人员,权限,会计期间,参数,档案的初始化。(本节只对这些设置进行简单描述,详细介绍可参考相应产品手册,比如基本档案,权限手册)
在 NC 管理软件中,参数设置平台管理系统所有的参数,并对参数按实际需要进行逐级分配,实现既能统一控制,又能满足单位灵活运用。参数包括公共参数和业务参数,以集团进入还是以公司进入看到的参数设置界面内容是不同的。主菜单中双击【客户化】-【参数设置】:
用友软件股份有限公司
必须设置的参数是集团本位币。
对于全集团用到的币种在本功能中进行设置。总公司或上级单位确定集团公司或所属下级单 位使用的全部币种,包括本位币。币种设置完成后,集团公司所有内部单位还需在各自单位 账中录入相应的主辅币信息及汇率信息,待这些信息录入完毕后,方能在日常业务使用的这 些币种。在主菜单中双击【客户化】-【基础数据】-【币种】,系统将弹出界面。属于集团档案
用友软件股份有限公司
? 会计期间方案和会计期间
会计期间方案用来定义账套拥有的会计期间数目,然后为每个期间方案定义一套会计期间。 在主菜单中双击击【客户化】-【基础设置】-【会计期间方案】
会计期间节点用来定义账套的会计月度和会计季度。启用多账簿的情况下会计期间按照会计 期间方案分别进行设置。
在主菜单中双击击【客户化】-【基础设置】-【会计期间】,
? 公司目录
公司目录用于定义集团公司所有公司的基本信息、联系信息,包括公司编号、名称、联系方 式等相关信息,并确定分子公司之间的关系。以公司身份登陆后,只能查询。
在主菜单中双击【客户化】-【基础数据】-【公司目录】
? 建公司帐
新建公司账是为已经存在公司目录中的公司建账、增补系统模块,以便初始化业务数据及业 务参数,已建账的公司才能处理有关业务。新建公司账还可为已建账公司增补功能节点。 在主菜单中双击【客户化】-【建公司账】-【新建公司账】
用友软件股份有限公司
? 基本档案
在基本档案节点为集团和公司建立基本信息,以便于业务系统使用,包括部门、人员、库存、自定义项、组织机构、财务信息、业务信息、制造信息等等。除少数几个档案只能在集团增加外,其他档案受集团参数设置节点的【客户化】中的【基本档案】参数决定,为“是”公司和集团均可增加档案内容,为“否”则公司不能增加。
常见的档案添加比如:部门档案在公司增加,人员类别在集团,人员档案在公司。具体档案初始化参考基本档案产品手册,不一一介绍。
1.1.6. 权限管理
NCV5.0权限管理与之前版本最大的区别在于在权限管理中引入了“角色”概念。先规划好各种角色并分配权限,再将用户与角色关联起来,将角色作为桥梁把“用户”和“权限”连接起来。换句话说就是:通过规划好各种角色先将用户分类,再为各类用户分配权限。
资源权限控制界面用来为当前登录公司以及当前登录公司的下属公司启用按钮权限控制和数据权限控制。
NC系统中的权限由三个部分构成,分别为功能权限、数据权限和按钮权限。功能权限是指节点的查看和打开的权限;数据权限是指档案的参照权限,而按钮权限是只指各个界面上按钮的查看和使用权限。如果不启用权限控制,则不需要分配权限,系统默认角色具有所
用友软件股份有限公司
有权限;启用权限控制后,可以为具体的角色分配具体的权限。NCV5.0系统默认启用了功能权限控制,且该设置不可修改;数据权限和按钮权限的权限控制默认为不启用状态,但可在本界面对设置进行修改。
在用户管理界面可以为当前登录公司以及当前登录公司的下级公司增加用户,还可以为在这些公司创建的用户委派角色。用户必须被委托角色才有相应权限
角色管理的界面如图所示。角色管理节点用来为当前登录公司以及当前登录公司的下属公司创建角色,将创建的角色分配给下属公司以及为角色关联用户。
用友软件股份有限公司
权限分配的界面如图所示。权限分配节点用来为当前登录公司和当前登录公司下属公司的角色分配功能权限、按钮权限以及档案的数据权限。
经过以上操作可以为公司建立角色,用户,并赋予相应权限。深入的权限管理参考权限管理产品手册。
1.1.7. 产品主要目录结构介绍
ierp/bin: 与整个产品相关的配置文件都存放在该目录,如日志配置文件logger-confing.properties
modules: 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: 用于二次扩展的公开的API
modules/&模块名&/extension/META-INF/lib,classes:用于二次扩展的私有的API
modules/&模块名&/client/lib,classes: 用于从目标上来说不属于公共的API,但是客户端用到的代码
webapps/nc_web:NC产品的web应用
hotwebs: 下面放其他的web应用,如hrss, lfw等
resource: 存放与整个产品相关的资源,如产品的多与资源
lib, classes, external/lib, classes: 由平台维护和提供的类库,不允许第三方调整
2. NC基础技术
本章将介绍UAP-NC平台的技术结构,开发模型,并通过一个例子亲身感受远程接口开发。
2.1.1. NC UAP 总体介绍
UAP-NC作为基于多组织架构的企业应用运行平台、基于模式化的开发平台、开放的系
用友软件股份有限公司
统集成平台及统一的系统管理平台,是建立在Java语言所提供的强大功能的基础上开发的。Java是一种简单的、面向对象的、分布式的、结构中立的、安全的、可移植的、性能优异的、多线程的、动态的开发语言,适合构建基于网络计算的企业应用。由于Java的平台无关性,使得UAP-NC可以运行在不同硬件平台、不同操作系统平台上。基于UAP-NC所开发的应用软件采用Browser/Server(浏览器/服务器)的方式来运行。B/S的运行方式最大限度地方便了用户部署和维护大型软件系统,保证了瘦客户机运行,从而大大降低了用户目标系统的总体拥有成本(TCO)。
UAP-NC体系框架图
系统框架层主要指基础软件,如操作系统、数据库及J2EE应用服务器。UAP-NC支持多种操作系统(Solaris、AIX、Linux、Windows等),可运行于符合J2EE规范的多种应用服务器(IBM WebSphere、BEA WebLogic、UFIDA Application Server等),支持多种数据库DBMS(DB2、Oracle、SQL Server、OSCAR等)。UAP-NC还提供Portal服务器进行内容集成以使用户对企业资源有一个统一的访问点。
技术框架层是在系统框架层(操作系统、数据库及应用服务器)和应用系统之间建立的一层技术封装层和系统资源监控和管理层。技术框架层屏蔽不同具体技术实现的细节,减少
用友软件股份有限公司
直接使用系统资源带来的复杂性、异构性、不安全性及不稳定性;技术框架层监控和管理系统资源,保证系统资源的可用性及其合理使用;技术框架层提供最佳编程模式,加快在不同技术平台上开发和部署应用的速度,保证应用的健壮性。技术框架层所屏蔽技术实现细节包括界面风格、远程接入、EJB实现/访问、多数据库适配、事务处理、并发处理、缓存处理、安全管理等等。
? 企业服务架构(Enterprise Service Architecture,ESA)
企业服务架构是一个服务集成总线,支持异构环境的服务、消息及基于事件的交互。通过ESA,可以使用与实现无关的接口来定义服务,可发现和调用所需的服务,可解决服务之间的相互依赖。
? 连接框架(Connect Framework)
连接框架连接客户端与服务器,使不同客户端(浏览器小应用程序、Java应用程
序、浏览器JSP)可通过不同访问协议(HTTP/HTTPS,RMI)使用服务器提供的服务。 ? 同步(Synchronization)
同步服务实现客户端与服务器代码和数据的同步,及集群环境下服务器之间的资源
? SQL翻译器(SQL Translator)
SQL翻译器将SQL翻译成适合目标数据库的SQL语句,以适配不同数据库厂商提供
的产品;优化SQL,充分发挥不同数据库的最大性能。
? 元数据管理(Metadata Management)
元数据是描述系统数据(包括界面定义、规则定义、流程定义等)的数据。通过元
数据管理,对系统数据统一进行维护以支持用户自定义,如改变字段的可编辑属性、字段的取值范围等。
? 工作流引擎(Workflow)
? 工作流引擎根据工作过程的描述,通过执行一系列已定义的工作项,完成此工作过程。UAP-NC的工作流引擎支持多种工作流模式,如分支、合并、并行、选择、循环、回退等;支持工作项的抢占与会签;支持可配置的动作执行脚本,等等。
? 规则引擎(Rule Engine)
? 规则引擎用来定义和执行各种规则,包括界面规则、关联关系、计算规则、条件跳转规则等。使用规则可以让应用更加富有柔性。规则需要通用的行业化语言精确表达且浅显易懂。规则引擎需要满足一定的计算速度,支持规则的批量处理及理解外部数据。
用友软件股份有限公司
? 持久化框架(Persistence Framework)
封装不同持久化技术(如JDBC、普通文件、XML、Excel)。持久化框架可解决对象与关系之间的“阻抗失配”问题。
? 基础算法(Basic Algorithms)
提供统一的基本算法,如排序,XML文档操作,方便开发与编程,统一代码规范。 ? 登录和安全(Login/CA Security)
统一管理系统登录时的身份认证。支持多种身份认证策略,如静态密码认证、基于USB Key的CA身份认证等。支持对业务敏感数据使用证书进行签名和验证以防止数据篡改和提供抗抵赖性。
? 调度引擎(Scheduler)
? 调度引擎对服务和线程进行统一管理,以屏蔽不同应用服务器的异构性。调度引擎调度各种服务、常驻系统服务、客户端的请求服务、以及一些服务的组合。
? 异常(Exception)
统一解释与封装异常消息,如不同厂商的数据库异常的不一致。
? 缓存(Cache)
提供在服务器端与客户端的临时内存中进行缓存的机制,包括对象的创建、共享访问、假脱机(Spooling)、失效等,加快对用户操作的响应。
? 日志(Log)
日志机制提供对系统运行时的监控及支持对系统异常的追踪与定位。日志机制可控制日志输出的格式、日志信息的级别、日志信息输出的目的地(文件、控制台、SocketServer等)。通过配置文件进行灵活的设置,用户可以细致地控制日志的生成过程,而不需修改程序代码。
应用框架层是基于企业建模理论的、以业务导向和驱动的、可快速构建应用软件的软件平台。应用框架层的出现是一种技术创新,它使软件平台多了一个具有革命性意义的战略层次,为降低大型复杂软件系统的实现难度提供了新的途径。将应用软件的业务逻辑和开发技术相对分开,使得应用软件的开发者可以仅关注应用的业务逻辑,而不必关注其繁琐的技术实现。这使管理层与业务人员参与应用软件的开发成为可能。UAP-NC应用框架层基于业务和管理层面,以业务建模(组织、流程、功能、资源、信息)为基本手段,从而构造、开发和维护业务应用系统。使用UAP-NC提供的应用框架层,可大大缩短研发周期,提高研发效率,加快应用开发的速度;减少企业信息系统开发的风险;降低开发成本;实现最终用户的
用友软件股份有限公司
个性化的需求;支持用户在发展过程中各种各样的需求变化;提供应用的高价值。
? 国际化(I18N)
实现界面的多语化及数据和展示的本地化。界面的多语化是指根据用户登录时指定的语种显示相应的语言界面。企业用户可以修改相应的语言信息及显示的图片。数据和展示的本地化指日期、时间、数字、货币、汇率等可根据企业用户本地的习惯进行展示。 ? 消息管理(Message Management)
消息管理集中显示通过ESA所传送的消息,如应用系统所产生的预警消息,通知消息,业务流程相关的消息,及企业公告和用户对发消息等。
? 移动管理(Mobile Management)
支持通过移动设备进行消息的交互及操纵业务数据等。对无线设备的广泛支持,UAP-NC带来的是企业管理的无处不在和服务的无限拓展,同时也为企业决策人员提供了高端、迅捷的管理机制。
? 组织管理(Organization Management)
提供从不同维度管理企业,如公司、部门、主体账簿等。
? 数据传输(Data Transfer)
数据传输负责传输以规则定义的数据集以支持数据层的应用集成。
? 数据交换(Data Exchange)
与第三方系统进行数据交换,提供灵活的数据映射及数据绑定,支持根据业务规则的转换,同时结合工作流平台整合业务流程。
? 动态会计平台(Financial Account Platform)
通过定义会计科目类别和凭证模板,使用凭证生成器,根据业务数据生成实时凭证。在保持业务数据与财务数据相对独立的基础上保证数据的一致性和及时性。 ? 预警平台(PreAlert)
? 在预警平台上可定义多种方式的预警条件以进行形式多样的预警,如时间条件、库存大小、生日等。预警还可配置在用户登录时触发。预警消息可以用HTML网页的形式发布,可以通过邮件发布,还可使用短消息发送。
? 业务流程和审批流程的编排(Business Process and Approval Flow
Orchestration)
用来定义业务流程和审批流中数据的流向,数据间的关系及以人员的关系。
? 访问控制(Access Control)
用友软件股份有限公司
使用基于用户角色和对象权限的权限分配方式。每一角色都包含公有权限和属于某一具体公司的私有权限。角色还提供信任功能。
? 应用模式(Application Patterns)
UAP-NC根据经验积累与用户实施,总结出一套与应用界面相关的模式(表单、报表和打印),更好地提供满足用户需求的界面展现,更快地满足用户个性化的需求。
UAP 部署图
2.1.2. 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区域介绍:
用友软件股份有限公司
2.1.3. NC的开发模型
系统前端为客户端UI代码,UI端代码继承ToftPanel,UI代码通过调用远程组件与服务器端进行交互,中间传递的数据模型为VO,远程组件调用底层的业务实现代码,完成整个交互逻辑。通过JDBCFramework,系统提供了一套良好的数据持续机制,解决数据库交互的复杂问题。
下图是NCV5的代码结构图
用友软件股份有限公司
NC5后将代码分区域存放:
? Public目录存放 接口和公共代码(比如VO和公共算法)
? Private目录存放 实现和其它实现细节
? Client目录存放 客户端代码
? gen 目录存放 工具生成的ejb代码
? META-INF目录存放模块配置文件目录,包括module.xml文件和xxx.module
接口配置文件。
针对上面的开发模式,我们规范一下代码的包结构:
用友软件股份有限公司
? nc.itf.&模块&: 表示该模块定义的接口
? nc.impl.&模块&:表示该模块定义的接口实现
? nc.vo&模块&: 表示VO的实现
? nc.bs.&模块&: 普通的后台应用
? nc.ui.&模块&.*: 客户端代码
2.1.4. 开发远程接口
V5.0版本的远程组件开发是基于接口,因此远程组件的开发按照下面两个步骤开发: 定义远程接口,注意这里的远程接口不用实现java.rmi.Remote接口,普通接口就可以了 对该接口进行实现
把该组件部署为远程组件
下面以HelloWord为例子:
? 定义接口
? 实现该接口
编辑或新建该产品模块下的模块部署描述文件(META-INF下的.module文件),加入一个公共组件:
用友软件股份有限公司
远程组件只要指出他的remote属性为true即可。
? 客户端调用
接下来客户端就可以通过下面的方式进行远程访问了:
系统输出:
你的一个实现可以同时实现多个接口,并且可以在部署的时候选择性的公布出你需要远程分布的接口,例如你的一个实现类,实现了多个接口IService1, IService2, IService3,你可以选择只远程公布接口IService2, IService3,部署信息如下:
用友软件股份有限公司
注意我们使用了supportAlias属性,指出我们可以通过两个接口中的任何接口进行远程组件的查找。supportAlias为true只有在公共组件中才起作用。
? 事务型组件发布
定义远程接口,就是普通接口,分有事务和无事务,区别在于部署文件时 放在private下而不是public下,部署成private的接口需要生成ejb代码,否则无法调用,部署成public的代码不需要生成ejb代码。一般来说,增删改操作发布成private接口,查询发布成public接口。下面是两种接口的发布事例:
配置文件规范:
用友软件股份有限公司
对于事务型的组件 (是指该组件的方法调用中事务处理会自动参与 )可通过后缀名来判断事务类型:
方法名后缀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)方法响应菜单事件。
用友软件股份有限公司
3. 数据建模
通过PowerDesigner进行数据库模型,建表,建数据字典,生成VO。为以后的单据,报表开发提供数据模型。
3.1.1. PowerDesigner建模
安装数据库设计工具:Sybase PowerDesigner Version 9.5.0.648(以下简称PD) 为了给数据表自动生成时间戳(ts)、删除标志(dr)字段,需给PD打上插件补丁(将三个补丁文件db2cs7.xdb,oracl8i2.xdb,sqlserv7.xdb全部拷贝到PD的安装目录的 Resource Files\DBMS 下即可)。如果没有补丁,在建表的脚本处需要手工增加下面两个字段。Ts字段是时间戳,供系统判断修改时使用,dr字段是删除标记,NC系统单据表删除时并不是物理删除,而是更新dr字段为1。
ts char(19) null default convert(char(19),getdate(),20), dr smallint null default 0,
PD是一种高端的数据建模工具,使用它可以很方便的建立数据库、导出SQL脚本,其物理模型文件的后缀名为pdm,所以,NC辅助开发工具多处依赖PD来完成数据库相关操作。
? 数据模型
我们的员工信息管理系统包括员工的基本信息,员工的类别信息,员工工资,为了增强系统的可扩展性,从员工基本信息中独立出员工的家庭住址信息,街道信息。下图显示了实体间的关系。
用友软件股份有限公司
? 生成pdm步骤
第一步、打开PD文件夹中的可执行文件pdshell9.exe,启动PD,会出现如下界面,选择新建一个物理模型。
第二步、我们以MS SQL Server数据库为例,选择数据库为Miscrosft SQL Server 7.x,注意,由于补丁文件只针对SQL Server 7.x版本,所以,无论我们用SQL Server 7.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 -& Generate Database ?
用友软件股份有限公司
第二步、在弹出界面中,设置生成脚
用友软件股份有限公司
第三步、对Keys & Indexs 选项卡做如下设置,注意,取消除主键外的所有选项,因为此时我们没有这些选项信息
用友软件股份有限公司
第四步、取消 Database 选项卡中的所有选项
用友软件股份有限公司
第五步、按下确定按钮后,便生成了SQL脚本
将生成的Sql脚本在数据库中执行,建表完成。
3.1.2. 生成NC数据字典
数据字典是NC二次开发工具中探测数据库表结构的数据基础,而不是采用每次需要数据都连接数据库的方式。数据字典由上一步骤生成的pdm文件生成,NC二次开发工具提供了相应的生成工具。在节点客户化-二次开发工具-系统管理工具-数据字典
用友软件股份有限公司
选择菜单项 工具 -& 导入数据字典
选择pdm文件,按照向导就可以将表结构导成数据字典。
第二篇 中级篇
经过入门篇的学习,你已经初步了解了NC的环境,使用和技术规范。但是离真正的业务开发还差很远,通过本篇的学习,你将真正进入NC的业务开发,了解NC单据的开发,
用友软件股份有限公司
数据库操作,报表等技术,通过本章的学习,你将可以具备实用的需求业务开发能力。
4. 单据开发
NC中最重要的概念就是单据,几乎大部分业务数据录入都是通过单据完成,所以单据开发是NC中最重要的技术。单据开发中重要的技术是单据模板和UI工厂。我们开发可以通过集成开发工具向导完成初步开发,经过集成开发工具设计的单据,已经可以完成日常的操作,比如增删改,审核等工作,如果有需要,可以把集成开发工具生成的代码导出到eclipse,然后继续修改,完成复杂业务逻辑功能。
UAP发展到现在,已经提供了不少二次开发工具和其他辅助性开发工具,更重要的是,也同时积累下来了一些标准的开发流程。作为NC内部和外部的开发者,通常的疑惑是如何使用这些工具,以及标准开发流程到底是什么(比如在表单开发中,何时该导入数据字典,何时配置单据模板)。NC集成开发工具(UAP Developer Workshop)的目标就是:集成UAP现有的所有二次开发工具,对其进行一定的组织;集成内置标准开发流程的(具有增值性)开发工具,比如表单开发工具、报表开发工具,以插件的形式组装起来。
4.1.1. 进入Workshop
登陆到NC后,点击功能节点 客户化/二次开发工具/UAP集成开发工具,可打开下面的页面:
用友软件股份有限公司
点击最左边的图标即可进入UAP集成开发工具中,主界面为:
Workshop一共分为6个区域:
菜单区:显示所有操作菜单;
1) Toolbar区:与菜单相互为补充,提供快捷操作方式;
用友软件股份有限公司
2) 导航区:内置三种导航视图,每个导航视图都针对一种开发人员要操作的对象,比如在
功能节点导航中,开发人员的操作对象是NC功能节点,在流程导航中,开发人员的操作对象是NC单据类型,在工具导航中,开发人员的操作对象是UAP对外提供的二次开发工具;
编辑区:它是开发人员做各项配置的区域,比如进行表单开发、单据交换配置等,分为多个可切换页签;
3) 视图区:提供一些用于展示信息的面板,比如功能节点的属性信息,表单信息的透视图
状态区:显示当前操作状态。
Workshop对原来客户化/二次开发工具下的节点进行了组织,将其放入工具导航中。如下图:
4.1.2. 表单开发流程导航工具
Workshop目前提供的包含标准开发流程的增值性工具是表单开发工具,它能通过一个开发向导,辅助开发人员配置一张表单的所有信息,最后生成UI工厂代码。下面演示在开发环境中从头至尾制作一张基本档案:
针对新的二次开发项目,需要在Workshop中新建一个项目,点击菜单项 新建/项目,打开
用友软件股份有限公司
下面的对话框:
在上面填入项目信息,根节点编码是项目的根功能节点编号,项目编码对应NC的系统类型编码,项目名称对应NC的系统类型名称,如下所示:
点击确定后在左侧的功能节点导航中即可看到新增加的DEMO节点(注意事项:客开的根节点必须以H开头比如H1,否则会有产品授权问题导致无法打开节点),选择它后点击菜单中的 新建/功能,弹出下面的对话框:
用友软件股份有限公司
在上面的对话框中填入功能节点编码,功能节点名称和入口类名,然后在左侧的功能类型列表中选择基本档案(如果单据需要相关流程操作,就需要选择有单据类型的,可以新建一个单据类型),最后选定这张表单的界面类型(卡片界面一般作为录入使用,列表界面作为浏览查询使用,一般选择管理界面),如下所示:
点击确定后此新增节点即可在功能节点导航树中显示,如下所示:
用友软件股份有限公司
双击此节点,即在编辑区打开一个表单开发向导,如下所示:
在第一步中,只显示一些单据基本信息,点击下一步,设置单据数据信息,如下:
用友软件股份有限公司
在此界面中,点击增加按钮选择表单的主表和子表(也可以只选择单表,对于单表头,单表体的特殊操作可参考下一节UI工厂中介绍),在下方的调整单据值对象信息中会默认为其加上要生成的值对象类的包名和类名。
下一步,设置单据模板信息:
在编辑区选择某个属性控件后可以在右下方的属性编辑区进行属性编辑。可以设置其可见性、是否必输项、参照信息等属性。
用友软件股份有限公司
单据模板相应区域,项目上点击右键可以新加项目,项目排序
在高级页签可以设置数据类型,编辑,显示公式。
数据类型选择参照时,可以通过下拉框选择系统内置的参照。
用友软件股份有限公司
对于自定义项档案可以选择数据类型是自定义项档案,参照类型输入:{档案名称} 对于自己写的自定义参照,数据类型选择参照,参照类型输入:&参照模型类名(含包名)&
对于一些字段我们可能需要显示公式,编辑公式。显示公式界面加载时会执行,编辑公式在编辑框发生改变时会被执行,表头的公式默认是不被自动执行的,需要在界面初始化时执行如下代码:
getBillCardPanel().setAutoExecHeadEditFormula(true)
getBillCardPanel().execHeadEditFormulas()等对应方法。
下图是公式编辑框,,系统预制很多公式,可以根据需要选择,每个公式界面都会有注释。 ,
用友软件股份有限公司
一般使用公式的地方包括计算字段,主键显示名称,控制字段。
这里需要讲下主键显示名称,因为使用NC中单据字段都是保存相应档案的主键,但界面需要显示相应编码或者名称,在录入时可以通过参照,但显示的时候就会出现只显示主键,所以需要通过公式进行转换。对于表头的参照字段,设置显示公式就可以,公式使用getColValue来进行主键和编码,名称的转换(getColValue实际是通过key来查询字段的公式)。对于表体,一般是新增一个表体项目显示名称,高级属性那里设置参照,关键字属性填写实际保存的单据字段,而保存主键的单据字段则进行隐藏,并设置显示公式使得对应新增的项目可以显示编码或者名称。
设置完成后,点击下一步,会提示保存单据模板,填入相关信息即可,如下所示:
用友软件股份有限公司
通过右上角通过单据模板生成查询模板,打印模板,报表模板(查询模板需要进行模板权限分配,在集成开发工具的工具导航页签-)模版管理工具-〉模版分配)。 进行单据按钮设置,进入下面的界面:
点击增加按钮,弹出下面的对话框:
用友软件股份有限公司
表单开发工具预置了常用的系统按钮,比如新增、查询等,可以直接利用系统按钮参照选取,如下:
确定后这些按钮即可自动添加到表单编辑区左侧和右侧的树中,如下所示:
用友软件股份有限公司
左侧的树用于设置按钮属性,右侧的树用于控制按钮的界面显示顺序。
对于有单据类型的单据,需要编译按钮动作脚本,否则单据的按钮无法运行, 需要编译的按钮包括增加,保存,提交,作废,审核,反审核六个,
鼠标点到按钮上,点击右键,选择动作设置,弹出下面对话框,点击确定后进行脚本编译,生成相应动作脚本。(动作脚本存放在nchome\modules\产品目录\META-INF\var\source下,可将代码导入eclipse进行跟踪调试,一般后动作处理后的逻辑也可写入相应脚本)
用友软件股份有限公司
下一步,进行单据校验规则设置,如下所示:
上面的表格用于设置编辑或新增单据时,表体内容是否为空。下面的表格用于设置编辑或新增单据时,表体数据的唯一性校验信息。
至此,整个单据配置完毕,点击完成会询问是否将代码自动部署到中间件上,因为目前是在开发环境,所以选择“取消”即可:
用友软件股份有限公司
下面,可将刚才开发的单据代码导出。点击菜单项 表单/导出单据源代码,会弹出下面的对话框:
在本地工作区中填入二次开发项目的源代码路径,然后选择确定,代码会生成到这个目录中。
在Eclipse中刷新编译一下,然后点击菜单项的 表单\预览单据,即可打开新开发的基本档案。
用友软件股份有限公司
对于部署到服务器,重启中间件后进入集团即可测试相应节点。
4.1.3. UI工厂
UI工厂是一套基于NC-UAP的UI开发框架。它的产生是通过对大量的 业务节点的总结,把常见的UI进行分类,分别抽取其中公有的代码,形成不 同的UI基类。UI工厂综合运用了单据模板,查询模板,打印模板,实现对这 些基本构件的运用的最优化。
UI工厂结构图:
UI工厂最基础类说明:
用友软件股份有限公司
单据模型介绍:
用友软件股份有限公司
界面加载:
BillCardPanelWrapper 和BillListPanelWrapper
处理卡片式和列表式的单据模板的加载及设置工作。另外这两个Wrapper提供了一些单据模板自身不够完善的功能,比如按行执行公式等等。上述的两个Wrapper是UI工厂的两个重要的基本工具类,但是其也可以被独立于UI工厂使用。只需提供合适的Controller,Wrapper就能完成单据模板的加载和设置。
通过调用getBillCardPanel 可以得到单据模板类的实例,这个Panel可以被放到其他任何Panel或者Dialog中。
事件处理:
用友软件股份有限公司
MyEventHandler 中
public void onButton(ButtonObject bo)
private void onBoCommand(IButtonCommand command, ButtonObject bo)
ClientUI中
afterEdit 当单据模板的表头或者表体的某个项目被编辑后会触发该方法。
bodyRowChange当选中卡片模板的表体,列表模板的表头或表体的不同的行时会 触发该方法。BillManageUI中在该方法中实现列表界面的表头选
中一行数据后,显示其子表数据。
beforEdit 当单据模板的表头或者表体的某个项目被编辑前会触发该方法。
集成开发环境生成的UI端的框架类:
5. NC数据库持久化技术
在NC中很多时候需要我们直接操作数据库,对数据库德访问NC提供了框架类。 JDBC FrameWork为NC访问数据库提供统一的数据操作访问,简化数据访问操作。 BaseDao是在JDBC FrameWork之上提供数据持久化的工具类。
下图是NC 数据库访问的层次图:
用友软件股份有限公司
5.1.1. 核心类介绍:
PersistenceManager
管理连接会话的生命周期,并提供了对单表VO操作的常用实现可以传递构造参数选择不同的数据源
JdbcSession
对JDBC的API封装和简化
SQLParameter
封装执行SQL的参数
ResultSetProcessor
结果集处理回调接口,封装结果集处理
DbException
封装不同数据库的异常,和统一处理不同数据库的Error Code BaseDAO / IUAPQueryBS / IVOPersistence
管理连接会话的生命周期,提供了对单表VO操作的常用实现
用友软件股份有限公司
5.1.2. 通过JDBC FrameWork访问数据库
通过代码和注释来看如何通过JdbcSession访问数据库 PersistenceManager sessionManager=
sessionManager =PersistenceManager. getInstance ();//构造参数可指定数据源 JdbcSession session = sessionManager. getJdbcSession ();//开始jdbc会话
String sql = &update bd_invmandoc set pk_invmandoc ='00000DDD' where pk_invmandoc=?”;
SQLParameter parameter = new SQLParameter(); 构造参数对象
parameter.addParam(&00000DDD&);添加参数,JdbcSession会将参数对象中的每个对象放入到预处理对象的相应位置
session.executeUpdate(sql,parameter);
} catch (DbException e) {
//根据数据库的不同统一异常处理
if(e.isBadSQLGrammar())//如果是语法错误
//to do 相关处理
if(e.isDataIntegrityViolation())//如果是数据一致性错误
//to do 相关处理
if(sessionManager!=null)
sessionManager. release ();//需要关闭会话
下面是几种参数语法介绍:
1.无参查询
String sql = &select * from bd_deptdoc&; //构造查询语句
List list = (List) session.executeQuery(sql, new ArrayListProcessor());
用友软件股份有限公司
2.有参查询
String sql = &select * from bd_deptdoc where dept_code=?&;
SQLParameter param = new SQLParameter(); //构造参数对象
param.addParam(“aaa”); //添加参数
List list=(List) session.executeQuery(sql, param, new ArrayListProcessor());
3.有参更新
String sql = &update bd_deptdoc set dept_code =?aaa? where dept_code=?”;
SQLParameter param = new SQLParameter(); //构造参数对象param.addParam(“bbb”); //添加参数
session.executeUpdate(sql, param);
5.无参批量更新
String sql = &update bd_deptdoc set dept_code =?aaa? where dept_code=?bbb?&;
session.addBatch(sql); //添加需要执行的同构SQL
int rows = session.executeBatch(); //执
6.特殊参数
1. Null参数 param.addNullParam(java.sql.Types.INTEGER);
2. Blob参数 param.addBlobParam (new Object());
3. Clob参数 param.addClobParam (new String());
结果集合的处理:
对查询结果集合的处理,主要由ResultProcessor类来实现,这是一个接口 ResultProcessor包含有一个简单的方法,不同的ResultProcessor实现返回不同的结果对象。系统提供了一系列常用的默认实现。
用友软件股份有限公司
ArrayProcessor 数组处理器,返回一个对象数组,结果集中只有一行数据,其中结果集中每一列对应数组的一个元素。
ArrayListProcessor 数组集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个数组,每个数组对应结果集中的一行数据,其中结果集中每一列对应数组的一个元素。 MapProcessor HashMap处理器,返回一个HashMap, 结果集中只有一行数据,其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值。
MapListProcessor HashMap集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个HashMap,每个HashMap对应结果集中的一行数据, 其中结果集合中每一列的列名和列值对应HashMap的一个关键字和相应的值。
BeanProcessor 值对象处理器,返回一个JavaBean,结果集中只有一行数据,该处理器能自动把结果集中的值按列的名称映射到javaBean中,如结果集中有名称为”name”的字段,那么只要该java对象中有getName()方法就能把结果集合中”name”对应的值映射到对象中。 BeanListProcessor值对象集合处理器,返回一个ArrayList集合,集合中的每一个元素是一个javaBean,每个javaBean对应结果集合中一行数据,其中每个JavaBean中的数据映射关系和BeanProcess同理。
还有ColumnProcessor ,BeanMappingListProcessor ,BeanMappingProcessor几个类 BeanListProcessor作为结果集的例子:
ArrayList list=(ArrayList) session.executeQuery(sql, param, new BeanListProcessor(TrainReqmatbillVO.class)); // TrainReqmatbillVO是一个普通vo类
用友软件股份有限公司
int listcount = list.size();
TrainReqmatbillVO[] vos = new TrainReqmatbillVO[listcount];
for (int i = 0; i & vos. i++) {
vos[i] = (TrainReqmatbillVO)list.get(i);
5.1.3. 通过BaseDao进行对象的持久化
通过持久层框架可以很方便的实现把内存中的对象持久化到数据库、把数据库中的关系数据加载到内存中。作为入门的一个例子,我们使用一个简单的Java Bean Person类(注意需要进行持久化的VO类必须符合Java Bean规范)
1.前台数据访问:
使用IVOPersistence服务组件,进行增删改操作;
使用IUAPQueryBS服务组件,进行查询操作。
IUAPQueryBS iUAPQueryBS = (IUAPQueryBS)NCLocator.getInstance().lookup(IUAPQueryBS.class.getName()); iUAPQueryBS. executeQuery()
2.后台数据访问 :
使用BaseDAO工具类
3.对象读取
BaseDAO dao=new BaseDAO();//构造参数可以指定数据源
PersonVOMeta meta=new PersonVOMeta();
dao.retrieveByClause(Person.class,meta,&id=5&);
4.对象写入
BaseDAO dao=new BaseDAO();
Person person=new Person();
person.setName(“tom”);
用友软件股份有限公司
person.setAge(“20”);
PersonVOMeta meta=new PersonVOMeta();
dao.insertObject(person,meta);//默认会为Person对象生成主键
Person是普通值对象, PersonVOMeta映射元数据类 实现IMappingMeta 接口,用于影射值对象和数据库关系,SupperVO不需要实现影射类
5.1.4. 结果集控制
在NC持久层中为了防止执行大查询后返回结果集合过多导致系统内存溢出系统默认设置了最大返回结果集行数是10万行,如果如要返回更多行数或者不限制返回行数,需要做如下设置:
在SuperDMO中设置返回行数
SuperDMO superDmo=new SuperDMO();
superDmo. setMaxRows(行数);
如果rows= -1表示不限制返回行数
在BaseDAO中设置返回行数
BaseDAO baseDao=new BaseDAO();
BaseDAO. setMaxRows(行数);
如果rows= -1表示不限制返回行数
在ResultsetProcessor中设置返回行数
BaseProcessor processor=new ArrayListProcessor();
Processor. setMaxRows(行数);
在结果集中设置返回行数
CrossDBResultset resultset=( CrossDBResultset)
Resultset.setMaxRows(行数);
用友软件股份有限公司
6. 单据开发其他相关技术
在NC中进行单据开发时,除了单据模板等技术,还有很多使用的技术,比如单据号,参照开发,公式,日志等,这些技术是单据开发中必备的技术。
6.1.1. 参照开发
6.1.1.1. 参照的类结构图
UIRefPane是NC参照的界面模型,refmodel是参照的数据模型
NC系统中存在大量的基本档案,与之对应,每种基本档案都配置了相应的参照。 下面初始化一个系统默认参照的方法:
UIRefPane是一个控件
UIRefPane ref = new UIRefPane();
Ref.setRefNodeName(nc.vo.bd.ref.RefNodeNameConst.DEPTDOC);//部门档案
这样就定义好了一个部门档案参照。
系统提供的RefNodeName请参见nc.vo.bd.ref.RefNodeNameConst
用友软件股份有限公司
6.1.1.2. 自定义参照开发规范
参照分为表型、树型、树表型参照三种。继承了UIDialog并实现了IRefUINew接口。 程序员可自定义参照界面,最好也继承UIDialog,须实现IrefUINew接口。
对应与3种类型的参照,Model也有3个抽象类:
表型: AbstrarctRefModel
树型 AbstractRefTreeModel
树表型 AbstractRefGridTreeModel
要自定义不同类型参照Model ,请继承相关的抽象类。
下面以CashflowrefModel来学习自定义参照的开发: /**
* 此处插入类型描述。
* 创建日期:( 13:42:55)
* @author:
public class CashflowrefModel extends nc.ui.bd.ref.AbstractRefModel {
* CashflowrefModel 构造子注解。
public CashflowrefModel() {
* 显示字段列表
* 创建日期:(01-4-4 0:57:23)
* @return java.lang.String
public java.lang.String[] getFieldCode() {
} return new String[]{&cfitemcode&,&cfitemname&}; super();
用友软件股份有限公司
* 显示字段中文名
* 创建日期:(01-4-4 0:57:23)
* @return java.lang.String
public java.lang.String[] getFieldName() {
return new String[]{nc.ui.ml.NCLangRes.getInstance().getStrByID(&&,&UC000-0003279&)/*@res &编码&*/,nc.ui.ml.NCLangRes.getInstance().getStrByID(&&,&UC000-0001155&)/*@res &名称&*/}; }
* 主键字段名
* @return java.lang.String
public String getPkFieldCode() {
* 参照标题
* 创建日期:(01-4-4 0:57:23)
* @return java.lang.String
public String getRefTitle() {
return nc.ui.ml.NCLangRes.getInstance().getStrByID(&&,&UC000-0002922&)/*@res &现return &pk_cashflow&; public String[] getHiddenFieldCode() { } return new String[]{&pk_cashflow&}; 金流量项目&*/;
用友软件股份有限公司
* 参照数据库表或者视图名
* 创建日期:(01-4-4 0:57:23)
* @return java.lang.String
public String getTableName() {
} return &bd_cashflow&;
实现自定义参照后,在代码中就可以如下调用:
UIRefPane ref = new UIRefPane();
Ref.setRefUI(自定义界面,一般不需定义用系统默认的);
Ref.setRefModel(自定义参照模型,比如CashflowrefModel)
6.1.1.3. UIRefPane 和refModle设置
1. UIRefPane中的设置:
setToolTipText(String);//设置参照控件的toolTip
setMaxLength(int);//设置输入字符的最大长度,默认20;
setEditable(boolean);//设置参照是否可编辑
setEnabled(boolean);//设置参照是否可以使用
setDelStr(String);//设置参照输入框不能输入的字符串。
setColor(Color);//设置参照输入框的背景色。
setCacheEnabled(boolean);// 是否使用缓存
setMultiSelectedEnabled(boolean);//是否允许多选择
setAutoCheck(boolean);//是否自动解析输入的参照数据
setButtonFireEvent(boolean);//按钮选择数据后是否触发ValueChanged事件 setNotLeafSelectedEnabled(Boolean);//非末级节点是否可选择(对树参照有效) setIsCustomDefined(boolean);//是否为用户自定义参照模型
setIncludeSubShow(boolean);//树型参照是否包含下级复选框是否显示
用友软件股份有限公司
setMultiCorpRef(boolean);//树表参照是否显示公司选项(在参照中动态切换公司)
setTreeGridNodeMultiSelected(boolean);//树表参照是否允许选择不同树节点下的数据。
2. refModle中的设置
setUseDataPower(boolean) ;//设置参数是否自动关联基本档案数据权限
setSealedDataShow(boolean);//设置封存数据是否显示
setRefQueryDlgClaseName(String);//设置参照查询类名称(参照的查询功能)
setLocQueryEnable(boolean);//树表参照,在启用查询功能后,是否启用定位查询功能 setDynamicColClassName(String);//是否为动态列参照。
setFormulas(String[][] formulas);//设置公,用于参照内容转换;
setDispConvertor(java.util.Hashtable newDispConvertor);//用于参照内容转换的影射表 setMatchField(String);//设置参照setpk时匹配的字段
getRefVO_mlang();//为多语言添加此方法, 请覆盖此方法返回要翻译字段数组。详见DefaultRefModel_multiLang
addWherePart(String);参照在运行中动态添加过滤条件,每次在原始的WherePart上添加
6.1.2. 单据号
在基于UAP-NC的企业管理系统内,根据企业的特点和行业规范,存在着大量的业务单据和基础档案数据,如何标识这些数据?如何自动给每个新的业务单据分配一个唯一的单据号?并且保证单据号规则可以进行配置,可灵活嵌入业务对象、日期、时间及流水编号,还要求单据号可以保持连续,能自动在断号时进行补号,不重号,能处理集群及并发环境下的单据号申请,这些就是单据号管理模块需要解决的问题。
对于使用集成开发工具开发的单据,只需要设置单据号规则单据编辑时就可以取得相应单据号。
6.1.2.1. 单据号规则
单据号编码规则初始是系统预制的,程序员发版前要提供pub_billcode_rule表的初始化脚本。集团可以修改单据号编码规则,而公司只能浏览各单据类型的编码规则。
用友软件股份有限公司
1. 单据类型:以树型结构列示出系统内的单据类型。
2. 编码范围:用来控制该单据号是集团统一编码或各公司自成体系或按照对象统一编码。
3. 编码参数控制:如果设置唯一性检查,则申请的单据号不会和自定义单据号重复,唯一性检查范围和编码范围一致;如果单据号保留占用,则删除的单据号不会再利用;如果设置了自动补号,则回退的单据号会被申请得到。
4. 单据类型简称:可以定义单据类型简称作为单据号编码的一部分。这是可选项。
5. 对象:最多可以选择两个对象作为单据号编码的一部分,如部门、仓库、存货分类、人员等。这两个对象也是可选,如果选择了对象,则此对象标识将出现在申请的单据号编码钟,具体的对象标识定义参见下一节。
另外,对于不同的单据类型,其可以选择的对象可能不同,这部分数据是系统预制的。
6. 顺序号:单据编码中,用来表示单据的顺序号的一串数字,包括年月日及流水号。
1) 年:用2位字符来表示。
2) 月:用2位字符来表示。如果选了月,也必须选年。
3) 日:用2位字符来表示。如果选了日,也必须选月。
4) 流水号:流水号的位数可在2位到10位间进行设置,范围从0..1到9..9,例如:如果定义4位,则流水号范围为。
5) 流水号归0标志:归0表示流水号到一定时候会再从0开始编号;通过归
用友软件股份有限公司
0标志可以控制流水号是否归0或归0方式。
按“日”归0表示流水号按日编码,每天的流水号都从0重新开始;
按“月”归0表示流水号按月编码,每月的流水号都从0重新开始;
按“年”归0表示流水号按年编码,每年的流水号都从0重新开始;
不归0表示流水号一直编号下去,不会归0。
6) 流水号的长度一定要结合编码规则及具体单据的业务量来设置。如果是按年流水的话,流水号位数可以长些;如果是按日流水的话,则流水号可少些。
7. 指定流水号:对于单据号编码范围是集团或公司,如果不希望单据号按照当前的流水号继续编号,则可以对此单据号编码规则重新指定流水号基准号。
8. 生成单据号时检查唯一性,如果选择,那么生成单据号时检查生成的单据号是否与用户自定义号重复,而不检查生成的单据号与以前生成的单据号是否重复,所以建议产品组开发人员在保存单据时自行检查新生成的单据号与现有单据是否重复。唯一性检查范围和编码范围一致。
9. 删除单据号时保留占用:该参数如果勾择,对于自动编号的单据,删除单据号时不会将删除的单据号回退到退号表,再增加新单据时,不会自动补前面的缺号,会自动生成一个新的单据号,但此时如果手工输入删除的单据号,仍可以保存。如果设置了自动补号,则回退的单据号会被申请得到。
10. 自动进行退号补号,如果选择,则生成单据号时会首先到回退表里去取,反之,则会直接生成新的单据号。需要注意的是,自定义号不会回退到退号表,如果发现自定义号被回退到退号表,则说明没用使用单据号申请API去申请自定义号,也就是说自定义号也需要调用API去申请一下,以便单据号模块统一管理。
6.1.2.2. 接口方法
对于非独立事务的业务,原有独立事务回退号方法被删除,不再需要调用,现在只需要关心两个方法:
(1) 独立事务申请单据号,批量:BillcodeGenerater. getBatchBillCodes();非批量:BillcodeGenerater. getBillCode()
(2) 删除单据时非独立事务回退单据号:IBillcodeRuleService.returnBillCodeOnDelete
用友软件股份有限公司
对于独立事务的业务,基本用法同上,但是需要额外调用另外3个方法:
(1) 申请单据号区域 IBillcodeRuleService.requireNewRegion(String regionid),用于开始独立事务之前
(2) 释放单据号区域 IBillcodeRuleService.releaseRegion(String regionid),当业务正常结束时,调用此方法释放区域
(3) 停用单据号区域 IBillcodeRuleService.stopRegion(String regionid),当业务非正常结束时,调用此方法固化此区域
注意:(2)(3)方法是互斥的,不能同时被调用,写程序时请注意。
推荐写法:
//申请特定内存区域
SFAppServiceUtil.getBillcodeRuleService().requireNewRegion(regionid);
//做独立事务业务操作
//释放申请的内存区域
SFAppServiceUtil.getBillcodeRuleService().releaseRegion(regionid);
catch (Exception e)
//停止申请的内存区域
82 SFAppServiceUtil.getBillcodeRuleService().stopRegion(regionid); //异常处理代码
用友软件股份有限公司
6.1.3. 公式
1. 支持一般的算术运算+,-,*,/,?,%
例如: sin(1.35)*a/b + cos(3.4)/c
其中a,b,c均为变量
2. 支持对数值型计算结果小数位的控制
3. 支持逻辑运算符&&(兼容老版&),||(兼容老版|),!
例如: iif((a&b)||(c&&d),&right&,&wrong&)
其中a,b,c,d均为变量
4. 支持比较运算符&,&=,&,&=,==,!=等,支持null值的处理。
例如: iif((a&b && a != null)||(c&=d),&right&,&wrong&)
其中a,b,c,d均为变量
5. 支持自定义变量,变量可按Object和String两种方式传入
例如: col1-&var1+var2
其中var1,var2均为自定义变量,可以为String型,也可以为任意类型
6. 公式除了

我要回帖

更多关于 安全职业健康管理体系 的文章

 

随机推荐