又有客户提出自由流需求,真晕,自由流不就等于没流程吗?还是劝他定个流程吧,上系统了不就是规范公司的流程吗?呵呵
虽然客户赞同我们的说法,不过私下来还是讨论尝试了对自由流的控制.最早的一个想法是建立几个孤立的没有联系的节点.让客户选择下一步要去的节点,(相当于选择转向).程序根据选择,创建这个节点上的任务.客户操作完任务,程序在负责关上这个任务.
这样是可以达到效果的.不过就是太不 'jbpm' 了.因为把流程的流转环境被去掉了.所以又想了个'jbpm'点的方法.要想从一个节点到另一个节点.必然要有'转向'连接两个节点.自由流不能在流程没跑起来前知道每个节点的下 一步到哪.只能在运行过程中知道,那我们就当知道的时候在创建两个节点间的转向呗.看看下面的测试代码
package org.jbpm.tutorial.action;
import junit.framework.TestCase;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.def.Transition;
import org.jbpm.graph.exe.ProcessInstance;
public class FreeProcessTest extends TestCase {
public void testTransitionAction() {
ProcessDefinition processDefinition = ProcessDefinition.parseXmlString(
"<process-definition>" +
" <start-state>" +
" <transition to='a' />" +
" </start-state>" +
" <state name='a'>" +
" </state>" +
" <state name='b'>" +
" <transition to='c'/>" +
" </state>" +
" <state name='c'>" +
" </state>" +
" <end-state name='end' />" +
"</process-definition>"
);
// 创建流程实例
ProcessInstance processInstance =
new ProcessInstance(processDefinition);
// 流转一步到节点a
processInstance.signal();
assertSame(processDefinition.getNode("a"),
processInstance.getRootToken().getNode());
//假定客户要从a到c,动态创建a到c的转向
Transition leavingTransition=new Transition("a to c");//构建一个a到c的转向
//指定该转向的目的节点是c
leavingTransition.setTo(processInstance.getProcessDefinition().getNode("c"));
//为当前节点添加这个转向.
processInstance.getRootToken().getNode().addLeavingTransition(leavingTransition);
//调用这个转向流转流程
processInstance.signal("a to c");
//删除这个临时创建的转向
processInstance.getRootToken().getNode().removeLeavingTransition(leavingTransition);
//测试是否到达c节点了
assertSame(processDefinition.getNode("c"),
processInstance.getRootToken().getNode());
// 假定客户要从c到b,动态创建c到b的转向
leavingTransition=new Transition("c to b");
leavingTransition.setTo(processInstance.getProcessDefinition().getNode("b"));
processInstance.getRootToken().getNode().addLeavingTransition(leavingTransition);
processInstance.signal("c to b");
processInstance.getRootToken().getNode().removeLeavingTransition(leavingTransition);
assertSame(processDefinition.getNode("b"),
processInstance.getRootToken().getNode());
// 假定客户要从b到c,不用动态创建,已经定义了
processInstance.signal();
assertSame(processDefinition.getNode("c"),
processInstance.getRootToken().getNode());
// 假定客户要从c到end,动态创建c到end的转向
leavingTransition=new Transition("c to end");
leavingTransition.setTo(processInstance.getProcessDefinition().getNode("end"));
processInstance.getRootToken().getNode().addLeavingTransition(leavingTransition);
processInstance.signal("c to end");
processInstance.getRootToken().getNode().removeLeavingTransition(leavingTransition);
assertSame(processDefinition.getNode("end"),
processInstance.getRootToken().getNode());
}
}
测试通过!这个够'jbpm'了吧.
分享到:
相关推荐
jstree创建无限分级树的方法【基于ajax动态创建子节点】.docx
1 var tt = document.getElementById("tr1"); for (var i = 0; i ; i++) { var FF = document.createElement("<td></td>"); FF.innerText = 'td'+ i;... </script>...............
4.动态dom对象创建表格树 5.完美支持json格式数据,支持xml(需转换) 6.支持ajax加载节点 7.事件驱动 8.可以动态根据列内容排序 9.简化函数参数,利用{} object输入参数,风格类似Extjs 10.树状结构可以选择出现在某一列...
动态添加树节点,链接数据库 希望对新手有所帮助
通过点击父节点,动态加载子节点,父节点呈现"正在加载效果
基于matlab.IEEE30节点测试系统matlab M文件,包含各节点信息.rar
GoJS是一个实现交互类图表(比如流程图,树图,关系图,力导图等等)的JS库 本资料包含了gojs原有demo,整理关系图谱动态添加节点图片头像等.html
C# treeView节点动态删除和添加示例,本源码演示了创建一个treeView父节点,创建了三个子节点,然后演示了将这3个子节点添加到父节点中,最后演示了使用Remove方法移除指定的TreeView节点项,添加节点和删除节点定义...
有很多提供动态创建 style 节点的方法,但是大多数都仅限于外部的 css 文件。如何能使用程序生成的字符串动态创建 style 节点,我搞了2个小时。 静态外部 css 文件语法: @import url(style.css); 动态外部 css 文件...
创建二叉树节点
ieee30节点测试系统数据,已经测试正确,缺少零序参数
NewEngland-39节点标准测试系统
IDC电信节点测试(LINUX环境),此脚本可以格式化输出结果,目前针对各个电信骨干节点.
IEEE57节点测试系统的节点数据、线路与变压器数据、发电机输出功率数据、并联设备无功补偿数据等,可为仿真代码提供详细的测试数据。
【官网程序】IEEE30节点测试系统matlab M文件,包含各节点信息.rar
总线通讯系统中,每个节点的信号质量都直接影响了整个总线的通讯质量,所有保证每个节点都具备高度一致的信号质量便显得至关重要,该文将为大家细细道来,如果做好信号特征的好坏评估。
通过读取数据库中配置的数据节点动态创建 树形控件
appConfig创建节点修改节点的值
利用d3.js插件实现动态拓扑图,动态增加节点,删除节点,结合拖拽操作,实现一个简单的演示利用d3.js插件实现动态拓扑图,动态增加节点,删除节点,结合拖拽操作,实现一个简单的演示
初始网络本文设置了4个Orderer节点,1个Peer节点(用于更新配置文件以及测试用),然后动态添加第五个Orderer节点。 本文分成两个部分: 第一部分是手动通过Fabric-CA生成每一个节点的证书文件 第二部分是更新Fabric...