Activiti工作流那些事

           本来这篇博客应该早一点写,已经过去快两个月了,之前在公司一个项目组开发了基于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 variable = new HashMap();
            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进行处理,非常感谢!

上一篇 2015年1月4日
下一篇 2015年1月4日

相关推荐