简介:面向用友NC6.5开发者的系统教程,适合需要从零搭建NC开发环境、掌握数据库与账套机制并落地个性化业务功能的后台开发人员。文档从建立标准数据库结构、创建NC数据库用户、安装代码、配置数据源连接并部署,到开发环境搭建均给出细致步骤;Eclipse与数据库连接工具的配置讲解,可帮助开发者快速准备本地研发环境。核心案例HelloNC贯穿新建NC项目、编写后台服务、通过UPM文件注册服务、从开发环境运行及节点注册等环节,完整演示了后台服务与界面联动的实现方式。资源为单个PDF文件,压缩包16.38MB,已有478人学习,适合初学者入门,也可作为中高级开发者的备查手册。指南还覆盖业务元数据、实体组件、操作组件与持久化框架等进阶内容,目录结构清晰,能显著缩短NC专项开发的探索时间。 说实话,第一次拿到《NC6X开发指南.pdf》的时候,我内心是拒绝的。厚厚一本,目录长得像字典,各种术语堆在一起,翻了几十页都在讲平台概念,根本不知道从哪下手。直到在供应链项目上被单据开发连续折腾了两周,再回头翻这份指南,才发现真正值钱的东西全藏在目录背后。
NC6X的二次开发,从来不是打开IDE按F5跑通一个接口就完事。它是一整套围绕元数据、单据模板、后台动作、节点权限展开的业务开发体系。如果你正准备做NC6X的项目,或者刚接手一个基于NC6X的集团ERP二次开发,这篇内容会把这份指南里最核心的东西帮你拆开揉碎,按实战顺序讲清楚。
1. 先搞懂NC6X是什么,再决定怎么读这份指南
1.1 一套业务框架,不是一个普通后台项目
很多从传统Java开发转过来的人,第一次打开NC6X的代码会有种错觉:这不就是个SSH项目吗?然后就开始找Controller、找Service、找Mapper,结果翻了半天,连一个正经的XML配置文件都没找全。
原因在于,NC6X本质上不是让你从零写CRUD的框架,而是一套以UAP平台+NC标准模块为底座的企业业务框架。NC633、NC65乃至后续NC Cloud的不少底层套路都一脉相承。在这个体系里,业务单据才是开发的核心单位,增删改查这些事,平台替你做了大半,你需要做的是:定义好数据结构(元数据)、配置好界面(单据模板)、把业务动作挂到按钮上(后台Action)。
所以读开发指南的时候,千万别抱着"我要找Controller怎么写"的心态。指南里讲元数据、讲单据模板、讲动作注册,这些才是整个开发体系的真正骨架。
1.2 这份指南最该先读的三个部分
市面上的NC6X开发指南版本很多,但结构大同小异。我的建议是,第一遍不要从头读到尾,先把下面这三块找出来精读:
元数据与实体管理:搞懂一张业务表是如何通过UAP平台"注册"出来的,而不是直接写SQL建表。单据开发与模板配置:搞懂卡片界面、列表界面是怎么通过模板配置生成的。动作与后台服务扩展:搞懂按钮点击之后,代码是怎么被调起来的,如何在保存、删除、审批这些动作里塞进自己的逻辑。
这三块是NC6X开发的最小知识闭环。先把它们读透,指南里其他内容,比如权限、流程、报表、接口对接,都是在往这个闭环上挂东西。
2. 环境准备与工程结构,照着指南搭环境时最容易被忽略的细节
2.1 编译与部署环境的版本匹配
NC6X的开发环境,说简单也简单,说麻烦是真麻烦。最怕的不是装不上,而是版本对不上。不同版本的NC6X,对应的JDK版本、中间件、数据库驱动都有差异,一旦环境不对,后面的问题会一个接一个冒出来。
实操中我的建议是:先确认项目现场用的是哪个版本,然后照着这个版本来搭建环境。常见的组合大致是:
| 环境项 | 常见取值 | 需要注意的事 |
|---|---|---|
| JDK | JDK 1.7或1.8 | 高版本JDK未必兼容,别追新 |
| 数据库 | Oracle / PostgreSQL / SQL Server | 驱动版本必须和NC版本配套 |
| 中间件 | WebLogic / 自带轻量中间件 | 开发阶段用自带中间件最省事 |
| 开发工具 | Eclipse加NC插件 / IDEA加插件 | 关键在于能正常发布模块到NCHome |
我见过太多人在JDK版本上栽跟头,一启动就报各种莫名其妙的ClassNotFoundException。排查半天发现是本地JDK版本跟中间件不兼容。所以搭环境前,先把指南里关于"环境要求"的章节找出来对一遍,比什么都重要。
2.2 别被NCHome目录吓到,它是有规律的
第一次打开NCHome目录,满屏的modules、bin、hotwebs,确实会让人头皮发麻。但实际开发中,你打交道最多的就那几个:
NCHome/bin:启动脚本、系统配置工具(sysConfig)都在这里。NCHome/modules:按模块存放业务代码和资源配置,开发的时候你的项目就在这里。NCHome/hotwebs:前端资源的部署目录,改界面资源后要部署到这里才会生效。NCHome/logs:运行日志目录,排查问题先来这里看。
理解这个结构之后,再去看指南里的"部署与发布"章节,就不会一头雾水了。你只需要记住一句话:改了Java代码,要停服编译部署;改了元数据和模板,要在UAP里发布;改了前端资源,要部署到hotwebs并清缓存。
2.3 把代码跑起来的三个必备动作
开发指南里通常会讲"如何部署模块",但实际项目里,把NC6X跑起来其实就三件事:
- 用
sysConfig配置好数据源和中间件,这一步决定系统能不能连上数据库。 - 启动中间件,等日志里出现
server start之类的标识,说明启动成功。 - 用管理员账号登录系统,在
UAP或系统管理里发布元数据、注册节点和菜单,然后分配权限。
很多人第一步走通了,第二步也启动了,结果登录进去看不到自己的功能节点,就开始怀疑人生。其实十有八九是第三步没做全:元数据发布了,但节点没注册,或者节点注册了但权限没分配给你当前账号。指南里讲"系统初始化"和"权限管理"的章节,就是用来解决这类问题的,建议提前画个重点。
3. 元数据驱动开发,NC6X里最核心的一套玩法
3.1 从一张报销单的诞生,看懂元数据的意义
在传统Java项目里,你要做一张报销单,第一步大概是建表,第二步写个实体类映射,第三步写增删改查的接口和页面。在NC6X里,顺序完全反过来。
你先打开UAP的"元数据管理",新建一个实例如ReimburseBill,给它加一堆属性:报销人、部门、报销金额、备注……每个属性还能配置字段类型、长度、是否必输、是否为引用类型。这些属性并不直接等于数据库字段,但当你点击"发布"之后,UAP会自动按照元数据生成数据库表。
这个设计最大的好处是:数据结构不再被代码锁死。后面业务要加字段,不用改类、改XML、跑数据库脚本,直接在元数据上扩展,然后重新发布,开发效率完全是两个量级。这就是为什么指南里花大篇幅讲元数据——它确实是整个NC6X开发的地基。
3.2 从模板配置到界面生成,少写几千行前端代码
数据库表有了,接下来就是界面。在NC6X里,界面同样不是手写的,而是靠"单据模板"配置出来的。
你进入模板管理,选择刚建好的报销单实体,然后画卡片模板和列表模板。卡片模板对应增删改查的单据界面,列表模板对应查询列表。把字段拖到界面上,设置显示名称、是否只读、是否参照,保存发布,一个能跑的单据界面就出来了。
这里我多说一句:前期配置模板时多花点心思,后面能省非常多事。比如某些字段在录入时要求从参照里选,你就要提前把参照类型配好;某些字段要根据金额自动带出税率,那就用显示公式。指南里关于显示公式和编辑公式的内容,值得反复看几遍,很多"界面怎么和我想的不一样"的问题,根源都在公式配置上。
3.3 把业务逻辑挂到Action上,按钮才会真正干活
界面只是壳,真正的业务逻辑在后台Action里。NC6X的典型动作链路是:界面上点保存按钮 → 触发注册的动作 → 调用后台Action → 执行保存逻辑。
所以在指南里,你会频繁看到BillAction、BillVO、BillManage这些类。举个例子,我要在报销单保存之前做一次金额上限校验,步骤是:
- 新建一个类继承
BillAction。 - 重写保存动作对应的方法,比如
doAfterSave或doBeforeSave。 - 在这个方法里拿到单据数据,做校验或加工。
- 通过动作注册,把按钮和这个Action绑定起来。
写出来大致是这个感觉:
public class ReimburseBillAction extends BillAction { @Override protected void doBeforeSave(ManageableBill bill) throws Exception { BaseVO[] vos = bill.getBillVOs(); // 遍历单据内容,做自己的业务校验 } }不要被这些类名唬住。它们的核心逻辑和Spring里的Service层没有本质差别,只是被NC6X封装了一层。你只要记住:"什么样的界面操作对应什么样的Action方法",再配合指南里的动作注册说明,就能很顺畅地写业务代码了。
4. 真正让我印象深刻的几个坑,指南上通常不会写
4.1 元数据发布了,界面却一点不变
这是新人踩得最多的坑。在UAP里把元数据发布成功,数据库表也看到了,但登录系统一看,界面还是老样子,新加字段不显示。
后来排查才发现,模板也有缓存。改完元数据之后,如果模板还是旧版本,前端界面不会自动更新。解决方法是:在模板管理里把对应单据模板重新编译发布,清理前端缓存(包括浏览器缓存和NCHome下的临时文件),再重新登录。
顺带一提,站在不同角色(比如集团和公司)登录,默认加载的模板可能不一样。你改的是公司模板,但登录用的账号匹配的是集团模板,那自然看不到变化。检查模板分配关系,是这类问题里最容易被忽略的一环。
4.2 主子表保存顺序与事务边界问题
我第一次在NC6X上开发带子表的业务单据时,遇到过一个很诡异的现象:子表数据偶尔会丢,或者保存时报主外键约束错误。
后来仔细看后台日志才发现,主子表的保存顺序是平台控制好的,但如果你在doBeforeSave里自己手动去插子表数据,或者在一个不恰当的时间点提前保存了子表记录,就会破坏平台自己的事务顺序,导致数据异常。
这里的原则是:尽可能不要在保存动作里自己做"插入"操作,而是通过修改单据VO数据,让平台统一保存;如果确实要额外写表,尽量在主表保存完成之后(比如doAfterSave)再处理,并且要注意事务的一致性和异常回滚。
4.3 列表查不到数据,十有八九是权限和查询模板的问题
有段时间用户反馈列表里看不到新做的单据,代码没问题,数据在表里也存在。查来查去,发现两个原因叠加了:
一是当前操作员没有该节点的数据权限,NC6X的权限控制是细到数据行的,给你的角色分配了节点权限,不代表你能看到所有人的数据。二是列表查询模板里的字段条件太严,默认查询条件把新数据过滤掉了。
这类问题在指南里分散在"权限管理"和"查询模板"两章,很少有人会把它们联系起来。但实际排查问题的时候,这两个地方必须一起检查。
4.4 遇到问题先看日志,别靠猜
NC6X项目出问题时,我最怕听到的一句话是"我觉得是这里的问题"。线上问题十有八九靠猜是猜不准的。正确姿势是先去看NCHome/logs下的运行日志,按时间点到出错现场,把堆栈信息拉出来。
很多看起来玄乎的问题,比如"按钮点了没反应""数据保存特别慢""界面白屏",日志里都有明确线索。指南里关于"日志配置与查看"的内容,看起来不起眼,实际排错时比什么都好用。搞明白日志级别怎么调、日志目录在哪、什么错误对应什么问题,你的排查速度能快一倍不止。
5. 读《NC6X开发指南.pdf》的正确姿势,给新人的倒序阅读法
5.1 第一遍:跑通"元数据→模板→节点→功能"的最小闭环
我的建议是,拿到这份开发指南后,不要试图全读完,先做一个最小实验:新建一张简单的业务单据(甚至可以用"部门维护"这种极简场景),从元数据定义开始,一路做到节点注册、权限分配、界面打开。
这个过程会把你逼着去查阅指南里的元数据管理、模板管理、节点注册、权限管理这几个章节。等你把这个闭环跑通,你对NC6X的整体认识就已经超过不少做了半年的人。
5.2 第二遍:围绕"单据"补全后台逻辑和接口知识
最小闭环有了之后,再往里面加东西。给这张单据加校验公式、加审批流、加后台Action、加列表查询条件,每一步都从指南里找到对应章节,对照着做。
这时候你会发现,指南里的内容不再枯燥,因为每一段讲解你都能落到刚才那张单据上。单据主表子表的关系不理解?回去翻元数据实体关系。审批流不会配?翻流程配置。外部系统要对接单据?翻接口开发相关部分,注册WebService或REST服务。
以"功能场景"为索引去用指南,比按目录顺序读有效得多。
5.3 第三遍:把它当词典用,而不是当书读
过了前两个阶段,你已经算入门了。之后就是把它放在手边当工具书,遇到问题才翻。
比如不清楚某个按钮事件的触发时机,翻动作相关章节;不清楚某个字段为什么权限控制失效,翻权限数据规则章节。带着问题去读,每次都能有新的收获。到后来你会发现,指南里的大部分内容你都翻过一遍了,但你依然说不出哪一章讲了什么——可这不重要,重要的是你遇到问题的时候,知道去哪一章找答案。
还有个小习惯我觉得特别值钱:每次踩完坑,回到指南里找到对应的章节,用彩色标记笔把坑旁边那句不起眼的话划出来。过一阵子再翻,整本书就成了你自己整理过的实战手册。这一点,比单纯从头到尾读两遍有用得多。
我在带新人时经常说一句话:指南是别人整理好的路,但路上哪里有坑,还是得你自己走一遍才知道。NC6X这套体系,刚接触会觉得抽象,因为它的核心思路是"让业务配置替代代码编写",但你一旦用"最短闭环"的方式把它跑起来,后面所有的功能开发都只是在这个骨架上添砖加瓦。希望这篇内容能帮你少走一些我当时走过的弯路。
本文还有配套的精品资源,点击获取