logo资料库

JBPM基于Spring系统工作流平台整合(三).pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
JBPM基于基于Spring系统工作流平台整合 5-流程定义和部署 流程定义和部署 系统工作流平台整合(三三) 首先描述一下要实现的工单。 以请假单为例,提交请假单给所在的项目经理,项目经理审批后,如果大于等于40小时的给人力资源审核,然后给部门经理 审核,小于40小时直接部门经理审批,审批完后交由总经理审核。 流程定义 jBPM流程模型定义需要用eclipse插件,必须用eclipse,不能用myeclipse插件,否则流程设计器无法使用。 把\jbpm-jpdl-3.2.3\designer\designer\jbpm-gpd-feature\eclipse目录下的两个文件夹(不包括links文件夹)里的内容copy到 Eclipse安装目录下对应的目录里。 其中processdefinition.xml为流程定义文件,gpd.xml为节点的坐标,processimage.jpg为流程定义生成的图像文件。 请假单流程模型有以下节点: 一个开始节点 一个结束节点 五个任务节点 五个decision节点
流程模型定义的Description 上写清楚该工单的中文名称,作为流程定义模型的解释补充。 每个Task Node新建一个任务 尽管一个任务节点可以新建多个任务,一般来说只建一个任务。 以变量方式制定参与者 Decision节点 根据条件判断控制流程扭转的走向,主要是进行变量设置 如果有条件变量控制的,直接在XML中定义编写,如下图所示:
流程定义部署 将流程定义文件包括gpd.xml、processdefinition.xml以及processimage.jpg三个文件打包成Zip包文件。 否则流程图显示不出来,一定要将三个文件打包部署。 附:JBPM 常用表 JBPM_PROCESSDEFINITION 流程定义表 JBPM_NODE 流程节点表 JBPM_TASK 任务表 JBPM_TRANSITION 流程转向表 JBPM_ACTION 流程动作action记录表 JBPM_DECISIONCONDITIONS 结果条件表 JBPM_EVENT 流程事件表 处理进入或者离开事件  JBPM_EXCEPTIONHANDLER 异常处理表 JBPM_MODULEDEFINITION 模块定义表 JBPM_DELEGATION 委托表 JBPM_SWIMLANE 泳道表 JBPM_PROCESSINSTANCE 流程实例表 JBPM_TOKEN 令牌表 JBPM_TASKINSTANCE 任务实例表 JBPM_VARIABLEINSTANCE 变量实例表 JBPM_SWIMLANEINSTANCE 泳道实例表  6-系统基于 系统基于JBPM开发开发 特别说明:其实在开发过程中主要就是调用以下接口,因此只要遵循WFMC标准的工作流引擎,可以轻松切换,比如协同的 Synchroflow,整个系统切换只需要1周左右的时间(系统整体设计要考虑充分),仅仅是更换流程引擎底层接口而已。因为系 统充分考虑到各个工作流平台的共性,而通过系统的中间层屏蔽掉各工作流平台的差异性。 读者可能注意到前文所描述的WFMC图,需要强调一点,系统调用工作流API接口完全通过中间层设计达到完美整合,但是工 作流调用系统接口,限于每个工作流平台具体的差异化,有一定的整合工作量,这个无法回避。 有点凌乱,呵呵,欢迎大家进行交流,共同进步。 1.1.创建流程实例 //创建流程实例,创建流程实例必须以流程模型定义的名称,因为流程每部署一次, //对应的最新的流程定义ID就会变化 WfProcessIns wfProcessIns = wfManageService.createWfProcessIns("LeaveProcess");     // 工单字段必须存储流程实例的ID,以根据流程实例ID获取相应的工单     wsLeave.setProgressInstanceId(wfProcessIns.getProcessInsId());   
1.2.启动流程实例 //启动流程实例 wfManageService.startWfProcessIns(wfProcessIns.getProcessInsId()); 1.3.更新全局或者节点变量 //变量以HashMap方式 //变量的Value都以String的方式传递 HashMap varMap = new HashMap();     varMap.put("manageroper", "approve"); varMap.put("leavedays", "60");     //更新相关变量 wfManageService.setRelevantVariable(wsLeave.getProgressInstanceId(), varMap); 1.4 完成任务实例 //完成任务 //完成任务之前,如果有变量要更新,则在完成任务之前调用更新变量的方法 wfManageService.completeWfTaskIns(wfTaskInsId); 1.5.获取待办任务 //获取待办任务列表 List wfTaskInsLs = wfManageService.getWfTaskInsLsByUserId(String.valueOf(this.getCurrentUser().getId())); 1.6.流程监控 /jbpmProcessImageServlet?processInsId=XXX 系统调用JBPM接口方式 通过UNICALL系统定义的工作流中间层接口访问,完全屏蔽掉JBPM的个性化差异。 举例: //创建流程实例 WfProcessIns wfProcessIns = wfManageService.createWfProcessIns("LeaveProcess"); 模型调用系统接口方式 通过模型JPDL定义的ActionHandler方式,通过UNICALL系统ServiceFactory方式调用系统接口。 抽象调用的Handler Action,比如消息通知、结束后更新工单状态。 举例: 在模型定义中引用即可,具体代码如下: /**  * 流程实例完成进行数据归档等等  * @author Wang YiSong  */ public class CompleteProcessInsHandler implements ActionHandler {     private static final Log log = LogFactory.getLog( CompleteProcessInsHandler.class);     public void execute(ExecutionContext executionContext) throws Exception {          log.debug("=====Action=======testEventHandler.execute()==");         ProcessInstance pi = executionContext.getContextInstance().getProcessInstance();         log.debug("process instance id" + pi.getId()); …… } 组织简介 | 联系我们 | Copyright 2002 ® UML软件工程组织 京ICP备10020922号 京公海网安备110108001071号
分享到:
收藏