本来这篇博客应该早一点写,已经过去快两个月了,之前在公司一个项目组开发了基于Activiti流程系统设计。其实技术层面上很简单,就是封装成与项目或者说自身系统相关的一套API,便于其他开发人员使用,让开发人员在使用工作流的时候很方便。本来业务流程和业务就应该解耦合,这里就会涉及到抽象设计(所有业务类继承工作流抽象类),这也是我们在设计业务框架必备的,这里就不啰嗦抽象设计相关的了。
做过J2EE相关业务系统对JBPM并不陌生,今天我们将揭开它的一层面纱,工作流一种抽象的概念,对于工作流引擎的解释请参考百度百科:工作流引擎,我们软件工程师的职责就将抽象编程现实,很多语言都应该有这方面的解决方案,目前也有很多公司专注于这块的解决方案。
Java这块是之前一直是JBPM, Activity与JBPM是什么关系呢bsp;这里就是一些八卦的事情了………。对于我这这种喜欢八卦的人来说,下面是我找到的Activi八卦段落,IT是一种文化,而不再是一种技能…..。就像我们喜欢去阅读一些计算机发展史一样。
对jBPM来说,今年最大的事件莫过于jBPM的创建者Tom Baeyens离开JBoss了。Tom Baeyens离开的具体原因尚不清楚,但他的离开产生了两个结果:一是jBPM的下一个版本jBPM5完全放弃了jBPM4的基础代码,基于Drools Flow重头来过;二是Tom Baeyens加入Alfresco后很快推出了新的基于jBPM4的开源工作流系统Activiti。由此不难推测Tom Baeyens离开的部分原因:JBoss内部对jBPM未来版本的架构实现产生了严重的意见分歧。更加巧合的是12月1日Activiti5刚发布,紧接着12月2日jBPM5就发布了第一个候选发布版本,jBPM与Activiti之间的微妙关系可见一般。
废话少说,上代码,也许这才是实际该干的事情,环境搭建这类似的问题,我就不介绍了。
1、这是Activiti的一些基于Spring的服务注入,因为涉及到保密的原因,与业务相关的代码我是做了部分处理。
/**
*
*
Title: JBPM核心业务抽象类
*
版本:1.0
*
Company:XX信息系统有限公司
*
创建时间:2014-11-13
* @author zuoqinbo
*
部门:软件所
*
修改者:zuoqb
*
修改时间:下午07:06:47
*/
public abstract class JBPMService {
/**
* 流程引擎
*/
@Autowired
protected ProcessEngine ProcessEngine;
/**
* 流程引擎任务服务
*/
@Autowired
private TaskService taskService;
/**
* 流程定义接服务
*/
@Autowired
private RepositoryService repositoryService;
/**
* 流程引擎正在执行服务
*/
@Autowired
private RuntimeService runtimeService;
}
2、开始开启一个工作流程,传入的就是业务单据唯一编 ,这样就可以通过业务编 去查找该工作流程处于哪一环节。
/**
*
*方法说明: 启动流程引擎
*@param
*@return void
*@author zuoqinbo
* @throws Exception
*@throws
*@创建时间 2014-11-19
*/
public void startProcess(String businessKey) throws Exception{
try {
Map
String businessProcessModule = getProcessModule();//流程图变更时,新发起流程模板就选择当前最新的模板
ProcessInstance instance = runtimeService.startProcessInstanceByKey(businessProcessModule,businessKey, variable);//开始流转
Task task = taskService.createTaskQuery().executionId(instance.getId()).singleResult();//第一个节点任务提交
taskService.complete(task.getId());//过了启动环节之后,流程流转到下一个环节
saveDBSY(businessProcessModule,businessKey);//保存到待办事宜信息
}catch (Exception e) {
throw new RuntimeException(“流程引擎启动 错:”+e);
}
}
3、下面这个方法就是流程流转,我理解的也是首次是这样理解流程的,但是不知道是不对的,如有看到这样理解不准确的,请留言。流程继续往下走,要么是True或者是false,就是就是nextProcess()
/**
*
*方法说明:流程流转其实就是往下一个流程的进行,
*不需要进行判断什么状态和什么业务方法进行绑定,传入审批结果和审批意见就行
//子类继承父类,实现其抽象方法,抽象方法可以获取业务Id,业务流程Key 业务类型
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!