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.创建历史任务。




     


  • 相关阅读:
    Erlang顺序型编程
    [转]理解gen_server behaviour
    [转]Parsing Text and Binary Files With Erlang
    [转]Running Hadoop On Ubuntu Linux (SingleNode Cluster)
    [转]erlang 监督树
    [转]Erlang之IO编程
    [转]分段表
    [转]如何“打败”CAP定理
    [转]A Millionuser Comet Application with Mochiweb
    [转]消息队列软件大比拼
  • 原文地址:https://www.cnblogs.com/yg_zhang/p/1982481.html
Copyright © 2011-2022 走看看