基于OracleADF框架的工数管理系统
2021-09-23李健辉
李健辉
(埃森哲(中国)有限公司 上海市 200072)
1 工数管理系统及OracleADF框架
1.1 工数管理系统架构
(1)受理负责人在接受终端用户的呼叫时,利用本系统的报价注册功能制作概算报价(可以输出概算报价单)。
(2)在上流的PILOT系统中注册对CE的作业做指示处理。
(3)在FITS-CE系统中,从CE(负责修理的人)处登记出差、现场作业的各种时间和。
(4)在估算实绩系统中提取夜间批处理完成的工作。
(5)通过估算实绩系统进行实绩登记→实际成绩批准→实际成果发送。
1.无偿作业:直接在实绩批准画面上承认,并在夜间批量向SAP侧发送实绩。
2.有偿作业:在有偿作业实绩登记画面中登记实际成绩信息,计算请求金额的费用后进行实际工数和费用的登录。
(6)在实际工数以及费用完成后,通过实际成绩批准画面,夜间批量向SAP侧发送数据进行后续处理。
1.2 OracleADF框架
OracleADF是ApplicationDevelopmentFramework的缩写,是端对端的程序开发框架,该框架通过虚拟开发设置和基础架构,能加速构建面向服务的应用程序。例如使用无线网络和桌面应用程序来检索、显示以及更新数据等处理,使开发得到大大的简化。ADF的框架可以分割视图层、控制业务逻辑层和数据接口层三者之间的关系,体现了经典的MVC模式的灵魂。如图1所示。
1.3 框架层
1.3.1 Business Service业务服务层
包括ADF底层接口层(ADFApplicationModule),业务数据访问层(DataAccess)和业务持久层(PersistentBusinessObject)。创建的步骤是先创建和定义Entity对象(EntityObject),接着创建和定义View对象(ViewObject),之后是创建和定义ADF底层接口层。Entity对象是指对象数据库中所有的表或对象关联表结合后的View视图,View对象是根据Entity对象来创建的,它主要用于数据库访问。ADF底层接口层是Business Service业务服务层和中间Model层的接口,其中上述被创建好的View对象需要被定义到ADF底层接口层。通过这样的定义方式可以进行访问下述的中间Model层。
1.3.2 Model层
Model层有两部分(详细参照图1),一是ADFDataControl部分,二是ADFBindings部分。ADFDataConrol部分是在上述介绍的ADF底层接口层中被定义好的View对象,ADFBindings部分主要用于绑定。实际的项目开发过程中Model层几乎没有开发步骤。
1.3.3 Controller层
ADF的Controller层有很多扩充,其中最主要是提供了画面流转图,其目的在于简化整个程序的开发过程。开发过程中开发人员可以直接拖拽需要的各种组件拖入到Controller层内,同时相关的配置信息自动同步更新到画面流转图的相关联的Strutsconfig配置文件,简化开发步骤提高效率。另外被开发人员喜爱的组件是DataPage组件,它主要是创建对象画面并且创建相关联的DataForwardAction,根据业务逻辑开发人员可以覆写创建好的DataForwardAction来扩展功能。
1.3.4 View层
视图View层融入了ORACLE 强有力的UIX 技术,提供了功能强大的开发组件丰富了整个视图层,根据业务需求能够更好的选择相应的组件实现各种功能。其中可视化画面编辑器Jdeveloper被开发人员大力推崇,可以在使用组件面板中加入客户业务需要的特色组件,并自由地定义,编辑和更新对象组件的属性。由于编辑器和代码的同步性,在编辑属性的同时与之相关的代码也会发生变化,大大提高效率减少开发过程的工作。
2 OracleADF框架在本系统中的应用
该系统是使用Fusion Web应用程序的制作和构建的,JDeveloper作为应用程序的开发以及调试工作。JDeveloper提供了若干可用于创建应用程序和项目的模板应用程序。模板应用程序是根据开发各种各样的应用程序所需的基本技术事先构成。为了构建工作环境,在选择最符合需求的模板后,根据需要进行追加预定使用的技术的设定。开发流程步骤如图2所示。
图1:ADF整体架构图
图2:ADF的开发流程步骤
图3:创建工程Model
2.1 创建工程Model
如图3所示。
2.2 创建连接数据库的DataSource
图4:创建DataSource
图5:创建Business Service
如图4所示。
2.3 创建Business Service
Business Service是指连接到数据库,进行数据取得和更新的服务器方面的处理。ADF商务组件是为了创建只在开发者的最小限度的代码描述中可再使用的数据库对应的BusinesssService的技术。开发者可以使用向导和视觉编辑器,在不描述Java代码的情况下创建ADF业务组件服务,还可以扩展核心ADF业务组件类,ADF商务组件服务也使用在应用程序的视图层的ADF模型。下面做成的列子是数据库表的Business Service。如图5所示。
然后就可以可以对作成好的控件进行数据表的字段匹配。
2.4 创建JSF画面(JavaServer Faces)
在ViewController按照设计书采用拖拽控件作成JSF画面。查看自动生成的代码。如图6所示。
2.5 DB数据反映到关联的画面的流程图
如图7所示。
2.6 编写Java逻辑代码
返回到Model,在按钮事件中编写Java逻辑代码实现客户的各种业务需求。
3 工数管理系统难点分析及解决方法
流程:上流系统数据受理→预定工数/实际工数录入→批准→数据送入下流系统。
3.1 上流系统受理
3.1.1 概要描述
使用Oracle的PL/SQL创建业务逻辑的Package,启动服务器上的JobCenter软件调用Package实现每天20 点到早上8点每间隔1个小时把上流的相关数据,21条为单位同步工数管理系统的各个业务表中。
3.1.2 难点分析及解决方法
难点在于系统上线后JobCenter启动时总是发生原因不明的异常。为了解决这个问题,我们从三方面进行了确认,一是确认服务器的环境配置以及JobCenter的参数是否正确。二是确认程序的性能,业务逻辑是从上流系统抽取对象数据更新到本系统的业务表,前期做压力测试时更新处理对性能的影响较小,确认连接上流系统的数据库配置没有问题后针对上流系统的抽出部分SQL语句以及该当SQL语句的实行计划进行分析但是结果还是没有找到原因。三是在上流系统抽出处理的SQL语句附近加输出日志代码在来确认生产环境下看抽数据的情况,结果每次抽到第21条数据时就会出错不能处理了。针对调查出的结果,我们在上流系统抽出处理的SQL语句的抽出条件中加了【ROWNUM < 21】此问题得到解决。但是为什么会发生推测最大的可能就是上流系统的数据库中有处理对象数据件数的设置,很遗憾我们没有权限去查看客户上流系统的服务器,后跟客户确认了服务器情况客户说明上流系统数据库的建立初期时没有留下资料,客户方也没有办法确认。虽然原因不明但是解决了问题,得到了客户的高度好评。
图6:创建JSF画面
3.2 预定工数/实际工数录入模块
3.2.1 概要描述
需要录入信息多,被录入的信息来做工数以及费用的算出的逻辑处理很复杂,被录入的信息组合大约3000种情况。需要录入的信息如下。
(1)关联的作业登录码信息录入;
(2)客户信息自动反映;
(3)发生工数后承担费用的管理信息自动反映;
(4)担当工作的个人信息录入;
(5)相关制品,信息录入;
(6)工作类型的信息录入;
(7)使用部件的信息录入;
(8)发生各种工数信息录入;
(9)发生各种费用信息录入。
图7:DB数据反映到关联的画面的流程图
图8:DB ADF框架问题
3.2.2 难点分析及解决方法
由于需要输入的信息很多,利用JSF开发对象功能画面简化了拖拽控件的方式节省了很多时间。这一点得到了客户的很高的认可。本环节的问题在于ADF框架的问题导致发生系统障害。画面的项目输入值后放置30秒左右被输入的值会变成【0】,并且从可输入的状态变成不能输入的状态。详细如图8所示。
因为这个现象是偶发的,最初虽然我们做了很多方向的调查但是不知道发生的原因。为了再现这个现象重复操作大约用了3天时间才得到一些方向,推测是ADF框架发生数据库的瞬断并且自动清除缓存信息,再次自动进行了数据库的再连接、SQL语句的自动再执行处理导致画面数据发生了变化。通过客户去咨询了OracleADF的技术支持,OracleADF技术部门的担当者回复他们目前没有类似的例子且由于客户的信息安全原因不能提供相应的程序给OracleADF相关的技术部门做调查,所以需要自己调查怎么解决问题。另外这样的现象是偶发的且发生的时间不固定难度很高,所以推测最大的原因应该是ADF的某些对象控件的有特殊的设定而没有去调查后台的数据库相关的设定。后来把控件的相关属性做了调查,发现List一览控件有个【受动化】的属性没有被设置上。尝试着设置好【受动化】的属性并测试了没有在发生控件的值和状态变化。这个问题是在没有OracleADF技术支持的情况自发解决的,虽然用了很长时间但是得到了客户的认可。
3.3 批准模块
3.3.1 为已发生的工数以及费用做批准处理
查询出需要得到承认的已发生的工数以及费用的对象数据做批准/取消批准的处理。还可以对象数据由于特殊原因不需要被承认的处理,此外还可以查看对象数据的相关的信息。
3.3.2 批准者的基准
在实现本机能时,不需要任何前台的处理,后台各种逻辑判断。画图虽然看上去很简单,其实非常的难。特别利用Oracle技术的阶层查询SQL语句。如表1所示。
表1
3.4 数据送入下流系统模块
通过上述3.2到3.3介绍的工数以及各种费用会被输出到下流的系统中,特别是SAP的ERP系统的结算费用的模块。如错误录入信息时,需要联动各个部门联络手动改数据再次输出到下层系统或者总务部门修改账票的数据。
4 系统安全访问设计方案
整个系统由多个层级结构的虚拟网站构成,每个站点可单独按用户或其角色进行访问授权。在单个站点内部,存储信息的文档库和列表(如项目文档库,联系人列表)也可以在库/列表一级,文件夹一级和单个文档/条目一级按用户或角色进行授权。各级管理员可通过定义角色或共享已定义的角色来方便的进行授权设置。
系统支持多种用户认证机制,LDAP,和自带的用户认证机制;可采用HTTPS(The secure hypertext transfer protocol)来传输加密的用户登录信息,加密存储用户的信息。并且加密后的密码存储在上层系统中。
基于系统安全访问控制,我们对访问用户的账户类型进行分类管理。针对内部用户我们通过采用双因素的身份验证方式,保证系统访问安全。
4.1 可靠性
该系统架构能够提供7*24小时的高可靠性。在该种部署模式中,每台服务器(Windows Server,Oracle均通过负载均衡或群集方式排出了单点故障可能。此外,Oracle也提供了完善的数据备份/恢复工具帮助用户快速备份/恢复数据。
4.2 可管理性
系统平台的管理工作全部集中在一个单独的管理中心站点上,用户界面完全基于Web。管理员可通过远程方便的完成对系统的管理。服务器提供了用户访问统计,搜索统计等的数据分析功能,以图表或文件方式帮助管理员了解门户日常使用情况。而且也提供了完善的日志功能,通过对日志的分析,可以获得更详细的分析报表。
5 结论
OracleADF框架减少代码的开发,编程者只需要处理业务逻辑问题。使用起来也很方便。但是同时也存在着一些问题,只能用提供的标准画面不能自主地改变。会使用本框架的开发者少,意味着未来可能会消失。希望以后的开发框架也能这么使用方便,能节省很多时间。本系统上线后,得到了客户的好评。