Activiti简介(学习总结一)

一、介绍

activiti是使用命令模式设计基于bpmn2.0的一款开源工作流引擎。

工作流简单举例:提交请假申请->经理审批->结束。这就是一个简单流程。activiti支持用户自定义流程。配置各个流程对应审批人,表单等数据,较为灵活。

二、简单流程的实现

原理有兴趣的话可以自己购买书籍,这里先说说实现。

1、引入相关jar包

<dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>6.0.0</version>
        </dependency>

        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-converter</artifactId>
            <version>6.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-model</artifactId>
            <version>6.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-bpmn-layout</artifactId>
            <version>6.0.0</version>
        </dependency>

2、自定义bpmn文件

如果使用idea开发,引入相关插件以便自定义bpmn流程文件。

0727f2cc95633f881f655490e50a52d2538.jpg

右侧是工作流的各种节点不多做解释,这里只是用了start(开始节点),usertask(任务节点),end(结束节点)。配置了一个两部审批的简单流程。保存下来的bpmn文件实质上是xml文件,另存为xml我们可以看下里面的内容。

5bc418bd9092b4ec2d854b569e22212d2e6.jpg

实质内容就是process里面的内容,对应的就是流程定义的各个节点,其中usertask节点下extensionElemnts对应的就是内置表单的内容。

3、部署

这里需要简单介绍下activiti几个比较重要的类。

通过ProcessEngineConfiguration可以获取到ProcessEngine(工作流引擎)。activiti几乎所有的工作都是通过这里来实现。

正常的ProcessEngine我们可以通过xml配置获得,这里图个方便,我就使用createStandaloneProcessEngineConfiguration

ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration
            . createStandaloneProcessEngineConfiguration();
        processEngineConfiguration.setJdbcDriver("org.postgresql.Driver");
        processEngineConfiguration.setJdbcUrl("jdbc:postgresql://localhost:5432/comrobot");
        processEngineConfiguration.setJdbcUsername("postgres");
        processEngineConfiguration.setJdbcPassword("123456");
        processEngineConfiguration.setDatabaseSchemaUpdate(ProcessEngineConfiguration.DB_SCHEMA_UPDATE_TRUE);

        processEngine =  processEngineConfiguration.buildProcessEngine();

 

通过ProcessEngine可以获得几个类,就是我们比较常用的。

RepositoryService:仓储类,主要用于流程定义以及获取流程定义相关的内容。

HistoryService:历史类,主要用于获取流程历史节点及流程的信息

TaskService:任务类,主要用于流程运转及获取实例节点的信息。

RuntimeService:这个类对应的整个流程,一般用来获取开启工作流及流程的定义

IdentityService:主要是各种验证

FormService:用于各个节点下的表单操作

这里的部署主要用RepositoryService

RepositoryService rep = processEngine.getRepositoryService();

        DeploymentBuilder deploymentBuilder = rep.createDeployment();
        Deployment deployment =  deploymentBuilder.name("zyl_test_2")
            .category("请假分类1")
            .addClasspathResource("bpm/rest.bpmn")
            .deploy();

4、运转

这里就是跑流程了,内容也很简单。

Map<String,Object> variables = new HashMap();//设置流程变量

        variables.put("reason","累了,要休息");
        variables.put("applyUserId","qwer");
        variables.put("applyTitle","test_请假申请流程");
        variables.put("applyTime","7天");
        variables.put("applyCtreateTime",new Date());
        variables.put("applyReason","休假");
        variables.put("managerId ","xxx");
        variables.put("category ","请假分类——1");
        variables.put("user","tom");
        variables.put("name","tom");
        processEngine.getIdentityService().setAuthenticatedUserId("startuser");
        ProcessInstance processInstance = processEngine.getRuntimeService()
            .startProcessInstanceById("myProcess_1:1:4",variables);

在流程开始时,可以在startProcessInstanceXXX(XX,XX)方法我们可以放入第二个参数,这里参数是map形式,会以流程变量的形式,绑定在流程实例(ProcessInstance)上。

Map param = new HashMap();
        param.put("type",56);
        processEngine.getTaskService().complete("5017",param);
        processEngine.getTaskService();

上面complete方法就是从一个节点流转到下一个节点,第一个参数对应的当前节点对应的实例ID(taskid),第二个参数是有网关时,流程运转条件。

对于上面的简单例子而言。

startProcess后就会流转firstStep,对应taskid就是5017,这里完成后,就会流转到第二个节点second step对应taskid 5018,这里再一次complate,流程运转就结束了。

转载于:https://my.oschina.net/zyldsy/blog/1856165

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值