NCV5二次开发框架技术红皮书.docx
- 文档编号:16454240
- 上传时间:2023-07-13
- 格式:DOCX
- 页数:37
- 大小:805.70KB
NCV5二次开发框架技术红皮书.docx
《NCV5二次开发框架技术红皮书.docx》由会员分享,可在线阅读,更多相关《NCV5二次开发框架技术红皮书.docx(37页珍藏版)》请在冰点文库上搜索。
NCV5二次开发框架技术红皮书
NC二次开发框架
技术红皮书
NC5.0
用友NC-总体设计部,平台技术部
2018-10-14
目录
第一章前言1
第二章身份认证2
1.概述2
2.实现说明2
2.1后台认证接口2
2.2前台预处理接口3
2.3前台认证结果信息接口3
2.4配置工作3
3系统登录身份认证相关包及类4
第三章单点登录方案(V5.0)6
1概述6
2过程说明6
3URL格式7
4配置文件7
第四章功能按钮及UI事件扩展方案(V5.011)8
1.概述8
2.菜单扩展按钮的相关类8
3.扩展类FuncMenuExtends9
4.配置文件funcMenuExtConfig.xml12
5.开发过程简介13
5.1编写FuncMenuExtends子类13
5.2在funcMenuExtConfig.xml文件中进行配置15
5.3运行程序15
6.附录:
供应链产品按钮扩展17
方案介绍17
支持二次开发按钮扩展功能单据清单(已覆盖全部核心单据)18
优劣势分析19
第五章UI界面API的发布规范(V5.02后,仅参考)20
1.概述20
2.发布UI-API接口的步骤21
2.1定义接口21
2.2实现接口21
2.3填充配置文件22
2.4提供接口说明文档23
第六章业务组件服务扩展开发(V5.0)24
1.概述24
2.财务产品单据组件关键方法扩展接口方案24
2.1收付产品方案24
2.2财务开发部改进24
第七章UAP开发资源(V5.0)26
1.UI端环境变量26
2.发送邮件27
3.发送待办消息28
第一章前言
NC作为一个平台化的ERP产品,在提供完整的系统管理和应用功能同时,为满足本地化、行业化甚至是企业化的个性应用,设计了一个开放的实现框架,来满足二次开发过程中对标准应用的扩展、替换。
目前,这个框架包含了系统管理安全方案、UI端按钮扩展及事件方法扩展方案、业务组件服务扩展方案三部分,包含的主要内容是一系列的插件接口和API。
这个框架与二次开发产品安装部署方案(详见《NCV5-安装盘配置与升级技术红皮书》有关内容)结合,共同组成了NC二次开发解决方案。
这个方案定位于实现3个目标:
降低二次开发难度,减少并最终杜绝对标准产品源代码的修改;二次开发产品与标准产品开发和成果部署上的分层隔离;标准产品升级兼容二次开发成果。
NC二次开发解决方案势必在以后版本中持续地完善,目前各详细方案分章节说明如下。
需要说明的是,在该框架推出之前,NC也曾基于项目要求提供了一些中间方案,基本情况收录相关章节附录中。
这些方案为兼容项目成果还保留,但在新项目二次开发中已经不准使用,并在今后的版本中逐渐取消支持。
注:
本文针对二次开发描述也同样适用于行业开发过程中,在标准产品基础上进行的行业定制。
第二章身份认证
1.概述
NC系统面向高端企业集团ERP应用的产品定位决定了其系统安全的重要性,系统安全性包括登录身份的认证和各种数据的安全。
NC系统对数据安全性的处理不在本文描述,本文主要阐述系统登录的身份认证的安全性及认证方式的实现。
NC系统默认的身份认证方式是基于静态密码的认证方式。
目前,在身份认证领域,也有许多厂家能提供更为安全可靠的认证方式,如CA认证,动态密码认证。
为了提高NC系统本身在登录认证方面的安全性,NC系统提供了一套用于集成第三方认证方式的接口,能够方便地将更为安全的身份认证方式集成到NC系统中,进而加强NC系统在登录时身份认证的安全性。
2.实现说明
NC系统的身份认证集成接口主要包含:
●后台的认证接口:
nc.bs.sm.identityverify.IAMode
●前台的预处理接口:
nc.bs.sm.identityverify.IloginPretreatment
●前台的认证结果消息接口:
nc.bs.sm.identityverify.IloginResultMessage
一般实现某种身份认证方式即实现上述接口。
2.1后台认证接口
后台的认证接口是实现一个身份认证方式必须要实现的一个接口,不过在实际的代码中,一般都是继承nc.bs.sm.identityverify.AbstractIAMode抽象类,它实现了nc.bs.sm.identityverify.IAMode接口。
程序员需要实现verify方法,在该方法中进行用户的身份认证。
intverify(nc.vo.sm.login.LoginSessBeanlsb,nc.vo.sm.UserVOuserVO);
参数:
LoginSessBeanlsb主要存储登录用户的一些信息,如用户编码,用户密码,或其他一些信息(可以有LoginSessBean.put()方法和LoginSessBean.get()方法存取)。
UserVOuserVO利用lsb中的公司信息和用户编码信息在数据库中查找到的nc用户对象,包含了nc用户的信息。
返回值int表示身份认证的结果,如果身份认证成功,请返回nc.vo.sm.login.ILoginResult.LOGIN_LEGALIDENTITY。
如果不合法,返回其他自定义的int值,但是自定义的返回值必须大于200(小于200的返回值分配给系统自己使用)
nc.bs.sm.identityverify.AbstractIAMode类有一个方法是ObjectgetParameter(Stringkey),它的是返回定义在配置文件中的参数,关于配置文件,后面将有描述。
2.2前台预处理接口
前台的预处理接口是在前台运行的,它提供了在调用后台认证功能之前进行一些预处理操作的机会。
例如一般在实现某种CA认证方式时,需要从usbkey中读取用户信息,以及对挑战码进行签名的操作等等,并将这些挑战码传输到后台,供身份认证使用,此时即可实现该接口。
该接口定义了一个方法:
voidpretreatment(LoginSessBeanlsb)throwsException,在该方法中进行上述的操作,一些需要传输到后台的信息利用lsb传递,例如用户编码,需要利用lsb.setUserCode方式设置。
对于其他用于外系统进行认证的数据,如挑战码,应该使用lsb.put方法设置到lsb中,供后台
调用
voidpretreatment(nc.vo.sm.login.LoginSessBeanlsb)throwsException
参数:
LoginSessBeanlsb这里的lsb主要用来存储一些后台认证需要的数据,可以使用lsb的相关方法进行设置,这个lsb对象将传递给后台的认证方法verify(nc.vo.sm.login.LoginSessBeanlsb,nc.vo.sm.UserVOuserVO);中的参数lsb。
异常:
出现一些需要终止操作的异常,可以抛出
如果认证方式中不需要前台的预处理过程,可以不实现该接口。
2.3前台认证结果信息接口
前台的认证结果消息接口nc.bs.sm.identityverify.IloginResultMessage的作用主要在于,在我们的认证方法中返回的是int型数据,不能直接反馈给用户,故利用此接口进行认证结果的映射,将int型的认证结果翻译为用户能够理解的文字信息,这些文字信息将提示用户认证失败的原因。
该接口方法定义如下:
StringgetResultMessage(intintResult);
参数:
intintResult该值由后台认证接口方法返回,
返回值String返回给用户的对应intResult的提示文字
2.4配置工作
对于代码开发来说,实现上面的接口后,就完成了开发工作。
紧接着就是需要进行一些配置工作,即可在NC系统中使用新的身份认证方式。
对于nc3x的版本
配置文件为./ierp/bin/IAConfig.xml,它的一般格式为:
(例子)
对于nc5x的版本
配置文件为./ierp/bin/IAConfig.xml,它的一般格式为:
(例子)
对于
对于
对于
3系统登录身份认证相关包及类
nc.bs.sm.identityverify
|——AbstractIAMode#身份认证方式抽象类,一般实现某种认证方式都要实现该类
|——IAConfigFileTool#读写身份认证配置文件的工具类
|——IAConfSetupDlg#和IASetupFrame类一起配置身份认证配置文件
|——IAMode#身份认证方式接口类,由AbstractIAMode实现
|——IAModeFactory#在系统运行时根据身份认证配置文件构造一个认证方式对象
|——IASetupFrame#配置身份认证配置文件的工具
|——IASetupPanel#配置身份认证配置文件
|——StaticPasswordIAMode#系统默认的静态密码认证方式类,它实现了AbstractIAMode
nc.ui.sm.identityverify
|——DefaultLoginPretreatment#默认的登录预处理类
|——IloginPretreatment#登录预处理接口类。
凡在登录前需做的工作可实现该类来完成
|——>IloginResultMessage#登录返回信息类。
根据返回的int值得到string值。
nc.vo.sm.identityverify
|——IAConfigFileVO#对应于身份认证方式配置文件的vo类
|——IAConfVO#对应于一种身份认证方式的vo类
|——IAContext#身份认证上下文类,可以通过该类获取身份认证方式需要的参数
|——IAParameterVO#对应于身份认证方式的参数vo类
nc.vo.sm.login.LoginSessBean的相关方法:
方法名称
方法描述
get(String)
获取通过put方法设置的属性值
put(String,Object)
设置key-value属性值对
getPk_crop()
获取公司主键值
setPk_corp(String)
设置公司主键值
getUserCode()
获取用户编码
setUserCode(String)
设置用户编码
getPassword()
获取用户密码
setPassword(String)
设置用户密码
nc.vo.sm.UserVO的相关方法
方法名称
方法描述
getPrimaryKey()
获取用户主键值
getUserCode()
获取用户编码
getUserName()
获取用户名称
getUserPassword()
获取用户密码
第三章单点登录方案(V5.0)
1概述
登录方案示意图如下:
2过程说明
2.1当客户端用户希望进入NC系统时,首先向外部的认证系统提交请求。
2.2由外部认证系统向nc服务器注册客户端的登录信息,这些信息是nc系统所必需的信息。
可以通过一个随机的键值key来索引登录信息。
2.3客户端将通过该键值来进入nc系统。
即客户端将向nc应用服务器提交其键值。
nc服务器将利用该键值从注册中心中获取登录信息(同时注销注册信息)。
然后利用这些登录信息登录到NC系统。
2.4超时处理:
注册的登录信息有其生命期,超过生命期的注册信息将会被清除。
客户端只能在超时以前登录nc才有效,否则不能进入nc系统。
超时的值在配置文件中进行配置
3URL格式
3.1注册用的URL
外部系统服务器利用此url向nc服务器注册登录信息。
该URL的基本格式为:
http:
//localhost/service/RegisterServlet?
key=111111&usercode=1
注:
usercode和key是必须的。
key值为注册登录信息的键值,必须保证唯一。
在这个url后面还可以提供一些附加参数
accountcode用于指定登录的账套
pkcorp用于指定登录的公司
workdate用于提供登录日期,默认为NC服务器当前日期
language用于提供登录的语种,默认为简体中文。
height客户端分辨率的高度值
width客户端分辨率的宽度值
3.2登录用的URL
外部系统服务器注册完毕后,返回客户端该url,使客户端重定向到该url,实现登录NC
http:
//localhost/login.jsp?
key=111111
注:
其中key的取值和注册时的值一致
4配置文件
文件ierp\bin\exterior.xml用于配置在单点登录中能够注册登录信息的主机ip和注册信息的超时值。
这些配置都是出于对安全的考虑,因为只有在该文件中配置的主机才能向nc服务器注册登录信息。
exterior.xml的内容为:
xmlversion="1.0"encoding='gb2312'?
>
第四章功能按钮及UI事件扩展方案(V5.011)
1.概述
在具体的项目中,对于已有的产品,往往会有一些新的需求。
其中就包含了对已存在的功能节点扩展菜单功能的需求。
比如需要在某个节点上增加一些菜单按钮来响应新的功能。
在以前的产品中,由于没有对菜单按钮扩展的支持,二次开发的程序员们不得不将产品中的一些相关类的逻辑进行修改来达到要求。
但这就给产品的维护和升级带来了问题与麻烦。
因此,急切地需要我们的产品中提供对功能节点菜单扩展的支持。
以满足在不修改现有代码的情况下,二次开发的程序员们能方便地扩展功能节点的菜单功能。
对于二次开发扩展功能节点菜单按钮的需求,在NC5.011的版本中,我们提供了支持,下面的内容将讲述怎样来扩展功能节点的菜单按钮功能。
2.菜单扩展按钮的相关类
如上图所示,二次开发的程序员们在扩展菜单按钮时,所需要关心的只有两个东西:
FuncMenuExtends类和funcMenuExtConfig.xml文件。
FuncMenuExtends类是一个抽象类,它定义了一些事件回调方法以及一些常用方法;funcMenuExtConfig.xml文件则配置了功能节点和扩展类的匹配关系。
3.扩展类FuncMenuExtends
FuncMenuExtends类是一个抽象类,全路径名为nc.ui.sf.menuext.FuncMenuExtends,其中定义了许多回调方法,系统将在不同的时机调用相应的方法,另外的一些方法则提供了一些方便的功能,让二次开发的程序员们调用。
下面将详细介绍每一个方法:
●postUIInit方法
publicvoidpostUIInit()
该方法是在节点刚刚被打开,toftpanel的实例被构建完成后调用的,设置此方法的目的是提供一个机会让二次开发进行一些额外的界面初始化的功能。
系统默认为空操作。
●deExtendsAction方法
publicabstractvoiddoExtendsAction(ButtonObjectbo)
该方法是一个抽象方法,子类必须实现它。
它响应扩展按钮(现在一个功能节点上的菜单按钮按照来源分为两种,一种是系统默认定义的那些按钮,我们称为“系统默认按钮”,另外一种是二次开发程序员扩展所增加的那些菜单按钮,我们称其为“扩展按钮”)的点击事件,即当最终用户在节点界面上点击了一个扩展按钮时,系统会回调该方法。
通常在该方法类根据不同的按钮实现对应的响应逻辑。
●addExtendsMenus方法
publicabstractvoidaddExtendsMenus(ArrayList
该方法是一个抽象方法,子类必须实现它。
它主要是实现将扩展按钮增加到功能节点菜单上去的功能。
系统在设置功能节点的菜单之前回调该方法,传递的参数为一个ArrayList对象,该对象中包含了系统默认按钮,二次开发程序员只要将扩展按钮增加到这个对象中,即可将扩展按钮增加到界面上。
●preDoneSysDefMenuAction方法
publicbooleanpreDoneSysDefMenuAction(ButtonObjectbo)
该方法是在最终用户点击了一个系统默认菜单时,在响应其默认的处理逻辑之前调用的,其返回一个boolean值来确定事件是否继续执行,返回true,将继续执行其默认的处理逻辑以及回调postDoneSysDefMenuAction方法,返回false,将终止事件的执行。
一般来说二次开发程序员可以在此方法类增加一些额外的校验逻辑。
●postDoneSysDefMenuAction方法
publicvoidpostDoneSysDefMenuAction(ButtonObjectbo)
该方法是在最终用户点击了一个系统默认菜单时,在其默认的处理逻辑调用完成之后调用的。
一般来说二次开发程序员可以在此方法类作一些额外的界面状态处理,例如可以设置某些扩展按钮的状态。
●getToftPanel方法
publicToftPanelgetToftPanel()
该方法返回所对应的ToftPanel实例,以方便二次开发程序员调用ToftPanel上的一些方法,例如获取界面上的某些控件。
●getComponentFromToftPanelByName方法
publicComponentgetComponentFromToftPanelByName(Stringname)
该方法是根据控件的名称从节点界面(ToftPanel)上获取对应的控件。
提供该方法是为了方便二次开发程序员获取节点界面上的某个控件的引用。
如果没有找到,返回null值。
如果存在多个控件名称相同时,返回第一个找到的控件。
●getComponentsFromToftPanelByClass方法
publicComponent[]getComponentsFromToftPanelByClass(Classcls)
该方法是根据Class类型从节点界面上获取满足条件的控件。
返回值为Component数组。
提供该方法可以方便地通过控件的类型获取功能节点界面上的空间引用。
如果没有找到,返回长度为0的数组。
●getButtonObjectByCode方法
publicButtonObjectgetButtonObjectByCode(Stringcode)
该方法是根据菜单按钮的编码来获取菜单按钮BO的实例引用,如果没有找到,返回null值。
例如在需要对一个BO设置状态时使用。
●updateButton方法
publicvoidupdateButton(ButtonObjectbo)
该方法提供更新某个菜单按钮界面状态的功能。
一般在设置了ButtonObject对象的状态后,都需要调用该方法来通知界面更新状态。
●updateButtons方法
publicvoidupdateButtons()
该方法提供更新所有菜单按钮界面状态的功能。
一般在需要通知界面更新所有菜单按钮状态时调用此方法。
●lookup(StringinterfaceClassName)
publicObjectlookup(StringinterfaceClassName)
功能节点对二次开发提供的api是通过接口提供的,通过该方法,可以获取一个对应接口的实现类实例,以便于二次开发程序员调用功能节点的API。
如果没有找到,返回null。
●mouseClicked方法
publicvoidmouseClicked(MouseEvente)
在ToftPanel界面上某个控件发生了鼠标点击事件时,系统将会回调该方法。
子类应该根据事件源来分别处理。
●mousePressed方法
publicvoidmousePressed(MouseEvente)
在ToftPanel界面上某个控件发生了鼠标按下事件时,系统将会回调该方法。
子类应该根据事件源来分别处理。
●mouseReleased方法
publicvoidmouseReleased(MouseEvent
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NCV5 二次开发 框架 技术 红皮书