using Workflow.Engine.Kernal.Jbpm.NodeBag; namespace Workflow.Engine.Kernal.Jbpm { /// <summary> /// ExecutionService /// </summary> public class ClassMethod { //测试流程1 startProcessInstance(definitionId,variables,transitionName); public void testHelloWorldProcess() { ProcessDefinition processDefinition = ProcessDefinition.parseXmlString( "<process-definition>" + " <start-state>" + " <transition to='s' />" + " </start-state>" + " <state name='s'>" + " <transition to='end' />" + " </state>" + " <end-state name='end' />" + "</process-definition>" ); ProcessInstance processInstance = new ProcessInstance(processDefinition); Token token = processInstance.getRootToken(); assertSame(processDefinition.getStartState(), token.getNode()); token.signal(); assertSame(processDefinition.getNode("s"), token.getNode()); token.signal(); assertSame(processDefinition.getNode("end"), token.getNode()); } //断言是一样(一致,相同) public void assertSame(Node Node, Node tokenNode) { //if( System.Diagnostics.Debug.WriteLine(""); } //测试流程2 //jBpm如何开发调用的方法 public void jBpmDevCall() { string actorId = ""; ExecutionService executionService = JbpmServiceFactory.getInstance().openExecutionService(actorId); InvocationLog invocationLog = null; string tokenId=""; string definitionId=""; object variables=null; string transitionName=""; //如果是启动流程实例 invocationLog = executionService.startProcessInstance(definitionId, variables, transitionName); //如果是结束任务State(State是jBpm的任务点,不要理解成了状态) invocationLog = executionService.endOfState(tokenId, variables, transitionName); } public class JbpmServiceFactory { public static JbpmService getInstance() { JbpmService js = new JbpmService(); return js; } } public class JbpmService { public ExecutionService openExecutionService(string actorId) { return null; } } //定义 执行服务 public class ExecutionService { //开始流程实例 public InvocationLog startProcessInstance(string definitionId,object variables,string transitionName) { return null; } //结束任务State(state是jBpm的任务点,不要理解成了状态) public InvocationLog endOfState(string tokenId,object variables, string transitionName) { return null; } } //日志 public class InvocationLog { } } //过程定义类 public class ProcessDefinition { public static ProcessDefinition parseXmlString(string XmlString) { return new ProcessDefinition(); } //获取开始状态 public Node getStartState() { return null; } public Node getNode(string NodeName) { return null; } } //过程实例 public class ProcessInstance { private ProcessDefinition processDefinition = null; private Token rootToken = null; public ProcessInstance(ProcessDefinition processDefinition) { //略去其他代码 this.processDefinition = processDefinition; //将流程模板对象付给流程实例 this.rootToken = new Token(this); //创建跟令牌 //略去其他代码 } //获取根令牌 public Token getRootToken() { return null; } public ProcessDefinition getProcessDefinition() { return processDefinition; } } //令牌 类 public class Token { private ProcessInstance processInstance = null; private Node node = null; public Token(ProcessInstance processInstance) { this.processInstance = processInstance; //主要一句如下 this.node = processInstance.getProcessDefinition().getStartState(); } //发送信令 public void signal() { signal(node.getDefaultLeavingTransition(), new ExecutionContext(this)); //这里的getDefaultLeavingTransition()如果有多条路径,则去第一条路径 } public void signal(Transition transition, ExecutionContext executionContext) { //省略其他代码 node.leave(executionContext, transition); //省略其他代码 } //获取节点 public Node getNode() { return this.node; } //设置节点 public void setNode(Node node) { this.node = node; } public void setNodeEnter(Date date) { } } public class Date { } //定义变迁 public class Transition { public Node to = null; //下一节点对象 public string transitionName = ""; //变迁名称 //离开开始节点,进入到下个节点 public void take(ExecutionContext executionContext) { //略去部分代码 to.enter(executionContext);//离开开始节点,进入到下个节点 } } //定义执行上下文 public class ExecutionContext { private Token token = null; private Transition transition = null; private Node TransitionSource = null; public ExecutionContext(Token token) { this.token = token; } //获取令牌 public Token getToken() { return this.token; } //设置变迁 public void setTransition(Transition transition) { this.transition = transition; } //设置变迁来源 public void setTransitionSource(Node node) { this.TransitionSource = node; } } } namespace Workflow.Engine.Kernal.Jbpm.NodeBag { //定义节点 public class Node { //获取默认离开变迁 public Transition getDefaultLeavingTransition() { Node to = new Node(); //获取下一个节点 Transition transition = new Transition(); transition.to = to; return transition; } //获取离开变迁By通过变迁名称 public Transition getLeavingTransition(string transitionName) { Node to = new Node(); //获取下一个节点 Transition transition = new Transition(); transition.transitionName = transitionName; transition.to = to; return transition; } //离开节点通过变迁transition public void leave(ExecutionContext executionContext, Transition transition) { Token token = executionContext.getToken(); token.setNode(this);//此时令牌还在开始节点 executionContext.setTransition(transition); //略去部分代码 executionContext.setTransitionSource(this); transition.take(executionContext);//实现令牌的转移 } //进入节点 public void enter(ExecutionContext executionContext) { Token token = executionContext.getToken(); //从执行上下文中获取当前令牌 token.setNode(this); //此时令牌就到了名字为“s”的state节点 token.setNodeEnter(new Date()); executionContext.setTransition(null); executionContext.setTransitionSource(null); execute(executionContext); } //执行 public virtual void execute(ExecutionContext executionContext) { } } //定义 分解节点 public class SplitNode :Node { } //定义 连接节点 public class JoinNode :Node { } //定义 子流程节点 public class SubflowNode : Node { } }
参考资源来源于网上...