1.       流程定义节点

a)       <processname=”” xmlns=”” key=””, version=””>

b)       name

                        i.             流程定义的名称;

c)        key

                        i.             流程关键字(键值);

                      ii.             如果默认不写key值,就是name值;

                     iii.             在程序通过key值去启动一个流程实例;

d)       version

                        i.             必须在数据库中存入指定版本号;

                      ii.             如果版本之前已经存在,报错;

                     iii.             不指定,数据库完成自增;

e)       xmlns

                        i.             引入schema约束,编写文件提示效果;

                      ii.             配置该文件会有提示;

                     iii.             解压目录src/jpdl-4.4.xsd;

2.        transition流转节点:(指向线条)

a)       节点适用

                        i.             一个活动可以指定一个或多个transition节点;

                      ii.             start只能有一个transition流转节点;

                     iii.             end没有;

                    iv.             活动可以添加transition流转,可以添加一个或多个

3.       transition流转选择;

a)       通过TaskService完成时指定

                        i.             完成任务时,指定任务流转节点名称;

                      ii.             适用于当前正在执行任务,

            taskService.complateTask(任务id, transition名字);

b)       示例

        

public voidtestTransitionByTaskService() {
       //获取流程实例对学校
       ProcessInstanceprocessInstance =
                processEngine.getExecutionService()
                .startProcessInstanceByKey("transition");          
       //获取任务对象
       Task task = processEngine.getTaskService()
                .createTaskQuery()
                .processInstanceId(processInstance.getId())
                .uniqueResult();
       System.out.println(task.getId());
       //下一步流程的transitionName
       String transitionName = "to 审核【经理】";
       //控制下一步流转
       //传入当前任务的id,下一个节点的name                  processEngine.getTaskService()
                .completeTask(task.getId(), transitionName);
}


c)        通过ExecutionService指定

                        i.             用于状态停留节点(state),无任务;

    

executionService.singalExecutionById(执行id, transition名字)
processEngine.getExecutionService().signalExecutionById("transition.10001",transitionName);

                      ii.             执行id获取方法

1.        jbpm4_execution表的id字段;

2.        ProcessInstance#getId():执行流程获取id

d)       示例

public voidtestTransitionTest() {
       //下一个流程执行节点name
       String transitionName = "to 审核【经理】";           processEngine.getExecutionService()
         .signalExecutionById("transition.10001", transitionName);
}

4.       start

a)       开始节点

5.       end

a)       结束节点

b)       end-cancel

                        i.             取消结束;

c)        end-error

                        i.             异常结束节点

6.        task任务节点

a)       条件

                        i.             存在负责人,由指定的负责人进行任务的办理;

                      ii.             Assignment--->assignee

b)       指定负责人的方式

                        i.             绘图时指定(个人、#{变量名}

                      ii.             通过<task>中添加<assignment-handler class=””>指定类;

7.        task任务——指定个人

a)       绘图时指定

        Assignment--->assignee---->个人名称

b)       缺点

                        i.             与人就行耦合,人离职就不能使用了;

c)        通过变量指定

            Assignment--->assignee---->#{变量名}

d)       运行中,通过变量指定负责人

                        i.             定义Map变量;

                      ii.             通过executionServiceTaskService设置;

e)       示例

JBPM 4.4 流程节点详解_JBPM4.4 JBPM4.4节点

Map<String, Object> assigne = new HashMap<String, Object>();
assigne.put("userName", "张三"); 
processEngine.getExecutionService().startProcessInstanceByKey("task", assigne);


8.       task任务——指定类

a)       方式

                        i.             <task>中添加<assignment-handler class=””>指定类;

b)       

                        i.             实现接口AssignmentHandler

c)        重写方法

                        i.             assign(assignable,openExecution)

d)       参数

                        i.             assignable:指定负责人的

1.        assignable.setAssignee(负责人)

                      ii.             openExecution:获取变量的;

1.        .getVariable();

e)       好处

                        i.             可以有效控制任务的负责人;

                      ii.             可以添加逻辑;

f)        示例

public class AssignmentHandlerTest implements AssignmentHandler{
 
   @Override
   public void assign(Assignable assignable,
       OpenExecution openExecution) throws Exception {
       //通过获取变量指定
//     String userName=(String)openExecution.getVariable("userName");
//     assignable.setAssignee(userName);               
       assignable.setAssignee("李四");
   }
}


9.       task任务——强制指定负责人

a)       用途

                        i.             当前任务已经有负责人了,强制更换负责人;

                      ii.             可以在任务完成之前的任何时候;

b)       方式

        taskService.assignTask(任务id,负责人)

c)        示例

        processEngine.getTaskService().assignTask("30010""王五");

10.   组任务candidate---多用户(绘图)

a)       用途

                       i.             存在一个任务,该任务由指定一组人来完成;

                     ii.             组内任何人都可以完成;

b)       方式

                       i.             绘图时:Assignment----type---candidate-user

                     ii.             Assignment----expression---多个用户之间“,”隔开;

                   iii.             小王,小丽,小六

                    iv.              JBPM 4.4 流程节点详解_JBPM4.4 JBPM4.4节点_02

c)       jbpm4_participation

                       i.             多用户数据被存在于jbpm4_participation中;

                     ii.             jbpm4_task表中当前任务没有负责人;

d)       查询组任务

                       i.             taskService.findGroupTasks(组中定义的用户名之一)

JBPM 4.4 流程节点详解_JBPM4.4 JBPM4.4节点_03

e)       拾取任务

        taskService.takeTask(任务id,任务负责人)

                       i.             任务被拾取后,其它人将不可再次查询,拾取

                     ii.             组任务被拾取后,就变成个人任务了,不再是组任务;

f)        拾取任务后操作

                       i.             自己完成;

                     ii.             改变任务负责人

                   iii.             将任务归还任务组;

g)       改变任务负责人

        taskService.assignTask(任务id,其它用户);

h)       将任务归还任务组

        taskService.assignTask(任务idnull);

i)         查询个人任务

        findPersonalTask();

11.   组用户——多用户(assignment-handler)

a)       <task>节点,添加

        <assignment-handlerclass=””>

b)       组用户类

                       i.             实现AssignmentHandler接口;

                     ii.             重写方法assign(assignable, openExecution)

c)       添加组用户

        assignable.addCandidate(用户之一);

d)       实例

public class GroupTaskAssignmentHandler implements AssignmentHandler{
       @Override
       public void assign(Assignable assignable,
                      OpenExecution openExecution) throwsException {
                //指定组内候选人
                assignable.addCandidateUser("一毛");
                assignable.addCandidateUser("二毛");
                assignable.addCandidateUser("三毛");
       }
}


12.   组任务—已存在组添加用户:

a)       添加方法

public void  testTaskGroupAssignPersonal() {
     String user = "四毛";
     //将任务指派给组内某个成员
           processEngine.getTaskService().addTaskParticipatingUser("80009",
                    user, Participation.CANDIDATE);
}

13.   state

a)       状态节点

                        i.             自动完成的一些任务的节点;

                      ii.             同其它节点的执行;

14.   decision判断节点:

a)       作用

                        i.             主要用于分支情况;

                      ii.             根据 自定义方式控制节点的流转;

b)       handler class :

                        i.             指定判断类;

                      ii.             实现接口:DecisionHandler

                     iii.             重写方法decide()

                    iv.             参数openExcution

1.        用于获得流程运行过程中的一些变量;

2.        .getVarable(“变量name”);

                      v.             返回值:

1.        下一个流程节点的“name

c)        实例

                        i.             DecisionHandler

public class DecisionHandlerTest implements DecisionHandler{
 
@Override
public Stringdecide(OpenExecution openExecution) {
         //获取参数
         double money = (Double)openExecution.getVariable("money");
         if(money< 10000) {
                  return "to结束";
         } else{
                  return "to审批【总经理】";
         }
}
}


15.   fork/join分支、合并节点:

a)       作用:

                        i.             表示并行的、一定要执行的任务;

                      ii.             fork分支后,一定要用join将分支合并;

b)       整个任务必须所有的分支都执行完毕,方可完成;