【教学分享】金蝶协同二次开发环境搭建
金蝶云社区-云鸡蒜
云鸡蒜
0人赞赏了该文章 5,198次浏览 未经作者许可,禁止转载编辑于2017年06月07日 15:40:55

目 录 金蝶协同二次开发环境搭建一、安装包的下载与安装 1、下载: 2、安装:二、使用工具简介三、Eclipse+OA安装环境的集成四、获取OA源码代码方法 1、反编译 2、源码申请五、完成需求功能开发与替换 1、二开原有功能 2、新增开发功能 3、程序调试六、正式环境验证七、 总结八、FQA问题集锦

说明:为满足客户的个性化需求,OA产品提供二次开发(后称为“二开”)的支持,本文档主要介绍二开环境的搭建,帮助客户如何使用标准的安装包来完成二开环境搭建,本文档适合具有一定开发能力的人员阅读,不会涉及到技术和代码编写等。OA是纯JAVA语言开发,支持的JDK和Tomcat视具体的版本而定OA6.2:JDK1.5+Tomcat5.5OA7.0:JDK1.5+Tomcat6.0OA7.1:JDK1.6+Tomcat6.0由于二开对JDK和Tomcat版本有要求,所以请确定OA的版本后配置相关的基础环境,建议使用安装包自带的JDK和Tomcat版本进行配置

一、安装包的下载与安装1、下载:1.1、金蝶组织人员可以通过云之家的产品下载模块

进行下行对应的版本,本次以OA7.1Windows版本为例

1.2、OA7.1版本为方便伙伴下载,在社区上也发布了金蝶云盘的下载地址,具体社区地址如下:{{{/article/3087383}}}3、为方便其他客户在百度网盘也有外链分享:链接:http://pan.baidu.com/s/1skHXUzj密码:g7d1 2、安装:注意本次使用Windows版本进行演示,下载完成后双击运行,由于安装包使用的是InstallAnywhere2009打包,可能需要JDK1.6以上才能运行,所以需要安装环境中有打包软件的运行环境,注意在安装路径选择时不应该使用有中文或空格的路径,比如安装路径为D:\java_install\kingdeeOA_71

安装完成后的目录如图 :Apusic-6.0-------------------------------------- 金蝶Apusic中间件firstframe-------------------------------------- 主程序jdk--------------------------------------------- 安装包自带JDKTomcat_6.0-------------------------------------- 安装包自带TomcatUninstallerData--------------------------------- 打包工具卸载信息main.html--------------------------------------- 金蝶官网快捷方式use.html---------------------------------------- OA主程序入口金蝶协同办公软件V7.1_InstallLog.log------------ 打包工具安装信息
主程序firstframe下的文件

bin ------------------------------------ 各种启动脚本data ----------------------------------- 系统中用到的文件存储db ------------------------------------- 系统初始化时数据库和升级脚本oaconsole ------------------------------ 补丁工具resources ------------------------------ 系统资源文件webapp --------------------------------- 运行程序
二、使用工具简介开发过程可能使用到的工具包括:反编译工具、Java集成开发环境

反编译工具jd-gui,对一些jar可以进行反编译得到源码

Java集成开发环境Eclipse,开发人员都知道的工具,不介绍
三、Eclipse+OA安装环境的集成OA安装完成后主要关注三个地方,在主程序firstframe文件夹中的resource、webapp、webapp\WEB-INF\lib\firstframe_71.jar。一般来说我们要改的后台文件都存在于firstframe.jar中,但也是因为这样,所以我们要用到反编译工具jd-gui,在后面会介绍怎么获取到要修改的源码,现在先这些放到Eclipse上运行,包括可以单步调试。1、启动Eclipse后先自己新建一个空的web工程,建议在使用安装包自带的JDK和Tomcat,否则可以会造成编译版本不一致而导致启动报错,比如Bad VersionNum异常

2、新建工程完成后再一次确认编译和运行的版本,右键项目名称,打开属性配置面板

3、重点来了,这里关系到开发人员比较关心的单步调试问题。调试的配置方式分两种,你可以把安装包里的所有文件夹按层级关系复制到项目里来,如下图:

4、这样就可以在Eclipse里通过server来启动项目并调试,但比较麻烦的是还需要在server里配置我们特有的启动参数才行。所以我推荐比较好用的方式----“远程调试”,当然这里的远程就是我们本地的安装文件。我们只需要将安装目录的webapp\WEB-INF\lib文件夹复制到工程替换原来的空文件夹就行了。

5、到这里我们的环境就搭建完成,可谓超级简单,那么问题来了,怎么开发和调试呢?可以继续往后面看。
四、获取OA源码代码方法1、反编译由于标准产品将所有的class文件打包成了jar,所以在有些功能开发的时候需要通过反编译来获取到源码,虽然反编译后的源码会有点差别,但肯定不会对运行产生影响。反编译的过程也是很简单,打开jd-gui或者将firstframe_71.jar拖放到jd-gui中,就可以自动打开并获取到源码,比如我们希望获取到BallotTypeManagerController.class的源码。

然后全选右边的代码,复制到工程的src目录下,会自动创建对应的包名,也可以自己手动创建。

需要注意的是,由于某些源码文件比较大,jd-gui不能反编译成功,会导致反编译后的代码出错。或者源码代码存在泛型和一些循环,导致反编译后会有一些错误提示,这个时候需要手动修改这些错误,请参考上下文语境修改。2、源码申请当如上面所说的,有些代码量比较大的文件没办法通过反编译或者反编译后有大量的错误,导致超出手动可修改的范畴,这个时候就就需要申请源码了,这也是最正宗的代码,也能保证代码的精确性,目前公司的策略是需要通过分公司在EAS流程助手中才能发起申请源码的流程,在申请流程中填写简要需求和需要二开的模板,然后安心等着流程的审批完成,最终会给申请人发一封邮件,包含了下载地址和账号、密码等信息,按指引下载就可以轻松获取。
五、完成需求功能开发与替换二开的需求可以分为两种情况:二开原有的功能和新增开发功能包括模块,两个不同的需求开发的方式也不一样。1、二开原有功能二开原有的功能是指在标准产品上对已经存在功能进行开发,以满足客户需求。在这种情况下才需要用到上面说提到的源码反编译或源码申请,得到对应的源码后可以做相应的修改,并编译生成class文件。2、新增开发功能新增开发功能是指在标准产品上没有功能开发,但需要基于原产品上修改,比如在某一个模块下新增一个功能或者新增一个模块等,这里需要注意的是,新增开发不需要申请源码,而且新增模块开发由于许可的限制需要挂载到已购买的模块中,比如我购买了“电子邮件”,但想开发另一套“电子邮件”系统集成到OA,这个时候,新增加的所有类必须放置在cn.firstframe.modules.email2包中,如下的MyEmail2.java类。类似的新增任何一个功能都必须基于现在的已购买的许可下才可以正常访问,否则运行时会提示无权限访问。

以上的email2我们称之为模块简码,具体的模块简码信息通过管理控制台的许可信息中查看。

也可以通过访问的链接查看,比如我当前打开的是“协同审批”模块[u]http://127.0.0.1:7890/oa/modules/workflow/workflowFileinbox.do?method=list&search_classify=1&ismenu=2&left_menu_id=10&toPage=2&pageType=99&fromNavigation=true[/u]其中modules后面的workflow就是对应的模块简码“workflow”
3、程序调试在编写好程序后需要对已经编写的程序进行调试,尤其在程序运行过程中需要了解处理过程的时候。但因为我们使用的不是一个完整的工程,并且也不是在Eclipse直接启动,这就无法通过开发工具来直接启动Debug模式进行调试,所以我们需要用到远程调试。3.1、第一步我们要做的就是在安装路径firstframe/bin/set-server-env.bat启动脚本中添加远程调试命令(端口可以任意指定为可用端口号)[table]
[tr][td=600] -Dcom.sun.management.jmxremote=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8889,suspend=n
如下图所示:

3.2、启动之前安装好的环境,双击运行firstframe/bin/setoaserver.bat启动脚本

,会看到启动信息上有一个提示,已经在8889这个端口添加了监听

3.3、启动完成后在Eclipse上添加远程调试配置,打开DebugConfigurations调试配置项

,添加Remote JavaApplication信息,主要填写IP地址和远程端口,并且点击Debug启动

3.4、加上断点后就可以进行调试了,和完整的工程启动调试步骤一致,并且程序运行的代码会是优先于firtframe_71.jar中的代码


六、正式环境验证在开发和调试完成后的代码,最后的一步就是怎么把这些代码放到正式环境中去执行。编译通过生成的class文件,会根据工程中的设置放到对应的目录中,这里也建议区别二开原有功能和新增开发功能的处理方式。如果是二开原有功能可以将编译好的class文件按照路径重新替换到firstframe_71.jar包中,但注意不要将这个jar解压,只需要用压缩工具打开替换即可。新增开发功能建议放置在安装路径webapp\WEB-INF\classes中,这样可以不最小量的改动标准产品,以减少对原厂服务产生的影响。七、总结对于二次开发最先考虑的问题就是对标准产品产品了影响,这也就导致了不能享受原厂服务,OA产品的维护是通过补丁更新的方式进行,所以二开后的产品可能会受到补丁的影响,如果补丁中存在与二开冲突的文件会将二开的文件替换成补丁中的最新标准文件,所以对于二开后的产品不建议更新补丁,如果必须更新补丁,则需要在更新完补丁并影响到二开功能的时候联系二开人员进行二开内容回迁。本文本的二开指导只是针对与需要改动后台(Java文件)的情况,如果二开的内容只是修改前台(JSP+资源文件)则直接找到对应的文件进行修改,不需要做环境搭建工作。
八、FQA问题集锦1、Q:反编译工具怎么使用?A:文档中使用的反编译工具是独立的程序,可以通过网络下载后,直接双击打开2、Q:在正式环境上运行开发完成的功能,怎么没有效果?A:如果是按照文档的步骤来开发和替换原firstframe_71.jar,则需要查检是否有Tomcat缓存或lib文件夹下是有旧的可运行jar包,比如备份了一个firstframe_7120170607.jar,这种备份是不可行了,需要修改备份文件的后缀名为不可运行的jar文件,例如firstframe_71.jar.20170607