Activiti 7 新特性 以及整合开发(四)

Actitivi 与业务系统整合开发

原理:在这里插入图片描述
业务系统中的Id 与Activiti 的表中 Bussinesskey经i选哪个关联 。

这样可知道是哪个角色进行操作

在这里插入图片描述
这里的Key 就是你存入的主键

Activiti 实现业务系统businesskey整合


/**
   启动流程实例, 并添加进businesskeyAdd
 */
public class BusinessKeyAdd {

    public static void main(String[] args) {
         //1.得到ProcessEngine对象
        ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();


        //2. 得到RuntIMEService 对象
        RuntimeService runtimeService=processEngine.getRuntimeService();

        //3.启动流程实例,同时还要指定业务标识 businesskey
        //第一个参数:是 指定流程定义 key
        //第二个参数:业务标识 businesskey
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday_111", "1001");
 
        //4.输出相关属性
        System.out.println(processInstance.getBusinessKey());
    }
}

Activiti 全部流程的挂起与激活的全部过程

业务流程发生变化 就需要将起流程 挂起 或者激活

/**
 * 全部流程挂起与激活
 */
public class SuspendprocessInstance {

    public static void main(String[] args) {
         //1.得到ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到RepsitoryService
        RepositoryService repositoryService = processEngine.getRepositoryService();

        //3.查询流程定义的对象
        ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery()
                .processDefinitionKey("holiday_111").singleResult();

        //4.得到当前流程定义的实例是否为暂停状态
        boolean suspended = processDefinition.isSuspended();

        String processDefinitionId=processDefinition.getId();
        //5。判断
        if(suspended){
            repositoryService.activateProcessDefinitionById(processDefinitionId,true,null);
            System.out.println(processDefinitionId+"激活");
        }else{
            repositoryService.suspendProcessDefinitionById(processDefinitionId,true,null);
            System.out.println(processDefinitionId+"挂起");
        }
    }
}

Activiti 对单个流程实例进行挂起

/**
 * 单个流程挂起与激活
 */
public class SuspendprocessInstance2 {

    public static void main(String[] args) {
         //1.得到ProcessEngine对象
        ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

        //2.得到runtimeService
        RuntimeService runtimeService = processEngine.getRuntimeService();

        //3.查询流程定义的对象
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
                .processInstanceId("2501").singleResult();

        //4.得到当前流程定义的实例是否为暂停状态
         boolean suspended = processInstance.isSuspended();

        String processInstanceId=processInstance.getId();
        //5。判断
        if(suspended){
            runtimeService.activateProcessInstanceById(processInstanceId);
            System.out.println(processInstanceId+"激活");
        }else{
            runtimeService.suspendProcessInstanceById(processInstanceId);
            System.out.println(processInstanceId+"挂起");
        }
    }
}

与全部挂起的区别 也就是引用的不同 单个的按照id 来进行

Activiti 的任务分配的一些方式

 固定方式 与 UEL 方式

固定方式:

在这里插入图片描述

在properties视图中,填写Assignee项为任务负责人。

UEL 表达式

在这里插入图片描述
在这里插入图片描述

user也是activiti的一个流程变量,user: assignee表示通过调用user的getter方法获取值。
在这里插入图片描述
例子:
将之前的流程重新建立 bpmn 文件 png 文件

Assignee 设置成${assignee0} ${assignee1} ${assignee2}
然后进行 部署
部署完成之后
进行启动

public class ActivitiUEL {

    public static void main(String[] args) {

        //1.得到ProcessEngine 对象
        ProcessEngine processEngine= ProcessEngines.getDefaultProcessEngine();

        //2. 得到RunService 对象
        RuntimeService runtimeService=processEngine.getRuntimeService();

        //3.设置assignee的取值 用户可以在界面设置流程的执行人
        HashMap<String, Object> map = new HashMap<String, Object>();
        map.put("assignee0","pig");
        map.put("assignee1","dog");
        map.put("assignee2","cat");

        //4.启动流程实例,同时还要设置流程的定义的assignee的值
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("holiday000", map);

        //5.输出
        System.out.println(processEngine.getName());

    }
}

然后看表中数据

在这里插入图片描述
数据已存入

在这里插入图片描述
但设置 任务代理人的时候 为表达式 设置的形态 所以成功

监听器 方式

任务监听器式发生对应的任务相关 事件时 执行自定义java 逻辑 或表达式
任务相当事件 包括
在这里插入图片描述
Create: 任务创建后触发
Assignment:任务分配后触发
Delete: 任务完成后触发
All: 所有事件发生后触发

java 逻辑 或表达式:
表达式参考 上边的 UEL

实现简单操作::
例:
在这里插入图片描述
监听 选择事件

选取完成之后
type 填写Class

然后定义监听类,且类必须实现org.activiti,engine,delegate.TaskLister 接口

  public class MyTaskListener  implements TaskListener {

  
    public void notify(DelegateTask delegateTask){
        //这里指定任务负责人
        delegateTask.setAssignee("张三");
    }

有监听类后
Class 选择 式包名 点 类名

注意事项

使用监听器分配方式 ,按照监听器事件去执行监听类的notify 方法 ,方法如果不能正常执行也会影响任务的执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Da.ge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值