zoukankan      html  css  js  c++  java
  • JBPM FAQ

    1.如果在assignhandler 中取得当前的节点:

    ((ExecutionImpl) openExecution).getActivity()
    2.动态创建连接。

    public void createNewTransition(ProcessInstance processInstance ,String startActivity , String endActivity){
            String processDefinitionId 
    = processInstance.getProcessDefinitionId();
            ProcessDefinitionImpl processDefinition 
    =(ProcessDefinitionImpl)processEngine
                .getRepositoryService()
                .createProcessDefinitionQuery()
                .processDefinitionId(processDefinitionId)
                .uniqueResult();
            Execution execution 
    = processInstance.findActiveExecutionIn(startActivity);
            
    if (execution == null) {
                  System.out.println(
    "" + processDefinitionId + "中没有找到startActivity活动名称" + startActivity);
                 }
            ExecutionImpl executionImpl 
    = (ExecutionImpl) execution;
            Activity activity 
    = executionImpl.getActivity();
            ActivityImpl activityFind 
    = processDefinition.findActivity(endActivity);
             
    //判断在流程中是否有这个结点
             if (activityFind == null) {
              System.out.println(
    "" + processDefinitionId + "中没有找endActivity活动名称" + endActivity);
             }
             TransitionImpl transition 
    = activityFind.createOutgoingTransition();
             String transitionName 
    = startActivity + "-to-"+ endActivity;
             transition.setName(transitionName);
             transition.setDestination(activityFind);
             ((ActivityImpl)activity).addOutgoingTransition(transition);
        
             
    //验证
             Execution executionTemp = processInstance.findActiveExecutionIn(startActivity);
                ExecutionImpl executionImplTemp 
    = (ExecutionImpl) execution;
             ActivityImpl activitytemp 
    =(ActivityImpl)executionImpl.getActivity();
             List
    <Transition> transitions = activitytemp.getOutgoingTransitions();
             
    for(Transition transition1 : transitions){
                 System.out.println(
    "transition name"+ transition1.getName());
             }
        }
     

     
     
     

     3.整合spring后如和从AssignHandler获取bean

     把jbpm4与spring整合之后。

    可以在assignmenthandler中通过EnvironmentImpl.getFromCurrent()获得spring中定义的bean。


    在jpdl.xml中,直接设置了class,因此assignmenthandler没有被spring托管,不被spring管理的bean是不会从spring获得依赖的

     4.获取当前流程实例所处的节点名字

     List<ProcessInstance> processInstanceList = executionService.createProcessInstanceQuery().list();
    for(ProcessInstance pi : processInstanceList){
    pi.findActiveActivityNames()
    }

    5.概念 processinstance和execution的区别

    两者是存储在一张表里的,两个接口的具体实现类也是一样的,都是ExecutionImpl。

    区别是,当流程中拥有多个分支并发execution时,处于最顶级的execution就叫做ProcessInstance。

    如果流程中没有并发,只有一条主线,那么这个execution就是processInstance。

    在使用fork分支之后,一个processInstance下就会出现多个execution,每个execution指向对应的分支。

    如果没有分支,就只有一个process instance,它既是execution又是process instance。所谓的process isntance就是没有parent的特殊execution。

    6.从事件中获取Session

    Session session = EnvironmentImpl.getFromCurrent(Session.class);

    7.查询已完成的任务

    historyService中没有提供直接查询已完成任务的途径,需要自己通过hibernate查询HistoryTaskImpl,查询条件为endTime is not null。
    8.获取开始的活动。

     processDefinitionImpl.getInital()就是第一个start活动

    9.execution和task的关系是,task.getExecutionId(),通过task的executionId可以查询到对应的execution.

    10.默认情况下,流程会按照顺序执行,第一个任务结束后才会创建第二个任务

    如果想并行同时发起任务,使用fork join

    11.获取当前活动对应的活动节点,要先通过task的name去查询任务对应的activity,然后获得activity所有的outgoingTransition,然后获得每个outgoingTransition的destination,也就是连线后面的节点了。

    12.获取 TaskImpl task = (TaskImpl) taskService.getTask(taskId);

    13.获取join活动完成的活动的个数,获得processInstance,找到childExecutions,判断有几个状态不是inactive-join。

    14.通过historyService查询HistoryProcessInstance,没有结束时间的,是未完成的。有结束时间的,是已完成的。

    15.Task是Execution执行到TaskActivity创建出来的,task完成后,会触发对应的Execution继续执行。

    16.任务分配后,可以使用taskService.assignTask()进行任务的重新分配。

    17.在监听器中获取任务实例的方法。TaskImpl task = EnvironmentImpl.getFromCurrent(DbSession.class).findTaskByExecution(execution);
    18.任务节点

       * 任务创建
       * 1.创建任务
       *  设置任务参数。
       * 2.设置人员
       *   设置执行人
       *   设置候选人
       *   设置候选组
       *   处理AssignHandler
       * 3.创建历史任务。




     


  • 相关阅读:
    大气漂亮美观的三个网站后台数据管理模板 大大提升你的开发效率
    9个设计师常用的高清图库 不敢配图? 这9个免版权图库牢记心中!
    《PHP制作个人博客》之四:分类添加及前端导航数据用php动态调取
    《全栈营销之如何制作个人博客》之二:php环境安装及个人博客后台搭建 让你的博客跑起来
    《全栈营销之如何制作个人博客》之一:用什么开发语言和CMS系统
    adobe 2020版全家桶免费破解版 最新pr, photoshop ae 免费使用
    三个装修 家具 装饰公司网站模板 大气美观 简单明了的静态模板
    程序员摆地摊能接到活吗?码农地摊卖什么能挣到外快钱?
    phpstorm2020最新版激活方法 永久更新
    五个最适合做博客的开源系统 开源免费大量精美模板使用!
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/1982481.html
Copyright © 2011-2022 走看看