OpenJweb功能开发实例
(简易审批流功能实现)
王保政
Msn:baozhengw999@hotmail.com
QQ:29803446
Email:baozhengw@netease.com
目 录
3.2定义事务性计划表(wf_work_plan)的字段... 6
说明:本文的图片我就懒得一一贴了,大家感兴趣的话到我的个人资源上下吧,只需要一个积分,这个文档花了我一天的时间写的.
一、 业务需求描述
本文主要讲述如何使用OpenJweb快速开发平台快速定制开发一个简单的单据审批流程,本文采用某电厂事务性计划审批流程作为具体案例来讲解。
电厂的事务性计划每月由各部门的部门计划员填写,填写完毕后由部门计划员提交给分管厂长送审(计划检查人),分管厂长审批通过后,提交给厂计划员审核,厂计划员审核通过后提交给总经理审核,总经理审核通过后由厂计划员发布。其中厂计划员可以代理分管厂长审批计划。任一环节审核拒绝后都可以由计划填写人删除或修改。
二、 关于审批流
2.1 审批流配置
针对以上所述流程,一个事务性计划的具体审批流程见下表:
序
号
| 动作码
| 动作名称
| 前置状态位
| 后置状态位
| 业务描述
|
1 | doCheck1 | 分管厂长审批 | 送审(SendCheck) | 分管厂长审核通过(pass1) | 部门计划员送审计划后,由分管厂长审批 |
2 | proxyPass1 | 代理分管厂长审批 | 送审(SendCheck) | 分管厂长审核通过(pass1) | 当分管厂长因出差等原因无法登录系统,厂计划员可在页面上点代理分管厂长审批按钮 |
3 | doCheck2 | 厂计划员审批 | 分管厂长审核通过(pass1) | 厂计划员审批通过(pass2) | 厂计划员审批分管厂长审批通过的计划 |
4 | doManagerCheck | 总经理审批 | 厂计划员审批通过(pass2) | 总经理审批通过(pass3) | 总经理审批厂计划员审批通过的计划 |
5 | doPublish | 计划发布 | 总经理审批通过(pass3) | 已发布(Publish) | 厂计划员发布总经理审批通过的计划,发布后,所有人都可以看到这个计划 |
6 | doReject1 | 分管厂长审核拒绝 | 送审(SendCheck) | 审核拒绝(Reject)
| 在页面中公用一个审核拒绝按钮,由于系统中可以设置数据过滤器,不同角色进入系统会看到不同状态的数据,例如分管厂长进入系统中只能看到已发布和送审状态的数据,看不到正在由厂计划员或总经理审核的数据,所以不存在审批权混乱的问题。 |
7 | doReject2 | 厂计划员审核拒绝 | 分管厂长审核通过(pass1) | 审核拒绝(Reject)
| |
8 | doReject3 | 总经理审核拒绝 | 厂计划员审批通过(pass2) | 审核拒绝(Reject)
|
下面是平台中配置好的审批流设置页面:
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 303pt" type="#_x0000_t75"><imagedata o:title="1" src="file:///C:%5CDOCUME~1%5Cbzwang%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.jpg"></imagedata></shape>
动作码:
什么是动作码?动作码是在页面中与动作按钮关联的一个标识,当用户在页面中点击一个按钮,页面会将这个动作码及所选记录的ID值传到后台的控制层来处理,例如分管厂长点了“分管厂长审核同意”按钮,页面将此按钮对应的状态码doCheck1和ID传到后台,后台根据动作码doCheck1和当前记录的当前审核状态为SendCheck(送审)做为查询条件,查到对应的后置状态码为pass1(分管厂长审核同意),查到后将所选择的记录的审核状态设置为pass1(分管厂长审核通过)。下面是摘录了事务性计划列表页面的一段代码,其中doCheck('doCheck1')就是通过javascript调用将动作码提交给后台处理。
<authz:authorize ifAnyGranted="AUTH_BUTTON_PLAN_PASS1"><input type="button" name="cmdcheck" value="同意(分管厂长)" class="mybutton" onClick="doCheck('doCheck1')">
</authz:authorize>
2.2 关于简易审批工作流的几个特点
简易审批工作流与OA工作流有很大的不同,简易审批工作流最常用的就是如上文所叙述的单据审批流,与OA工作流不同的是:
(1) 在一个流程节点中,由一个人审批后就可以更改单据的流程状态,不需要多人会签。
(2) 不需要启动一个流程实例也不需要按不同的人生成待办任务列表。简易审批流中,单据本身就可看做一个流程实例,待办任务列表就是按状态位过滤的单据条目。
(3) 关于简易的工作流的流程图,目前用UML的活动图和状态图都不直观,最直观的绘制方式遵循以下要点:
a) 矩形节点表示角色
b) 连线作为动作线而不是条件线(每一个动作线已定义了前置条件和后置条件)
c) 动作描述:动作描述按照角色+动作+结果这三个要素,例如:分管厂长审批通过。
三、 OpenJweb平台开发示例
本章节讲述如何通过OpenJweb快速开发平台来实现事务性计划的维护和简易审批流,实际上,如果只是作为数据增删改查的功能开发,通过OpenJweb平台定制一个功能可以完全不用写代码,只要在平台中定义了表结构,就可以利用平台自动创建数据库表、数据库表对应的Java实体类,及增删改查页面。这样功能的创建工作只要会计算机操作的人都可以去做,那么在具体的企业应用项目的实施中此平台带来的价值是什么?就是大大减少开发人员的人数和开发成本!
下面分析一下事务性计划这个业务对象所具有的字段,包括计划时间、计划内容、主办部门、计划检查人(即分管厂长)、审批状态、创建人、最后修改人等。当事务性计划的字段内容被确定后,我们就要将这些字段的相关信息录入到数据库中,具体操作过程:
3.1 定义事务性计划表(wf_work_plan)
<shape id="_x0000_i1026" style="WIDTH: 414.75pt; HEIGHT: 210pt" type="#_x0000_t75"><imagedata o:title="2" src="file:///C:%5CDOCUME~1%5Cbzwang%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image003.jpg"><font size="5"></font></imagedata></shape>
实体类名必须以org.apache.easframework.core.entity.作为前缀,把表名wf_work_plan中的下划线去掉,并把下划线后的第一个字母大写就是此表的类名,如wf_work_plan对应的类名为:WfWorkPlan,所以实体类的全路径名就是org.apache.easframework.core.entity.WfWorkPlan。
3.2定义事务性计划表(wf_work_plan)的字段
这个功能非常重要,因为此功能定义字段后作为建表的依据,而且还要在这里需要配置好每个表字段的页面属性,包括是否作为查询条件列、是否在编辑页面或列表页面中展示,以及在页面中的输入方式(如直接输入,日期选择,下拉列表,checkbox等),JSP代码生成器会依据这些属性来创建列表页面和编辑页面。下面是字段定义的界面:
<shape id="_x0000_i1027" style="WIDTH: 414.75pt; HEIGHT: 314.25pt" type="#_x0000_t75"><imagedata o:title="3" src="file:///C:%5CDOCUME~1%5Cbzwang%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image005.jpg"><font face="Times New Roman" size="3"></font></imagedata></shape>
上图是一个日期字段的定义,编辑页面输入方式为日期,当设置了输入方式为日期时,生成的JSP页面中对应的字段则能显示日期选择按钮,见下图:
<shape id="_x0000_i1028" style="WIDTH: 414.75pt; HEIGHT: 268.5pt" type="#_x0000_t75"><imagedata o:title="4" src="file:///C:%5CDOCUME~1%5Cbzwang%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image007.jpg"><font face="Times New Roman" size="3"></font></imagedata></shape>
下图定义了一个下拉列表字段,下拉列表既可以设置直接从数据字典中取值,也可以设置从某个表中取出名/值对:
<shape id="_x0000_i1029" style="WIDTH: 414.75pt; HEIGHT: 276pt" type="#_x0000_t75"><imagedata o:title="5" src="file:///C:%5CDOCUME~1%5Cbzwang%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image009.jpg"><font face="Times New Roman" size="3"></font></imagedata></shape>
这样在生成Web页面时,对应的字段就显示一个下拉列表。
关于预设默认值:目前可以预设用户自定义的固定值,当前用户,当前用户所在部门,当前时间等,以后可以补充更多的默认值算法如按某格式的单据流水号生成器。
是否查询条件列选项:当选中此项后,对应的字段会作为查询条件列显示在列表页面的查询条件下拉框中。见下图:
<shape id="_x0000_i1030" style="WIDTH: 415.5pt; HEIGHT: 54.75pt" type="#_x0000_t75"><imagedata o:title="6" src="file:///C:%5CDOCUME~1%5Cbzwang%5CLOCALS~1%5C