spring boot(九)整合activiti工作流(二)

###前言
上一篇作了一个简单的环境介绍,这里开始自己定义一个工作流。我用的开发工具是idea。

1、定义自己的工作流bpmn文件

  • 安装bpmn插件:
    我用的开发工具是idea,如果你用的eclipse可以直接参考官网的安装方法
    首先下载activti插件- actiBPM
    File - settings-plugins-Browse-Repositories 搜索 actiBPM 双击搜索结果或点击Install plugin安装。
    这里写图片描述
    去掉启动时去掉processes目录的自动检测
    spring boot在启动时会默默去检测processes目录并加载bpmn文件,如果没有那么会报错,这里我想手动部署工作流,所以在application.properties中加上配置,并且删除了processes目录,同时删除了activiti的所有相关表
#启动报错class path resource [processes/] cannot be resolved to URL because it does not exist
spring.activiti.check-process-definitions=false
  • 新建一个activiti工作流文件
    这次建立到dig/process文件夹下,我想在项目启动的时候部署这个工作流或手动部署这个工作流
    这里写图片描述

  • 建立test.bpmn完成打开设计
    这里写图片描述
    idea建立bpmn文件不会生成png图片,所以直接复制这个文件到当前目录改名为test.xml,然后右键打开Diagrams designer ,然后另存为png文件即可。
    这里写图片描述
    这里写图片描述

2、部署定义的工作流

因为我这次没有直接建立到resources\process目录下,所以不会自动部署。需要写一个类手动部署:

public class ActivitiDeployTest extends AbstratApplicationBaseBootTest {

    @Autowired
    private RepositoryService repositoryService;

    //部署流程定义
    @Test
    public void deployementProcessDefinition(){
        Deployment deployment = repositoryService//获取流程定义和部署对象相关的Service
                .createDeployment()//创建部署对象
                .name("test")//声明流程的名称
                .addClasspathResource("dig/processes/myprocess.bpmn")//加载资源文件,一次只能加载一个文件  
                .addClasspathResource("dig/processes/myprocess.png")//
                .deploy();//完成部署
        System.out.println("部署ID:"+deployment.getId());//1
        System.out.println("部署时间:"+deployment.getDeploymentTime());
    }
}

可先启动spring boot,可以看到ac_re_deployment表下没有部署记录。
这里写图片描述
act_re_procdef也可看到一条流程信息
这里写图片描述

###3、Activiti对任务分配的扩展
当分配不复杂时,用户和组的设置非常麻烦。 为避免复杂性,可以使用用户任务的自定义扩展。

assignee属性:这个自定义扩展可以直接把用户任务分配给指定用户。

它和使用上面定义的humanPerformer 效果完全一样。
candidateUsers属性:这个自定义扩展可以为任务设置候选人。

它和使用上面定义的potentialOwner 效果完全一样。 注意它不需要像使用potentialOwner通过user(kermit)声明, 因为这个属性只能用于人员。
candidateGroups属性:这个自定义扩展可以为任务设置候选组。

它和使用上面定义的potentialOwner 效果完全一样。 注意它不需要像使用potentialOwner通过group(management)声明, 因为这个属性只能用于群组。
candidateUsers 和 candidateGroups 可以同时设置在同一个用户任务中。
注意:虽然activiti提供了一个账号管理组件, 也提供了IdentityService, 但是账号组件不会检测设置的用户是否村爱。 它嵌入到应用中,也允许activiti与其他已存的账户管理方案集成。

如果上面的方式还不满足需求,还可以使用创建事件的任务监听器 来实现自定义的分配逻辑:

DelegateTask会传递给TaskListener的实现, 通过它可以设置执行人,候选人和候选组:

public class MyAssignmentHandler implements TaskListener {

public void notify(DelegateTask delegateTask) {
// Execute custom identity lookups here

// and then for example call following methods:
delegateTask.setAssignee("kermit");
delegateTask.addCandidateUser("fozzie");
delegateTask.addCandidateGroup("management");
...

}

}
使用spring时,可以使用向上面章节中介绍的自定义分配属性, 使用表达式 把任务监听器设置为spring代理的bean, 让这个监听器监听任务的创建事件。 下面的例子中,执行者会通过调用ldapService这个spring bean的findManagerOfEmployee方法获得。 流程变量emp会作为参数传递给bean。

也可以用来设置候选人和候选组: 注意方法返回类型只能为String或Collection (对应候选人和候选组):

public class FakeLdapService {

public String findManagerForEmployee(String employee) {
return “Kermit The Frog”;
}

public List findAllSales() {
return Arrays.asList(“kermit”, “gonzo”, “fozzie”);
}

}
脚本任务

描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值