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. 405 css样式的研究 list-style-type 属性研究

    CSS 列表的样式 list-style-type.list-style-position和list-style-image 属性 在CSS中,列表元素是一个块框,列表中的每个表项也是一个块框,只是在 ...

  2. CF1119B Alyona and a Narrow Fridge

    题目地址:CF1119B Alyona and a Narrow Fridge \(O(n^2)\) 暴力枚举+贪心 从小到大枚举答案 假设枚举到 \(i\) ,将 \(a_1\) 到 \(a_i\) ...

  3. 单模式串匹配----浅谈kmp算法

    模式串匹配,顾名思义,就是看一个串是否在另一个串中出现,出现了几次,在哪个位置出现: p.s.  模式串是前者,并且,我们称后一个 (也就是被匹配的串)为文本串: 在这篇博客的代码里,s1均为文本串, ...

  4. 微信小程序-制作简易豆瓣笔记

    demo截图: 图书:      电影:        共工欲善其事,必先利其器: 小程序编辑器下载地址 : https://mp.weixin.qq.com/debug/wxadoc/dev/dev ...

  5. Scrapy-redis 分布式

    分布式:架构方式 多台真实机器+爬虫(如requests,scrapy等)+任务共享中心 多台虚拟机器(或者部分虚拟部分真实)+爬虫(如requests,scrapy等)+任务共享中心 多台容器级虚拟 ...

  6. JAVA 实现 简单的 HTTP服务器

    关于JAVA的HTTP服务器的简单实现,还望大家给出宝贵建议,谢谢. 1.首先来说下HTTP所有的状态碼,相信对于网页开发的博友们,肯定不陌生. 状态码 状态码英文名称 中文描述 100 Contin ...

  7. 快速搭建MQTT服务器(MQTTnet和Apache Apollo)

    前言 MQTT协议是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分,http://mqtt.org/. MQTT is a machine-to-machine (M2M)/" ...

  8. Git permission denied(public key) 解决方法

    1. 在Linux上: # ssh-keygen       ##一定用 id_rsa.pub # cat /root/.ssh/id_rsa.pub 2. copy 整个文件内容到剪切板 3. 打开 ...

  9. 20172328 2018-2019《Java软件结构与数据结构》第六周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第六周学习总结 概述 Generalization 本周学习了第十章:非线性集合与数据结构--树.主要讨论了树的使用和实现 ...

  10. 提升webpack打包速度

    webpack打包文件体积过大,怎么提升速度? 借助webpack visualizer可视化插件,来看构建的情况.这个问题要具体情况具体分析,看看打包文件有哪些块头比较大,哪些不常改变,最好列一个l ...