jbpm3

共分为12种节点

1.node节点:如果该节点没有定义ACTION,则流转到该节点时不会停留,会继续往下走,如果定义ACTION,执行完ACTION后会停在该节点上,调用  token.signal后继续流转
node节点支持事件 node-enter,node-leave
2.state 节点 调用 token.signal后继续流转,否则会停下
3.tasknode 节点 该节点中可以创建多个任务 task 一个task产生一个任务实例没定义task会自动流转 state 节点只能创建一个task
TaskMgmtInstance tmg = pi.getTaskMgmtInstance();
TaskInstance startTask = tmg.createStartTaskInstance();

  任务实例生命周期  创建--开始--完成    取消--挂起

   

任务实例   挂起   表taskinstance    issuspended = true   挂起后不能操作  查询不到

isopen = true     是否关闭  关闭后不能操作 查询不到


action  当节点往下走的时候触发当前的节点的action

如果一个节点有多个任务,调用signal  会随机进入一个tasknode  根据流程实例获取token    根据token获取node,根据node获取   levaingTranstaion, 可执行的Transtaion列表

流程节点条件判断有三种方式1.在transtation 中定义变量,2在decode中定义表达式,在hadler中返回transtation ,3 继承 JbpmVariableResolver(推荐)

jbpm 自己解析流程实例变量      继承 JbpmVariableResolver   目的 不能写那么多个handler

查询单独非配给自己的私有任务列表     context.getTaskMgmtSession.findTaskInstances(actorid);
查询所属组的任务实例 context.getTaskMgmtSession.findPooledTaskInstance(actorid);
两个集合要合并 才能查看该人的所有任务 查询尚未结束的任务实例
Collection taskInstances = executionContext.getTaskMgmtInstance().getUnfinishedTasks(tonke); 会签 <task-node name = "审批" create-tasks="no" signal = "first" end-tasks="yes">
<event type="node-enter"> <action class=""> </action>
<task name="审批"> </task>
<task name="审批">
<event type = "task-end"> 在每个任务实例被结束的时候
<action class="tActionHandler">
</action>
<event>
</task>

end-tasks="yes"     有一个人审批通过后继续流转,其他人的任务都变成已完成

TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
TaskNode tasknode = (TaskNode )executionContext.getNode();
Task task = tasknode.getTasks().iterator.next();
for(){
TaskInstance ti = tmi.createTaskInstance(task,executionContext);
ti.setActorId(username); } //----------------
Conllection allTaskInstances = tmi.getTaskInstances();//获取当前流程实例下的所有任务实例

//获取当前流程实例当前Token 的未完成的任务实例
Conllection unfinishedTasks = tmi.getUnfinishedTasks(currentToken); 利用变量表达式实现自由节点,自己解释变量JbpmVariableResolver
        //获取配置文件对象
JbpmConfiguration configuration = JbpmConfiguration.getInstance();
//根据配置文件对象获取jbpm上下文
JbpmContext context = configuration.createJbpmContext();
//根据上下文对象获取与jbpm表打交道的GraphSession
GraphSession graphSession = context.getGraphSession();
//根据GraphSession获取流程定义对象
ProcessDefinition processDefinition = graphSession.findLatestProcessDefinition("sqj");
//根据流程模板创建流程实例
ProcessInstance instance = processDefinition.createProcessInstance();
//流程实例ID
System.out.println(instance.getId());
//根据流程实例获取流程实例上下文对象 ContextInstance contextInstance = instance.getContextInstance();
contextInstance.setVariable("username", "张小三");
//根据流程实例获取任务管理器
TaskMgmtInstance taskMgmtInstance = instance.getTaskMgmtInstance(); //在开始节点中创建任务setActorId设置用户,不能在handler中设置,在handler中设置不上
context.setActorId("张小三");
//SecurityHelper.getAuthenticatedActorId();
//手动进入开始任务
TaskInstance taskInstance = taskMgmtInstance.createStartTaskInstance();
//任务实例ID
System.out.println(taskInstance.getId());
//往当前任务实例中添加任务实例参数
taskInstance.setVariable("nextname", "李四");
//结束任务向下流转
//taskInstance.setActorId("张小三");
taskInstance.end("李四审批");
context.close();

        UserHandler

        //获取当前token
Token token = executionContext.getToken();
//根据当前token获取节点
Node node = token.getNode();
System.out.println(node.getName());
if(node.getName().equals("开始")){
String tusername = (String) executionContext.getVariable("username");
System.out.println(tusername);
assignable.setActorId(tusername);
//获取当前的流程实例
//TaskInstance taskInstance = executionContext.getTaskInstance();
//taskInstance.setActorId(tusername);
}else{
String tusername = (String) executionContext.getVariable("nextname");
System.out.println(tusername);
//获取当前的流程实例
TaskInstance taskInstance = executionContext.getTaskInstance();
taskInstance.setActorId(tusername);
assignable.setActorId(tusername);
}

public static void main(String[] args) {

        //创建流程模板
ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("helloword/processdefinition.xml"); //创建流程实例
ProcessInstance processInstance = new ProcessInstance(processDefinition);
//获取一个流程实例的上下文对象
//ContextInstance contextInstance = processInstance.getContextInstance();
//上下文对象存放临时流程变量和获取同名会覆盖
//contextInstance.setTransientVariable("", "");
//contextInstance.addVariables(variables);
//根据流程实例创建开始节点的任务实例
//TaskInstance taskInstance = processInstance.getTaskMgmtInstance().createStartTaskInstance();
//向任务实例当中写入先关变量
//taskInstance.setVariable("money_count", "");
//结束任务实例流程的Token就进入下一节点
//taskInstance.end(); //流程节点
Token token = processInstance.getRootToken(); Node node = token.getNode(); //node节点不会触发 System.out.println(node.getName());
//节点向下流转一步
token.signal();
System.out.println(node.getName()); //判断是否结束
//token.getProcessInstance().hasEnded(); //单例,线程安全,配置文件对象
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
//主要作用创建jbpmContext上下文对象//发布流程到数据库
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
//从当前线程中获取上下文对象
//JbpmContext jbpmContext1 = jbpmConfiguration.getCurrentJbpmContext(); //创建数据库表 重新调用会重新创建
//jbpmConfiguration.createSchema();
//删除数据库表
//jbpmConfiguration.dropSchema();
//获取系统里的任务调度服务对象
//jbpmConfiguration.getJobExecutor();
//开始系统的任务调度服务
//jbpmConfiguration.startJobExecutor();
//jbpmContext.getTaskList();
//根据当前人ID获取任务列表
jbpmContext.getTaskList("");
//根据任务ID获取任务节点
TaskInstance instance = jbpmContext.getTaskInstance(11);
instance.end("同意"); //根据最新的流程名称获取流程模板 //ProcessDefinition lastDefinition = jbpmContext.getGraphSession().findLatestProcessDefinition("helloword"); }
//发布流程模板
String path = "E:/work/hello.zip"; JbpmContext context = JbpmConfiguration.getInstance().createJbpmContext(); InputStream inputStream = new FileInputStream(new File(path)); ZipInputStream zipInputStream = new ZipInputStream(inputStream); ProcessDefinition processDefinition = ProcessDefinition.parseParZipInputStream(zipInputStream);
context.deployProcessDefinition(processDefinition); zipInputStream.close();
inputStream.close();
context.close();
        //创建JBPM数据库表
public static void createDB(){
//JbpmConfiguration configuration = JbpmConfiguration.getInstance();
JbpmConfiguration configuration = JbpmConfiguration.getInstance("hibernate.cfg.xml");
//configuration.createSchema();
} /**
* 部署流程文件
* @param path
*/
public static void depFlow(String path){
//String path = "E:/liucheng/qingjia.zip";
JbpmContext context = null;
InputStream inputStream = null;
ZipInputStream zipInputStream = null;
try {
context = JbpmConfiguration.getInstance().createJbpmContext();
inputStream = new FileInputStream(new File(path));
zipInputStream = new ZipInputStream(inputStream);
ProcessDefinition processDefinition = ProcessDefinition.parseParZipInputStream(zipInputStream);
context.deployProcessDefinition(processDefinition);
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
zipInputStream.close();
inputStream.close();
context.close();
} catch (IOException e) {
e.printStackTrace();
} } } /**
* 开启流程
* @param flowName
*/
public static void startFlow(String flowName){
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
GraphSession graphSession = jbpmContext.getGraphSession();
ProcessDefinition processDefinition = graphSession.findLatestProcessDefinition(flowName);
ProcessInstance processInstance = new ProcessInstance(processDefinition);
ContextInstance contextInstance = processInstance.getContextInstance();
contextInstance.createVariable("name", "张三");
processInstance.signal(); } public static void startFlow2(String flowName){
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
GraphSession graphSession = jbpmContext.getGraphSession();
ProcessDefinition processDefinition = graphSession.findLatestProcessDefinition(flowName);
ProcessInstance pi = processDefinition.createProcessInstance();
TaskMgmtInstance tmg = pi.getTaskMgmtInstance();
TaskInstance startTask = tmg.createStartTaskInstance();
startTask.setVariableLocally("JitTaskVar", "");
startTask.end();
} /**
* 获取最新的所有流程模板
* @return
*/
public static List<ProcessDefinition> getAllLastProcessDefinitions(){
JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
GraphSession graphSession = jbpmContext.getGraphSession();
List<ProcessDefinition> processDefinitions = graphSession.findLatestProcessDefinitions();
for (ProcessDefinition processDefinition : processDefinitions) {
System.out.println("流程ID: "+processDefinition.getId()+"流程版本: "+processDefinition.getVersion()+" 流程名称"+processDefinition.getName());
}
jbpmContext.close();
return processDefinitions;
} /**
* 获取当前人的任务列表
* @param actorId
* @return
*/
public static List<Task> getAllTask(String actorId){
JbpmConfiguration configuration = JbpmConfiguration.getInstance();
JbpmContext context = configuration.createJbpmContext();
TaskMgmtSession mgmtSession = context.getTaskMgmtSession();
List<Task> tasks = mgmtSession.findTaskInstances(actorId);
context.close();
return tasks;
} /**
* 获取所有的流程版本
* @return
*/
public static List<ProcessDefinition> getAllDefinitions(){
JbpmConfiguration configuration = JbpmConfiguration.getInstance();
JbpmContext context = configuration.createJbpmContext();
GraphSession graphSession = context.getGraphSession();
List<ProcessDefinition> definitions = graphSession.findAllProcessDefinitions();
for (ProcessDefinition processDefinition : definitions) {
System.out.println("流程ID: "+processDefinition.getId()+"流程版本: "+processDefinition.getVersion()+" 流程名称"+processDefinition.getName());
}
context.close();
return definitions;
} /**
* 获取当前流程的所有版本
* @return
*/
public static List<ProcessDefinition> getAllDefinitions(String defName){
JbpmConfiguration configuration = JbpmConfiguration.getInstance();
JbpmContext context = configuration.createJbpmContext();
GraphSession graphSession = context.getGraphSession();
List<ProcessDefinition> definitions = graphSession.findAllProcessDefinitionVersions(defName);
for (ProcessDefinition processDefinition : definitions) {
System.out.println("流程ID: "+processDefinition.getId()+"流程版本: "+processDefinition.getVersion()+" 流程名称"+processDefinition.getName());
}
context.close();
return definitions;
}

工作流JBPM的更多相关文章

  1. 工作流--JBPM简介及开发环境搭建

    一. 工作流简介 项目中不断的接触工作流,点点滴滴积累了一些,下面把一些学习到的东西整理记录下来. 工作流一般的适用场景:公文流转.行政审批.订单处理.产品研发.制造过程等.用专业一点的语言来描述工作 ...

  2. 工作流--JBPM核心服务及表结构

    一.      使用JBPM开发工作流的一般流程 1.       jBPM的运行需要数据库的支持,因此系统设计时要选定所用数据库.只要是Hibernate支持的数据库,jBPM就支持.数据库的初始化 ...

  3. 两款工作流JBPM和CCBPM的对比

    以国外流行的工作流jbpm4的模式与当今中国开源的ccbpm(ccflow和jflow的总称)流程引擎对照.以便让各位能够了解到中国国情的工作流引擎与国际流行的设计规则的差别.不同.与优缺点. 国外工 ...

  4. Atitit.工作流系统的本质是dsl 图形化的dsl  4gl

    Atitit.工作流系统的本质是dsl 图形化的dsl  4gl 1. 工作流系统的本质是dsl 图形化的dsl  4gl1 2. 为什么每个项目系统都需要工作流1 3. 工作流dsl与java .n ...

  5. 分享下对JAVA程序员成长之路的总结<转>

    我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,手痒来给新人分享下从新手成长为老鸟的已见.   首先初识语法的阶段,必须要学会怎么操作对象,操作if和for,操作list set ...

  6. JAVA学习路线图---(JAVA1234)

    第一阶段-Java基础   这一阶段很重要,关系到你后面阶段的学习,所以务必把这一阶段掌握好: 如果你是0基本,我推荐一本比较好的,适合初学者看的书:明日科技的<Java从入门到精通>,最 ...

  7. 【转载】分享下多年积累的对JAVA程序员成长之路的总结

    注:该文是从百度贴吧转载过来,之前看到觉得写得还不错,对Java开发学习者来说很有意义的,可以看看. 我也搞了几年JAVA了,由于一向懒惰,没有成为大牛,只是一普通程序猿,不爱玩社交网站,不爱玩微博, ...

  8. GEF的MVC体系结构

    摘要: 本文首先介绍了标准的 MVC 体系构架,同时也介绍了最常见的一类 MVC 模式的变种.之后,文章重点介绍了 MVC 结构在 gef 框架中的体现与应用,以及 gef 是如何综合利用工厂模式.命 ...

  9. java学习大方向

    总结Java程序员成长之路   转载  http://bbs.javazhijia.com/topic/1bb0733f80d94aedb50cc3b66d9792b6.html 我也搞了几年JAVA ...

随机推荐

  1. redux知识点

    1.关于传参 点击跳转 两种 动态路由 url 但是取值需要自己处理 关于动态跳转(js执行跳转) 关于异步加载组件 创建loadable app.js中 在 要加载的异步组件中   (这样接收参数不 ...

  2. Ansible------角色

    什么是角色 角色是一种解决问题的思想,也是一种规范. 目录 角色的目录结构如下: files: 存放由copy或script模块等调用的文件. templates: template模块查找所需要模板 ...

  3. vs 快捷操作

    1.   选中所需行 增加缩进 tab 减少缩进 shift+tab 2.附加调试:ctrl+alt+p: 全部用快捷键操作看起来真的很6

  4. IIS命令行静默安装脚本-python

    #coding=utf8 import platform from subprocess import Popen,PIPE,STDOUT import sys,os def run_cmd(cmd, ...

  5. Ubuntu查看端口占用情况

    netstat -apn 其中最后一列是PID,可以通过kill Pid进行结束进程. 更精确的查找: netstat -apn | grep 8080 查询8080端口的进程 如果要查询这个进程的详 ...

  6. selenium——键盘操作

    很多键盘操作实际是没有意义的.

  7. 【原创】大数据基础之Spark(8)Spark中Join实现原理

    spark中join有两种,一种是RDD的join,一种是sql中的join,分别来看: 1 RDD join org.apache.spark.rdd.PairRDDFunctions /** * ...

  8. java 利用jsoup 爬取知乎首页问题

    今天学了下java的爬虫,首先要下载jsoup的包,然后导入,导入过程:首先右击工程:Build Path ->configure Build Path,再点击Add External JARS ...

  9. Linux-CentOS 重置root密码

    1. 重启服务器,在读秒的时候按任意键,就会出现如下界面 2.接着按下e就会进入到如下界面. 将光标移动到kernel那一行,然后再一次按‘e’,进入kernel该行的编辑界面 3.这就是kernel ...

  10. 末学者笔记--Linux计划任务及压缩归档

    一.计划任务 1.介绍: (1)定义:简单说就是通过一些设置,来使linux系统定时执行一些操作与任务. (2)作用:一般可执行一些周期性操作,也可定期备份数据. (3)可使用的命令:常用为at和cr ...