activiti-流程引擎(4)

1. 组任务

在这里插入图片描述
在之前的例子里面是用到了assignee下面介绍另外的两个

  • Candidate-users 候选人
  • Candidate-groups 候选组

1.1 Candidate-users 候选人

流程图中任务节点的配置中设置 candidate-users(候选人),多个候选人之间用逗号分开。

//注意,一个节点的候选人必须同时指定,不能是指定一两个。
    public static void main(String[] args) {
        String key="myProcess_1";

        String resource = "activiti.cfg.xml";
        ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(resource);
        ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
        RuntimeService runtimeService = processEngine.getRuntimeService();
        HashMap<String, Object> var = new HashMap<>();
        /*
        指定全部
        */
        var.put("user1","zhangsan");
        var.put("user2","lisi");
        var.put("user3","wangwu");
        runtimeService.startProcessInstanceByKey(key,var);
    }

在这里插入图片描述
这里是通过表达式的方式来指定的,也可以直接写死在里面。

1.2 组任务办理流程

  • 查询任务,通过候选人。
  • 声明自己为次任务的 办理人
  • 查询自己需要办理的任务
  • 完成任务

1.3 组任务归还流程

  • 如果讲自己变为任务的办理人,又不想办理任务,就可以归还任务。自己又再次变为任务的候选人。

1.4 其余流程

  • 可以将此任务分配给他人。让他成为任务的办理人

2 示例

eg:

    public static void main(String[] args) {
        String key="myProcess_1";

        String resource = "activiti.cfg.xml";
        ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(resource);
        ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
        RuntimeService runtimeService = processEngine.getRuntimeService();
        HashMap<String, Object> var = new HashMap<>();
        //指定候选人。
        var.put("user1","zhangsan");
        var.put("user2","lisi");
        var.put("user3","wangwu");
        runtimeService.startProcessInstanceByKey(key,var);
    }
  • 通过候选人查询任务,zhangsan lisi wangwu 都可以查
  public static void main(String[] args) {
        String key="myProcess_1";

        String resource = "activiti.cfg.xml";
        ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(resource);
        ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
        TaskService taskService = processEngine.getTaskService();

        List<Task> list = taskService.createTaskQuery()//
                .processDefinitionKey(key)//
                  .taskCandidateUser("lisi")//根据候选人查询
                   .list();
        for (Task task : list) {
            logger.info("流程实例id: {}",task.getProcessInstanceId());
            logger.info("任务id:{}",task.getId());
            logger.info("任务负责人:{}",task.getAssignee());
            logger.info("任务名称:{}",task.getName());
        }
    }

在这里插入图片描述

  • 候选人员拾取组任务后该任务. 注意 拾取任务 即使该用户不是候选人也能拾取(建议拾取时校验是否有资格)
    即使该用户不是候选人也能拾取,建议拾取时校验是否有资格 组任务拾取后,该任务已有负责人,通过候选人将查询不到该任务
							 //任务id		 办理人
             taskService.claim(task.getId(), "lisi");//将自己变为任务的办理人
  • 用户查询个人待办任务,并且完成
    public static void main13(String[] args) {
        String key="myProcess_1";

        String resource = "activiti.cfg.xml";
        ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(resource);
        ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery()
                .processDefinitionKey(key)
                .taskAssignee("lisi").singleResult();
        logger.info("流程实例id: {}",task.getProcessInstanceId());
        logger.info("任务id:{}",task.getId());
        logger.info("任务负责人:{}",task.getAssignee());
        logger.info("任务名称:{}",task.getName());
        taskService.complete(task.getId()); //完成任务
    }
  • 归还组任务
    如果个人不想办理该组任务,可以归还组任务,归还后该用户不再是该任务的负责人;
    注意:
    说明:建议归还任务前校验该用户是否是该任务的负责人
    也可以通过 setAssignee 方法将任务委托给其它用户负责,注意被委托的用户可以不是候选人(建议 不要这样使用);
  public static void main13(String[] args) {
        String key="myProcess_1";

        String resource = "activiti.cfg.xml";
        ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(resource);
        ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery()
                .processDefinitionKey(key)
                .taskAssignee("lisi").singleResult();
        logger.info("流程实例id: {}",task.getProcessInstanceId());
        logger.info("任务id:{}",task.getId());
        logger.info("任务负责人:{}",task.getAssignee());
        logger.info("任务名称:{}",task.getName());

        taskService.setAssignee(task.getId(),null);//归还给组任务,也将担保人设置为null
    }
  • 任务交接
    任务交接,任务负责人将任务交给其它候选人办理该任务。
       String key="myProcess_1";

        String resource = "activiti.cfg.xml";
        ProcessEngineConfiguration processEngineConfiguration = ProcessEngineConfiguration.createProcessEngineConfigurationFromResource(resource);
        ProcessEngine processEngine = processEngineConfiguration.buildProcessEngine();
        TaskService taskService = processEngine.getTaskService();
        Task task = taskService.createTaskQuery()
                .processDefinitionKey(key)
                .taskAssignee("lisi").singleResult();
        logger.info("流程实例id: {}",task.getProcessInstanceId());
        logger.info("任务id:{}",task.getId());
        logger.info("任务负责人:{}",task.getAssignee());
        logger.info("任务名称:{}",task.getName());

        taskService.setAssignee(task.getId(),"wangwu");//归还给组任务,也将担保人设置为null

网关 (这种看看概念型的东西看看官网就好了)

1. 排他网关

排他网关(也叫异或(XOR)网关,或叫基于数据的排他网关),用来在流程中实现决策。 当流程 执行到这个网关,所有分支都会判断条件是否为 true,如果为 true 则执行该分支, 注意,排他网关只会选择一个为 true 的分支执行。(即使有两个分支条件都为 true,排他网关也会只 选择一条分支去执行)
所有的条件都不满足就抛出异常。
设置分支条件时,如果所有分支条件都不是 true,报错:
org.activiti.engine.ActivitiException: No outgoing sequence flow of the exclusive gateway ‘exclusivegateway1’ could be selected for continuing the process
at org.activiti.engine.impl.bpmn.behavior.ExclusiveGatewayActivityBehavior.leave(ExclusiveGatewayActivit yBehavior.java:85)

2. 并行网关

并行网关允许将流程分成多条分支,也可以把多条分支汇聚到一起,并行网关的功能是基于进入和外出顺序流的:

  • fork分支:
    并行后的所有外出顺序流,为每个顺序流都创建一个并发分支。
  • join汇聚:
    所有到达并行网关,在此等待的进入分支, 直到所有进入顺序流的分支都到达以后, 流程就会通 过汇聚网关。
    注意,如果同一个并行网关有多个进入和多个外出顺序流, 它就同时具有分支和汇聚功能。 这时, 网关会先汇聚所有进入的顺序流,然后再切分成多个并行分支。
    与其他网关的主要区别是,并行网关不会解析条件。 即使顺序流中定义了条件,也会被忽略。

3. 包含网关

包含网关可以看做是排他网关和并行网关的结合体。 和排他网关一样,你可以在外出顺序流上 定义条件,包含网关会解析它们。 但是主要的区别是包含网关可以选择多于一条顺序流,这和并行 网关一样。
包含网关的功能是基于进入和外出顺序流的:

  • 分支:
    所有外出顺序流的条件都会被解析,结果为 true 的顺序流会以并行方式继续执行, 会为每个顺序流创建一个分支。
  • 汇聚:
    所有并行分支到达包含网关,会进入等待状态, 直到每个包含流程 token 的进入顺序流的分支都 到达。 这是与并行网关的最大不同。换句话说,包含网关只会等待被选中执行了的进入顺序流。 在 汇聚之后,流程会穿过包含网关继续执行。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
activiti-eclipse-plugin是一个用于在Eclipse中集成和使用Activiti工作流引擎的插件。Activiti是一个开源的Java工作流引擎,它提供了一个完整的工作流管理解决方案,用于在企业应用中设计、执行和管理各种类型的工作流程。 使用activiti-eclipse-plugin,开发人员可以在Eclipse中方便地创建、编辑和部署Activiti流程定义文件。该插件提供了一个可视化的图形编辑器,可以通过拖拽和连接不同的活动元素(如任务、网关、事件等)来定义工作流程。开发人员还可以在插件中设置和配置各种属性,如任务分配、流程变量、事件监听器等。 activiti-eclipse-plugin还提供了与Activiti引擎的无缝集成。开发人员可以在Eclipse中运行和调试Activiti流程实例,查看流程执行的状态和变量。通过插件中的任务列表,开发人员可以管理和处理工作流程中的各种任务,并与其他系统进行集成。 此外,activiti-eclipse-plugin还提供了一些辅助工具和功能,如流程图导出、流程定义验证、任务候选人管理等。这些功能可以帮助开发人员更好地使用Activiti引擎,并提高工作流程的开发效率和质量。 总而言之,activiti-eclipse-plugin是一个强大的工具,可以帮助开发人员在Eclipse中使用Activiti工作流引擎,快速开发和管理各种类型的工作流程。它提供了方便的图形编辑器、流程运行调试功能和其他辅助工具,使开发人员能够更加轻松地使用Activiti来实现复杂的工作流应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值